diff --git a/.gitignore b/.gitignore index 710c043d2..7159cda8b 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ TODO.md */Topper-Info.plist */Coinbase-Info.plist */ZenLedger-Info.plist +CLAUDE.md diff --git a/DashSyncCurrentCommit b/DashSyncCurrentCommit index cea1bde48..0bc46ff06 100644 --- a/DashSyncCurrentCommit +++ b/DashSyncCurrentCommit @@ -1 +1 @@ -b6a82ef4d57754d29599b794df3274e4cd36e07a +753f9446cfd20ae5da996104a5870df839005d4c diff --git a/DashWallet.xcodeproj/project.pbxproj b/DashWallet.xcodeproj/project.pbxproj index 6e7c67e90..20db4c830 100644 --- a/DashWallet.xcodeproj/project.pbxproj +++ b/DashWallet.xcodeproj/project.pbxproj @@ -82,6 +82,7 @@ 11E47BAB28EB38510097CFA0 /* SendCoinsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E47BAA28EB38510097CFA0 /* SendCoinsService.swift */; }; 11E47BAD28EB3A7D0097CFA0 /* CrowdNode+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E47BAC28EB3A7D0097CFA0 /* CrowdNode+Constants.swift */; }; 11ED906B29681773003784F9 /* StakingInfoDialogController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11ED906A29681773003784F9 /* StakingInfoDialogController.swift */; }; + 1DD7BE9CD62998F12672140D /* RadioButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 708B9F2B4B1E4C31B5010CDF /* RadioButtonRow.swift */; }; 1FC212F0BAB5FB85C59E9CD3 /* libPods-TodayExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 02771AC5DDCA0A1749C6A05B /* libPods-TodayExtension.a */; }; 222040C61C1A1940005CE1C3 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 222040C51C1A1940005CE1C3 /* WebKit.framework */; }; 222E7F561C46E9B8009AB45D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 222E7F551C46E9B8009AB45D /* Security.framework */; }; @@ -328,8 +329,8 @@ 47083B3229892D770010AF71 /* DSTransaction+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47083B3129892D770010AF71 /* DSTransaction+DashWallet.swift */; }; 4709C30F287E787700B4BD48 /* Migrations.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4709C30E287E787700B4BD48 /* Migrations.bundle */; }; 4709C312287E78BD00B4BD48 /* SeedDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C311287E78BD00B4BD48 /* SeedDB.swift */; }; - 4709C315287EA11900B4BD48 /* TxUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C314287EA11900B4BD48 /* TxUserInfo.swift */; }; - 4709C318287EA23000B4BD48 /* TxUserInfoDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C317287EA23000B4BD48 /* TxUserInfoDAO.swift */; }; + 4709C315287EA11900B4BD48 /* TransactionMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C314287EA11900B4BD48 /* TransactionMetadata.swift */; }; + 4709C318287EA23000B4BD48 /* TransactionMetadataDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C317287EA23000B4BD48 /* TransactionMetadataDAO.swift */; }; 4709C31E2880247C00B4BD48 /* DSTransaction+DashWallet.m in Sources */ = {isa = PBXBuildFile; fileRef = 4709C31D2880247C00B4BD48 /* DSTransaction+DashWallet.m */; }; 4709C31F28818BAE00B4BD48 /* TxDetailModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C31A288020DE00B4BD48 /* TxDetailModel.swift */; }; 4709C32128818D5400B4BD48 /* Foundation+Bitcoin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C32028818D5400B4BD48 /* Foundation+Bitcoin.swift */; }; @@ -388,8 +389,6 @@ 47838B7528FFD1D10003E8AB /* AmountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B7428FFD1D10003E8AB /* AmountView.swift */; }; 47838B7728FFFFAD0003E8AB /* AmountInputTypeSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B7628FFFFAD0003E8AB /* AmountInputTypeSwitcher.swift */; }; 47838B7A2900196F0003E8AB /* ConverterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B792900196F0003E8AB /* ConverterView.swift */; }; - 47838B7D290133610003E8AB /* PointOfUseListFiltersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B7C290133610003E8AB /* PointOfUseListFiltersViewController.swift */; }; - 47838B7F290160860003E8AB /* ExploreDash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47838B7E290160860003E8AB /* ExploreDash.storyboard */; }; 47838B82290271170003E8AB /* PointOfUseListFiltersModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B81290271170003E8AB /* PointOfUseListFiltersModel.swift */; }; 47838B87290670630003E8AB /* IntegrationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B86290670630003E8AB /* IntegrationViewController.swift */; }; 47838B8C29068F110003E8AB /* BaseResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B8B29068F110003E8AB /* BaseResponse.swift */; }; @@ -420,7 +419,6 @@ 47A2E3A92972B15F0032A63B /* RatesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2E3A82972B15F0032A63B /* RatesProvider.swift */; }; 47A2E3AC2972B1A60032A63B /* CoinbaseRatesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A2E3AB2972B1A60032A63B /* CoinbaseRatesProvider.swift */; }; 47A50F3B2913BC0900C70123 /* TransferAmountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A50F3A2913BC0900C70123 /* TransferAmountModel.swift */; }; - 47A50F3E29192F8D00C70123 /* TerritoriesListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A50F3D29192F8D00C70123 /* TerritoriesListViewController.swift */; }; 47A514602848F75B005A8E3E /* TxDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5145F2848F75B005A8E3E /* TxDetailViewController.swift */; }; 47A514622848FEAD005A8E3E /* Tx.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47A514612848FEAD005A8E3E /* Tx.storyboard */; }; 47A5146428491C60005A8E3E /* TxDetailCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5146328491C60005A8E3E /* TxDetailCells.swift */; }; @@ -451,15 +449,9 @@ 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 */; }; - 47AE8C0C28C53E4A00490F5E /* MerchantInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0B28C53E4A00490F5E /* MerchantInfoViewController.swift */; }; - 47AE8C0E28C540C100490F5E /* GiftCardInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0D28C540C100490F5E /* GiftCardInfoViewController.swift */; }; - 47AE8C1128C5430300490F5E /* PointOfUseInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1028C5430300490F5E /* PointOfUseInfoViewController.swift */; }; 47AE8C1328C5F0A700490F5E /* PointOfUseDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1228C5F0A600490F5E /* PointOfUseDetailsViewController.swift */; }; 47AE8C1528C6378E00490F5E /* HairlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1428C6378E00490F5E /* HairlineView.swift */; }; 47AE8C1828C63F9C00490F5E /* PointOfUseDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1728C63F9C00490F5E /* PointOfUseDetailsView.swift */; }; @@ -479,8 +471,6 @@ 47C661B428FDCF7800028A8D /* ActionButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B328FDCF7800028A8D /* ActionButtonViewController.swift */; }; 47C661B628FE75A700028A8D /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B528FE75A700028A8D /* BaseViewController.swift */; }; 47C661B828FE907300028A8D /* AmountInputControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B728FE907300028A8D /* AmountInputControl.swift */; }; - 47C6E6E02919578C003FEDF2 /* TerritoryListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6DF2919578C003FEDF2 /* TerritoryListModel.swift */; }; - 47C6E6E329196D48003FEDF2 /* TerritoriesListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6E229196D48003FEDF2 /* TerritoriesListCell.swift */; }; 47C6E6E5291A68B6003FEDF2 /* AppliedFiltersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6E4291A68B6003FEDF2 /* AppliedFiltersView.swift */; }; 47C6E6E7291A90B3003FEDF2 /* ListHandlerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6E6291A90B2003FEDF2 /* ListHandlerView.swift */; }; 47CDEEC72949DC38008AE06D /* BasicInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CDEEC62949DC38008AE06D /* BasicInfoController.swift */; }; @@ -514,6 +504,10 @@ 7503643B2C89CFB70029EC0D /* CoinJoinProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750364392C89CFB70029EC0D /* CoinJoinProgressView.swift */; }; 7503643E2C89D49A0029EC0D /* CoinJoinService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7503643D2C89D49A0029EC0D /* CoinJoinService.swift */; }; 7503643F2C89D49A0029EC0D /* CoinJoinService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7503643D2C89D49A0029EC0D /* CoinJoinService.swift */; }; + 75050CCE2DF2CB0F00F586D6 /* GiftCardMetadataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75050CCD2DF2CB0E00F586D6 /* GiftCardMetadataProvider.swift */; }; + 75050CCF2DF2CB0F00F586D6 /* GiftCardMetadataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75050CCD2DF2CB0E00F586D6 /* GiftCardMetadataProvider.swift */; }; + 75050CD12DF2FCC200F586D6 /* ServiceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75050CD02DF2FCBF00F586D6 /* ServiceName.swift */; }; + 75050CD22DF2FCC200F586D6 /* ServiceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75050CD02DF2FCBF00F586D6 /* ServiceName.swift */; }; 750CED602C94BFD7000FB837 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750CED5F2C94BFD7000FB837 /* SettingsViewModel.swift */; }; 750CED612C94BFD7000FB837 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750CED5F2C94BFD7000FB837 /* SettingsViewModel.swift */; }; 750CEFA12CCA6EA100E87A32 /* TextInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750CEFA02CCA6EA100E87A32 /* TextInput.swift */; }; @@ -554,6 +548,14 @@ 753261AE2CBC1040003CDE00 /* InvitationFlowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753261AD2CBC1040003CDE00 /* InvitationFlowViewController.swift */; }; 753261B02CBC11BF003CDE00 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753261AF2CBC11BF003CDE00 /* WelcomeViewController.swift */; }; 753261B22CBC157F003CDE00 /* GetStartedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753261B12CBC157F003CDE00 /* GetStartedViewController.swift */; }; + 75387B4A2E0400C300BCCC72 /* MerchantDenominations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75387B492E0400C300BCCC72 /* MerchantDenominations.swift */; }; + 75387B4B2E0400C300BCCC72 /* MerchantDenominations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75387B492E0400C300BCCC72 /* MerchantDenominations.swift */; }; + 753E46E82DE1E24300A3FF2A /* CTXSpendModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753E46E72DE1E24300A3FF2A /* CTXSpendModels.swift */; }; + 753E46E92DE1E24300A3FF2A /* CTXSpendModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753E46E72DE1E24300A3FF2A /* CTXSpendModels.swift */; }; + 753F75342DD0D42300D40DFE /* DashSpendPayScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753F75332DD0D41900D40DFE /* DashSpendPayScreen.swift */; }; + 753F75352DD0D42300D40DFE /* DashSpendPayScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753F75332DD0D41900D40DFE /* DashSpendPayScreen.swift */; }; + 753F75372DD0D76400D40DFE /* DashSpendPayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753F75362DD0D75F00D40DFE /* DashSpendPayViewModel.swift */; }; + 753F75382DD0D76400D40DFE /* DashSpendPayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753F75362DD0D75F00D40DFE /* DashSpendPayViewModel.swift */; }; 753FD7E22CA44BDD00B7751F /* CoinJoinProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753FD7E12CA44BDD00B7751F /* CoinJoinProgress.swift */; }; 753FD7E32CA44BDD00B7751F /* CoinJoinProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753FD7E12CA44BDD00B7751F /* CoinJoinProgress.swift */; }; 753FDBEA2AEA422F0005EEC3 /* VotingPrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753FDBE92AEA422F0005EEC3 /* VotingPrefs.swift */; }; @@ -562,6 +564,32 @@ 754119E01CDA93FF0042DC51 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAE12BE61B2DEE7F00895CC5 /* NotificationCenter.framework */; }; 754495DD2AE91B6300492817 /* GroupedRequestCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754495DC2AE91B6300492817 /* GroupedRequestCell.swift */; }; 754495DF2AE91D3500492817 /* UsernameRequestCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754495DE2AE91D3500492817 /* UsernameRequestCell.swift */; }; + 754565C82DAA52A000DA4E8E /* CTXSpendAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565C42DAA52A000DA4E8E /* CTXSpendAPI.swift */; }; + 754565CA2DAA52A000DA4E8E /* CTXSpendService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565C72DAA52A000DA4E8E /* CTXSpendService.swift */; }; + 754565CB2DAA52A000DA4E8E /* CTXSpendEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565C52DAA52A000DA4E8E /* CTXSpendEndpoint.swift */; }; + 754565CC2DAA52A000DA4E8E /* CTXSpendAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565C42DAA52A000DA4E8E /* CTXSpendAPI.swift */; }; + 754565CE2DAA52A000DA4E8E /* CTXSpendService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754565C72DAA52A000DA4E8E /* CTXSpendService.swift */; }; + 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 */; }; + 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 */; }; + 7545ED582DA91AF10075F45C /* CTXSpendUserAuthViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED562DA91AEA0075F45C /* CTXSpendUserAuthViewModel.swift */; }; + 7545ED5D2DA91F590075F45C /* CTXSpendTermsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7545ED5C2DA91F590075F45C /* CTXSpendTermsScreen.swift */; }; + 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 */; }; + 7549BE5A2DEAF50D004F0BAF /* IconBitmap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE592DEAF50D004F0BAF /* IconBitmap.swift */; }; + 7549BE5B2DEAF50D004F0BAF /* IconBitmap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE592DEAF50D004F0BAF /* IconBitmap.swift */; }; + 7549BE5D2DEAF55B004F0BAF /* IconBitmapDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE5C2DEAF55B004F0BAF /* IconBitmapDAO.swift */; }; + 7549BE5E2DEAF55B004F0BAF /* IconBitmapDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE5C2DEAF55B004F0BAF /* IconBitmapDAO.swift */; }; + 7549BE602DEAF628004F0BAF /* AddIconBitmapsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE5F2DEAF628004F0BAF /* AddIconBitmapsTable.swift */; }; + 7549BE612DEAF628004F0BAF /* AddIconBitmapsTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7549BE5F2DEAF628004F0BAF /* AddIconBitmapsTable.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 */; }; @@ -577,6 +605,8 @@ 755049AA2C846299008FA7EB /* DWAboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 755049A72C846299008FA7EB /* DWAboutViewController.m */; }; 755049AC2C846576008FA7EB /* MenuItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755049AB2C846576008FA7EB /* MenuItemModel.swift */; }; 755049AD2C846576008FA7EB /* MenuItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755049AB2C846576008FA7EB /* MenuItemModel.swift */; }; + 7556EE412DF9876B004E8093 /* ExploreSyncBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7556EE402DF9876B004E8093 /* ExploreSyncBannerView.swift */; }; + 7556EE422DF9876B004E8093 /* ExploreSyncBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7556EE402DF9876B004E8093 /* ExploreSyncBannerView.swift */; }; 755A22BD2B1385FD001F170D /* IconAttributedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755A22BC2B1385FD001F170D /* IconAttributedText.swift */; }; 755B4B222B0C903500B844F0 /* DWDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755B4B212B0C903500B844F0 /* DWDateFormatter.swift */; }; 755B4B232B0C903500B844F0 /* DWDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755B4B212B0C903500B844F0 /* DWDateFormatter.swift */; }; @@ -589,6 +619,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 */; }; @@ -598,6 +634,12 @@ 7573C2E12B01103900F4C347 /* VotingFilterItemSelectableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573C2E02B01103900F4C347 /* VotingFilterItemSelectableCell.swift */; }; 7573C2E32B01105F00F4C347 /* MasternodeIPCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573C2E22B01105F00F4C347 /* MasternodeIPCell.swift */; }; 7573C2E52B01120B00F4C347 /* MasternodeKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7573C2E42B01120B00F4C347 /* MasternodeKey.swift */; }; + 757422212DF87B5200CB0175 /* TerritoryPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7574221F2DF87B5200CB0175 /* TerritoryPickerView.swift */; }; + 757422222DF87B5200CB0175 /* MerchantFiltersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7574221E2DF87B5200CB0175 /* MerchantFiltersView.swift */; }; + 757422242DF87B5200CB0175 /* TerritoryPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7574221F2DF87B5200CB0175 /* TerritoryPickerView.swift */; }; + 757422252DF87B5200CB0175 /* MerchantFiltersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7574221E2DF87B5200CB0175 /* MerchantFiltersView.swift */; }; + 757422272DF87B8300CB0175 /* MerchantFiltersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757422262DF87B8300CB0175 /* MerchantFiltersViewModel.swift */; }; + 757422282DF87B8300CB0175 /* MerchantFiltersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757422262DF87B8300CB0175 /* MerchantFiltersViewModel.swift */; }; 757514E02B15D8DE0026AD8E /* VotingConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757514DF2B15D8DE0026AD8E /* VotingConstants.swift */; }; 757514E22B15DB510026AD8E /* ShadowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757514E12B15DB510026AD8E /* ShadowView.swift */; }; 757514E32B15DF7C0026AD8E /* ShadowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757514E12B15DB510026AD8E /* ShadowView.swift */; }; @@ -613,6 +655,8 @@ 75889B892AD2DF0200C17F5D /* CoinJoin.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75889B812AD2D7F800C17F5D /* CoinJoin.storyboard */; }; 758A8F172C4D35A80012FA41 /* NSLayoutConstraint+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758A8F162C4D35A80012FA41 /* NSLayoutConstraint+DashWallet.swift */; }; 758A8F182C4D35A80012FA41 /* NSLayoutConstraint+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758A8F162C4D35A80012FA41 /* NSLayoutConstraint+DashWallet.swift */; }; + 758C4C4F2DFAC1C30028549B /* RadioButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758C4C4E2DFAC1C30028549B /* RadioButtonRow.swift */; }; + 758C4C502DFAC1C30028549B /* RadioButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758C4C4E2DFAC1C30028549B /* RadioButtonRow.swift */; }; 758CE59C2BC566DE0062AF53 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 758CE59B2BC566DE0062AF53 /* PrivacyInfo.xcprivacy */; }; 758CE59D2BC566DE0062AF53 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 758CE59B2BC566DE0062AF53 /* PrivacyInfo.xcprivacy */; }; 758CE59E2BC566DE0062AF53 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 758CE59B2BC566DE0062AF53 /* PrivacyInfo.xcprivacy */; }; @@ -625,8 +669,6 @@ 759609212C4553A400F3BF04 /* BuyCreditsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759609202C4553A400F3BF04 /* BuyCreditsViewController.swift */; }; 759609232C455B2000F3BF04 /* SendIntro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759609222C455B2000F3BF04 /* SendIntro.swift */; }; 759609242C455B2000F3BF04 /* SendIntro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759609222C455B2000F3BF04 /* SendIntro.swift */; }; - 759A7EA72CFDA707009423AD /* UIViewController+DWTxFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759A7EA62CFDA6FF009423AD /* UIViewController+DWTxFilter.swift */; }; - 759A7EA82CFDA707009423AD /* UIViewController+DWTxFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759A7EA62CFDA6FF009423AD /* UIViewController+DWTxFilter.swift */; }; 759ADD572BF3447400767ACD /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759ADD562BF3447400767ACD /* Button.swift */; }; 759ADD582BF3447400767ACD /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759ADD562BF3447400767ACD /* Button.swift */; }; 759AFDE02CC63571007072D2 /* JoinDashPayScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759AFDDF2CC6356D007072D2 /* JoinDashPayScreen.swift */; }; @@ -635,6 +677,8 @@ 759C8FA02B593589004B1305 /* CrowdNodeAPYView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759C8F9E2B593589004B1305 /* CrowdNodeAPYView.swift */; }; 75A0A3F32CA7DBCF003ED48B /* TimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A0A3F22CA7DBCF003ED48B /* TimeUtils.swift */; }; 75A0A3F42CA7DBCF003ED48B /* TimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A0A3F22CA7DBCF003ED48B /* TimeUtils.swift */; }; + 75A2F3032DE48C860046BE17 /* CTXSpendTokenService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A2F3022DE48C860046BE17 /* CTXSpendTokenService.swift */; }; + 75A2F3042DE48C860046BE17 /* CTXSpendTokenService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A2F3022DE48C860046BE17 /* CTXSpendTokenService.swift */; }; 75A8C1652AE5726B0042256E /* UsernameRequestsDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A8C1632AE5725C0042256E /* UsernameRequestsDAO.swift */; }; 75A8C1672AE5734A0042256E /* UsernameRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A8C1662AE5734A0042256E /* UsernameRequest.swift */; }; 75A8C1692AE6A1AC0042256E /* VotingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A8C1682AE6A1AC0042256E /* VotingViewModel.swift */; }; @@ -654,6 +698,10 @@ 75C1F0452AE26AC0006929CA /* CoinJoinLevelsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C1F0442AE26AC0006929CA /* CoinJoinLevelsViewModel.swift */; }; 75C1F0462AE26AC0006929CA /* CoinJoinLevelsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C1F0442AE26AC0006929CA /* CoinJoinLevelsViewModel.swift */; }; 75C1F09E2AFF675400FE675E /* EnterVotingKeyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C1F09D2AFF675400FE675E /* EnterVotingKeyViewController.swift */; }; + 75C3EE002DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C3EDFE2DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift */; }; + 75C3EE022DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C3EDFD2DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift */; }; + 75C3EE032DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C3EDFE2DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift */; }; + 75C3EE052DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C3EDFD2DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift */; }; 75CDD7802C0898E400F433D2 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CDD77F2C0898E400F433D2 /* Shape.swift */; }; 75CDD7812C0898E400F433D2 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CDD77F2C0898E400F433D2 /* Shape.swift */; }; 75CDD7832C0898FA00F433D2 /* Wrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CDD7822C0898FA00F433D2 /* Wrapper.swift */; }; @@ -668,9 +716,21 @@ 75D5D5342CC928630049ED7B /* UIHostingController+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D5D5322CC9285B0049ED7B /* UIHostingController+DashWallet.swift */; }; 75D5F3CE191EC270004AB296 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 75D5F3CD191EC270004AB296 /* main.m */; }; 75D6561D2B07936100D1A902 /* UsernameRequests.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75D656192B0792F500D1A902 /* UsernameRequests.storyboard */; }; + 75D657672DF579F300ACE570 /* TransactionFilterDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D657662DF579F300ACE570 /* TransactionFilterDialog.swift */; }; + 75D657682DF579F300ACE570 /* TransactionFilterDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D657662DF579F300ACE570 /* TransactionFilterDialog.swift */; }; 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 */; }; @@ -695,6 +755,8 @@ 75EE38D32CBE9EFC00845FFF /* MainMenuContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EE38D22CBE9EFC00845FFF /* MainMenuContentView.swift */; }; 75EE38D42CBE9EFC00845FFF /* MainMenuContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EE38D22CBE9EFC00845FFF /* MainMenuContentView.swift */; }; 75EE38D82CBFE52E00845FFF /* ContactsPlaceholderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EE38D72CBFE52B00845FFF /* ContactsPlaceholderViewController.swift */; }; + 75EE9F422DE2F750000AD1AD /* DashSpendConfirmationDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EE9F412DE2F74B000AD1AD /* DashSpendConfirmationDialog.swift */; }; + 75EE9F432DE2F750000AD1AD /* DashSpendConfirmationDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EE9F412DE2F74B000AD1AD /* DashSpendConfirmationDialog.swift */; }; 75F3F00D2C48F819004470EA /* RootEditProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759063EC2C42687F002F2AA9 /* RootEditProfileViewController.swift */; }; 75F51AAD2ABD8C800057B499 /* IntegrationViewController+Uphold.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F51AAC2ABD8C800057B499 /* IntegrationViewController+Uphold.swift */; }; 75F51AAF2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F51AAE2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift */; }; @@ -1018,7 +1080,7 @@ C9D2C6D22A320AA000D15901 /* TransactionWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119E8D092905413F00D406C1 /* TransactionWrapper.swift */; }; C9D2C6D32A320AA000D15901 /* Transactions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479DBDDC2995168C00F30AF1 /* Transactions.swift */; }; C9D2C6D42A320AA000D15901 /* DWRecoverTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A74EFFA2305464C00C475EB /* DWRecoverTextView.m */; }; - C9D2C6D52A320AA000D15901 /* TxUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C314287EA11900B4BD48 /* TxUserInfo.swift */; }; + C9D2C6D52A320AA000D15901 /* TransactionMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C314287EA11900B4BD48 /* TransactionMetadata.swift */; }; C9D2C6D62A320AA000D15901 /* ExtendedPublicKeysViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C91E91AD29FFC8A1003E7883 /* ExtendedPublicKeysViewController.swift */; }; C9D2C6D82A320AA000D15901 /* AtmListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BDD28C1305E00490F5E /* AtmListViewController.swift */; }; C9D2C6D92A320AA000D15901 /* TxDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5145F2848F75B005A8E3E /* TxDetailViewController.swift */; }; @@ -1190,14 +1252,12 @@ C9D2C7A22A320AA000D15901 /* DWSelectorFormCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFE2A2230FF4600956D5F /* DWSelectorFormCellModel.m */; }; C9D2C7A32A320AA000D15901 /* DWVersionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2E5536218BA161003A1B7C /* DWVersionManager.m */; }; C9D2C7A52A320AA000D15901 /* DWModalPresentationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69C523142AA4001B8C90 /* DWModalPresentationController.m */; }; - C9D2C7A62A320AA000D15901 /* PointOfUseInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1028C5430300490F5E /* PointOfUseInfoViewController.swift */; }; C9D2C7A72A320AA000D15901 /* ActionButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661B328FDCF7800028A8D /* ActionButtonViewController.swift */; }; C9D2C7A82A320AA000D15901 /* BuySellServiceItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4774DCE428F4668B008CF87D /* BuySellServiceItemCell.swift */; }; C9D2C7AA2A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; C9D2C7AB2A320AA000D15901 /* DWBaseFormTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BC82347E0D700451078 /* DWBaseFormTableViewCell.m */; }; C9D2C7AC2A320AA000D15901 /* AccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAC6296FAEBB00F63AC4 /* AccountCell.swift */; }; C9D2C7AD2A320AA000D15901 /* DWTransactionListDataProviderStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A913EA723A79AD2006A2A59 /* DWTransactionListDataProviderStub.m */; }; - C9D2C7B02A320AA000D15901 /* DWExploreHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8BE128C1305E00490F5E /* DWExploreHeaderView.m */; }; C9D2C7B12A320AA000D15901 /* CoinbaseBaseIDForCurrencyResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA028C896BC000427E7 /* CoinbaseBaseIDForCurrencyResponse.swift */; }; C9D2C7B22A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; C9D2C7B32A320AA000D15901 /* SpecifyAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AC8412297822E000BD1B49 /* SpecifyAmountViewController.swift */; }; @@ -1209,13 +1269,10 @@ C9D2C7BC2A320AA000D15901 /* AccountRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CF469E296540E40067B6EE /* AccountRepository.swift */; }; C9D2C7BD2A320AA000D15901 /* DWSharedUIConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8B9E2822FB1C5D00FF8653 /* DWSharedUIConstants.m */; }; C9D2C7BE2A320AA000D15901 /* BRAppleWatchTransactionData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A858A0E237EE89B0097A7B5 /* BRAppleWatchTransactionData.m */; }; - C9D2C7BF2A320AA000D15901 /* TerritoriesListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A50F3D29192F8D00C70123 /* TerritoriesListViewController.swift */; }; C9D2C7C02A320AA000D15901 /* HomeHeaderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F4520A2A1209D100825057 /* HomeHeaderModel.swift */; }; - C9D2C7C12A320AA000D15901 /* TerritoryListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6DF2919578C003FEDF2 /* TerritoryListModel.swift */; }; C9D2C7C22A320AA000D15901 /* (null) in Sources */ = {isa = PBXBuildFile; }; C9D2C7C32A320AA000D15901 /* DWDPRegistrationStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFF01DA243F4559003718DC /* DWDPRegistrationStatus.m */; }; C9D2C7C42A320AA000D15901 /* CurrencyExchanger_Objc.m in Sources */ = {isa = PBXBuildFile; fileRef = 472D13EC299E6579006903F1 /* CurrencyExchanger_Objc.m */; }; - C9D2C7C52A320AA000D15901 /* GiftCardInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0D28C540C100490F5E /* GiftCardInfoViewController.swift */; }; C9D2C7C62A320AA000D15901 /* Tools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471DD1B7290A92CD00E030C8 /* Tools.swift */; }; C9D2C7C72A320AA000D15901 /* BuySellPortalModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478A2C7028DC554200AD1420 /* BuySellPortalModel.swift */; }; C9D2C7C92A320AA000D15901 /* BuyDashViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C98252942DC2700FAA0F0 /* BuyDashViewController.swift */; }; @@ -1224,7 +1281,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 */; }; @@ -1265,7 +1321,6 @@ C9D2C8062A320AA000D15901 /* NSString+DWTextSize.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1CE7F22DC92BF00C99324 /* NSString+DWTextSize.m */; }; C9D2C8072A320AA000D15901 /* PointOfUseListFiltersCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0428C1F74A00490F5E /* PointOfUseListFiltersCell.swift */; }; C9D2C80A2A320AA000D15901 /* DWMainMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A7A7BB12347927700451078 /* DWMainMenuViewController.m */; }; - C9D2C80B2A320AA000D15901 /* PointOfUseListFiltersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47838B7C290133610003E8AB /* PointOfUseListFiltersViewController.swift */; }; C9D2C80C2A320AA000D15901 /* AllMerchantLocationsDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C1928C6A21A00490F5E /* AllMerchantLocationsDataProvider.swift */; }; C9D2C80D2A320AA000D15901 /* MainTabbarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451E42A0B986E00825057 /* MainTabbarController.swift */; }; C9D2C80E2A320AA000D15901 /* NumberFormatter+DashWallet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B30D77290BFCA60080C326 /* NumberFormatter+DashWallet.swift */; }; @@ -1305,7 +1360,7 @@ C9D2C8382A320AA000D15901 /* DWRootModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A44313F22CF642C009BAF7F /* DWRootModel.m */; }; C9D2C8392A320AA000D15901 /* BaseAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C661AE28FDAA3300028A8D /* BaseAmountViewController.swift */; }; C9D2C83A2A320AA000D15901 /* SendingToView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 478C982B2942F03500FAA0F0 /* SendingToView.swift */; }; - C9D2C83B2A320AA000D15901 /* TxUserInfoDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C317287EA23000B4BD48 /* TxUserInfoDAO.swift */; }; + C9D2C83B2A320AA000D15901 /* TransactionMetadataDAO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4709C317287EA23000B4BD48 /* TransactionMetadataDAO.swift */; }; C9D2C83C2A320AA000D15901 /* DWModalContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69E223155A0E001B8C90 /* DWModalContentView.m */; }; C9D2C83D2A320AA000D15901 /* DWUpholdConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A9FFDFF2230FF2B00956D5F /* DWUpholdConstants.m */; }; C9D2C83F2A320AA000D15901 /* CoinbaseSwapeTradeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F6EDFA128C896BC000427E7 /* CoinbaseSwapeTradeResponse.swift */; }; @@ -1358,7 +1413,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 */; }; @@ -1382,7 +1436,6 @@ C9D2C89B2A320AA000D15901 /* DWImportWalletInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A10EB342358996700C38B61 /* DWImportWalletInfoViewController.m */; }; C9D2C89D2A320AA000D15901 /* SyncingAlertContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F451ED2A0BF1F500825057 /* SyncingAlertContentView.swift */; }; C9D2C89E2A320AA000D15901 /* AddressUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471A2604289ACD5C0056B7B2 /* AddressUserInfo.swift */; }; - C9D2C89F2A320AA000D15901 /* MerchantInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AE8C0B28C53E4A00490F5E /* MerchantInfoViewController.swift */; }; C9D2C8A02A320AA000D15901 /* SendCoinsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E47BAA28EB38510097CFA0 /* SendCoinsService.swift */; }; C9D2C8A12A320AA000D15901 /* ShortcutAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = C94F5E8929D3FCCF0034FD57 /* ShortcutAction.swift */; }; C9D2C8A22A320AA000D15901 /* DWModalChevronView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0C69DF231556D6001B8C90 /* DWModalChevronView.m */; }; @@ -1443,7 +1496,6 @@ C9D2C8EA2A320AA000D15901 /* ConvertCryptoOrderPreviewViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4751CAD82970509600F63AC4 /* ConvertCryptoOrderPreviewViews.swift */; }; C9D2C8EB2A320AA000D15901 /* DWAboutModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A8F421F21BEFEEA00858B91 /* DWAboutModel.m */; }; C9D2C8EE2A320AA000D15901 /* WelcomeToCrowdNodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1141E4C4291FDC7A00ACDA9E /* WelcomeToCrowdNodeViewController.swift */; }; - C9D2C8EF2A320AA000D15901 /* TerritoriesListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C6E6E229196D48003FEDF2 /* TerritoriesListCell.swift */; }; C9D2C8F02A320AA000D15901 /* DWProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A4E531C22EA49FE00E5168A /* DWProgressView.m */; }; C9D2C8F12A320AA000D15901 /* TxDetailCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47A5146328491C60005A8E3E /* TxDetailCells.swift */; }; C9D2C8F22A320AA000D15901 /* BaseViewController+NetworkReachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477F501629543834003C7508 /* BaseViewController+NetworkReachability.swift */; }; @@ -1469,7 +1521,6 @@ C9D2C9072A320AA000D15901 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 222040C51C1A1940005CE1C3 /* WebKit.framework */; }; C9D2C9082A320AA000D15901 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 22B6A4471C0E963900673913 /* libbz2.tbd */; }; C9D2C90B2A320AA000D15901 /* DWShortcutCollectionViewCell~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A1AF6DC23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib */; }; - C9D2C90D2A320AA000D15901 /* ExploreDash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 47838B7E290160860003E8AB /* ExploreDash.storyboard */; }; C9D2C90E2A320AA000D15901 /* TxDetailHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474C720C298A19D100475CA6 /* TxDetailHeaderCell.xib */; }; C9D2C90F2A320AA000D15901 /* StartStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AB231D32196E27300A6E7E6 /* StartStoryboard.storyboard */; }; C9D2C9112A320AA000D15901 /* DWShortcutCollectionViewCell~iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A1AF6DD23C7681B00442AF5 /* DWShortcutCollectionViewCell~iphone.xib */; }; @@ -1482,7 +1533,6 @@ C9D2C91B2A320AA000D15901 /* TxDetailTaxCategoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474C720E298A1A3E00475CA6 /* TxDetailTaxCategoryCell.xib */; }; C9D2C91C2A320AA000D15901 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 2ADC722723B5547000D9DD37 /* Localizable.stringsdict */; }; C9D2C91D2A320AA000D15901 /* ShortcutsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A2CD71722F99CAE008C7BC9 /* ShortcutsView.xib */; }; - C9D2C91E2A320AA000D15901 /* HomeBalanceView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9F067F329E457790022D958 /* HomeBalanceView.xib */; }; C9D2C9202A320AA000D15901 /* TxDetailInfoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 474C7212298A1EFC00475CA6 /* TxDetailInfoCell.xib */; }; C9D2C9212A320AA000D15901 /* UpholdOTPStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2A9FFE552230FF4600956D5F /* UpholdOTPStoryboard.storyboard */; }; C9D2C9222A320AA000D15901 /* AppAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2A4430F122CBD57A009BAF7F /* AppAssets.xcassets */; }; @@ -1520,7 +1570,6 @@ C9D2C95E2A386D7E00D15901 /* DWBasePressableControl.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D2C95D2A386D7E00D15901 /* DWBasePressableControl.m */; }; C9D2C9652A38733B00D15901 /* DPAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9D2C9642A38733B00D15901 /* DPAssets.xcassets */; }; C9F067F229E4576D0022D958 /* HomeBalanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F067F129E4576D0022D958 /* HomeBalanceView.swift */; }; - C9F067F429E543630022D958 /* HomeBalanceView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9F067F329E457790022D958 /* HomeBalanceView.xib */; }; C9F42F9F29DA82E5001BC549 /* PayableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42F9E29DA82E5001BC549 /* PayableViewController.swift */; }; C9F42FA129DA95F5001BC549 /* PayTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FA029DA95F5001BC549 /* PayTableViewCell.swift */; }; C9F42FA429DBC6E5001BC549 /* PaymentsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9F42FA229DBC183001BC549 /* PaymentsViewController.swift */; }; @@ -2204,8 +2253,8 @@ 47083B3129892D770010AF71 /* DSTransaction+DashWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DSTransaction+DashWallet.swift"; sourceTree = ""; }; 4709C30E287E787700B4BD48 /* Migrations.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Migrations.bundle; sourceTree = ""; }; 4709C311287E78BD00B4BD48 /* SeedDB.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeedDB.swift; sourceTree = ""; }; - 4709C314287EA11900B4BD48 /* TxUserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TxUserInfo.swift; sourceTree = ""; }; - 4709C317287EA23000B4BD48 /* TxUserInfoDAO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TxUserInfoDAO.swift; sourceTree = ""; }; + 4709C314287EA11900B4BD48 /* TransactionMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionMetadata.swift; sourceTree = ""; }; + 4709C317287EA23000B4BD48 /* TransactionMetadataDAO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionMetadataDAO.swift; sourceTree = ""; }; 4709C31A288020DE00B4BD48 /* TxDetailModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TxDetailModel.swift; sourceTree = ""; }; 4709C31C2880247C00B4BD48 /* DSTransaction+DashWallet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DSTransaction+DashWallet.h"; sourceTree = ""; }; 4709C31D2880247C00B4BD48 /* DSTransaction+DashWallet.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "DSTransaction+DashWallet.m"; sourceTree = ""; }; @@ -2269,8 +2318,6 @@ 47838B7428FFD1D10003E8AB /* AmountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountView.swift; sourceTree = ""; }; 47838B7628FFFFAD0003E8AB /* AmountInputTypeSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputTypeSwitcher.swift; sourceTree = ""; }; 47838B792900196F0003E8AB /* ConverterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConverterView.swift; sourceTree = ""; }; - 47838B7C290133610003E8AB /* PointOfUseListFiltersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseListFiltersViewController.swift; sourceTree = ""; }; - 47838B7E290160860003E8AB /* ExploreDash.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = ExploreDash.storyboard; sourceTree = ""; }; 47838B81290271170003E8AB /* PointOfUseListFiltersModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseListFiltersModel.swift; sourceTree = ""; }; 47838B86290670630003E8AB /* IntegrationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntegrationViewController.swift; sourceTree = ""; }; 47838B8B29068F110003E8AB /* BaseResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseResponse.swift; sourceTree = ""; }; @@ -2302,7 +2349,6 @@ 47A2E3AB2972B1A60032A63B /* CoinbaseRatesProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinbaseRatesProvider.swift; sourceTree = ""; }; 47A50F372912D9DC00C70123 /* PaymentController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentController.swift; sourceTree = ""; }; 47A50F3A2913BC0900C70123 /* TransferAmountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferAmountModel.swift; sourceTree = ""; }; - 47A50F3D29192F8D00C70123 /* TerritoriesListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerritoriesListViewController.swift; sourceTree = ""; }; 47A5145E2848F75A005A8E3E /* dashwallet-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "dashwallet-Bridging-Header.h"; sourceTree = ""; }; 47A5145F2848F75B005A8E3E /* TxDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TxDetailViewController.swift; sourceTree = ""; }; 47A514612848FEAD005A8E3E /* Tx.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Tx.storyboard; sourceTree = ""; }; @@ -2334,18 +2380,9 @@ 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 = ""; }; - 47AE8C0B28C53E4A00490F5E /* MerchantInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MerchantInfoViewController.swift; sourceTree = ""; }; - 47AE8C0D28C540C100490F5E /* GiftCardInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCardInfoViewController.swift; sourceTree = ""; }; - 47AE8C1028C5430300490F5E /* PointOfUseInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseInfoViewController.swift; sourceTree = ""; }; 47AE8C1228C5F0A600490F5E /* PointOfUseDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseDetailsViewController.swift; sourceTree = ""; }; 47AE8C1428C6378E00490F5E /* HairlineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HairlineView.swift; sourceTree = ""; }; 47AE8C1728C63F9C00490F5E /* PointOfUseDetailsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointOfUseDetailsView.swift; sourceTree = ""; }; @@ -2365,8 +2402,6 @@ 47C661B328FDCF7800028A8D /* ActionButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionButtonViewController.swift; sourceTree = ""; }; 47C661B528FE75A700028A8D /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; 47C661B728FE907300028A8D /* AmountInputControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputControl.swift; sourceTree = ""; }; - 47C6E6DF2919578C003FEDF2 /* TerritoryListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerritoryListModel.swift; sourceTree = ""; }; - 47C6E6E229196D48003FEDF2 /* TerritoriesListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerritoriesListCell.swift; sourceTree = ""; }; 47C6E6E4291A68B6003FEDF2 /* AppliedFiltersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppliedFiltersView.swift; sourceTree = ""; }; 47C6E6E6291A90B2003FEDF2 /* ListHandlerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListHandlerView.swift; sourceTree = ""; }; 47CDEEC62949DC38008AE06D /* BasicInfoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicInfoController.swift; sourceTree = ""; }; @@ -2400,9 +2435,12 @@ 556B5EBEBAEA571D74FF69A3 /* Pods-WatchApp Extension.testflight.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WatchApp Extension.testflight.xcconfig"; path = "Pods/Target Support Files/Pods-WatchApp Extension/Pods-WatchApp Extension.testflight.xcconfig"; sourceTree = ""; }; 5FD4C91FB8EAB529E8E41227 /* Pods-dashwallet no watch.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashwallet no watch.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-dashwallet no watch/Pods-dashwallet no watch.testnet.xcconfig"; sourceTree = ""; }; 6FBBFC90577C940D8C04E0B1 /* Pods-DashWalletScreenshotsUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashWalletScreenshotsUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DashWalletScreenshotsUITests/Pods-DashWalletScreenshotsUITests.debug.xcconfig"; sourceTree = ""; }; + 708B9F2B4B1E4C31B5010CDF /* RadioButtonRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadioButtonRow.swift; path = "DashWallet/Sources/UI/SwiftUI Components/RadioButtonRow.swift"; sourceTree = ""; }; 7502A4862AE401EF00ACDDD3 /* UsernameVotingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameVotingViewController.swift; sourceTree = ""; }; 750364392C89CFB70029EC0D /* CoinJoinProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinProgressView.swift; sourceTree = ""; }; 7503643D2C89D49A0029EC0D /* CoinJoinService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinService.swift; sourceTree = ""; }; + 75050CCD2DF2CB0E00F586D6 /* GiftCardMetadataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiftCardMetadataProvider.swift; sourceTree = ""; }; + 75050CD02DF2FCBF00F586D6 /* ServiceName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceName.swift; sourceTree = ""; }; 7509C10E1AF3076100D03FD5 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 7509C1121AF3720100D03FD5 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 750C6CC01B5C8EB60038AAE9 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; @@ -2433,12 +2471,29 @@ 753261AD2CBC1040003CDE00 /* InvitationFlowViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitationFlowViewController.swift; sourceTree = ""; }; 753261AF2CBC11BF003CDE00 /* WelcomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = ""; }; 753261B12CBC157F003CDE00 /* GetStartedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetStartedViewController.swift; sourceTree = ""; }; + 75387B492E0400C300BCCC72 /* MerchantDenominations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MerchantDenominations.swift; sourceTree = ""; }; + 753E46E72DE1E24300A3FF2A /* CTXSpendModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendModels.swift; sourceTree = ""; }; + 753F75332DD0D41900D40DFE /* DashSpendPayScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashSpendPayScreen.swift; sourceTree = ""; }; + 753F75362DD0D75F00D40DFE /* DashSpendPayViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashSpendPayViewModel.swift; sourceTree = ""; }; 753FD7E12CA44BDD00B7751F /* CoinJoinProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinProgress.swift; sourceTree = ""; }; 753FDBE92AEA422F0005EEC3 /* VotingPrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingPrefs.swift; sourceTree = ""; }; 753FDBEB2AECF4CC0005EEC3 /* VotingHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VotingHeaderView.xib; sourceTree = ""; }; 753FDBED2AECF52B0005EEC3 /* UsernameVoting.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = UsernameVoting.storyboard; sourceTree = ""; }; 754495DC2AE91B6300492817 /* GroupedRequestCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupedRequestCell.swift; sourceTree = ""; }; 754495DE2AE91D3500492817 /* UsernameRequestCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRequestCell.swift; sourceTree = ""; }; + 754565C42DAA52A000DA4E8E /* CTXSpendAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendAPI.swift; sourceTree = ""; }; + 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 = ""; }; + 7545ED522DA91A2F0075F45C /* CTXConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXConstants.swift; sourceTree = ""; }; + 7545ED562DA91AEA0075F45C /* CTXSpendUserAuthViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendUserAuthViewModel.swift; sourceTree = ""; }; + 7545ED5C2DA91F590075F45C /* CTXSpendTermsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendTermsScreen.swift; sourceTree = ""; }; + 7545ED5F2DA91FC60075F45C /* NumericKeyboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumericKeyboardView.swift; sourceTree = ""; }; + 7549BE522DEAEA14004F0BAF /* MetadataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetadataProvider.swift; sourceTree = ""; }; + 7549BE562DEAECB0004F0BAF /* CustomIconMetadataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomIconMetadataProvider.swift; sourceTree = ""; }; + 7549BE592DEAF50D004F0BAF /* IconBitmap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconBitmap.swift; sourceTree = ""; }; + 7549BE5C2DEAF55B004F0BAF /* IconBitmapDAO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconBitmapDAO.swift; sourceTree = ""; }; + 7549BE5F2DEAF628004F0BAF /* AddIconBitmapsTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddIconBitmapsTable.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 = ""; }; @@ -2449,6 +2504,7 @@ 755049A72C846299008FA7EB /* DWAboutViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWAboutViewController.m; sourceTree = ""; }; 755049A82C846299008FA7EB /* DWAboutViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DWAboutViewController.h; sourceTree = ""; }; 755049AB2C846576008FA7EB /* MenuItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuItemModel.swift; sourceTree = ""; }; + 7556EE402DF9876B004E8093 /* ExploreSyncBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreSyncBannerView.swift; sourceTree = ""; }; 755A22BC2B1385FD001F170D /* IconAttributedText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconAttributedText.swift; sourceTree = ""; }; 755B4B212B0C903500B844F0 /* DWDateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DWDateFormatter.swift; sourceTree = ""; }; 755C32372C358FBD007DA721 /* BackupSeedPhraseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackupSeedPhraseViewController.swift; sourceTree = ""; }; @@ -2457,6 +2513,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 = ""; }; @@ -2466,6 +2525,9 @@ 7573C2E02B01103900F4C347 /* VotingFilterItemSelectableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingFilterItemSelectableCell.swift; sourceTree = ""; }; 7573C2E22B01105F00F4C347 /* MasternodeIPCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasternodeIPCell.swift; sourceTree = ""; }; 7573C2E42B01120B00F4C347 /* MasternodeKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasternodeKey.swift; sourceTree = ""; }; + 7574221E2DF87B5200CB0175 /* MerchantFiltersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MerchantFiltersView.swift; sourceTree = ""; }; + 7574221F2DF87B5200CB0175 /* TerritoryPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerritoryPickerView.swift; sourceTree = ""; }; + 757422262DF87B8300CB0175 /* MerchantFiltersViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MerchantFiltersViewModel.swift; sourceTree = ""; }; 757514DF2B15D8DE0026AD8E /* VotingConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingConstants.swift; sourceTree = ""; }; 757514E12B15DB510026AD8E /* ShadowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShadowView.swift; sourceTree = ""; }; 757514E42B1735370026AD8E /* JoinDashPayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinDashPayView.swift; sourceTree = ""; }; @@ -2475,6 +2537,7 @@ 75889B752AD296E700C17F5D /* CoinJoinInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinInfoViewController.swift; sourceTree = ""; }; 75889B802AD2D7F800C17F5D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/CoinJoin.storyboard; sourceTree = ""; }; 758A8F162C4D35A80012FA41 /* NSLayoutConstraint+DashWallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSLayoutConstraint+DashWallet.swift"; sourceTree = ""; }; + 758C4C4E2DFAC1C30028549B /* RadioButtonRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonRow.swift; sourceTree = ""; }; 758CE59B2BC566DE0062AF53 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 759063EC2C42687F002F2AA9 /* RootEditProfileViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootEditProfileViewController.swift; sourceTree = ""; }; 759063EE2C427324002F2AA9 /* DWMainMenuViewController+DashPay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DWMainMenuViewController+DashPay.swift"; sourceTree = ""; }; @@ -2485,12 +2548,12 @@ 759609222C455B2000F3BF04 /* SendIntro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendIntro.swift; sourceTree = ""; }; 759816E519357D6F005060EA /* BRBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRBubbleView.h; sourceTree = ""; }; 759816E619357D6F005060EA /* BRBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRBubbleView.m; sourceTree = ""; }; - 759A7EA62CFDA6FF009423AD /* UIViewController+DWTxFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+DWTxFilter.swift"; sourceTree = ""; }; 759ADD562BF3447400767ACD /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; 759AFDDF2CC6356D007072D2 /* JoinDashPayScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinDashPayScreen.swift; sourceTree = ""; }; 759AFDE22CC67E89007072D2 /* VotingInfoScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingInfoScreen.swift; sourceTree = ""; }; 759C8F9E2B593589004B1305 /* CrowdNodeAPYView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdNodeAPYView.swift; sourceTree = ""; }; 75A0A3F22CA7DBCF003ED48B /* TimeUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimeUtils.swift; sourceTree = ""; }; + 75A2F3022DE48C860046BE17 /* CTXSpendTokenService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendTokenService.swift; sourceTree = ""; }; 75A8C1632AE5725C0042256E /* UsernameRequestsDAO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRequestsDAO.swift; sourceTree = ""; }; 75A8C1662AE5734A0042256E /* UsernameRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRequest.swift; sourceTree = ""; }; 75A8C1682AE6A1AC0042256E /* VotingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingViewModel.swift; sourceTree = ""; }; @@ -2502,6 +2565,8 @@ 75BDE7AB2BF3287400556791 /* Toast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Toast.swift; sourceTree = ""; }; 75C1F0442AE26AC0006929CA /* CoinJoinLevelsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinJoinLevelsViewModel.swift; sourceTree = ""; }; 75C1F09D2AFF675400FE675E /* EnterVotingKeyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnterVotingKeyViewController.swift; sourceTree = ""; }; + 75C3EDFD2DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendLoginInfoView.swift; sourceTree = ""; }; + 75C3EDFE2DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTXSpendUserAuthScreen.swift; sourceTree = ""; }; 75CDD77F2C0898E400F433D2 /* Shape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shape.swift; sourceTree = ""; }; 75CDD7822C0898FA00F433D2 /* Wrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Wrapper.swift; sourceTree = ""; }; 75CDD7852C08D61300F433D2 /* DashAmount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashAmount.swift; sourceTree = ""; }; @@ -2517,8 +2582,14 @@ 75D5F3CF191EC270004AB296 /* DashWallet-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DashWallet-Prefix.pch"; sourceTree = ""; }; 75D5F3E5191EC270004AB296 /* DashWalletTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DashWalletTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 75D656192B0792F500D1A902 /* UsernameRequests.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = UsernameRequests.storyboard; sourceTree = ""; }; + 75D657662DF579F300ACE570 /* TransactionFilterDialog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionFilterDialog.swift; 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 = ""; }; @@ -2539,6 +2610,7 @@ 75EDC78DE1686E55AE12233C /* Pods-DashWalletScreenshotsUITests.testnet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DashWalletScreenshotsUITests.testnet.xcconfig"; path = "Pods/Target Support Files/Pods-DashWalletScreenshotsUITests/Pods-DashWalletScreenshotsUITests.testnet.xcconfig"; sourceTree = ""; }; 75EE38D22CBE9EFC00845FFF /* MainMenuContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuContentView.swift; sourceTree = ""; }; 75EE38D72CBFE52B00845FFF /* ContactsPlaceholderViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsPlaceholderViewController.swift; sourceTree = ""; }; + 75EE9F412DE2F74B000AD1AD /* DashSpendConfirmationDialog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashSpendConfirmationDialog.swift; sourceTree = ""; }; 75F2E0B61BE2D5F000EAE861 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 75F51AAC2ABD8C800057B499 /* IntegrationViewController+Uphold.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IntegrationViewController+Uphold.swift"; sourceTree = ""; }; 75F51AAE2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IntegrationViewController+Coinbase.swift"; sourceTree = ""; }; @@ -2977,7 +3049,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 = ""; }; @@ -3015,7 +3086,6 @@ C9D2C95D2A386D7E00D15901 /* DWBasePressableControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DWBasePressableControl.m; sourceTree = ""; }; C9D2C9642A38733B00D15901 /* DPAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = DPAssets.xcassets; sourceTree = ""; }; C9F067F129E4576D0022D958 /* HomeBalanceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeBalanceView.swift; sourceTree = ""; }; - C9F067F329E457790022D958 /* HomeBalanceView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeBalanceView.xib; sourceTree = ""; }; C9F42F9E29DA82E5001BC549 /* PayableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayableViewController.swift; sourceTree = ""; }; C9F42FA029DA95F5001BC549 /* PayTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayTableViewCell.swift; sourceTree = ""; }; C9F42FA229DBC183001BC549 /* PaymentsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentsViewController.swift; sourceTree = ""; }; @@ -3473,7 +3543,6 @@ 11E47BA928EB383E0097CFA0 /* Services */ = { isa = PBXGroup; children = ( - 11E47BAA28EB38510097CFA0 /* SendCoinsService.swift */, 117ED4A028EC86E0006E3EE4 /* TransactionObserver.swift */, 11517C86294B0FED004FC7BF /* CrowdNodeWebService.swift */, ); @@ -3745,9 +3814,11 @@ C9F451FE2A0CE60400825057 /* Home Header View */, 2A2CD70B22F97A9D008C7BC9 /* Shortcuts */, 2A4E533C22F025ED00E5168A /* Cells */, + 7549BE522DEAEA14004F0BAF /* MetadataProvider.swift */, C9F452002A0CE6C900825057 /* HomeView.swift */, 754BEA112C0B6BD700E8C93C /* HomeViewModel.swift */, 751C05DC2D3E39A600475E52 /* TransactionListDataItem.swift */, + 75D657662DF579F300ACE570 /* TransactionFilterDialog.swift */, ); path = Views; sourceTree = ""; @@ -3946,6 +4017,7 @@ 47081194298CF1E3003FCA3D /* Transactions */, 11BD737F28E7354200A34022 /* CrowdNode */, 479DBDDB2995167800F30AF1 /* Tx */, + 4709C313287EA10600B4BD48 /* Tx Metadata */, 0F6EDF9328C894B9000427E7 /* Coinbase */, 47AE8B9328BF873800490F5E /* Explore Dash */, 471A2602289ACCD20056B7B2 /* Taxes */, @@ -4559,12 +4631,11 @@ 2A9CEBB622E1FA0000A50237 /* Home */ = { isa = PBXGroup; children = ( + 7549BE552DEAECA5004F0BAF /* Tx Metadata */, 2A1A60B92674083B003DAC65 /* Syncing Views */, 2A913E7223A2EAEF006A2A59 /* Protocols */, 2A2CD6E522F46D1A008C7BC9 /* Models */, 2A307CB322E6FA7F00A18347 /* Views */, - 759A7EA62CFDA6FF009423AD /* UIViewController+DWTxFilter.swift */, - C94946DE2A25EDA8008A678D /* DWHomeViewControllerDelegate.h */, 75FFD6B72BF47BA20032879E /* HomeViewController.swift */, 75FFD6BA2BF48DF80032879E /* HomeViewController+JailbreakCheck.swift */, 75FFD6BD2BF491FC0032879E /* HomeViewController+BackupReminder.swift */, @@ -5074,6 +5145,7 @@ children = ( 47081195298CF1FE003FCA3D /* Model */, 472D13E2299E23B7006903F1 /* BalanceNotifier.swift */, + 11E47BAA28EB38510097CFA0 /* SendCoinsService.swift */, ); path = Transactions; sourceTree = ""; @@ -5113,24 +5185,29 @@ 4709C310287E78BD00B4BD48 /* Migrations */ = { isa = PBXGroup; children = ( + 7549BE5F2DEAF628004F0BAF /* AddIconBitmapsTable.swift */, + 75D9EBB72DE5CC3A009416A2 /* AddGiftCardsTable.swift */, 4709C311287E78BD00B4BD48 /* SeedDB.swift */, ); path = Migrations; sourceTree = ""; }; - 4709C313287EA10600B4BD48 /* Tx */ = { + 4709C313287EA10600B4BD48 /* Tx Metadata */ = { isa = PBXGroup; children = ( 4709C316287EA22600B4BD48 /* DAO */, - 4709C314287EA11900B4BD48 /* TxUserInfo.swift */, + 4709C314287EA11900B4BD48 /* TransactionMetadata.swift */, + 7549BE592DEAF50D004F0BAF /* IconBitmap.swift */, + 75050CD02DF2FCBF00F586D6 /* ServiceName.swift */, ); - path = Tx; + path = "Tx Metadata"; sourceTree = ""; }; 4709C316287EA22600B4BD48 /* DAO */ = { isa = PBXGroup; children = ( - 4709C317287EA23000B4BD48 /* TxUserInfoDAO.swift */, + 4709C317287EA23000B4BD48 /* TransactionMetadataDAO.swift */, + 7549BE5C2DEAF55B004F0BAF /* IconBitmapDAO.swift */, ); path = DAO; sourceTree = ""; @@ -5140,7 +5217,6 @@ children = ( 472D13DD299DF5B5006903F1 /* Services */, 471A2603289ACCDD0056B7B2 /* Address */, - 4709C313287EA10600B4BD48 /* Tx */, 471A2609289ACDF70056B7B2 /* Taxes.swift */, 75EBAA242BBA9DC2004488E3 /* ZenLedger.swift */, ); @@ -5357,9 +5433,9 @@ 47838B7B290133440003E8AB /* Filters */ = { isa = PBXGroup; children = ( - 47A50F3C291560ED00C70123 /* Locations List */, 47838B80290271020003E8AB /* Model */, - 47838B7C290133610003E8AB /* PointOfUseListFiltersViewController.swift */, + 7574221E2DF87B5200CB0175 /* MerchantFiltersView.swift */, + 7574221F2DF87B5200CB0175 /* TerritoryPickerView.swift */, ); path = Filters; sourceTree = ""; @@ -5367,6 +5443,7 @@ 47838B80290271020003E8AB /* Model */ = { isa = PBXGroup; children = ( + 757422262DF87B8300CB0175 /* MerchantFiltersViewModel.swift */, 47838B81290271170003E8AB /* PointOfUseListFiltersModel.swift */, ); path = Model; @@ -5561,24 +5638,6 @@ path = Model; sourceTree = ""; }; - 47A50F3C291560ED00C70123 /* Locations List */ = { - isa = PBXGroup; - children = ( - 47C6E6E129196B98003FEDF2 /* Views */, - 47A50F3F29193D2B00C70123 /* Model */, - 47A50F3D29192F8D00C70123 /* TerritoriesListViewController.swift */, - ); - path = "Locations List"; - sourceTree = ""; - }; - 47A50F3F29193D2B00C70123 /* Model */ = { - isa = PBXGroup; - children = ( - 47C6E6DF2919578C003FEDF2 /* TerritoryListModel.swift */, - ); - path = Model; - sourceTree = ""; - }; 47AE8B9328BF873800490F5E /* Explore Dash */ = { isa = PBXGroup; children = ( @@ -5594,6 +5653,7 @@ 47AE8B9628BFACE800490F5E /* Model */ = { isa = PBXGroup; children = ( + 7545ED522DA91A2F0075F45C /* CTXConstants.swift */, 47AE8B9A28BFAD2000490F5E /* Entites */, 47AE8B9928BFAD0B00490F5E /* DAO */, ); @@ -5612,6 +5672,10 @@ 47AE8B9828BFAD0000490F5E /* Services */ = { isa = PBXGroup; children = ( + 75A2F3022DE48C860046BE17 /* CTXSpendTokenService.swift */, + 754565C42DAA52A000DA4E8E /* CTXSpendAPI.swift */, + 754565C52DAA52A000DA4E8E /* CTXSpendEndpoint.swift */, + 754565C72DAA52A000DA4E8E /* CTXSpendService.swift */, 47AE8BAC28BFAE6700490F5E /* DWLocationManager.swift */, 47AE8BA828BFAE5800490F5E /* ExploreDatabaseSyncManager.swift */, ); @@ -5621,6 +5685,7 @@ 47AE8B9928BFAD0B00490F5E /* DAO */ = { isa = PBXGroup; children = ( + 75D9EBC12DE5CD9C009416A2 /* GiftCardsDAO.swift */, 47AE8BA028BFADB600490F5E /* PointOfUseDAO.swift */, ); path = DAO; @@ -5629,6 +5694,8 @@ 47AE8B9A28BFAD2000490F5E /* Entites */ = { isa = PBXGroup; children = ( + 75D9EBBB2DE5CD8B009416A2 /* GiftCard.swift */, + 753E46E72DE1E24300A3FF2A /* CTXSpendModels.swift */, 47AE8B9B28BFAD2800490F5E /* ExplorePointOfUse.swift */, ); path = Entites; @@ -5664,9 +5731,7 @@ children = ( 47AE8BB428C1305E00490F5E /* Merchants & ATMs */, 47AE8BDF28C1305E00490F5E /* Views */, - 47AE8BDE28C1305E00490F5E /* DWExploreTestnetViewController.h */, - 47AE8BE428C1305E00490F5E /* DWExploreTestnetViewController.m */, - 47838B7E290160860003E8AB /* ExploreDash.storyboard */, + 7569D6822DE6DA6800768BFF /* ExploreViewController.swift */, ); path = "Explore Dash"; sourceTree = ""; @@ -5693,9 +5758,7 @@ 47AE8BBE28C1305E00490F5E /* Info */ = { isa = PBXGroup; children = ( - 47AE8C1028C5430300490F5E /* PointOfUseInfoViewController.swift */, - 47AE8C0B28C53E4A00490F5E /* MerchantInfoViewController.swift */, - 47AE8C0D28C540C100490F5E /* GiftCardInfoViewController.swift */, + 754565D02DABA5EB00DA4E8E /* MerchantTypesDialog.swift */, ); path = Info; sourceTree = ""; @@ -5711,6 +5774,7 @@ 47AE8BD328C1305E00490F5E /* MerchantListViewController.swift */, 47AE8BDD28C1305E00490F5E /* AtmListViewController.swift */, 47AE8BB728C1305E00490F5E /* AllMerchantLocationsViewController.swift */, + 7556EE402DF9876B004E8093 /* ExploreSyncBannerView.swift */, ); path = List; sourceTree = ""; @@ -5757,10 +5821,9 @@ 47AE8BDF28C1305E00490F5E /* Views */ = { isa = PBXGroup; children = ( - 47AE8BE028C1305E00490F5E /* DWExploreTestnetContentsView.h */, - 47AE8BE228C1305E00490F5E /* DWExploreTestnetContentsView.m */, - 47AE8BE328C1305E00490F5E /* DWExploreHeaderView.h */, - 47AE8BE128C1305E00490F5E /* DWExploreHeaderView.m */, + 7545ED552DA91AC80075F45C /* DashSpend */, + 7569D6882DE6DB6700768BFF /* ExploreContentsView.swift */, + 7569D6852DE6DB1B00768BFF /* ExploreHeaderView.swift */, ); path = Views; sourceTree = ""; @@ -5804,14 +5867,6 @@ path = "Transfer Amount"; sourceTree = ""; }; - 47C6E6E129196B98003FEDF2 /* Views */ = { - isa = PBXGroup; - children = ( - 47C6E6E229196D48003FEDF2 /* TerritoriesListCell.swift */, - ); - path = Views; - sourceTree = ""; - }; 47CDEECA294A2B9F008AE06D /* Base */ = { isa = PBXGroup; children = ( @@ -6025,6 +6080,31 @@ path = Cells; sourceTree = ""; }; + 7545ED552DA91AC80075F45C /* DashSpend */ = { + isa = PBXGroup; + children = ( + 75D9EBC42DE5CE14009416A2 /* GiftCardDetailsView.swift */, + 75D9EBC52DE5CE14009416A2 /* GiftCardDetailsViewModel.swift */, + 753F75332DD0D41900D40DFE /* DashSpendPayScreen.swift */, + 75EE9F412DE2F74B000AD1AD /* DashSpendConfirmationDialog.swift */, + 753F75362DD0D75F00D40DFE /* DashSpendPayViewModel.swift */, + 75C3EDFD2DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift */, + 75C3EDFE2DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift */, + 7545ED562DA91AEA0075F45C /* CTXSpendUserAuthViewModel.swift */, + 7545ED5C2DA91F590075F45C /* CTXSpendTermsScreen.swift */, + ); + path = DashSpend; + sourceTree = ""; + }; + 7549BE552DEAECA5004F0BAF /* Tx Metadata */ = { + isa = PBXGroup; + children = ( + 75050CCD2DF2CB0E00F586D6 /* GiftCardMetadataProvider.swift */, + 7549BE562DEAECB0004F0BAF /* CustomIconMetadataProvider.swift */, + ); + path = "Tx Metadata"; + sourceTree = ""; + }; 754C27C62CC3C0B900BA7B9F /* Usernames */ = { isa = PBXGroup; children = ( @@ -6038,24 +6118,27 @@ isa = PBXGroup; children = ( 7581B19C2CE3509A00714007 /* Dialogs */, - 756FE7092CDCD6CD00E6C195 /* ValidationCheck.swift */, + 75EBAA112BB99B6B004488E3 /* BottomSheet.swift */, + 759ADD562BF3447400767ACD /* Button.swift */, + 75CDD7852C08D61300F433D2 /* DashAmount.swift */, 750CEFA02CCA6EA100E87A32 /* TextInput.swift */, 75EBAA082BB9791B004488E3 /* Icon.swift */, 7566F4892BB6CAF2005238D2 /* MenuItem.swift */, 75EBAA0B2BB9792F004488E3 /* FeatureTopText.swift */, 754C27CB2CC3C14F00BA7B9F /* FeatureSingleItem.swift */, 75EBAA0E2BB99036004488E3 /* TextIntro.swift */, - 75EBAA112BB99B6B004488E3 /* BottomSheet.swift */, + 758C4C4E2DFAC1C30028549B /* RadioButtonRow.swift */, 75BDE7AB2BF3287400556791 /* Toast.swift */, - 759ADD562BF3447400767ACD /* Button.swift */, 75AA33CE2BF9D44A00F12465 /* ButtonsGroup.swift */, 75AA33D12BF9E18E00F12465 /* Color+DWStyle.swift */, 75AA33D42BF9E1D400F12465 /* Font+DWStyle.swift */, 75AA33D72BFB4A5A00F12465 /* Extensions.swift */, 75CDD77F2C0898E400F433D2 /* Shape.swift */, 75CDD7822C0898FA00F433D2 /* Wrapper.swift */, - 75CDD7852C08D61300F433D2 /* DashAmount.swift */, 759609222C455B2000F3BF04 /* SendIntro.swift */, + 75387B492E0400C300BCCC72 /* MerchantDenominations.swift */, + 7545ED5F2DA91FC60075F45C /* NumericKeyboardView.swift */, + 756FE7092CDCD6CD00E6C195 /* ValidationCheck.swift */, ); path = "SwiftUI Components"; sourceTree = ""; @@ -6184,6 +6267,7 @@ 75D5F3C0191EC270004AB296 /* Frameworks */, 75D5F3BF191EC270004AB296 /* Products */, EBFC2EA47915CD4F5BA81564 /* Pods */, + 708B9F2B4B1E4C31B5010CDF /* RadioButtonRow.swift */, ); sourceTree = ""; wrapsLines = 0; @@ -7521,7 +7605,6 @@ children = ( 472D13E7299E4EE7006903F1 /* BalanceModel.swift */, C9F067F129E4576D0022D958 /* HomeBalanceView.swift */, - C9F067F329E457790022D958 /* HomeBalanceView.xib */, ); path = "Home Balance View"; sourceTree = ""; @@ -7859,7 +7942,6 @@ buildActionMask = 2147483647; files = ( 2A1AF6DE23C7681B00442AF5 /* DWShortcutCollectionViewCell~ipad.xib in Resources */, - 47838B7F290160860003E8AB /* ExploreDash.storyboard in Resources */, 474C720D298A19D100475CA6 /* TxDetailHeaderCell.xib in Resources */, 75303FE52AE7B70500870D8B /* CrowdNode.storyboard in Resources */, 2AB231D42196E27300A6E7E6 /* StartStoryboard.storyboard in Resources */, @@ -7878,7 +7960,6 @@ 2ADC722923B5547000D9DD37 /* Localizable.stringsdict in Resources */, 75E2F3C82AA4CF1900C3B458 /* Topper-Info.plist in Resources */, 2A2CD71822F99CAE008C7BC9 /* ShortcutsView.xib in Resources */, - C9F067F429E543630022D958 /* HomeBalanceView.xib in Resources */, 474C7213298A1EFC00475CA6 /* TxDetailInfoCell.xib in Resources */, 2A9FFE942230FF4700956D5F /* UpholdOTPStoryboard.storyboard in Resources */, 2A4430F222CBD57A009BAF7F /* AppAssets.xcassets in Resources */, @@ -7960,7 +8041,6 @@ files = ( C9D2C90B2A320AA000D15901 /* DWShortcutCollectionViewCell~ipad.xib in Resources */, 75AE5A7F2A87C363006CD4BA /* DWConfirmUsernameContentView.xib in Resources */, - C9D2C90D2A320AA000D15901 /* ExploreDash.storyboard in Resources */, C9D2C90E2A320AA000D15901 /* TxDetailHeaderCell.xib in Resources */, 752C3ED22B1AF19C00F46CD3 /* BuySellPortal.storyboard in Resources */, C9D2C9652A38733B00D15901 /* DPAssets.xcassets in Resources */, @@ -7977,7 +8057,6 @@ C9D2C91C2A320AA000D15901 /* Localizable.stringsdict in Resources */, C943B4C12A40A54600AF23C5 /* DWTitleActionHeaderView.xib in Resources */, C9D2C91D2A320AA000D15901 /* ShortcutsView.xib in Resources */, - C9D2C91E2A320AA000D15901 /* HomeBalanceView.xib in Resources */, 753FDBEE2AECF52B0005EEC3 /* UsernameVoting.storyboard in Resources */, C9D2C9202A320AA000D15901 /* TxDetailInfoCell.xib in Resources */, C9D2C9212A320AA000D15901 /* UpholdOTPStoryboard.storyboard in Resources */, @@ -8309,6 +8388,8 @@ "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf/Protobuf_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImageSwiftUI/SDWebImageSwiftUI.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.swift.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/gRPC/gRPCCertificates.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", @@ -8321,6 +8402,8 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Protobuf_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImageSwiftUI.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SQLite.swift.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", @@ -8379,6 +8462,8 @@ "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/Protobuf/Protobuf_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImageSwiftUI/SDWebImageSwiftUI.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.swift.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/gRPC/gRPCCertificates.bundle", ); @@ -8390,6 +8475,8 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Protobuf_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImageSwiftUI.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SQLite.swift.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle", ); @@ -8436,6 +8523,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 */, @@ -8449,6 +8537,7 @@ C9F451EB2A0BF10B00825057 /* SyncingAlertViewController.swift in Sources */, 11B8449628F5B9F80082770C /* CrowdNodeResponse.swift in Sources */, 47AE8BB228BFF61A00490F5E /* FileManager+DashWallet.swift in Sources */, + 7545ED532DA91A2F0075F45C /* CTXConstants.swift in Sources */, 47AE8BF228C1306000490F5E /* PointOfUseItemCell.swift in Sources */, 47083B3229892D770010AF71 /* DSTransaction+DashWallet.swift in Sources */, 751B61C82AE0EDD000D1C2EF /* CoinJoinLevelsViewController.swift in Sources */, @@ -8462,6 +8551,7 @@ 47C661AD28F972BD00028A8D /* NumberKeyboardButton.swift in Sources */, 11AE3DD82997C599000856EE /* IsDefaultEmail.swift in Sources */, 2A9FFF2A2233E60F00956D5F /* DWUpholdAccountObject.m in Sources */, + 75A2F3042DE48C860046BE17 /* CTXSpendTokenService.swift in Sources */, 2A9FFE812230FF4700956D5F /* DWFormTableViewController.m in Sources */, C909614D29EFF7D600002D82 /* WalletKeysOverviewModel.swift in Sources */, 4751137528DAF28800223B77 /* UIAssembly.swift in Sources */, @@ -8492,11 +8582,10 @@ 110C679A29227948006B580C /* UINavigationController+CrowdNode.swift in Sources */, 2A8B9E7A2302E67400FF8653 /* DWReceiveModel.m in Sources */, 119E8D0A2905413F00D406C1 /* TransactionWrapper.swift in Sources */, - 759A7EA82CFDA707009423AD /* UIViewController+DWTxFilter.swift in Sources */, 479DBDDD2995168C00F30AF1 /* Transactions.swift in Sources */, 75F3F00D2C48F819004470EA /* RootEditProfileViewController.swift in Sources */, 2A74EFFB2305464C00C475EB /* DWRecoverTextView.m in Sources */, - 4709C315287EA11900B4BD48 /* TxUserInfo.swift in Sources */, + 4709C315287EA11900B4BD48 /* TransactionMetadata.swift in Sources */, C91E91AE29FFC8A1003E7883 /* ExtendedPublicKeysViewController.swift in Sources */, 47AE8BFE28C1306000490F5E /* AtmListViewController.swift in Sources */, 754D02082D155564005CA466 /* CoinJoinTransaction.swift in Sources */, @@ -8546,6 +8635,7 @@ 2A9FFE882230FF4700956D5F /* DWPlaceholderFormCellModel.m in Sources */, 2A8B9E4F22FED47E00FF8653 /* DWOverlapControl.m in Sources */, 119E8D062905200300D406C1 /* CoinsToAddressTxFilter.swift in Sources */, + 7545ED572DA91AF10075F45C /* CTXSpendUserAuthViewModel.swift in Sources */, 2AB3417323A926C9004E37A7 /* DWDemoAppRootViewController.m in Sources */, 2A9FFE9B2230FF4700956D5F /* DWUpholdLogoutTutorialViewController.m in Sources */, 47CF46A529654E190067B6EE /* CBAccount.swift in Sources */, @@ -8555,6 +8645,7 @@ C9F42FAB29DC1098001BC549 /* ReceiveContentView.swift in Sources */, 47838B7528FFD1D10003E8AB /* AmountView.swift in Sources */, 4759D512292FD6F3002F20DC /* DWBasePayViewController.m in Sources */, + 75EE9F432DE2F750000AD1AD /* DashSpendConfirmationDialog.swift in Sources */, 1193FF3629602835004EA8D7 /* CrowdNodeTransferModel.swift in Sources */, 2A44312622CCC14F009BAF7F /* DWSetPinViewController.m in Sources */, 47F4B6C7294842DF00AED4C9 /* ConfirmOrderController.swift in Sources */, @@ -8570,12 +8661,15 @@ 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 */, 47522F502927CB9000EE143E /* SuccessfulOperationStatusViewController.swift in Sources */, 47E94B9A296D7F99000FE68E /* CustodialSwapsModel.swift in Sources */, 2A7A7C20234B79B700451078 /* DWLocalCurrencyTableViewCell.m in Sources */, + 757422242DF87B5200CB0175 /* TerritoryPickerView.swift in Sources */, + 757422252DF87B5200CB0175 /* MerchantFiltersView.swift in Sources */, 2A74EFFE2305763F00C475EB /* DWRecoverModel.m in Sources */, 2A4431C822D4D92A009BAF7F /* DWCenteredTableView.m in Sources */, 2A913E6F23A26663006A2A59 /* DWOnboardingViewController.m in Sources */, @@ -8611,6 +8705,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 */, @@ -8628,6 +8724,7 @@ 47F2C67D28602D4F00C2B774 /* BasePageSheetViewController.swift in Sources */, 119E8D0429051F9900D406C1 /* CrowdNodeRequest.swift in Sources */, 0F6EDFD228C896BD000427E7 /* CoinbaseExchangeRateResponse.swift in Sources */, + 758C4C502DFAC1C30028549B /* RadioButtonRow.swift in Sources */, 117728A3297A7D24006F1553 /* CrowdNodePortalItem.swift in Sources */, 75EAFBB12B04C057005ABC6A /* CustomHUDView.swift in Sources */, 47C661B628FE75A700028A8D /* BaseViewController.swift in Sources */, @@ -8638,6 +8735,7 @@ 11E47BA828EAE7AD0097CFA0 /* CrowdNodeModel.swift in Sources */, 4730586E295AB3BE004641DA /* UIDevice+Compatibility.swift in Sources */, 2A4431E222D7219E009BAF7F /* DWSeedWordView.m in Sources */, + 753F75382DD0D76400D40DFE /* DashSpendPayViewModel.swift in Sources */, 2A7F3B1F238C651200DEA3EF /* DWSecurityStatusView.m in Sources */, 2ACCD8D1231D33EA00A96B62 /* DWAnimatedShapeLayer.m in Sources */, C9FAABB72AB799AE00878224 /* UpholdPortalModel.swift in Sources */, @@ -8649,6 +8747,7 @@ 2AD1CE8D22DCB3B600C99324 /* DWVerifySeedPhraseModel.m in Sources */, 75FFD6C72BF495800032879E /* HomeViewController+Shortcuts.swift in Sources */, C9F42FA629DC092B001BC549 /* ReceiveViewController.swift in Sources */, + 757422272DF87B8300CB0175 /* MerchantFiltersViewModel.swift in Sources */, 118B7A3F29865A3A00FBB6CC /* ConfirmationTransactionQRController.swift in Sources */, 47E4B7B7292F85E800CE0EB6 /* Numbers+Dash.swift in Sources */, 478C983229433C5700FAA0F0 /* PaymentMethodsController.swift in Sources */, @@ -8666,11 +8765,13 @@ 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 */, C9C1335A2A561FFA00B66651 /* PasteboardContentView.swift in Sources */, 2A7A7BD02348A34800451078 /* DWSecurityMenuModel.m in Sources */, + 75050CCF2DF2CB0F00F586D6 /* GiftCardMetadataProvider.swift in Sources */, C909615929F29C9200002D82 /* KeysOverviewCell.swift in Sources */, 2ACCD86E2319609400A96B62 /* UIViewController+DWShareReceiveInfo.m in Sources */, 114D16B829828BCC009A124C /* OnlineAccountConfirmationController.swift in Sources */, @@ -8683,19 +8784,19 @@ 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 */, 2A0C69C623142AA4001B8C90 /* DWModalPresentationController.m in Sources */, - 47AE8C1128C5430300490F5E /* PointOfUseInfoViewController.swift in Sources */, 47C661B428FDCF7800028A8D /* ActionButtonViewController.swift in Sources */, 4774DCE528F4668B008CF87D /* BuySellServiceItemCell.swift in Sources */, 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 */, + 7549BE5A2DEAF50D004F0BAF /* IconBitmap.swift in Sources */, 47AC8413297822E000BD1B49 /* SpecifyAmountViewController.swift in Sources */, 2AFCB9C423BE76EC00FF59A6 /* DWUpholdTransactionObject+DWView.m in Sources */, 75CDD7862C08D61300F433D2 /* DashAmount.swift in Sources */, @@ -8706,12 +8807,10 @@ 47CF469F296540E40067B6EE /* AccountRepository.swift in Sources */, 2A8B9E2922FB1C5D00FF8653 /* DWSharedUIConstants.m in Sources */, 2A858A12237EE89C0097A7B5 /* BRAppleWatchTransactionData.m in Sources */, - 47A50F3E29192F8D00C70123 /* TerritoriesListViewController.swift in Sources */, C9F4520B2A1209D100825057 /* HomeHeaderModel.swift in Sources */, - 47C6E6E02919578C003FEDF2 /* TerritoryListModel.swift in Sources */, 2AFF01DB243F4559003718DC /* DWDPRegistrationStatus.m in Sources */, + 7556EE412DF9876B004E8093 /* ExploreSyncBannerView.swift in Sources */, 472D13ED299E6579006903F1 /* CurrencyExchanger_Objc.m in Sources */, - 47AE8C0E28C540C100490F5E /* GiftCardInfoViewController.swift in Sources */, 471DD1B8290A92CD00E030C8 /* Tools.swift in Sources */, 478A2C7128DC554200AD1420 /* BuySellPortalModel.swift in Sources */, 75F51AAF2ABD8D070057B499 /* IntegrationViewController+Coinbase.swift in Sources */, @@ -8722,7 +8821,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 */, @@ -8754,9 +8852,13 @@ 2A8B9E6C23029D2B00FF8653 /* DWPaymentInputBuilder.m in Sources */, 2AC92C841FEB0A6D008CAEE0 /* DWQRScanViewController.m in Sources */, 2A9FFE802230FF4600956D5F /* DWSelectorFormTableViewCell.m in Sources */, + 75C3EE032DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift in Sources */, + 75C3EE052DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift in Sources */, 47305872295C971F004641DA /* UIViewController+AlertPresenting.swift in Sources */, 2A858A0F237EE89C0097A7B5 /* DSWatchTransactionDataObject.m in Sources */, 47FA3B0229364991008D58DC /* HTTPClient.swift in Sources */, + 7549BE582DEAECB8004F0BAF /* CustomIconMetadataProvider.swift in Sources */, + 7549BE602DEAF628004F0BAF /* AddIconBitmapsTable.swift in Sources */, 2A8B9E6F2302A9C200FF8653 /* DWPasteboardAddressExtractor.m in Sources */, 757111A12CF20ED800A7D452 /* CoinJoinMixingTxSet.swift in Sources */, 477F501529531C07003C7508 /* ViewModel+Coinbase.swift in Sources */, @@ -8770,14 +8872,19 @@ 2AD1CE8022DC92BF00C99324 /* NSString+DWTextSize.m in Sources */, 47AE8C0528C1F74A00490F5E /* PointOfUseListFiltersCell.swift in Sources */, 2A7A7BB22347927700451078 /* DWMainMenuViewController.m in Sources */, - 47838B7D290133610003E8AB /* PointOfUseListFiltersViewController.swift in Sources */, 47AE8C1A28C6A21A00490F5E /* AllMerchantLocationsDataProvider.swift in Sources */, + 754565CC2DAA52A000DA4E8E /* CTXSpendAPI.swift in Sources */, + 754565CE2DAA52A000DA4E8E /* CTXSpendService.swift in Sources */, + 754565CF2DAA52A000DA4E8E /* CTXSpendEndpoint.swift in Sources */, C9F451E52A0B986E00825057 /* MainTabbarController.swift in Sources */, + 7545ED612DA91FC60075F45C /* NumericKeyboardView.swift in Sources */, 47B30D78290BFCA60080C326 /* NumberFormatter+DashWallet.swift in Sources */, 47AF18082907B7880025803E /* BaseAmountModel.swift in Sources */, 4709C312287E78BD00B4BD48 /* SeedDB.swift in Sources */, 2ACCD8F0231ECDE000A96B62 /* DWPinField.m in Sources */, + 75050CD22DF2FCC200F586D6 /* ServiceName.swift in Sources */, 2AD1CEA222DFC80900C99324 /* DWCenteredScrollView.m in Sources */, + 7549BE5D2DEAF55B004F0BAF /* IconBitmapDAO.swift in Sources */, 2A9172C425233DC50024B4C5 /* DWPhraseRepairViewController.m in Sources */, 2A44314C22CF8801009BAF7F /* DWBiometricAuthModel.m in Sources */, 7527720F2AA9F58E0066557E /* TopperViewModel.swift in Sources */, @@ -8792,6 +8899,7 @@ C917023F29D44E0B008C034D /* SendReceivePageController.swift in Sources */, 753FD7E22CA44BDD00B7751F /* CoinJoinProgress.swift in Sources */, 2A7A7BD92348CB7300451078 /* DWSettingsMenuModel.m in Sources */, + 753E46E82DE1E24300A3FF2A /* CTXSpendModels.swift in Sources */, 478A2C7228DC909C00AD1420 /* BaseNavigationController.swift in Sources */, 47CDEECC294A2BAD008AE06D /* UIViewController+Coinbase.swift in Sources */, 472D13E1299E1F2F006903F1 /* CSVBuilder.swift in Sources */, @@ -8806,6 +8914,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 */, @@ -8816,11 +8925,12 @@ 7592AA7C2B9B08C000417F9E /* SupportedTopperPaymentMethods.swift in Sources */, 7503643E2C89D49A0029EC0D /* CoinJoinService.swift in Sources */, 75AA33CC2BF9C82700F12465 /* ModalDialog.swift in Sources */, + 7545ED5D2DA91F590075F45C /* CTXSpendTermsScreen.swift in Sources */, 2A44314022CF642C009BAF7F /* DWRootModel.m in Sources */, 47C661AF28FDAA3400028A8D /* BaseAmountViewController.swift in Sources */, 478C982C2942F03500FAA0F0 /* SendingToView.swift in Sources */, C94D98232A4CC85400F3BEE1 /* UIView+Dash.swift in Sources */, - 4709C318287EA23000B4BD48 /* TxUserInfoDAO.swift in Sources */, + 4709C318287EA23000B4BD48 /* TransactionMetadataDAO.swift in Sources */, 2A0C69E323155A0E001B8C90 /* DWModalContentView.m in Sources */, 2A9FFE042230FF2B00956D5F /* DWUpholdConstants.m in Sources */, 0F6EDFC728C896BD000427E7 /* CoinbaseSwapeTradeResponse.swift in Sources */, @@ -8832,6 +8942,7 @@ 2A913EAE23A7AC86006A2A59 /* DWBaseTransactionListDataProvider.m in Sources */, 0F6EDFCC28C896BD000427E7 /* CoinbaseTransactionsRequest.swift in Sources */, 2A9CEBAD22E1DA4000A50237 /* DWAppRootViewController.m in Sources */, + 753F75352DD0D42300D40DFE /* DashSpendPayScreen.swift in Sources */, 47F005FF297164600029EB10 /* UITableView+DashWallet.swift in Sources */, 47C661B228FDC72700028A8D /* TransferAmountViewController.swift in Sources */, C94F5E8E29D404850034FD57 /* ShortcutCell.swift in Sources */, @@ -8880,7 +8991,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 */, @@ -8888,6 +8998,7 @@ 2A4431E922D738C0009BAF7F /* DWSeedPhraseModel.m in Sources */, 478C983C2945801D00FAA0F0 /* Constants.swift in Sources */, 753130912B47EE920069C9B7 /* UpholdCapability.swift in Sources */, + 754565D22DABA5F300DA4E8E /* MerchantTypesDialog.swift in Sources */, 75AA33D82BFB4A5A00F12465 /* Extensions.swift in Sources */, 2A9FFE852230FF4700956D5F /* DWBaseFormCellModel.m in Sources */, 47AE8BFB28C1306000490F5E /* ExploreMapAnnotationView.swift in Sources */, @@ -8908,7 +9019,6 @@ 2A10EB352358996700C38B61 /* DWImportWalletInfoViewController.m in Sources */, C9F451EE2A0BF1F500825057 /* SyncingAlertContentView.swift in Sources */, 471A2605289ACD5C0056B7B2 /* AddressUserInfo.swift in Sources */, - 47AE8C0C28C53E4A00490F5E /* MerchantInfoViewController.swift in Sources */, 11E47BAB28EB38510097CFA0 /* SendCoinsService.swift in Sources */, C94F5E8A29D3FCCF0034FD57 /* ShortcutAction.swift in Sources */, 2A0C69E0231556D6001B8C90 /* DWModalChevronView.m in Sources */, @@ -8918,6 +9028,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 */, @@ -8942,9 +9053,11 @@ C956AF282A5CAD4D002FAB75 /* TitleCell.swift in Sources */, C9F42FA429DBC6E5001BC549 /* PaymentsViewController.swift in Sources */, 4774DCDD28F43A68008CF87D /* ServiceDataSource.swift in Sources */, + 75387B4A2E0400C300BCCC72 /* MerchantDenominations.swift in Sources */, 47838B7A2900196F0003E8AB /* ConverterView.swift in Sources */, 2A0C69CA23142E11001B8C90 /* DWModalBaseAnimation.m in Sources */, C956AF262A5CACE6002FAB75 /* TitleValueCell.swift in Sources */, + 75D657682DF579F300ACE570 /* TransactionFilterDialog.swift in Sources */, 75EBAA0C2BB9792F004488E3 /* FeatureTopText.swift in Sources */, C9F42FB829DFC507001BC549 /* SpendableTransaction.swift in Sources */, 11ED906B29681773003784F9 /* StakingInfoDialogController.swift in Sources */, @@ -8982,8 +9095,8 @@ 75E2F3CA2AA4D1B900C3B458 /* Topper.swift in Sources */, 2A8F422021BEFEEA00858B91 /* DWAboutModel.m in Sources */, 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 */, @@ -9046,6 +9159,7 @@ C943B4EE2A40A54600AF23C5 /* DWStretchyHeaderListCollectionLayout.m in Sources */, 75A8C1652AE5726B0042256E /* UsernameRequestsDAO.swift in Sources */, C9D2C6992A320AA000D15901 /* DWStartViewController.m in Sources */, + 7549BE5B2DEAF50D004F0BAF /* IconBitmap.swift in Sources */, C943B4C02A40A54600AF23C5 /* DWContactsSearchInfoHeaderView.m in Sources */, C9D2C69B2A320AA000D15901 /* DWStartModel.m in Sources */, 754495DD2AE91B6300492817 /* GroupedRequestCell.swift in Sources */, @@ -9059,6 +9173,7 @@ C9D2C6A12A320AA000D15901 /* AmountInputControl.swift in Sources */, C9D2C6A22A320AA000D15901 /* DWSegmentSliderFormTableViewCell.m in Sources */, 759609212C4553A400F3BF04 /* BuyCreditsViewController.swift in Sources */, + 7549BE5E2DEAF55B004F0BAF /* IconBitmapDAO.swift in Sources */, C9D2C6A32A320AA000D15901 /* ApiCode.swift in Sources */, 75FEC6AF2CE0C58A00F87B48 /* VerifyIdentityScreen.swift in Sources */, C9D2C6A42A320AA000D15901 /* CoinbaseEntryPointModel.swift in Sources */, @@ -9101,6 +9216,7 @@ C9D2C6BF2A320AA000D15901 /* FetchingNextPageCell.swift in Sources */, C943B3172A408CED00AF23C5 /* DWErrorUpdatingUserProfileView.m in Sources */, C943B4E32A40A54600AF23C5 /* DWPassthroughStackView.m in Sources */, + 757422282DF87B8300CB0175 /* MerchantFiltersViewModel.swift in Sources */, C943B32E2A408CED00AF23C5 /* DWAvatarGravatarViewController.m in Sources */, C9D2C6C02A320AA000D15901 /* Transaction.swift in Sources */, C943B3232A408CED00AF23C5 /* DWFaceDetector.m in Sources */, @@ -9131,11 +9247,12 @@ C9D2C6D32A320AA000D15901 /* Transactions.swift in Sources */, C9D2C6D42A320AA000D15901 /* DWRecoverTextView.m in Sources */, C943B5012A40A54600AF23C5 /* DWDPGenericItemView.m in Sources */, - C9D2C6D52A320AA000D15901 /* TxUserInfo.swift in Sources */, + C9D2C6D52A320AA000D15901 /* TransactionMetadata.swift in Sources */, C9D2C6D62A320AA000D15901 /* ExtendedPublicKeysViewController.swift in Sources */, 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 */, @@ -9154,6 +9271,7 @@ C943B58B2A40ED6F00AF23C5 /* DWInputUsernameViewController.m in Sources */, C9D2C6E62A320AA000D15901 /* CrowdNodeEndpoint.swift in Sources */, C9D2C6E72A320AA000D15901 /* ServiceEntryPointModel.swift in Sources */, + 75050CD12DF2FCC200F586D6 /* ServiceName.swift in Sources */, C943B4B72A40A54600AF23C5 /* DWBaseContactsModel.m in Sources */, C9D2C6E82A320AA000D15901 /* ExploreDash.swift in Sources */, C9D2C6EB2A320AA000D15901 /* UpholdAmountModel.swift in Sources */, @@ -9164,6 +9282,7 @@ C943B31D2A408CED00AF23C5 /* DWUserProfileContainerView.m in Sources */, C9D2C6F02A320AA000D15901 /* UIImage+Utils.m in Sources */, C943B4BE2A40A54600AF23C5 /* DWGlobalMatchFailedHeaderView.m in Sources */, + 75A2F3032DE48C860046BE17 /* CTXSpendTokenService.swift in Sources */, C943B4C22A40A54600AF23C5 /* BaseCollectionReusableView.m in Sources */, C9D2C6F22A320AA000D15901 /* DWSetupViewController.m in Sources */, C9D2C6F32A320AA000D15901 /* ExploreDatabaseConnection.swift in Sources */, @@ -9180,6 +9299,7 @@ C9D2C6FC2A320AA000D15901 /* DWLocalCurrencyViewController.m in Sources */, C9D2C6FD2A320AA000D15901 /* BadgeView.swift in Sources */, 759C8FA02B593589004B1305 /* CrowdNodeAPYView.swift in Sources */, + 753F75372DD0D76400D40DFE /* DashSpendPayViewModel.swift in Sources */, C943B5162A40A54600AF23C5 /* DWCreateInvitationButton.m in Sources */, C9D2C6FE2A320AA000D15901 /* HomeHeaderView.swift in Sources */, 757111A02CF20ED800A7D452 /* CoinJoinMixingTxSet.swift in Sources */, @@ -9200,7 +9320,6 @@ C9D2C7072A320AA000D15901 /* AmountInputTypeSwitcher.swift in Sources */, C943B4FA2A40A54600AF23C5 /* DWDPOutgoingRequestNotificationObject.m in Sources */, 75EBAA132BB99B6B004488E3 /* BottomSheet.swift in Sources */, - 759A7EA72CFDA707009423AD /* UIViewController+DWTxFilter.swift in Sources */, C9D2C7082A320AA000D15901 /* DWPlaceholderFormCellModel.m in Sources */, C9D2C7092A320AA000D15901 /* DWOverlapControl.m in Sources */, C9D2C70A2A320AA000D15901 /* CoinsToAddressTxFilter.swift in Sources */, @@ -9259,12 +9378,14 @@ C9D2C7322A320AA000D15901 /* CrowdNode+UserDefaults.swift in Sources */, C9D2C7342A320AA000D15901 /* DWPinView.m in Sources */, C9D2C7362A320AA000D15901 /* DWBaseReceiveModel.m in Sources */, + 7545ED582DA91AF10075F45C /* CTXSpendUserAuthViewModel.swift in Sources */, C943B52E2A40A54600AF23C5 /* DWNotificationsProvider.m in Sources */, C943B4F12A40A54600AF23C5 /* DWUserProfileContactActionsCell.m in Sources */, C9D2C7372A320AA000D15901 /* DWSegmentSlider.m in Sources */, C943B4AE2A40A54600AF23C5 /* DWNoContactsViewController.m in Sources */, C9D2C7382A320AA000D15901 /* CoinbasePlaceBuyOrderRequest.swift in Sources */, C943B5262A40A54600AF23C5 /* DWDashPayAnimationView.m in Sources */, + 753F75342DD0D42300D40DFE /* DashSpendPayScreen.swift in Sources */, C943B4EF2A40A54600AF23C5 /* DWUserProfileHeaderView.m in Sources */, C9D2C7392A320AA000D15901 /* CoinbaseAmount.swift in Sources */, C9D2C73B2A320AA000D15901 /* SendAmountModel.swift in Sources */, @@ -9272,6 +9393,7 @@ 757514E52B1735370026AD8E /* JoinDashPayView.swift in Sources */, C9D2C73C2A320AA000D15901 /* DWDecimalInputValidator.m in Sources */, C9D2C73D2A320AA000D15901 /* PaymentMethods.swift in Sources */, + 75D657672DF579F300ACE570 /* TransactionFilterDialog.swift in Sources */, C9D2C73E2A320AA000D15901 /* DWTitleDetailCellModel.m in Sources */, 7514E4EA2AF2351F00A0466F /* VotingFiltersModel.swift in Sources */, C943B4E22A40A54600AF23C5 /* DWPassthroughView.m in Sources */, @@ -9318,17 +9440,20 @@ C9D2C7552A320AA000D15901 /* DWPaymentInput.m in Sources */, C9D2C7572A320AA000D15901 /* OnlineAccountDetailsController.swift in Sources */, C9D2C7582A320AA000D15901 /* UIApplication+DashWallet.swift in Sources */, + 7545ED542DA91A2F0075F45C /* CTXConstants.swift in Sources */, C9D2C7592A320AA000D15901 /* OnlineAccountInfoController.swift in Sources */, C9D2C75A2A320AA000D15901 /* PaymentController.swift in Sources */, C9D2C75B2A320AA000D15901 /* CALayer+MBAnimationPersistence.m in Sources */, C9D2C75C2A320AA000D15901 /* UIView+DWAnimations.m in Sources */, 7581B19A2CE349BB00714007 /* ConfirmSpendDialog.swift in Sources */, + 758C4C4F2DFAC1C30028549B /* RadioButtonRow.swift in Sources */, C9D2C75D2A320AA000D15901 /* VerifiedSuccessfullyViewController.swift in Sources */, C9D2C75E2A320AA000D15901 /* KeyboardHeader.swift in Sources */, C9D2C75F2A320AA000D15901 /* DWUpholdOTPViewController.m in Sources */, C9D2C7602A320AA000D15901 /* DWAppGroupOptions.m in Sources */, C943B5352A40A54600AF23C5 /* DWNotificationsViewController.m in Sources */, C9D2C7612A320AA000D15901 /* DWTransactionListDataItemObject.m in Sources */, + 75050CCE2DF2CB0F00F586D6 /* GiftCardMetadataProvider.swift in Sources */, C943B3362A408CED00AF23C5 /* DWEditProfileBaseCell.m in Sources */, C930784A2A6AD52400906E4B /* UpholdConfirmTransferModel.swift in Sources */, C9D2C7622A320AA000D15901 /* DWUpholdAPIProvider.m in Sources */, @@ -9351,12 +9476,14 @@ C9D2C76C2A320AA000D15901 /* AccountListController.swift in Sources */, 753261B02CBC11BF003CDE00 /* WelcomeViewController.swift in Sources */, C9D2C76D2A320AA000D15901 /* DWUpholdTransactionObject.m in Sources */, + 7556EE422DF9876B004E8093 /* ExploreSyncBannerView.swift in Sources */, 754C27CD2CC3C15B00BA7B9F /* FeatureSingleItem.swift in Sources */, C943B5052A40A54600AF23C5 /* DWDPIncomingRequestCell.m in Sources */, C9D2C76E2A320AA000D15901 /* DWBaseSeedViewController.m in Sources */, 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 */, @@ -9426,7 +9553,6 @@ C9D2C7A32A320AA000D15901 /* DWVersionManager.m in Sources */, C943B4AF2A40A54600AF23C5 /* DWInvitationSuggestionView.m in Sources */, C9D2C7A52A320AA000D15901 /* DWModalPresentationController.m in Sources */, - C9D2C7A62A320AA000D15901 /* PointOfUseInfoViewController.swift in Sources */, 75BDE7AD2BF3287400556791 /* Toast.swift in Sources */, C9D2C7A72A320AA000D15901 /* ActionButtonViewController.swift in Sources */, C9D2C7A82A320AA000D15901 /* BuySellServiceItemCell.swift in Sources */, @@ -9439,7 +9565,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 */, @@ -9461,17 +9586,14 @@ 7592AA7D2B9B08C000417F9E /* SupportedTopperPaymentMethods.swift in Sources */, C9D2C7BE2A320AA000D15901 /* BRAppleWatchTransactionData.m in Sources */, C956AF212A5C33E5002FAB75 /* DWButton.m in Sources */, - C9D2C7BF2A320AA000D15901 /* TerritoriesListViewController.swift in Sources */, C9D2C7C02A320AA000D15901 /* HomeHeaderModel.swift in Sources */, C943B5942A40ED7B00AF23C5 /* DWPlanetarySystemView.m in Sources */, - C9D2C7C12A320AA000D15901 /* TerritoryListModel.swift in Sources */, C9D2C7C22A320AA000D15901 /* (null) in Sources */, C9D2C7C32A320AA000D15901 /* DWDPRegistrationStatus.m in Sources */, C9D2C7C42A320AA000D15901 /* CurrencyExchanger_Objc.m in Sources */, 7573C2E12B01103900F4C347 /* VotingFilterItemSelectableCell.swift in Sources */, C943B32B2A408CED00AF23C5 /* DWAvatarExternalLoadingView.m in Sources */, C943B5972A40EDDA00AF23C5 /* DWConfirmUsernameViewController.m in Sources */, - C9D2C7C52A320AA000D15901 /* GiftCardInfoViewController.swift in Sources */, C9D2C7C62A320AA000D15901 /* Tools.swift in Sources */, C9D2C7C72A320AA000D15901 /* BuySellPortalModel.swift in Sources */, 757B937E2BFF4F93002046A5 /* GroupedTransactionsScreen.swift in Sources */, @@ -9484,7 +9606,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 */, @@ -9502,9 +9623,11 @@ C943B5122A40A54600AF23C5 /* DWInvitationHistoryModel.m in Sources */, C943B31A2A408CED00AF23C5 /* DWCurrentUserProfileView.m in Sources */, 751B61C22ADFF99D00D1C2EF /* CoinbaseDepositResponse.swift in Sources */, + 753E46E92DE1E24300A3FF2A /* CTXSpendModels.swift in Sources */, C943B4F32A40A54600AF23C5 /* DWDPEstablishedContactObject.m in Sources */, C9D2C7E02A320AA000D15901 /* TransactionFilter.swift in Sources */, C9D2C7E22A320AA000D15901 /* CrowdNodeWithdrawalReceivedTx.swift in Sources */, + 7549BE612DEAF628004F0BAF /* AddIconBitmapsTable.swift in Sources */, C943B4B62A40A54600AF23C5 /* DWFetchedResultsDataSource.m in Sources */, C9D2C7E32A320AA000D15901 /* PointOfUseListSegmentedCell.swift in Sources */, 7513DA892AB17606005D55F6 /* Topper.swift in Sources */, @@ -9530,9 +9653,12 @@ C9D2C7F52A320AA000D15901 /* DWSelectorFormTableViewCell.m in Sources */, C9D2C7F82A320AA000D15901 /* UIViewController+AlertPresenting.swift in Sources */, C9D2C7F92A320AA000D15901 /* DSWatchTransactionDataObject.m in Sources */, + 75C3EE002DA7C63C00A4E9C0 /* CTXSpendUserAuthScreen.swift in Sources */, + 75C3EE022DA7C63C00A4E9C0 /* CTXSpendLoginInfoView.swift in Sources */, C9D2C7FA2A320AA000D15901 /* HTTPClient.swift in Sources */, C956AF0C2A5B591A002FAB75 /* DashInputField.swift in Sources */, C9D2C7FB2A320AA000D15901 /* DWPasteboardAddressExtractor.m in Sources */, + 7545ED602DA91FC60075F45C /* NumericKeyboardView.swift in Sources */, C943B4F22A40A54600AF23C5 /* DWDPNewIncomingRequestObject.m in Sources */, C9D2C7FC2A320AA000D15901 /* ViewModel+Coinbase.swift in Sources */, 75DFAF2E2CF7066600CCA68B /* VoteButton.swift in Sources */, @@ -9545,7 +9671,7 @@ C9D2C8062A320AA000D15901 /* NSString+DWTextSize.m in Sources */, C9D2C8072A320AA000D15901 /* PointOfUseListFiltersCell.swift in Sources */, C9D2C80A2A320AA000D15901 /* DWMainMenuViewController.m in Sources */, - C9D2C80B2A320AA000D15901 /* PointOfUseListFiltersViewController.swift in Sources */, + 7545ED5E2DA91F590075F45C /* CTXSpendTermsScreen.swift in Sources */, 75AA33D02BF9D44A00F12465 /* ButtonsGroup.swift in Sources */, C9D2C80C2A320AA000D15901 /* AllMerchantLocationsDataProvider.swift in Sources */, C9D2C80D2A320AA000D15901 /* MainTabbarController.swift in Sources */, @@ -9556,8 +9682,10 @@ 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 */, C9D2C8142A320AA000D15901 /* DWCenteredScrollView.m in Sources */, C9D2C8162A320AA000D15901 /* DWPhraseRepairViewController.m in Sources */, 75AA33CD2BF9C82700F12465 /* ModalDialog.swift in Sources */, @@ -9613,7 +9741,7 @@ C9D2C8382A320AA000D15901 /* DWRootModel.m in Sources */, C9D2C8392A320AA000D15901 /* BaseAmountViewController.swift in Sources */, C9D2C83A2A320AA000D15901 /* SendingToView.swift in Sources */, - C9D2C83B2A320AA000D15901 /* TxUserInfoDAO.swift in Sources */, + C9D2C83B2A320AA000D15901 /* TransactionMetadataDAO.swift in Sources */, C9D2C83C2A320AA000D15901 /* DWModalContentView.m in Sources */, 759AFDE02CC63571007072D2 /* JoinDashPayScreen.swift in Sources */, C9D2C83D2A320AA000D15901 /* DWUpholdConstants.m in Sources */, @@ -9653,6 +9781,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 */, @@ -9691,7 +9821,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 */, @@ -9716,6 +9845,7 @@ C943B5082A40A54600AF23C5 /* DWDPTxListCell.m in Sources */, 75FFD6BC2BF48DF80032879E /* HomeViewController+JailbreakCheck.swift in Sources */, C9D2C8942A320AA000D15901 /* DerivationPathKeysHeaderView.swift in Sources */, + 75387B4B2E0400C300BCCC72 /* MerchantDenominations.swift in Sources */, 759063ED2C42687F002F2AA9 /* RootEditProfileViewController.swift in Sources */, C9D2C8952A320AA000D15901 /* ConvertCryptoOrderPreviewModel.swift in Sources */, 75CDD7872C08D61300F433D2 /* DashAmount.swift in Sources */, @@ -9727,9 +9857,9 @@ 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 */, - C9D2C89F2A320AA000D15901 /* MerchantInfoViewController.swift in Sources */, C943B5062A40A54600AF23C5 /* UICollectionView+DWDPItemDequeue.m in Sources */, C9D2C8A02A320AA000D15901 /* SendCoinsService.swift in Sources */, C9D2C8A12A320AA000D15901 /* ShortcutAction.swift in Sources */, @@ -9743,6 +9873,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 */, @@ -9754,8 +9885,13 @@ 759063EF2C427324002F2AA9 /* DWMainMenuViewController+DashPay.swift in Sources */, C9D2C8B02A320AA000D15901 /* DWPhraseRepairChildViewController.m in Sources */, C9D2C8B12A320AA000D15901 /* SingleInputAddressSelector.swift in Sources */, + 757422212DF87B5200CB0175 /* TerritoryPickerView.swift in Sources */, + 757422222DF87B5200CB0175 /* MerchantFiltersView.swift in Sources */, C943B5382A40A65B00AF23C5 /* DWScrollingViewController.m in Sources */, C9D2C8B22A320AA000D15901 /* CoinbaseAccountAddress.swift in Sources */, + 754565C82DAA52A000DA4E8E /* CTXSpendAPI.swift in Sources */, + 754565CA2DAA52A000DA4E8E /* CTXSpendService.swift in Sources */, + 754565CB2DAA52A000DA4E8E /* CTXSpendEndpoint.swift in Sources */, C9D2C8B32A320AA000D15901 /* DWMainMenuTableViewCell.m in Sources */, C930784E2A6AD59E00906E4B /* ConfirmPaymentModel.swift in Sources */, C9D2C8B42A320AA000D15901 /* CrowdNodeTransferViewController.swift in Sources */, @@ -9772,12 +9908,14 @@ C9D2C8C22A320AA000D15901 /* TransactionObserver.swift in Sources */, C943B4EB2A40A54600AF23C5 /* DWModalUserProfileViewController.m in Sources */, C9D2C8C32A320AA000D15901 /* DWInfoTextCell.m in Sources */, + 7569D68A2DE6DB6700768BFF /* ExploreContentsView.swift in Sources */, C943B50D2A40A54600AF23C5 /* DWConfirmInvitationViewController.m in Sources */, C943B4F62A40A54600AF23C5 /* DWDPContactObject.m in Sources */, C9D2C8C42A320AA000D15901 /* ColorizedText.swift in Sources */, 75EAFBB22B04C057005ABC6A /* CustomHUDView.swift in Sources */, C9D2C8C72A320AA000D15901 /* PaymentsViewController.swift in Sources */, C9D2C8C92A320AA000D15901 /* ServiceDataSource.swift in Sources */, + 7549BE572DEAECB8004F0BAF /* CustomIconMetadataProvider.swift in Sources */, C9D2C8CA2A320AA000D15901 /* ConverterView.swift in Sources */, C9D2C8CB2A320AA000D15901 /* DWModalBaseAnimation.m in Sources */, C9D2C8CC2A320AA000D15901 /* SpendableTransaction.swift in Sources */, @@ -9825,14 +9963,16 @@ C943B4B52A40A54600AF23C5 /* DWContactsFetchedDataSource.m in Sources */, C9D2C8EE2A320AA000D15901 /* WelcomeToCrowdNodeViewController.swift in Sources */, C943B3282A408CED00AF23C5 /* DWAvatarEditSelectorContentView.m in Sources */, - C9D2C8EF2A320AA000D15901 /* TerritoriesListCell.swift in Sources */, 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 */, C9D2C8F42A320AA000D15901 /* DWQuickReceiveViewController.m in Sources */, 75A8C1692AE6A1AC0042256E /* VotingViewModel.swift in Sources */, + 1DD7BE9CD62998F12672140D /* RadioButtonRow.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -10267,7 +10407,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -10407,7 +10547,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -10581,7 +10721,7 @@ EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -10603,7 +10743,7 @@ EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -10628,7 +10768,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -10655,7 +10795,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -10687,7 +10827,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -10716,7 +10856,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -11395,7 +11535,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -11508,7 +11648,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -11564,7 +11704,7 @@ EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -11589,7 +11729,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; @@ -11706,7 +11846,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -11818,7 +11958,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.TodayExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -11873,7 +12013,7 @@ EXCLUDED_ARCHS = ""; IBSC_MODULE = WatchApp_Extension; INFOPLIST_FILE = WatchApp/Info.plist; - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = watchos; @@ -11898,7 +12038,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 8.3.3; + MARKETING_VERSION = 8.4.0; PRODUCT_BUNDLE_IDENTIFIER = org.dashfoundation.dash.watchkitapp.watchkitextension; PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/Contents.json similarity index 68% rename from DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/Contents.json rename to DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/Contents.json index f2a1c6ce3..89b006048 100644 --- a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "icon_dropDown.png", + "filename" : "logo.ctx.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "icon_dropDown@2x.png", + "filename" : "logo.ctx@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "icon_dropDown@3x.png", + "filename" : "logo.ctx@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx.png new file mode 100644 index 000000000..dad77967e Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx@2x.png new file mode 100644 index 000000000..74f7746d8 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx@3x.png new file mode 100644 index 000000000..82dcdf28b Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/ctx.logo.imageset/logo.ctx@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/Contents.json similarity index 56% rename from DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/Contents.json rename to DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/Contents.json index 78906a146..ab8cfd089 100644 --- a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/Contents.json @@ -1,23 +1,23 @@ { "images" : [ { + "filename" : "dashspend.png", "idiom" : "universal", - "filename" : "icon_pay_small.png", "scale" : "1x" }, { + "filename" : "dashspend@2x.png", "idiom" : "universal", - "filename" : "icon_pay_small@2x.png", "scale" : "2x" }, { + "filename" : "dashspend@3x.png", "idiom" : "universal", - "filename" : "icon_pay_small@3x.png", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend.png new file mode 100644 index 000000000..b7a91d5c7 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend@2x.png new file mode 100644 index 000000000..1afcd05fb Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend@3x.png new file mode 100644 index 000000000..edc7e1fb0 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/dashspend.logo.imageset/dashspend@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/Contents.json similarity index 55% rename from DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/Contents.json rename to DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/Contents.json index ff23e4596..35b654f3f 100644 --- a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/Contents.json @@ -1,23 +1,23 @@ { "images" : [ { + "filename" : "GiftCard.png", "idiom" : "universal", - "filename" : "icon_receive_small.png", "scale" : "1x" }, { + "filename" : "GiftCard@2x.png", "idiom" : "universal", - "filename" : "icon_receive_small@2x.png", "scale" : "2x" }, { + "filename" : "GiftCard@3x.png", "idiom" : "universal", - "filename" : "icon_receive_small@3x.png", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard.png new file mode 100644 index 000000000..4222cca9d Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard@2x.png new file mode 100644 index 000000000..01cb85dbe Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard@3x.png new file mode 100644 index 000000000..6305c51a0 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.giftcard.imageset/GiftCard@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/Contents.json new file mode 100644 index 000000000..e79e4e1cf --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "network.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "network@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "network@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network.png new file mode 100644 index 000000000..3a9a51f58 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@2x.png new file mode 100644 index 000000000..4bf5d5505 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@3x.png new file mode 100644 index 000000000..fc8d292b1 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.online.imageset/network@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/Contents.json new file mode 100644 index 000000000..969e4d7f0 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "merchant.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "merchant@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "merchant@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant.png new file mode 100644 index 000000000..b23e2f8d8 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@2x.png new file mode 100644 index 000000000..607eb55e4 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@3x.png new file mode 100644 index 000000000..d1f65a5bb Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.dashspend.shop.imageset/merchant@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/Contents.json index 110e328a6..35b654f3f 100644 --- a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/Contents.json +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "card.png", + "filename" : "GiftCard.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "card@2x.png", + "filename" : "GiftCard@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "card@3x.png", + "filename" : "GiftCard@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard.png new file mode 100644 index 000000000..9cc01038c Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard@2x.png new file mode 100644 index 000000000..bc03829ff Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard@3x.png new file mode 100644 index 000000000..5f2965f7a Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/GiftCard@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card.png deleted file mode 100644 index e4b4cc1cc..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card@2x.png deleted file mode 100644 index 362acbf5f..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card@3x.png deleted file mode 100644 index 877985ba6..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.explore.dash.wts.card.orange.imageset/card@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/Contents.json new file mode 100644 index 000000000..2588a0a9d --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "merchants.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "merchants@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "merchants@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants.png new file mode 100644 index 000000000..3d24d313b Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants@2x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants@2x.png new file mode 100644 index 000000000..07cc81c72 Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants@3x.png b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants@3x.png new file mode 100644 index 000000000..74541a40f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/Explore Dash/image.merchant.imageset/merchants@3x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small.png b/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small.png deleted file mode 100644 index deb5f43b7..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small@2x.png deleted file mode 100644 index cd862fd67..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small@3x.png deleted file mode 100644 index 04bfe73bb..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_pay_small.imageset/icon_pay_small@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small.png b/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small.png deleted file mode 100644 index 62b9752e1..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small@2x.png deleted file mode 100644 index dddb603e7..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small@3x.png deleted file mode 100644 index e0ec3c730..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_receive_small.imageset/icon_receive_small@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown.png b/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown.png deleted file mode 100644 index 593f00bb6..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown@2x.png deleted file mode 100644 index e4fe70f63..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown@3x.png deleted file mode 100644 index 68ad6e004..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_selector.imageset/icon_dropDown@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/Contents.json deleted file mode 100644 index 25d4002f8..000000000 --- a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/Contents.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_tx_received.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "received_txn.png", - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_tx_received@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "received_txn@2x.png", - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_tx_received@3x.png", - "scale" : "3x" - }, - { - "idiom" : "universal", - "filename" : "received_txn@3x.png", - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received.png deleted file mode 100644 index 43f1f613a..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received@2x.png deleted file mode 100644 index b34ad79cb..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received@3x.png deleted file mode 100644 index 93f7d5f55..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/icon_tx_received@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn.png deleted file mode 100644 index ef8336a18..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn@2x.png deleted file mode 100644 index c4f734ab3..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn@3x.png deleted file mode 100644 index 8482d3ee9..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_received.imageset/received_txn@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/Contents.json deleted file mode 100644 index 2e7ddb3c0..000000000 --- a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/Contents.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon_tx_sent.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "sent_txn.png", - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon_tx_sent@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "sent_txn@2x.png", - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon_tx_sent@3x.png", - "scale" : "3x" - }, - { - "idiom" : "universal", - "filename" : "sent_txn@3x.png", - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - }, - "properties" : { - "template-rendering-intent" : "template" - } -} \ No newline at end of file diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent.png deleted file mode 100644 index 2845d1984..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent@2x.png deleted file mode 100644 index 8ad2b1772..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent@3x.png deleted file mode 100644 index 146043af1..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/icon_tx_sent@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn.png deleted file mode 100644 index dd442d702..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn@2x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn@2x.png deleted file mode 100644 index 3fd8d3c48..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn@2x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn@3x.png b/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn@3x.png deleted file mode 100644 index 5e45908ad..000000000 Binary files a/DashWallet/Resources/AppAssets.xcassets/icon_tx_sent.imageset/sent_txn@3x.png and /dev/null differ diff --git a/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/Contents.json b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/Contents.json new file mode 100644 index 000000000..d07c56191 --- /dev/null +++ b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "all trans.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "all trans@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "all trans@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans.png b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans.png new file mode 100644 index 000000000..0f75f9cfd Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans@2x.png b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans@2x.png new file mode 100644 index 000000000..223269e0f Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans@2x.png differ diff --git a/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans@3x.png b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans@3x.png new file mode 100644 index 000000000..3cba9deaa Binary files /dev/null and b/DashWallet/Resources/AppAssets.xcassets/image.filter.options.imageset/all trans@3x.png differ diff --git a/DashWallet/Sources/Application/App.swift b/DashWallet/Sources/Application/App.swift index 3bf47ba93..fb43a438b 100644 --- a/DashWallet/Sources/Application/App.swift +++ b/DashWallet/Sources/Application/App.swift @@ -89,7 +89,7 @@ final class App { static let shared = App() func cleanUp() { - TxUserInfoDAOImpl.shared.deleteAll() + TransactionMetadataDAOImpl.shared.deleteAll() AddressUserInfoDAOImpl.shared.deleteAll() #if DASHPAY UsernameRequestsDAOImpl.shared.deleteAll() diff --git a/DashWallet/Sources/Categories/Foundation+Bitcoin.swift b/DashWallet/Sources/Categories/Foundation+Bitcoin.swift index 30de7fb8b..a70f2d105 100644 --- a/DashWallet/Sources/Categories/Foundation+Bitcoin.swift +++ b/DashWallet/Sources/Categories/Foundation+Bitcoin.swift @@ -22,6 +22,23 @@ extension Data { let rawValue: Int static let upperCase = HexEncodingOptions(rawValue: 1 << 0) } + + init?(hex: String) { + let len = hex.count / 2 + var data = Data(capacity: len) + var i = hex.startIndex + for _ in 0.. String { let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx" diff --git a/DashWallet/Sources/Infrastructure/Database/DatabaseConnection.swift b/DashWallet/Sources/Infrastructure/Database/DatabaseConnection.swift index 272ae576c..5be4286e1 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(), AddIconBitmapsTable()] } static func migrationsBundle() -> Bundle { diff --git a/DashWallet/Sources/Infrastructure/Database/Migrations.bundle/20250418145536_more_metadata_tx_userinfo.sql b/DashWallet/Sources/Infrastructure/Database/Migrations.bundle/20250418145536_more_metadata_tx_userinfo.sql new file mode 100644 index 000000000..abf002c7c --- /dev/null +++ b/DashWallet/Sources/Infrastructure/Database/Migrations.bundle/20250418145536_more_metadata_tx_userinfo.sql @@ -0,0 +1,5 @@ +-- Adding metadata fields to tx_userinfo table +ALTER TABLE tx_userinfo ADD timestamp BIGINT NULL; +ALTER TABLE tx_userinfo ADD memo TEXT NULL; +ALTER TABLE tx_userinfo ADD service TEXT NULL; +ALTER TABLE tx_userinfo ADD customIconId BLOB NULL; \ No newline at end of file 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/Infrastructure/Database/Migrations/AddIconBitmapsTable.swift b/DashWallet/Sources/Infrastructure/Database/Migrations/AddIconBitmapsTable.swift new file mode 100644 index 000000000..6362860f1 --- /dev/null +++ b/DashWallet/Sources/Infrastructure/Database/Migrations/AddIconBitmapsTable.swift @@ -0,0 +1,34 @@ +// +// 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 AddIconBitmapsTable: Migration { + var version: Int64 = 20250114130000 + + func migrateDatabase(_ db: Connection) throws { + try db.run(IconBitmap.table.create(ifNotExists: true) { t in + t.column(IconBitmap.id, primaryKey: true) + t.column(IconBitmap.imageData) + t.column(IconBitmap.originalUrl) + t.column(IconBitmap.height) + t.column(IconBitmap.width) + }) + } +} \ No newline at end of file diff --git a/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift b/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift index d9985454b..f2e1bbfae 100644 --- a/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift +++ b/DashWallet/Sources/Infrastructure/Database/Migrations/SeedDB.swift @@ -3,7 +3,7 @@ import SQLite import SQLiteMigrationManager struct SeedDB: Migration { - var version: Int64 = 20241130210940 + var version: Int64 = 20250418145536 func migrateDatabase(_ db: Connection) throws { } } diff --git a/DashWallet/Sources/Models/CoinJoin/CoinJoinMixingTxSet.swift b/DashWallet/Sources/Models/CoinJoin/CoinJoinMixingTxSet.swift index d28efae85..4ba8731db 100644 --- a/DashWallet/Sources/Models/CoinJoin/CoinJoinMixingTxSet.swift +++ b/DashWallet/Sources/Models/CoinJoin/CoinJoinMixingTxSet.swift @@ -16,19 +16,19 @@ // final class CoinJoinMixingTxSet: GroupedTransactions, TransactionWrapper { - override var title: String { + var title: String { NSLocalizedString("Mixing Transactions", comment: "CoinJoin") } - override var iconName: String { + var iconName: String { "tx.item.coinjoin.icon" } - override var infoText: String { + var infoText: String { NSLocalizedString("You Dash was mixed using these transactions.", comment: "CoinJoin") } - override var fiatAmount: String { + var fiatAmount: String { (try? CurrencyExchanger.shared.convertDash(amount: (UInt64(abs(amount))).dashAmount, to: App.fiatCurrency).formattedFiatAmount) ?? NSLocalizedString("Updating Price", comment: "Updating Price") } @@ -37,15 +37,23 @@ final class CoinJoinMixingTxSet: GroupedTransactions, TransactionWrapper { private let account = DWEnvironment.sharedInstance().currentAccount private let amountQueue = DispatchQueue(label: "CoinJoinMixingSet.amount", qos: .utility) private let amountLock = NSLock() + private let txMapLock = NSLock() private var _amount: Int64 = 0 - override var amount: Int64 { + var amount: Int64 { return _amount } - var transactionMap: [Data: Transaction] = [:] - override var transactions: [Transaction] { + private var _transactionMap: [Data: Transaction] = [:] + var transactionMap: [Data: Transaction] { + txMapLock.lock() + defer { txMapLock.unlock() } + return _transactionMap + } + var transactions: [Transaction] { get { - return transactionMap.values.map { $0 }.sorted { tx1, tx2 in + txMapLock.lock() + defer { txMapLock.unlock() } + return _transactionMap.values.map { $0 }.sorted { tx1, tx2 in tx1.date > tx2.date } } @@ -63,27 +71,36 @@ final class CoinJoinMixingTxSet: GroupedTransactions, TransactionWrapper { @discardableResult func tryInclude(tx: DSTransaction) -> Bool { let txHashData = tx.txHashData - let existing = transactionMap[txHashData] as? CoinJoinTransaction + + txMapLock.lock() + let existing = _transactionMap[txHashData] as? CoinJoinTransaction if existing != nil { - transactionMap[txHashData] = CoinJoinTransaction(transaction: tx, type: existing!.type) + _transactionMap[txHashData] = CoinJoinTransaction(transaction: tx, type: existing!.type) + txMapLock.unlock() // Already included, return true return true } let type = DSCoinJoinWrapper.coinJoinTxType(for: tx, account: account) - if type == CoinJoinTransactionType_None { + if type == CoinJoinTransactionType_None || type == CoinJoinTransactionType_Send { + txMapLock.unlock() return false } - if transactions.isEmpty { + let isEmpty = _transactionMap.isEmpty + txMapLock.unlock() + + if isEmpty { groupDay = tx.date } else if !Calendar.current.isDate(tx.date, inSameDayAs: groupDay) { return false } - transactionMap[txHashData] = CoinJoinTransaction(transaction: tx, type: type) + txMapLock.lock() + _transactionMap[txHashData] = CoinJoinTransaction(transaction: tx, type: type) + txMapLock.unlock() amountQueue.async { [weak self] in guard let self = self else { return } diff --git a/DashWallet/Sources/Models/CoinJoin/CoinJoinTransaction.swift b/DashWallet/Sources/Models/CoinJoin/CoinJoinTransaction.swift index b8295e861..ab1616ceb 100644 --- a/DashWallet/Sources/Models/CoinJoin/CoinJoinTransaction.swift +++ b/DashWallet/Sources/Models/CoinJoin/CoinJoinTransaction.swift @@ -33,8 +33,6 @@ class CoinJoinTransaction: Transaction { NSLocalizedString("CoinJoin Mixing Fee", comment: "CoinJoin") case CoinJoinTransactionType_Mixing: NSLocalizedString("CoinJoin Mixing", comment: "CoinJoin") - case CoinJoinTransactionType_Send: - NSLocalizedString("CoinJoin Send", comment: "CoinJoin") default: "" } diff --git a/DashWallet/Sources/Models/CrowdNode/Services/SendCoinsService.swift b/DashWallet/Sources/Models/CrowdNode/Services/SendCoinsService.swift deleted file mode 100644 index d0056f07d..000000000 --- a/DashWallet/Sources/Models/CrowdNode/Services/SendCoinsService.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// Created by Andrei Ashikhmin -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Combine - -public final class SendCoinsService { - private let transactionManager: DSTransactionManager = DWEnvironment.sharedInstance().currentChainManager.transactionManager - - func sendCoins(address: String, amount: UInt64, - inputSelector: SingleInputAddressSelector? = nil, adjustAmountDownwards: Bool = false) async throws - -> DSTransaction { - let chain = DWEnvironment.sharedInstance().currentChain - let account = DWEnvironment.sharedInstance().currentAccount - let transaction = DSTransaction(on: chain) - - if inputSelector == nil { - // Forming transaction normally - let script = NSData.scriptPubKey(forAddress: address, for: chain) - account.update(transaction, forAmounts: [amount], toOutputScripts: [script], withFee: true) - } - else { - // Selecting proper inputs - let balance = inputSelector!.selectFor(tx: transaction) - transaction.addOutputAddress(address, amount: amount) - let feeAmount = chain.fee(forTxSize: UInt(transaction.size) + UInt(TX_OUTPUT_SIZE)) - - if amount + feeAmount > balance { - if adjustAmountDownwards { - let adjustedAmount = amount - feeAmount - let adjustedTx = try await sendCoins(address: address, amount: adjustedAmount, inputSelector: inputSelector) - return adjustedTx - } else { - throw Error.notEnoughFunds(selected: balance, amount: amount, fee: feeAmount) - } - } - - let change = balance - (amount + feeAmount) - - if change > 0 { - let changeAddress = inputSelector!.address - transaction.addOutputAddress(changeAddress, amount: change) - transaction.sortOutputsAccordingToBIP69() - } - } - - await account.sign(transaction) - account.register(transaction, saveImmediately: false) - try await transactionManager.publishTransaction(transaction) - - return transaction - } -} diff --git a/DashWallet/Sources/Models/CrowdNode/TxFilters/FullCrowdNodeSignUpTxSet.swift b/DashWallet/Sources/Models/CrowdNode/TxFilters/FullCrowdNodeSignUpTxSet.swift index 7b6351268..6a880381b 100644 --- a/DashWallet/Sources/Models/CrowdNode/TxFilters/FullCrowdNodeSignUpTxSet.swift +++ b/DashWallet/Sources/Models/CrowdNode/TxFilters/FullCrowdNodeSignUpTxSet.swift @@ -16,19 +16,19 @@ // final class FullCrowdNodeSignUpTxSet: GroupedTransactions, TransactionWrapper { - override var title: String { + var title: String { NSLocalizedString("CrowdNode · Account", comment: "CrowdNode") } - override var iconName: String { + var iconName: String { "tx.item.cn.icon" } - override var infoText: String { + var infoText: String { NSLocalizedString("Your CrowdNode account was created using these transactions.", comment: "Crowdnode") } - override var fiatAmount: String { + var fiatAmount: String { (try? CurrencyExchanger.shared.convertDash(amount: UInt64(abs(amount)).dashAmount, to: App.fiatCurrency).formattedFiatAmount) ?? NSLocalizedString("Updating Price", comment: "Updating Price") } @@ -37,20 +37,31 @@ final class FullCrowdNodeSignUpTxSet: GroupedTransactions, TransactionWrapper { private let savedAccountAddress = CrowdNodeDefaults.shared.accountAddress private let januaryFirst2022 = 1640995200.0 // Safe to assume there weren't any CrowdNode accounts before this point private var matchedFilters: [CoinsToAddressTxFilter] = [] + private let txMapLock = NSLock() - var transactionMap: [Data: Transaction] = [:] - override var transactions: [Transaction] { + private var _transactionMap: [Data: Transaction] = [:] + var transactionMap: [Data: Transaction] { + txMapLock.lock() + defer { txMapLock.unlock() } + return _transactionMap + } + + var transactions: [Transaction] { get { - return transactionMap.values.map { $0 }.sorted { tx1, tx2 in + txMapLock.lock() + defer { txMapLock.unlock() } + return _transactionMap.values.map { $0 }.sorted { tx1, tx2 in tx1.date > tx2.date } } } - private(set) var _amount: Int64 = 0 - override var amount: Int64 { _amount } + private var _amount: Int64 = 0 + var amount: Int64 { _amount } var isComplete: Bool { - transactionMap.count == 5 + txMapLock.lock() + defer { txMapLock.unlock() } + return _transactionMap.count == 5 } var welcomeToApiResponse: CoinsToAddressTxFilter? { @@ -85,11 +96,14 @@ final class FullCrowdNodeSignUpTxSet: GroupedTransactions, TransactionWrapper { let txHashData = tx.txHashData - if transactionMap[txHashData] != nil { - transactionMap[txHashData] = Transaction(transaction: tx) + txMapLock.lock() + if _transactionMap[txHashData] != nil { + _transactionMap[txHashData] = Transaction(transaction: tx) + txMapLock.unlock() // Already included, return true return true } + txMapLock.unlock() var crowdNodeTxFilters = [ CrowdNodeRequest(requestCode: ApiCode.signUp), @@ -103,7 +117,10 @@ final class FullCrowdNodeSignUpTxSet: GroupedTransactions, TransactionWrapper { } if let matchedFilter = crowdNodeTxFilters.first(where: { $0.matches(tx: tx) }) { - transactionMap[txHashData] = Transaction(transaction: tx) + txMapLock.lock() + _transactionMap[txHashData] = Transaction(transaction: tx) + txMapLock.unlock() + matchedFilters.append(matchedFilter) let dashAmount = tx.dashAmount diff --git a/DashWallet/Sources/Models/Explore Dash/ExploreDash.swift b/DashWallet/Sources/Models/Explore Dash/ExploreDash.swift index a65a6cfdb..83f0f046c 100644 --- a/DashWallet/Sources/Models/Explore Dash/ExploreDash.swift +++ b/DashWallet/Sources/Models/Explore Dash/ExploreDash.swift @@ -117,11 +117,27 @@ public class ExploreDash { removeCurrentDatabaseIfNeeded() let isFileExists = FileManager.default.fileExists(atPath: destinationPath.path) - guard !isFileExists else { return } + guard !isFileExists else { + // Check if existing database has old schema and remove it + if ExploreDatabaseConnection.hasOldMerchantIdSchema(at: destinationPath) { + try? FileManager.default.removeItem(at: destinationPath) + // Don't copy bundled database as it also has old schema + // Wait for new database to be downloaded + return + } + return + } guard let dbURL = Bundle.main.url(forResource: "explore", withExtension: "db") else { throw ExploreDatabaseConnectionError.fileNotFound } + + // Check if bundled database has old schema before copying + if ExploreDatabaseConnection.hasOldMerchantIdSchema(at: dbURL) { + // Don't copy bundled database with old schema + // Wait for new database to be downloaded + return + } try FileManager.default.copyItem(at: dbURL, to: destinationPath) @@ -151,26 +167,26 @@ public class ExploreDash { extension ExploreDash { func onlineMerchants(query: String?, onlineOnly: Bool, paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, - userPoint: CLLocationCoordinate2D?, offset: Int = 0, + sortBy: PointOfUseListFilters.SortBy?, userPoint: CLLocationCoordinate2D?, denominationType: PointOfUseListFilters.DenominationType?, offset: Int = 0, completion: @escaping (Swift.Result, Error>) -> Void) { - merchantDAO.onlineMerchants(query: query, onlineOnly: onlineOnly, userPoint: userPoint, paymentMethods: paymentMethods, offset: offset, completion: completion) + merchantDAO.onlineMerchants(query: query, onlineOnly: onlineOnly, userPoint: userPoint, sortBy: sortBy, paymentMethods: paymentMethods, denominationType: denominationType, offset: offset, completion: completion) } func nearbyMerchants(by query: String?, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, - paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, territory: Territory?, offset: Int = 0, + paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, territory: Territory?, denominationType: PointOfUseListFilters.DenominationType?, offset: Int = 0, completion: @escaping (Swift.Result, Error>) -> Void) { - merchantDAO.nearbyMerchants(by: query, in: bounds, userPoint: userPoint, paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, offset: offset, completion: completion) + merchantDAO.nearbyMerchants(by: query, in: bounds, userPoint: userPoint, paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, denominationType: denominationType, offset: offset, completion: completion) } func allMerchants(by query: String?, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, - territory: Territory?, offset: Int = 0, + territory: Territory?, denominationType: PointOfUseListFilters.DenominationType?, offset: Int = 0, completion: @escaping (Swift.Result, Error>) -> Void) { - merchantDAO.allMerchants(by: query, in: bounds, userPoint: userPoint, paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, offset: offset, completion: completion) + merchantDAO.allMerchants(by: query, in: bounds, userPoint: userPoint, paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, denominationType: denominationType, offset: offset, completion: completion) } - func allLocations(for merchantId: Int64, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, + func allLocations(for merchantId: String, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, completion: @escaping (Swift.Result, Error>) -> Void) { merchantDAO.allLocations(for: merchantId, in: bounds, userPoint: userPoint, completion: completion) } diff --git a/DashWallet/Sources/Models/Explore Dash/Infrastructure/DAO Impl/MerchantDAO.swift b/DashWallet/Sources/Models/Explore Dash/Infrastructure/DAO Impl/MerchantDAO.swift index de30146e5..350d8c96b 100644 --- a/DashWallet/Sources/Models/Explore Dash/Infrastructure/DAO Impl/MerchantDAO.swift +++ b/DashWallet/Sources/Models/Explore Dash/Infrastructure/DAO Impl/MerchantDAO.swift @@ -46,6 +46,7 @@ class MerchantDAO: PointOfUseDAO { paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, territory: Territory?, + denominationType: PointOfUseListFilters.DenominationType?, offset: Int, completion: @escaping (Swift.Result, Error>) -> Void) { serialQueue.async { [weak self] in @@ -70,6 +71,25 @@ class MerchantDAO: PointOfUseDAO { if let methods = paymentMethods { queryFilter = queryFilter && methods.map { $0.rawValue }.contains(paymentMethodColumn) } + + // Filter out URL-based redemption merchants (not supported) + // Using literal expression to handle cases where redeemType column might not exist + queryFilter = queryFilter && Expression(literal: "(redeemType IS NULL OR redeemType != 'url')") + + // Add denomination type filter (only applies to gift card merchants) + if let denominationType = denominationType { + switch denominationType { + case .fixed: + // Include all dash merchants OR gift card merchants with "fixed" denomination + queryFilter = queryFilter && (paymentMethodColumn == "dash" || Expression(literal: "denominationsType = 'fixed'")) + case .flexible: + // Include all dash merchants OR gift card merchants with "min-max" denomination + queryFilter = queryFilter && (paymentMethodColumn == "dash" || Expression(literal: "denominationsType = 'min-max'")) + case .both: + // No additional filter needed - include all + break + } + } if let territory { queryFilter = queryFilter && territoryColumn.like(territory) @@ -110,9 +130,21 @@ class MerchantDAO: PointOfUseDAO { } let nameOrdering = name.collate(.nocase).asc - - if let sortBy, sortBy == .name { - query = query.order(nameOrdering) + let discountOrdering = ExplorePointOfUse.savingPercentage.desc + + if let sortBy { + switch sortBy { + case .name: + query = query.order(nameOrdering) + case .distance: + if userLocation != nil { + query = query.order([distanceSorting, nameOrdering]) + } else { + query = query.order(nameOrdering) + } + case .discount: + query = query.order([discountOrdering, nameOrdering]) + } } else if userLocation != nil { query = query.order([distanceSorting, nameOrdering]) } else if bounds == nil && types.count == 3 { @@ -144,28 +176,28 @@ class MerchantDAO: PointOfUseDAO { } extension MerchantDAO { - func onlineMerchants(query: String?, onlineOnly: Bool, userPoint: CLLocationCoordinate2D?, - paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, offset: Int = 0, + func onlineMerchants(query: String?, onlineOnly: Bool, userPoint: CLLocationCoordinate2D?, sortBy: PointOfUseListFilters.SortBy?, + paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, denominationType: PointOfUseListFilters.DenominationType?, offset: Int = 0, completion: @escaping (Swift.Result, Error>) -> Void) { items(query: query, bounds: nil, userLocation: userPoint, types: [.online, .onlineAndPhysical], - paymentMethods: paymentMethods, sortBy: nil, territory: nil, offset: offset, completion: completion) + paymentMethods: paymentMethods, sortBy: sortBy, territory: nil, denominationType: denominationType, offset: offset, completion: completion) } func nearbyMerchants(by query: String?, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, - paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, territory: Territory?, offset: Int = 0, + paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, territory: Territory?, denominationType: PointOfUseListFilters.DenominationType?, offset: Int = 0, completion: @escaping (Swift.Result, Error>) -> Void) { items(query: query, bounds: bounds, userLocation: userPoint, types: [.physical, .onlineAndPhysical], - paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, offset: offset, completion: completion) + paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, denominationType: denominationType, offset: offset, completion: completion) } func allMerchants(by query: String?, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, - paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, territory: Territory?, offset: Int = 0, + paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod]?, sortBy: PointOfUseListFilters.SortBy?, territory: Territory?, denominationType: PointOfUseListFilters.DenominationType?, offset: Int = 0, completion: @escaping (Swift.Result, Error>) -> Void) { - items(query: query, bounds: bounds, userLocation: userPoint, types: [.online, .onlineAndPhysical, .physical], paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, offset: offset, + items(query: query, bounds: bounds, userLocation: userPoint, types: [.online, .onlineAndPhysical, .physical], paymentMethods: paymentMethods, sortBy: sortBy, territory: territory, denominationType: denominationType, offset: offset, completion: completion) } - func allLocations(for merchantId: Int64, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, + func allLocations(for merchantId: String, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, completion: @escaping (Swift.Result, Error>) -> Void) { serialQueue.async { [weak self] in guard let wSelf = self else { return } diff --git a/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift b/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift index 31ff726d5..0a3685dbe 100644 --- a/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift +++ b/DashWallet/Sources/Models/Explore Dash/Infrastructure/Database Connection/ExploreDatabaseConnection.swift @@ -39,16 +39,42 @@ class ExploreDatabaseConnection { try? self?.connect() } } + + static func hasOldMerchantIdSchema(at url: URL) -> Bool { + do { + let db = try Connection(url.path) + // Query the sqlite_master table to get the schema + let query = "SELECT sql FROM sqlite_master WHERE type='table' AND name='merchant'" + + if let row = try db.prepare(query).makeIterator().next(), + let sql = row[0] as? String { + // Check if merchantId is defined as INTEGER (old schema) + // New schema should have it as TEXT + return sql.contains("merchantId` INTEGER") || sql.contains("merchantId INTEGER") + } + } catch { + // If we can't check, assume it might be old to be safe + return true + } + return false + } func connect() throws { db = nil - guard let dbPath = dbPath() else { throw ExploreDatabaseConnectionError.fileNotFound } + guard let dbPath = dbPath() else { + // No database found - this is expected if we're waiting for v3 download + // Create an in-memory database to prevent crashes + db = try Connection(.inMemory) + return + } do { - db = try Connection(nil ?? dbPath) + db = try Connection(dbPath) } catch { print(error) + // Fallback to in-memory database if connection fails + db = try Connection(.inMemory) } } @@ -59,18 +85,34 @@ class ExploreDatabaseConnection { } func execute(query: QueryType) throws -> [Item] { - let items = try db.prepare(query) + guard db != nil else { return [] } + + do { + let items = try db.prepare(query) - var resultItems: [Item] = [] + var resultItems: [Item] = [] - for item in items { - resultItems.append(Item(row: item)) - } + for item in items { + resultItems.append(Item(row: item)) + } - return resultItems + return resultItems + } catch { + // If query fails (e.g., table doesn't exist in in-memory db), return empty array + print("Database query failed: \(error)") + return [] + } } func execute(query: String) throws -> [Item] { - try db.prepareRowIterator(query).map { Item(row: $0) } + guard db != nil else { return [] } + + do { + return try db.prepareRowIterator(query).map { Item(row: $0) } + } catch { + // If query fails (e.g., table doesn't exist in in-memory db), return empty array + print("Database query failed: \(error)") + return [] + } } } diff --git a/DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h b/DashWallet/Sources/Models/Explore Dash/Model/CTXConstants.swift similarity index 60% rename from DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h rename to DashWallet/Sources/Models/Explore Dash/Model/CTXConstants.swift index 00e1da24c..98363b9ae 100644 --- a/DashWallet/Sources/UI/Home/DWHomeViewControllerDelegate.h +++ b/DashWallet/Sources/Models/Explore Dash/Model/CTXConstants.swift @@ -1,6 +1,6 @@ // -// Created by PT -// Copyright © 2023 Dash Core Group. All rights reserved. +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. // // Licensed under the MIT License (the "License"); // you may not use this file except in compliance with the License. @@ -15,15 +15,8 @@ // limitations under the License. // -#import - -#ifndef DWHomeViewControllerDelegate_h -#define DWHomeViewControllerDelegate_h - -@protocol DWHomeViewControllerDelegate - -- (void)showPaymentsControllerWithActivePage:(NSInteger)pageIndex; - -@end - -#endif /* DWHomeViewControllerDelegate_h */ +class CTXConstants { + static let baseURI = "https://spend.ctx.com/" + static let ctxGiftCardAgreementUrl = "https://ctx.com/gift-card-agreement/" + static let supportEmail = "support@ctx.com" +} 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..5bd8e9dae --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Model/DAO/GiftCardsDAO.swift @@ -0,0 +1,273 @@ +// +// 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 { + var giftCardTxIdPublisher: AnyPublisher { get } + + func create(dto: GiftCard) async + func get(byTxId txId: Data) async -> GiftCard? + func observeAll() -> AnyPublisher<[GiftCard], Never> + 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] = [:] + @Published private var giftCardTxId: Data? + private var allCardsSubject = CurrentValueSubject<[GiftCard], Never>([]) + + var giftCardTxIdPublisher: AnyPublisher { + $giftCardTxId.eraseToAnyPublisher() + } + + static let shared = GiftCardsDAOImpl() + + override init() { + super.init() + Task { + await loadAllCards() + } + } + + 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.giftCardTxId = dto.txId + updateAllCardsSubject() + } 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 observeAll() -> AnyPublisher<[GiftCard], Never> { + return allCardsSubject.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 + self.giftCardTxId = txId + updateAllCardsSubject() + } + } 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 + self.giftCardTxId = txId + updateAllCardsSubject() + } + } catch { + print(error) + } + } + + func delete(byTxId txId: Data) async { + let key = txId.hexEncodedString() + self.cache[key] = nil + self.giftCardTxId = txId + + do { + let deleteQuery = GiftCard.table.filter(GiftCard.txId == txId).delete() + try await execute(deleteQuery) + updateAllCardsSubject() + } catch { + print(error) + } + } + + func all() async -> [GiftCard] { + do { + return try await prepare(GiftCard.table) + } catch { + print(error) + } + + return [] + } + + private func loadAllCards() async { + let cards = await all() + cache.removeAll() + for card in cards { + let key = card.txId.hexEncodedString() + cache[key] = card + } + updateAllCardsSubject() + } + + private func updateAllCardsSubject() { + let allCards = Array(cache.values) + allCardsSubject.send(allCards) + } +} + +// 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) + } + } + } + } +} diff --git a/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift b/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift new file mode 100644 index 000000000..189a9aeb4 --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Model/Entites/CTXSpendModels.swift @@ -0,0 +1,152 @@ +// +// 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 + +// MARK: - Request Models + +struct LoginRequest: Codable { + let email: String +} + +struct VerifyEmailRequest: Codable { + let email: String + let code: String +} + +public struct RefreshTokenRequest: Codable { + let refreshToken: String +} + +public struct PurchaseGiftCardRequest: Codable { + let cryptoCurrency: String + let fiatCurrency: String + let fiatAmount: String + let merchantId: String +} + +// MARK: - Response Models + +struct VerifyEmailResponse: Codable { + let accessToken: String + let refreshToken: String +} + +struct RefreshTokenResponse: Codable { + let accessToken: String + let refreshToken: String +} + +struct GiftCardResponse: Codable { + let id: 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 paymentId: String + let percentDiscount: String + let rate: String + let redeemUrl: String? + let fiatAmount: String? + let fiatCurrency: String? + let paymentUrls: [String: String]? + + let cardFiatAmount: String? + let cardFiatCurrency: String? + let userId: String? + let merchantName: String? + let userEmail: String? + let created: String? + let info: MerchantInfo? + + enum CodingKeys: String, CodingKey { + case id + case status + case barcodeUrl + case cardNumber = "number" + case cardPin = "pin" + case cryptoAmount = "paymentCryptoAmount" + case cryptoCurrency = "paymentCryptoCurrency" + case paymentCryptoNetwork + case paymentId + case percentDiscount + case rate + case redeemUrl + case fiatAmount = "paymentFiatAmount" + case fiatCurrency = "paymentFiatCurrency" + case paymentUrls + case cardFiatAmount + case cardFiatCurrency + case userId + case merchantName + case userEmail + case created + case info + } +} + +struct MerchantResponse: Codable { + let id: String + let name: String + let logoUrl: String + let enabled: Bool + let savingsPercentage: Int + let denominationsType: String + let denominations: [String] + let cachedLocationCount: Int + let mapPinUrl: String + let type: String + let redeemType: String + let info: MerchantInfo + let cardImageUrl: String + let currency: String + + var minimumCardPurchase: Double { + guard denominations.count >= 1, let min = Double(denominations[0]) else { return 0.0 } + return min + } + + var maximumCardPurchase: Double { + guard denominations.count >= 2, let max = Double(denominations[1]) else { return 0.0 } + return max + } + + var denominationType: DenominationType { + switch denominationsType { + case "min-max": + return .Range + default: + return .Fixed + } + } +} + +struct MerchantInfo: Codable { + let terms: String + let description: String + let instructions: String + let intro: String +} + +enum DenominationType: String, Codable { + case Range = "min-max" + case Fixed = "fixed" +} diff --git a/DashWallet/Sources/Models/Explore Dash/Model/Entites/ExplorePointOfUse.swift b/DashWallet/Sources/Models/Explore Dash/Model/Entites/ExplorePointOfUse.swift index daf9ec686..d4ab4ff9c 100644 --- a/DashWallet/Sources/Models/Explore Dash/Model/Entites/ExplorePointOfUse.swift +++ b/DashWallet/Sources/Models/Explore Dash/Model/Entites/ExplorePointOfUse.swift @@ -53,10 +53,33 @@ extension ExplorePointOfUse { case onlineAndPhysical = "both" } - let merchantId: Int64 + let merchantId: String let paymentMethod: PaymentMethod let type: `Type` let deeplink: String? + let savingsBasisPoints: Int // in basis points 1 = 0.001% + let denominationsType: String? + let denominations: [Int] + let redeemType: String? + + init(merchantId: String, paymentMethod: PaymentMethod, type: `Type`, deeplink: String?, savingsBasisPoints: Int, denominationsType: String?, denominations: [Int] = [], redeemType: String?) { + self.merchantId = merchantId + self.paymentMethod = paymentMethod + self.type = type + self.deeplink = deeplink + self.savingsBasisPoints = savingsBasisPoints + self.denominationsType = denominationsType + self.denominations = denominations + self.redeemType = redeemType + } + + func toSavingPercentages() -> Double { + return Double(savingsBasisPoints) / 100 + } + + func toSavingsFraction() -> Double { + return Double(savingsBasisPoints) / 10000 + } } var merchant: Merchant? { @@ -71,14 +94,14 @@ extension ExplorePointOfUse { return atm } - var pointOfUseId: Int64 { + var pointOfUseId: String { switch category { case .merchant(let m): return m.merchantId case .atm(let atm): - return Int64(atm.manufacturer.hashValue) + return atm.manufacturer case .unknown: - return Int64.max + return "" } } @@ -163,7 +186,7 @@ extension ExplorePointOfUse: RowDecodable { static let deeplink = Expression("deeplink") static let plusCode = Expression("plusCode") static let paymentMethod = Expression("paymentMethod") - static let merchantId = Expression("merchantId") + static let merchantId = Expression("merchantId") static let id = Expression("id") static let active = Expression("active") static let city = Expression("city") @@ -181,7 +204,9 @@ extension ExplorePointOfUse: RowDecodable { static let type = Expression("type") static let source = Expression("source") static let manufacturer = Expression("manufacturer") - + static let savingPercentage = Expression("savingsPercentage") + static let denominationsType = Expression("denominationsType") + static let redeemType = Expression("redeemType") init(row: Row) { let name = row[ExplorePointOfUse.name] @@ -217,9 +242,11 @@ extension ExplorePointOfUse: RowDecodable { let merchantId = row[ExplorePointOfUse.merchantId] let type: Merchant.`Type`! = .init(rawValue: row[ExplorePointOfUse.type]) let deeplink = row[ExplorePointOfUse.deeplink] - category = .merchant(Merchant(merchantId: merchantId, - paymentMethod: Merchant.PaymentMethod(rawValue: paymentMethodRaw)!, type: type, - deeplink: deeplink)) + let savingsPercentage = row[ExplorePointOfUse.savingPercentage] + let denominationsType = row[ExplorePointOfUse.denominationsType] + let redeemType = row[ExplorePointOfUse.redeemType] + category = .merchant(Merchant(merchantId: merchantId, paymentMethod: Merchant.PaymentMethod(rawValue: paymentMethodRaw)!, + type: type, deeplink: deeplink, savingsBasisPoints: savingsPercentage, denominationsType: denominationsType, denominations: [], redeemType: redeemType)) } else if let manufacturer = try? row.get(ExplorePointOfUse.manufacturer) { let type: Atm.`Type`! = .init(rawValue: row[ExplorePointOfUse.type]) category = .atm(Atm(manufacturer: manufacturer, type: type)) 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/CTXSpendAPI.swift b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendAPI.swift new file mode 100644 index 000000000..0f46a711a --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendAPI.swift @@ -0,0 +1,164 @@ +// +// 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 Moya + +enum CTXSpendError: Error, LocalizedError { + case networkError + case parsingError + case invalidCode + case unauthorized + case tokenRefreshFailed + case insufficientFunds + case invalidMerchant + case invalidAmount + case merchantUnavailable + case transactionRejected + case purchaseLimitExceeded + case serverError + case customError(String) + case unknown + case paymentProcessingError(String) + + public var errorDescription: String? { + switch self { + case .networkError: + return NSLocalizedString("Network error. Please check your connection and try again.", comment: "DashSpend") + case .parsingError: + return NSLocalizedString("Error processing server response. Please try again later.", comment: "DashSpend") + case .invalidCode: + return NSLocalizedString("Invalid verification code. Please try again.", comment: "CTXSpend error") + case .unauthorized: + return NSLocalizedString("Please sign in to your DashSpend account.", comment: "DashSpend") + case .tokenRefreshFailed: + return NSLocalizedString("Your session expired", comment: "DashSpend") + case .insufficientFunds: + return NSLocalizedString("You do not have sufficient funds to complete this transaction", comment: "DashSpend") + case .invalidMerchant: + return NSLocalizedString("This merchant is currently unavailable.", comment: "DashSpend") + case .invalidAmount: + return NSLocalizedString("Invalid amount. Please check merchant limits.", comment: "DashSpend") + case .merchantUnavailable: + return NSLocalizedString("This merchant is currently unavailable. Please try again later or choose a different merchant.", comment: "DashSpend") + case .transactionRejected: + return NSLocalizedString("Your transaction was rejected. Please try again or contact support if the problem persists.", comment: "DashSpend") + case .purchaseLimitExceeded: + return NSLocalizedString("The purchase limits for this merchant have changed. Please contact CTX Support for more information.", comment: "DashSpend") + case .serverError: + return NSLocalizedString("Server error occurred. Please try again later.", comment: "DashSpend") + case .customError(let message): + return message + case .unknown: + return NSLocalizedString("An unknown error occurred. Please try again later.", comment: "DashSpend") + case .paymentProcessingError(let details): + return String(format: NSLocalizedString("Payment processing error: %@", comment: "DashSpend"), details) + } + } +} + +protocol CTXSpendAPIAccessTokenProvider: AnyObject { + var accessToken: String? { get } + var refreshToken: String? { get } +} + +final class CTXSpendAPI: HTTPClient { + weak var ctxSpendAPIAccessTokenProvider: CTXSpendAPIAccessTokenProvider! + + override func request(_ target: CTXSpendEndpoint) async throws { + do { + try checkAccessTokenIfNeeded(for: target) + try await super.request(target) + } catch HTTPClientError.statusCode(let r) where r.statusCode == 401 { + try await handleUnauthorizedError(for: target) + try await super.request(target) + } + } + + override func request(_ target: CTXSpendEndpoint) async throws -> R where R: Decodable { + do { + try checkAccessTokenIfNeeded(for: target) + return try await super.request(target) + } catch HTTPClientError.statusCode(let r) where r.statusCode == 401 { + try await handleUnauthorizedError(for: target) + return try await super.request(target) + } catch HTTPClientError.statusCode(let r) where r.statusCode == 400 { + if target.path.contains("/api/verify") { + throw CTXSpendError.invalidCode + } + throw CTXSpendError.invalidAmount + } catch HTTPClientError.statusCode(let r) where r.statusCode == 409 { + throw CTXSpendError.transactionRejected + } catch HTTPClientError.statusCode(let r) where r.statusCode == 422 { + throw CTXSpendError.invalidAmount + } catch HTTPClientError.statusCode(let r) where r.statusCode >= 500 { + throw CTXSpendError.serverError + } catch HTTPClientError.decoder { + throw CTXSpendError.parsingError + } + } + + // Direct request method that bypasses refresh logic (used by token service) + func requestDirectly(_ target: CTXSpendEndpoint) async throws -> R where R: Decodable { + return try await super.request(target) + } + + func requestDirectly(_ target: CTXSpendEndpoint) async throws { + try await super.request(target) + } + + private func handleUnauthorizedError(for target: CTXSpendEndpoint) async throws { + guard target.authorizationType == .bearer else { + throw CTXSpendError.unauthorized + } + + try await CTXSpendTokenService.shared.refreshAccessToken() + + // Update the access token provider after refresh + accessTokenProvider = { [weak self] in + self?.ctxSpendAPIAccessTokenProvider?.accessToken + } + } + + private func checkAccessTokenIfNeeded(for target: CTXSpendEndpoint) throws { + guard target.authorizationType == .bearer else { + return + } + + guard let _ = accessTokenProvider?() else { + throw CTXSpendError.unauthorized + } + } + + static var shared = CTXSpendAPI() + + static func initialize(with ctxSpendAPIAccessTokenProvider: CTXSpendAPIAccessTokenProvider) { + shared.initialize(with: ctxSpendAPIAccessTokenProvider) + } + + private func initialize(with ctxSpendAPIAccessTokenProvider: CTXSpendAPIAccessTokenProvider) { + accessTokenProvider = { [weak ctxSpendAPIAccessTokenProvider] in + ctxSpendAPIAccessTokenProvider!.accessToken + } + self.ctxSpendAPIAccessTokenProvider = ctxSpendAPIAccessTokenProvider + + // Configure the token service + if let tokenProvider = ctxSpendAPIAccessTokenProvider as? CTXSpendTokenProvider { + CTXSpendTokenService.shared.configure(with: tokenProvider) + } + } +} diff --git a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift new file mode 100644 index 000000000..868966e98 --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendEndpoint.swift @@ -0,0 +1,137 @@ +// +// 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 Moya + +private let kBaseURL = URL(string: CTXConstants.baseURI)! + +// MARK: - CTXSpendAPIError + +struct CTXSpendAPIError: Decodable { + struct Error: Swift.Error, LocalizedError, Decodable { + let id: String? + let message: String + + var errorDescription: String? { + message + } + } + + struct FieldError: Decodable { + let fiatAmount: [String]? + } + + var errors: [Error] + let fields: FieldError? +} + +// MARK: - CTXSpendEndpoint + +public enum CTXSpendEndpoint { + case login(email: String) + case verifyEmail(email: String, code: String) + case refreshToken(RefreshTokenRequest) + case purchaseGiftCard(PurchaseGiftCardRequest) + case getMerchant(String) + case getGiftCard(String) +} + +// MARK: TargetType, AccessTokenAuthorizable + +extension CTXSpendEndpoint: TargetType, AccessTokenAuthorizable { + public var authorizationType: Moya.AuthorizationType? { + switch self { + case .login, .verifyEmail, .refreshToken: + return nil + default: + return .bearer + } + } + + public var baseURL: URL { + return kBaseURL + } + + public var path: String { + switch self { + case .login: return "login" + case .verifyEmail: return "verify-email" + case .refreshToken: return "refresh-token" + case .purchaseGiftCard: return "gift-cards" + case .getMerchant(let merchantId): return "merchants/\(merchantId)" + case .getGiftCard(_): return "gift-cards" + } + } + + public var method: Moya.Method { + switch self { + case .login, .verifyEmail, .refreshToken, .purchaseGiftCard: + return .post + default: + return .get + } + } + + public var task: Moya.Task { + switch self { + case .login(let email): + let loginRequest = LoginRequest(email: email) + return .requestJSONEncodable(loginRequest) + case .verifyEmail(let email, let code): + let verifyRequest = VerifyEmailRequest(email: email, code: code) + return .requestJSONEncodable(verifyRequest) + case .refreshToken(let request): + 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 + } + } + + public var headers: [String: String]? { + var headers = ["Content-Type": "application/json"] + + if let lang = Locale.current.languageCode { + headers["Accept-Language"] = lang + } + + return headers + } +} + +extension Moya.Response { + var ctxError: CTXSpendAPIError? { + let jsonDecoder = JSONDecoder() + + do { + let result = try jsonDecoder.decode(CTXSpendAPIError.self, from: data) + return result + } catch { + return nil + } + } + + var ctxErrorDescription: String? { + guard let error = ctxError else { return nil } + + return String(describing: error.errors) + } +} diff --git a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendService.swift b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendService.swift new file mode 100644 index 000000000..338f948f5 --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendService.swift @@ -0,0 +1,284 @@ +// +// 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 CTXSpendService: CTXSpendAPIAccessTokenProvider, CTXSpendTokenProvider, ObservableObject { + public static let shared: CTXSpendService = .init() + private let userDefaults = UserDefaults.standard + + private enum Keys { + static let accessToken = "ctx_spend_access_token" + static let refreshToken = "ctx_spend_refresh_token" + static let email = "ctx_spend_email" + static let deviceUUID = "ctx_spend_device_uuid" + } + + var accessToken: String? { + return KeychainService.load(key: Keys.accessToken) + } + + var refreshToken: String? { + return KeychainService.load(key: Keys.refreshToken) + } + + var userEmail: String? { + KeychainService.load(key: Keys.email) + } + + @Published private(set) var isUserSignedIn = false + + init() { + CTXSpendAPI.initialize(with: self) + updateSignInState() + } + + private func updateSignInState() { + let token = accessToken + isUserSignedIn = token != nil && !token!.isEmpty + } + + func signIn(email: String) async throws -> Bool { + do { + try await CTXSpendAPI.shared.request(.login(email: email)) + KeychainService.save(key: Keys.email, data: email) + + if userDefaults.string(forKey: Keys.deviceUUID) == nil { + userDefaults.set(UUID().uuidString, forKey: Keys.deviceUUID) + } + + return true + } catch { + throw mapError(error) + } + } + + func verifyEmail(code: String) async throws -> Bool { + guard let email = userEmail else { + DSLogger.log("CTX: email is missing while trying to verify") + throw CTXSpendError.unknown + } + + do { + let response: VerifyEmailResponse = try await CTXSpendAPI.shared.request(.verifyEmail(email: email, code: code)) + + KeychainService.save(key: Keys.accessToken, data: response.accessToken) + KeychainService.save(key: Keys.refreshToken, data: response.refreshToken) + updateSignInState() + + return true + } catch { + throw mapError(error) + } + } + + func logout() { + KeychainService.delete(key: Keys.accessToken) + KeychainService.delete(key: Keys.refreshToken) + KeychainService.delete(key: Keys.email) + userDefaults.removeObject(forKey: Keys.deviceUUID) + updateSignInState() + } + + // MARK: - Token Management + + func updateTokens(accessToken: String, refreshToken: String) { + KeychainService.save(key: Keys.accessToken, data: accessToken) + KeychainService.save(key: Keys.refreshToken, data: refreshToken) + updateSignInState() + } + + func clearTokensOnRefreshFailure() { + KeychainService.delete(key: Keys.accessToken) + KeychainService.delete(key: Keys.refreshToken) + updateSignInState() + } + + func refreshToken() async throws { + try await CTXSpendTokenService.shared.refreshAccessToken() + } + + // MARK: - Gift Card Methods + + func purchaseGiftCard(merchantId: String, fiatAmount: String, fiatCurrency: String = "USD", cryptoCurrency: String = "DASH") async throws -> GiftCardResponse { + let request = PurchaseGiftCardRequest( + cryptoCurrency: cryptoCurrency, + fiatCurrency: fiatCurrency, + fiatAmount: fiatAmount, + merchantId: merchantId + ) + + do { + return try await CTXSpendAPI.shared.request(.purchaseGiftCard(request)) + } catch let error as CTXSpendError { + DSLogger.log("Gift card purchase failed with CTXSpendError: \(error)") + throw error + } catch let error as HTTPClientError { + DSLogger.log("Gift card purchase failed with HTTPClientError: \(error)") + + if case .statusCode(let response) = error { + switch response.statusCode { + case 400: + if let errorData = try? JSONDecoder().decode(CTXSpendAPIError.self, from: response.data) { + // Check for limit errors first + if let fiatAmountErrors = errorData.fields?.fiatAmount, + let firstFiatError = fiatAmountErrors.first { + if firstFiatError == "above threshold" || firstFiatError == "below threshold" { + throw CTXSpendError.purchaseLimitExceeded + } + } + + if let firstError = errorData.errors.first { + // Look for specific error messages + let errorMessage = firstError.message.lowercased() + + if errorMessage.contains("insufficient") || errorMessage.contains("funds") || errorMessage.contains("balance") { + throw CTXSpendError.insufficientFunds + } else if errorMessage.contains("merchant") && (errorMessage.contains("unavailable") || errorMessage.contains("disabled") || errorMessage.contains("suspended")) { + throw CTXSpendError.merchantUnavailable + } else if errorMessage.contains("merchant") { + throw CTXSpendError.invalidMerchant + } else if errorMessage.contains("rejected") || errorMessage.contains("declined") { + throw CTXSpendError.transactionRejected + } else if errorMessage.contains("amount") || errorMessage.contains("value") || errorMessage.contains("limit") { + throw CTXSpendError.invalidAmount + } + + // Custom error with the actual message from API + throw CTXSpendError.customError(firstError.message) + } + } + case 401, 403: + throw CTXSpendError.unauthorized + case 404: + throw CTXSpendError.invalidMerchant + case 409: + // Conflict - usually means duplicate transaction or similar + throw CTXSpendError.transactionRejected + case 422: + // Unprocessable Entity - validation errors + throw CTXSpendError.invalidAmount + case 500...599: + throw CTXSpendError.serverError + default: + break + } + } + + throw CTXSpendError.unknown + } catch { + DSLogger.log("Gift card purchase failed with error: \(error)") + throw CTXSpendError.networkError + } + } + + func getMerchant(merchantId: String) async throws -> MerchantResponse { + do { + let response: MerchantResponse = try await CTXSpendAPI.shared.request(.getMerchant(merchantId)) + return response + } catch let error as CTXSpendError { + DSLogger.log("Failed to get merchant with CTXSpendError: \(error)") + throw error + } catch let error as HTTPClientError { + DSLogger.log("Failed to get merchant with HTTPClientError: \(error)") + + if case .statusCode(let response) = error { + switch response.statusCode { + case 401, 403: + throw CTXSpendError.unauthorized + case 404: + throw CTXSpendError.invalidMerchant + case 500...599: + throw CTXSpendError.networkError + default: + break + } + } + + throw CTXSpendError.unknown + } catch { + DSLogger.log("Failed to get merchant with error: \(error)") + throw CTXSpendError.networkError + } + } + + func getGiftCardByTxid(txid: String) async throws -> GiftCardResponse { + do { + return try await CTXSpendAPI.shared.request(.getGiftCard(txid)) + } catch { + throw mapError(error) + } + } + + // MARK: - Helper Methods + + private func mapError(_ error: Error) -> Error { + if let ctxError = error as? CTXSpendError { + return ctxError + } + + return CTXSpendError.networkError + } +} + +// MARK: - KeychainService + +public class KeychainService { + static func save(key: String, data: String) { + if let dataToStore = data.data(using: .utf8) { + let query = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrAccount as String: key, + kSecValueData as String: dataToStore + ] as [String: Any] + + SecItemDelete(query as CFDictionary) + SecItemAdd(query as CFDictionary, nil) + } + } + + static func load(key: String) -> String? { + let query = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrAccount as String: key, + kSecReturnData as String: kCFBooleanTrue!, + kSecMatchLimit as String: kSecMatchLimitOne + ] as [String: Any] + + var result: AnyObject? + let status = SecItemCopyMatching(query as CFDictionary, &result) + + if status == noErr { + if let data = result as? Data, + let string = String(data: data, encoding: .utf8) { + return string + } + } + + return nil + } + + static func delete(key: String) { + let query = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrAccount as String: key + ] as [String: Any] + + SecItemDelete(query as CFDictionary) + } +} diff --git a/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendTokenService.swift b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendTokenService.swift new file mode 100644 index 000000000..3733a50ae --- /dev/null +++ b/DashWallet/Sources/Models/Explore Dash/Services/CTXSpendTokenService.swift @@ -0,0 +1,81 @@ +// +// 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 + +protocol CTXSpendTokenProvider: AnyObject { + var accessToken: String? { get } + var refreshToken: String? { get } + func updateTokens(accessToken: String, refreshToken: String) + func clearTokensOnRefreshFailure() +} + +// MARK: - CTXSpendTokenService + +class CTXSpendTokenService { + static let shared = CTXSpendTokenService() + + private var tokenRefreshTask: Task? + private weak var tokenProvider: CTXSpendTokenProvider? + + private init() {} + + func configure(with tokenProvider: CTXSpendTokenProvider) { + self.tokenProvider = tokenProvider + } + + func refreshAccessToken() async throws { + // If there's already a refresh task running, wait for it + if let task = tokenRefreshTask { + try await task.value + return + } + + guard let tokenProvider = tokenProvider, + let refreshToken = tokenProvider.refreshToken, + !refreshToken.isEmpty else { + return + } + + tokenRefreshTask = Task { + defer { + tokenRefreshTask = nil + } + + DSLogger.log("CTXSpend: Attempting to refresh access token") + + do { + let request = RefreshTokenRequest(refreshToken: refreshToken) + let response: RefreshTokenResponse = try await CTXSpendAPI.shared.requestDirectly(.refreshToken(request)) + + // Update tokens through the service + tokenProvider.updateTokens(accessToken: response.accessToken, refreshToken: response.refreshToken) + + DSLogger.log("CTXSpend: Token refresh successful") + } catch { + DSLogger.log("CTXSpend: Token refresh failed: \(error)") + + // Clear tokens on refresh failure + tokenProvider.clearTokensOnRefreshFailure() + + throw CTXSpendError.tokenRefreshFailed + } + } + + try await tokenRefreshTask!.value + } +} diff --git a/DashWallet/Sources/Models/Explore Dash/Services/ExploreDatabaseSyncManager.swift b/DashWallet/Sources/Models/Explore Dash/Services/ExploreDatabaseSyncManager.swift index adc51695c..63ef8ae14 100644 --- a/DashWallet/Sources/Models/Explore Dash/Services/ExploreDatabaseSyncManager.swift +++ b/DashWallet/Sources/Models/Explore Dash/Services/ExploreDatabaseSyncManager.swift @@ -20,7 +20,7 @@ import Foundation import SSZipArchive // TODO: Move it to plist and note in release process -let gsFilePath = "gs://dash-wallet-firebase.appspot.com/explore/explore.db" +let gsFilePath = "gs://dash-wallet-firebase.appspot.com/explore/explore-v3.db" private let fileName = "explore" @@ -87,10 +87,9 @@ public class ExploreDatabaseSyncManager { } let timeInterval = timeIntervalMillesecond/1000 - let savedTs = wSelf.exploreDatabaseLastSyncTimestamp - wSelf.exploreDatabaseLastVersion = timeInterval + let installedVersion = wSelf.exploreDatabaseLastVersion - guard timeInterval > savedTs else { + guard timeInterval > installedVersion else { wSelf.syncState = .synced(Date()) return } @@ -110,7 +109,8 @@ public class ExploreDatabaseSyncManager { extension ExploreDatabaseSyncManager { private func downloadDatabase(metadata: StorageMetadata) { guard let timestamp = metadata.customMetadata?[timestampKey], - let checksum = metadata.customMetadata?[checksumKey] else { + let checksum = metadata.customMetadata?[checksumKey], + let timeIntervalMillesecond = TimeInterval(timestamp) else { syncState = .error(Date(), nil) return } @@ -120,27 +120,45 @@ extension ExploreDatabaseSyncManager { storageRef.getData(maxSize: metadata.size) { [weak self] data, error in let date = Date() - let timestamp = date.timeIntervalSince1970 + let now = date.timeIntervalSince1970 if let e = error { self?.syncState = .error(date, e) } else { try? data?.write(to: urlToSave) - self?.exploreDatabaseLastSyncTimestamp = timestamp - self?.syncState = .synced(date) - self?.unzipFile(at: urlToSave.path, password: checksum) + + Task { + do { + try await self?.unzipFile(at: urlToSave.path, password: checksum) + self?.exploreDatabaseLastSyncTimestamp = now + self?.exploreDatabaseLastVersion = timeIntervalMillesecond / 1000 + self?.syncState = .synced(date) + + NotificationCenter.default.post(name: ExploreDatabaseSyncManager.databaseHasBeenUpdatedNotification, object: nil) + try? FileManager.default.removeItem(at: URL(fileURLWithPath: urlToSave.path)) + } catch { + DSLogger.log("ExploreDash: failed to open DB archive: \(String(describing: error))") + self?.syncState = .error(Date(), error) + } + } } } } - private func unzipFile(at path: String, password: String) { - var error: NSError? - let urlToUnzip = getDocumentsDirectory() - SSZipArchive.unzipFile(atPath: path, toDestination: urlToUnzip.path, preserveAttributes: true, overwrite: true, - nestedZipLevel: 0, password: password, error: &error, delegate: nil, - progressHandler: nil) { path, _, _ in - NotificationCenter.default.post(name: ExploreDatabaseSyncManager.databaseHasBeenUpdatedNotification, object: nil) - try? FileManager.default.removeItem(at: URL(fileURLWithPath: path)) + private func unzipFile(at path: String, password: String) async throws { + let urlToUnzip = self.getDocumentsDirectory() + + return try await withCheckedThrowingContinuation { continuation in + SSZipArchive.unzipFile(atPath: path, toDestination: urlToUnzip.path, preserveAttributes: true, overwrite: true, + nestedZipLevel: 0, password: password, error: nil, delegate: nil, + progressHandler: nil) { path, success, error in + if success { + continuation.resume() + } else { + let errorToThrow = error ?? NSError(domain: "ExploreDatabaseSyncManager", code: -1, userInfo: [NSLocalizedDescriptionKey: "Failed to unzip archive"]) + continuation.resume(throwing: errorToThrow) + } + } } } diff --git a/DashWallet/Sources/Models/Taxes/Address/AddressUserInfo.swift b/DashWallet/Sources/Models/Taxes/Address/AddressUserInfo.swift index 1c699c473..85d16944e 100644 --- a/DashWallet/Sources/Models/Taxes/Address/AddressUserInfo.swift +++ b/DashWallet/Sources/Models/Taxes/Address/AddressUserInfo.swift @@ -22,17 +22,17 @@ import SQLite @objc class AddressUserInfo: NSObject { @objc var address: String - @objc var taxCategory: TxUserInfoTaxCategory = .unknown + @objc var taxCategory: TxMetadataTaxCategory = .unknown @objc - init(address: String, taxCategory: TxUserInfoTaxCategory) { + init(address: String, taxCategory: TxMetadataTaxCategory) { self.address = address self.taxCategory = taxCategory } init(row: Row) { address = row[AddressUserInfo.addressColumn] - taxCategory = TxUserInfoTaxCategory(rawValue: row[TxUserInfo.txCategoryColumn]) ?? .unknown + taxCategory = TxMetadataTaxCategory(rawValue: row[TransactionMetadata.txCategoryColumn]) ?? .unknown super.init() } diff --git a/DashWallet/Sources/Models/Taxes/Services/TaxReportGenerator.swift b/DashWallet/Sources/Models/Taxes/Services/TaxReportGenerator.swift index 1a74f57bc..9237cc4cf 100644 --- a/DashWallet/Sources/Models/Taxes/Services/TaxReportGenerator.swift +++ b/DashWallet/Sources/Models/Taxes/Services/TaxReportGenerator.swift @@ -63,8 +63,8 @@ enum TaxReportGenerator { DispatchQueue.global(qos: .default).async { let transactions = transactions - let userInfosArray = TxUserInfoDAOImpl().all() - let userInfos = userInfosArray.reduce(into: [Data: TxUserInfo]()) { partialResult, dto in + let userInfosArray = TransactionMetadataDAOImpl().all() + let userInfos = userInfosArray.reduce(into: [Data: TransactionMetadata]()) { partialResult, dto in partialResult[dto.txHash] = dto } @@ -119,7 +119,7 @@ enum TaxReportGenerator { return fileName } - private static func value(for column: ReportColumns, transaction: DSTransaction, andUserInfo userInfo: TxUserInfo?) -> String { + private static func value(for column: ReportColumns, transaction: DSTransaction, andUserInfo userInfo: TransactionMetadata?) -> String { let transactionDirection = transaction.direction let isOutcoming = transactionDirection == .sent diff --git a/DashWallet/Sources/Models/Taxes/Taxes.swift b/DashWallet/Sources/Models/Taxes/Taxes.swift index c4d3af5e2..ebdbf5a46 100644 --- a/DashWallet/Sources/Models/Taxes/Taxes.swift +++ b/DashWallet/Sources/Models/Taxes/Taxes.swift @@ -20,7 +20,7 @@ import Foundation // MARK: - TxUserInfoTaxCategory @objc -enum TxUserInfoTaxCategory: Int { +enum TxMetadataTaxCategory: Int { /// Unknown case unknown @@ -51,15 +51,15 @@ enum TxUserInfoTaxCategory: Int { class Taxes: NSObject { var addressesUserInfos: AddressUserInfoDAO = AddressUserInfoDAOImpl() - var txUserInfos: TxUserInfoDAO = TxUserInfoDAOImpl.shared + var txUserInfos: TransactionMetadataDAO = TransactionMetadataDAOImpl.shared @objc - func mark(address: String, with taxCategory: TxUserInfoTaxCategory) { + func mark(address: String, with taxCategory: TxMetadataTaxCategory) { addressesUserInfos.create(dto: AddressUserInfo(address: address, taxCategory: taxCategory)) } - func taxCategory(for tx: DSTransaction) -> TxUserInfoTaxCategory { - var taxCategory: TxUserInfoTaxCategory = tx.defaultTaxCategory() + func taxCategory(for tx: DSTransaction) -> TxMetadataTaxCategory { + var taxCategory: TxMetadataTaxCategory = tx.defaultTaxCategory() for outputAddress in tx.outputAddresses { if let address = outputAddress as? String, let txCategory = self.taxCategory(for: address) { @@ -80,11 +80,11 @@ class Taxes: NSObject { return taxCategory } - func taxCategory(for tx: Transaction) -> TxUserInfoTaxCategory { + func taxCategory(for tx: Transaction) -> TxMetadataTaxCategory { taxCategory(for: tx.tx) } - func taxCategory(for address: String) -> TxUserInfoTaxCategory? { + func taxCategory(for address: String) -> TxMetadataTaxCategory? { addressesUserInfos.get(by: address)?.taxCategory } diff --git a/DashWallet/Sources/Models/Taxes/Tx/DAO/TxUserInfoDAO.swift b/DashWallet/Sources/Models/Taxes/Tx/DAO/TxUserInfoDAO.swift deleted file mode 100644 index 55dc32497..000000000 --- a/DashWallet/Sources/Models/Taxes/Tx/DAO/TxUserInfoDAO.swift +++ /dev/null @@ -1,136 +0,0 @@ -// -// Created by Pavel Tikhonenko -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation -import SQLite - -// MARK: - TxUserInfoDAO - -protocol TxUserInfoDAO { - func create(dto: TxUserInfo) - func get(by hash: Data) -> TxUserInfo? - func update(dto: TxUserInfo) - func delete(dto: TxUserInfo) - func deleteAll() -} - -// MARK: - TxUserInfoDAOImpl - -class TxUserInfoDAOImpl: NSObject, TxUserInfoDAO { - private var db: Connection { DatabaseConnection.shared.db } - private var cache: [Data: TxUserInfo] = [:] - - private let queue = DispatchQueue(label: "org.dash.infrastructure.queue.tx-user-info-dao", attributes: .concurrent) - - func create(dto: TxUserInfo) { - do { - let txUserInfo = TxUserInfo.table.insert(or: .replace, - TxUserInfo.txHashColumn <- dto.txHash, - TxUserInfo.txCategoryColumn <- dto.taxCategory.rawValue, - TxUserInfo.txRateColumn <- dto.rate, - TxUserInfo.txRateCurrencyCodeColumn <- dto.rateCurrency, - TxUserInfo.txRateMaximumFractionDigitsColumn <- dto.rateMaximumFractionDigits) - try db.run(txUserInfo) - - } catch { - print(error) - } - - queue.async(flags: .barrier) { [weak self] in - self?.cache[dto.txHash] = dto - } - } - - func all() -> [TxUserInfo] { - let txUserInfos = TxUserInfo.table - - var userInfos: [TxUserInfo] = [] - - do { - for txInfo in try db.prepare(txUserInfos) { - let userInfo = TxUserInfo(row: txInfo) - userInfos.append(userInfo) - } - } catch { - print(error) - } - - return userInfos - } - - func get(by hash: Data) -> TxUserInfo? { - if let cached = cachedValue(by: hash) { - return cached - } - - let txUserInfo = TxUserInfo.table.filter(TxUserInfo.txHashColumn == hash) - - do { - for txInfo in try db.prepare(txUserInfo) { - let userInfo = TxUserInfo(row: txInfo) - queue.async(flags: .barrier) { [weak self] in - self?.cache[hash] = userInfo - } - return userInfo - } - } catch { - print(error) - } - - return nil - } - - private func cachedValue(by key: Data) -> TxUserInfo? { - var v: TxUserInfo? - - queue.sync { - v = cache[key] - } - - return v - } - - func update(dto: TxUserInfo) { - create(dto: dto) - } - - func delete(dto: TxUserInfo) { - queue.async(flags: .barrier) { [weak self] in - self?.cache[dto.txHash] = nil - } - } - - func deleteAll() { - do { - try db.run(TxUserInfo.table.delete()) - queue.async(flags: .barrier) { [weak self] in - self?.cache = [:] - } - } catch { - print(error) - } - } - - static let shared = TxUserInfoDAOImpl() -} - -extension TxUserInfoDAOImpl { - func dictionaryOfAllItems() -> [Data: TxUserInfo] { - _ = all() - return cache - } -} diff --git a/DashWallet/Sources/Models/Transactions/Model/Transaction.swift b/DashWallet/Sources/Models/Transactions/Model/Transaction.swift index b8eb79ff9..c0a18fb94 100644 --- a/DashWallet/Sources/Models/Transactions/Model/Transaction.swift +++ b/DashWallet/Sources/Models/Transactions/Model/Transaction.swift @@ -83,7 +83,7 @@ class Transaction: TransactionDataItem, Identifiable { private lazy var storedFiatAmount = userInfo?.fiatAmountString(from: _dashAmount) ?? NSLocalizedString("Not available", comment: ""); - lazy var userInfo: TxUserInfo? = TxUserInfoDAOImpl.shared.get(by: tx.txHashData) + lazy var userInfo: TransactionMetadata? = TransactionMetadataDAOImpl.shared.get(by: tx.txHashData) var transactionType: `Type` { _transactionType } private lazy var _transactionType: `Type` = tx.type diff --git a/DashWallet/Sources/Models/Transactions/SendCoinsService.swift b/DashWallet/Sources/Models/Transactions/SendCoinsService.swift new file mode 100644 index 000000000..5f346b078 --- /dev/null +++ b/DashWallet/Sources/Models/Transactions/SendCoinsService.swift @@ -0,0 +1,169 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2022 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Combine + +public final class SendCoinsService: NSObject { + private let transactionManager: DSTransactionManager = DWEnvironment.sharedInstance().currentChainManager.transactionManager + + // Payment processing + private var paymentProcessor: DWPaymentProcessor? + private var pendingPaymentContinuation: CheckedContinuation? + + func sendCoins(address: String, amount: UInt64, + inputSelector: SingleInputAddressSelector? = nil, adjustAmountDownwards: Bool = false) async throws + -> DSTransaction { + let chain = DWEnvironment.sharedInstance().currentChain + let account = DWEnvironment.sharedInstance().currentAccount + let transaction = DSTransaction(on: chain) + + if inputSelector == nil { + // Forming transaction normally + let script = NSData.scriptPubKey(forAddress: address, for: chain) + account.update(transaction, forAmounts: [amount], toOutputScripts: [script], withFee: true) + } + else { + // Selecting proper inputs + let balance = inputSelector!.selectFor(tx: transaction) + transaction.addOutputAddress(address, amount: amount) + let feeAmount = chain.fee(forTxSize: UInt(transaction.size) + UInt(TX_OUTPUT_SIZE)) + + if amount + feeAmount > balance { + if adjustAmountDownwards { + let adjustedAmount = amount - feeAmount + let adjustedTx = try await sendCoins(address: address, amount: adjustedAmount, inputSelector: inputSelector) + return adjustedTx + } else { + throw Error.notEnoughFunds(selected: balance, amount: amount, fee: feeAmount) + } + } + + let change = balance - (amount + feeAmount) + + if change > 0 { + let changeAddress = inputSelector!.address + transaction.addOutputAddress(changeAddress, amount: change) + transaction.sortOutputsAccordingToBIP69() + } + } + + await account.sign(transaction) + account.register(transaction, saveImmediately: false) + try await transactionManager.publishTransaction(transaction) + + return transaction + } + + // MARK: - BIP70 + + func payWithDashUrl(url paymentUrlString: String) async throws -> DSTransaction { + // Create payment input from the URL + guard let paymentUrl = URL(string: paymentUrlString) else { + throw CTXSpendError.paymentProcessingError("Invalid payment URL") + } + + // Use the existing payment infrastructure + let payModel = DWPayModel() + let paymentInput = payModel.paymentInput(with: paymentUrl) + + // If we have a BIP70 payment request URL, we need to fetch it first + guard paymentInput.request?.r != nil else { + throw CTXSpendError.paymentProcessingError("Invalid payment request") + } + + return try await fetchAndProcessPaymentRequest(paymentInput: paymentInput) + } + + private func fetchAndProcessPaymentRequest(paymentInput: DWPaymentInput) async throws -> DSTransaction { + return try await withCheckedThrowingContinuation { continuation in + self.pendingPaymentContinuation = continuation + + // Create and retain the processor + let processor = DWPaymentProcessor(delegate: self) + self.paymentProcessor = processor + + // Process the payment on the main actor to avoid Sendable issues + Task { @MainActor in + processor.processPaymentInput(paymentInput) + } + } + } + + private func completePayment(transaction: DSTransaction?, error: Swift.Error?) { + guard let continuation = pendingPaymentContinuation else { return } + + pendingPaymentContinuation = nil + + // Clean up the payment processor + paymentProcessor = nil + + if let error = error { + continuation.resume(throwing: error) + } else if let transaction = transaction { + continuation.resume(returning: transaction) + } else { + continuation.resume(throwing: CTXSpendError.paymentProcessingError("No transaction returned")) + } + } +} + +// MARK: - DWPaymentProcessorDelegate + +extension SendCoinsService: DWPaymentProcessorDelegate { + public func paymentProcessor(_ processor: DWPaymentProcessor, didSend protocolRequest: DSPaymentProtocolRequest, transaction: DSTransaction, contactItem: DWDPBasicUserItem?) { + completePayment(transaction: transaction, error: nil) + } + + public func paymentProcessor(_ processor: DWPaymentProcessor, didFailWithError error: Swift.Error?, title: String?, message: String?) { + let fullError = NSError( + domain: "DashSpend", + code: -1, + userInfo: [ + NSLocalizedDescriptionKey: message ?? title ?? NSLocalizedString("Payment failed", comment: "") + ] + ) + completePayment(transaction: nil, error: error ?? fullError) + } + + public func paymentProcessor(_ processor: DWPaymentProcessor, requestAmountWithDestination sendingDestination: String, details: DSPaymentProtocolDetails?, contactItem: DWDPBasicUserItem?) { + completePayment(transaction: nil, error: CTXSpendError.paymentProcessingError("Request is missing destination")) + } + + public func paymentProcessor(_ processor: DWPaymentProcessor, requestUserActionTitle title: String?, message: String?, actionTitle: String, cancel cancelBlock: (() -> Void)?, actionBlock: (() -> Void)?) { + actionBlock?() + } + + public func paymentProcessor(_ processor: DWPaymentProcessor, confirmPaymentOutput paymentOutput: DWPaymentOutput) { + processor.confirmPaymentOutput(paymentOutput) + } + + public func paymentProcessorDidCancelTransactionSigning(_ processor: DWPaymentProcessor) { + completePayment(transaction: nil, error: NSError(domain: "DashSpend", code: -2, userInfo: [NSLocalizedDescriptionKey: NSLocalizedString("Transaction cancelled", comment: "")])) + } + + public func paymentProcessor(_ processor: DWPaymentProcessor, didSweepRequest protocolRequest: DSPaymentRequest, transaction: DSTransaction) { + completePayment(transaction: transaction, error: nil) + } + + public func paymentProcessor(_ processor: DWPaymentProcessor, displayFileProcessResult result: String) { } + + public func paymentProcessorDidFinishProcessingFile(_ processor: DWPaymentProcessor) { } + + public func paymentProcessor(_ processor: DWPaymentProcessor, showProgressHUDWithMessage message: String?) { } + + public func paymentInputProcessorHideProgressHUD(_ processor: DWPaymentProcessor) { } +} diff --git a/DashWallet/Sources/Models/Tx Metadata/DAO/IconBitmapDAO.swift b/DashWallet/Sources/Models/Tx Metadata/DAO/IconBitmapDAO.swift new file mode 100644 index 000000000..261b26c39 --- /dev/null +++ b/DashWallet/Sources/Models/Tx Metadata/DAO/IconBitmapDAO.swift @@ -0,0 +1,216 @@ +// +// 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 + +#if !swift(>=5.9) +// Provide `withLock` helper for older Swift toolchains to use scoped locking. +extension NSLock { + /// Executes `body` while holding the lock, ensuring the lock is always released. + /// - Returns: The value returned by `body`. + /// - Throws: Rethrows anything thrown by `body`. + @discardableResult + func withLock(_ body: () throws -> T) rethrows -> T { + lock() + defer { unlock() } + return try body() + } +} +#endif + +// MARK: - IconBitmapDAO + +protocol IconBitmapDAO { + func addBitmap(bitmap: IconBitmap) async + func getBitmap(id: Data) async -> IconBitmap? + func observeBitmaps() -> AnyPublisher<[Data: IconBitmap], Never> + func clear() async +} + +// MARK: - IconBitmapDAOImpl + +class IconBitmapDAOImpl: NSObject, IconBitmapDAO { + private var db: Connection { DatabaseConnection.shared.db } + private var cache: [String: IconBitmap] = [:] + /// Synchronizes access to `cache` to avoid data races when called from multiple threads/queues. + private let cacheLock = NSLock() + private var bitmapsSubject = CurrentValueSubject<[Data: IconBitmap], Never>([:]) + + static let shared = IconBitmapDAOImpl() + + override init() { + super.init() + Task { + await loadAllBitmaps() + } + } + + func addBitmap(bitmap: IconBitmap) async { + do { + let insert = IconBitmap.table.insert(or: .ignore, + IconBitmap.id <- bitmap.id, + IconBitmap.imageData <- bitmap.imageData, + IconBitmap.originalUrl <- bitmap.originalUrl, + IconBitmap.height <- bitmap.height, + IconBitmap.width <- bitmap.width) + try await execute(insert) + let key = bitmap.id.hexEncodedString() + cacheLock.withLock { cache[key] = bitmap } + updateBitmapsSubject() + } catch { + print("IconBitmapDAO addBitmap error: \(error)") + } + } + + func getBitmap(id: Data) async -> IconBitmap? { + let statement = IconBitmap.table.filter(IconBitmap.id == id) + + do { + let results: [IconBitmap] = try await prepare(statement) + let bitmap = results.first + if let bitmap = bitmap { + let key = id.hexEncodedString() + cacheLock.withLock { cache[key] = bitmap } + } + return bitmap + } catch { + print("IconBitmapDAO getBitmap error: \(error)") + } + + return nil + } + + func observeBitmaps() -> AnyPublisher<[Data: IconBitmap], Never> { + return bitmapsSubject.eraseToAnyPublisher() + } + + func clear() async { + do { + let deleteQuery = IconBitmap.table.delete() + try await execute(deleteQuery) + cacheLock.withLock { cache.removeAll() } + updateBitmapsSubject() + } catch { + print("IconBitmapDAO clear error: \(error)") + } + } + + private func loadAllBitmaps() async { + do { + let bitmaps: [IconBitmap] = try await prepare(IconBitmap.table) + cacheLock.withLock { + cache.removeAll() + for bitmap in bitmaps { + let key = bitmap.id.hexEncodedString() + cache[key] = bitmap + } + } + updateBitmapsSubject() + } catch { + print("IconBitmapDAO loadAllBitmaps error: \(error)") + } + } + + private func updateBitmapsSubject() { + let cachedCopy = cacheLock.withLock { cache } + + let bitmapsDict = cachedCopy.reduce(into: [Data: IconBitmap]()) { result, item in + if let data = Data(hex: item.key) { + result[data] = item.value + } + } + bitmapsSubject.send(bitmapsDict) + } +} + +// MARK: - async / await + +extension IconBitmapDAOImpl { + private func execute(_ query: Insert) async throws { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume() } + + do { + try db.run(query) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func execute(_ query: Delete) async throws { + return try await withCheckedThrowingContinuation { continuation in + DispatchQueue.global(qos: .utility).async { [weak self] in + guard let self = self else { return continuation.resume() } + + do { + try db.run(query) + continuation.resume() + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func prepare(_ query: Table) 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(query) { + let rowItem = T(row: row) + result.append(rowItem) + } + + continuation.resume(returning: result) + } catch { + continuation.resume(throwing: error) + } + } + } + } + + private func prepare(_ query: 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(query) { + let rowItem = T(row: row) + result.append(rowItem) + } + + continuation.resume(returning: result) + } catch { + continuation.resume(throwing: error) + } + } + } + } +} diff --git a/DashWallet/Sources/Models/Tx Metadata/DAO/TransactionMetadataDAO.swift b/DashWallet/Sources/Models/Tx Metadata/DAO/TransactionMetadataDAO.swift new file mode 100644 index 000000000..bb42572cf --- /dev/null +++ b/DashWallet/Sources/Models/Tx Metadata/DAO/TransactionMetadataDAO.swift @@ -0,0 +1,248 @@ +// +// Created by Pavel Tikhonenko +// Copyright © 2022 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import SQLite +import Combine + +// MARK: - Metadata Change Event + +enum TransactionMetadataChange { + case created(TransactionMetadata) + case updated(TransactionMetadata, previousMetadata: TransactionMetadata) + case deleted(TransactionMetadata) + case deletedAll +} + +// MARK: - TransactionMetadataDAO + +protocol TransactionMetadataDAO { + func create(dto: TransactionMetadata) + func get(by hash: Data, ignoreCache: Bool) -> TransactionMetadata? + func update(dto: TransactionMetadata) + func delete(dto: TransactionMetadata) + func deleteAll() +} + +extension TransactionMetadataDAO { + func get(by hash: Data) -> TransactionMetadata? { + return get(by: hash, ignoreCache: false) + } +} + +// MARK: - TransactionMetadataDAOImpl + +class TransactionMetadataDAOImpl: NSObject, TransactionMetadataDAO, ObservableObject { + private var db: Connection { DatabaseConnection.shared.db } + private var cache: [Data: TransactionMetadata] = [:] + + private let queue = DispatchQueue(label: "org.dash.infrastructure.queue.transaction-metadata-dao", attributes: .concurrent) + + @Published private(set) var lastChange: TransactionMetadataChange? + + func create(dto: TransactionMetadata) { + do { + let transactionMetadata = TransactionMetadata.table.insert(or: .replace, + TransactionMetadata.txHashColumn <- dto.txHash, + TransactionMetadata.txCategoryColumn <- dto.taxCategory.rawValue, + TransactionMetadata.txRateColumn <- dto.rate, + TransactionMetadata.txRateCurrencyCodeColumn <- dto.rateCurrency, + TransactionMetadata.txRateMaximumFractionDigitsColumn <- dto.rateMaximumFractionDigits, + TransactionMetadata.timestamp <- dto.timestamp, + TransactionMetadata.memo <- dto.memo, + TransactionMetadata.service <- dto.service, + TransactionMetadata.customIconId <- dto.customIconId) + try db.run(transactionMetadata) + + } catch { + print(error) + } + + queue.async(flags: .barrier) { [weak self] in + self?.cache[dto.txHash] = dto + + DispatchQueue.main.async { + self?.lastChange = .created(dto) + } + } + } + + func all() -> [TransactionMetadata] { + let txUserInfos = TransactionMetadata.table + + var userInfos: [TransactionMetadata] = [] + + do { + for txInfo in try db.prepare(txUserInfos) { + let userInfo = TransactionMetadata(row: txInfo) + userInfos.append(userInfo) + } + } catch { + print(error) + } + + return userInfos + } + + func get(by hash: Data, ignoreCache: Bool = false) -> TransactionMetadata? { + if !ignoreCache, let cached = cachedValue(by: hash) { + return cached + } + + let txUserInfo = TransactionMetadata.table.filter(TransactionMetadata.txHashColumn == hash) + + do { + for txInfo in try db.prepare(txUserInfo) { + let userInfo = TransactionMetadata(row: txInfo) + queue.async(flags: .barrier) { [weak self] in + self?.cache[hash] = userInfo + } + return userInfo + } + } catch { + print(error) + } + + return nil + } + + func getCustomIcons() -> [TransactionMetadata] { + let customIconsQuery = TransactionMetadata.table.filter(TransactionMetadata.customIconId != nil) + var userInfos: [TransactionMetadata] = [] + + do { + for txInfo in try db.prepare(customIconsQuery) { + let userInfo = TransactionMetadata(row: txInfo) + userInfos.append(userInfo) + } + } catch { + print(error) + } + + return userInfos + } + + private func cachedValue(by key: Data) -> TransactionMetadata? { + var v: TransactionMetadata? + + queue.sync { + v = cache[key] + } + + return v + } + + func update(dto: TransactionMetadata) { + guard let existingDto = get(by: dto.txHash) else { + create(dto: dto) + return + } + + do { + var setters: [Setter] = [] + + if dto.taxCategory != .unknown && existingDto.taxCategory != dto.taxCategory { + setters.append(TransactionMetadata.txCategoryColumn <- dto.taxCategory.rawValue) + } + + if let rate = dto.rate, existingDto.rate != rate { + setters.append(TransactionMetadata.txRateColumn <- rate) + } + + if let rateCurrency = dto.rateCurrency, existingDto.rateCurrency != rateCurrency { + setters.append(TransactionMetadata.txRateCurrencyCodeColumn <- rateCurrency) + } + + if let rateMaximumFractionDigits = dto.rateMaximumFractionDigits, existingDto.rateMaximumFractionDigits != rateMaximumFractionDigits { + setters.append(TransactionMetadata.txRateMaximumFractionDigitsColumn <- rateMaximumFractionDigits) + } + + if let timestamp = dto.timestamp, existingDto.timestamp != timestamp { + setters.append(TransactionMetadata.timestamp <- timestamp) + } + + if let memo = dto.memo, existingDto.memo != memo { + setters.append(TransactionMetadata.memo <- memo) + } + + if let service = dto.service, existingDto.service != service { + setters.append(TransactionMetadata.service <- service) + } + + if let customIconId = dto.customIconId, existingDto.customIconId != customIconId { + setters.append(TransactionMetadata.customIconId <- customIconId) + } + + if !setters.isEmpty { + let txUserInfo = TransactionMetadata.table.filter(TransactionMetadata.txHashColumn == dto.txHash) + try db.run(txUserInfo.update(setters)) + + // Update cache + if let updated = get(by: dto.txHash, ignoreCache: true) { + DispatchQueue.main.async { [weak self] in + self?.lastChange = .updated(updated, previousMetadata: existingDto) + } + } + } + } catch { + print(error) + } + } + + func delete(dto: TransactionMetadata) { + do { + let txUserInfo = TransactionMetadata.table.filter(TransactionMetadata.txHashColumn == dto.txHash) + try db.run(txUserInfo.delete()) + + queue.async(flags: .barrier) { [weak self] in + self?.cache[dto.txHash] = nil + + // Publish the deleted metadata event + DispatchQueue.main.async { + self?.lastChange = .deleted(dto) + } + } + } catch { + print(error) + } + } + + func deleteAll() { + do { + try db.run(TransactionMetadata.table.delete()) + queue.async(flags: .barrier) { [weak self] in + self?.cache = [:] + + // Publish the delete all event + DispatchQueue.main.async { + self?.lastChange = .deletedAll + } + } + } catch { + print(error) + } + } + + static let shared = TransactionMetadataDAOImpl() +} + +extension TransactionMetadataDAOImpl { + func dictionaryOfAllItems() -> [Data: TransactionMetadata] { + _ = all() + return cache + } +} diff --git a/DashWallet/Sources/Models/Tx Metadata/IconBitmap.swift b/DashWallet/Sources/Models/Tx Metadata/IconBitmap.swift new file mode 100644 index 000000000..02f335efa --- /dev/null +++ b/DashWallet/Sources/Models/Tx Metadata/IconBitmap.swift @@ -0,0 +1,52 @@ +// +// 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: - IconBitmap + +struct IconBitmap: RowDecodable { + let id: Data + let imageData: Data + let originalUrl: String + let height: Int + let width: Int + + static let table = Table("icon_bitmaps") + static let id = SQLite.Expression("id") + static let imageData = SQLite.Expression("imageData") + static let originalUrl = SQLite.Expression("originalUrl") + static let height = SQLite.Expression("height") + static let width = SQLite.Expression("width") + + init(row: Row) { + self.id = row[IconBitmap.id] + self.imageData = row[IconBitmap.imageData] + self.originalUrl = row[IconBitmap.originalUrl] + self.height = row[IconBitmap.height] + self.width = row[IconBitmap.width] + } + + init(id: Data, imageData: Data, originalUrl: String, height: Int, width: Int) { + self.id = id + self.imageData = imageData + self.originalUrl = originalUrl + self.height = height + self.width = width + } +} \ No newline at end of file diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h b/DashWallet/Sources/Models/Tx Metadata/ServiceName.swift similarity index 55% rename from DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h rename to DashWallet/Sources/Models/Tx Metadata/ServiceName.swift index 4f15da679..197c46c54 100644 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.h +++ b/DashWallet/Sources/Models/Tx Metadata/ServiceName.swift @@ -1,6 +1,6 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. // // Licensed under the MIT License (the "License"); // you may not use this file except in compliance with the License. @@ -15,19 +15,14 @@ // 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; +import Foundation -@end +enum ServiceName: String, CaseIterable { + case crowdNode = "crowdnode" + case uphold = "uphold" + case coinbase = "coinbase" + case ctxSpend = "ctxspend" + case unknown = "unknown" +} -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/Models/Taxes/Tx/TxUserInfo.swift b/DashWallet/Sources/Models/Tx Metadata/TransactionMetadata.swift similarity index 73% rename from DashWallet/Sources/Models/Taxes/Tx/TxUserInfo.swift rename to DashWallet/Sources/Models/Tx Metadata/TransactionMetadata.swift index ae9b17246..a96929917 100644 --- a/DashWallet/Sources/Models/Taxes/Tx/TxUserInfo.swift +++ b/DashWallet/Sources/Models/Tx Metadata/TransactionMetadata.swift @@ -19,7 +19,7 @@ import Foundation import SQLite -extension TxUserInfoTaxCategory { +extension TxMetadataTaxCategory { var stringValue: String { switch self { case .unknown: @@ -36,7 +36,7 @@ extension TxUserInfoTaxCategory { } - var nextTaxCategory: TxUserInfoTaxCategory { + var nextTaxCategory: TxMetadataTaxCategory { switch self { case .unknown: return .unknown @@ -52,27 +52,40 @@ extension TxUserInfoTaxCategory { } } -// MARK: - TxUserInfo +// MARK: - TransactionMetadata -struct TxUserInfo { +struct TransactionMetadata { var txHash: Data - var taxCategory: TxUserInfoTaxCategory = .unknown - + var taxCategory: TxMetadataTaxCategory = .unknown + var rate: Int? var rateCurrency: String? var rateMaximumFractionDigits: Int? + + var timestamp: Int64? + var memo: String? + var service: String? + var customIconId: Data? + + init(txHash: Data) { + self.txHash = txHash + } - init(txHash: Data, taxCategory: TxUserInfoTaxCategory) { + init(txHash: Data, taxCategory: TxMetadataTaxCategory) { self.txHash = txHash self.taxCategory = taxCategory } init(row: Row) { - txHash = row[TxUserInfo.txHashColumn] - taxCategory = TxUserInfoTaxCategory(rawValue: row[TxUserInfo.txCategoryColumn]) ?? .unknown - rate = row[TxUserInfo.txRateColumn] - rateCurrency = row[TxUserInfo.txRateCurrencyCodeColumn] - rateMaximumFractionDigits = row[TxUserInfo.txRateMaximumFractionDigitsColumn] + txHash = row[TransactionMetadata.txHashColumn] + taxCategory = TxMetadataTaxCategory(rawValue: row[TransactionMetadata.txCategoryColumn]) ?? .unknown + rate = row[TransactionMetadata.txRateColumn] + rateCurrency = row[TransactionMetadata.txRateCurrencyCodeColumn] + rateMaximumFractionDigits = row[TransactionMetadata.txRateMaximumFractionDigitsColumn] + timestamp = row[TransactionMetadata.timestamp] + memo = row[TransactionMetadata.memo] + service = row[TransactionMetadata.service] + customIconId = row[TransactionMetadata.customIconId] } mutating func update(rate: Int, currency: String, maximumFractionDigits: Int) { @@ -82,7 +95,7 @@ struct TxUserInfo { } } -extension TxUserInfo { +extension TransactionMetadata { func taxCategoryString() -> String { taxCategory.stringValue } @@ -108,19 +121,23 @@ extension TxUserInfo { } } -extension TxUserInfo { +extension TransactionMetadata { static var table: Table { Table("tx_userinfo") } static var txCategoryColumn: SQLite.Expression { Expression("taxCategory") } static var txHashColumn: SQLite.Expression { Expression("txHash") } static var txRateColumn: SQLite.Expression { .init("rate") } static var txRateCurrencyCodeColumn: SQLite.Expression { .init("rateCurrencyCode") } static var txRateMaximumFractionDigitsColumn: SQLite.Expression { .init("rateMaximumFractionDigits") } + static var timestamp: SQLite.Expression { Expression("timestamp") } + static var memo: SQLite.Expression { .init("memo") } + static var service: SQLite.Expression { .init("service") } + static var customIconId: SQLite.Expression { Expression("customIconId") } } @objc extension DSTransaction { @objc - func defaultTaxCategory() -> TxUserInfoTaxCategory { + func defaultTaxCategory() -> TxMetadataTaxCategory { switch direction { case .moved: return .expense diff --git a/DashWallet/Sources/Models/Tx/GroupedTransactions.swift b/DashWallet/Sources/Models/Tx/GroupedTransactions.swift index 75db1d01f..fa1491958 100644 --- a/DashWallet/Sources/Models/Tx/GroupedTransactions.swift +++ b/DashWallet/Sources/Models/Tx/GroupedTransactions.swift @@ -15,11 +15,11 @@ // limitations under the License. // -class GroupedTransactions { - var title: String { "" } - var iconName: String { "" } - var infoText: String { "" } - var fiatAmount: String { "" } - var amount: Int64 { 0 } - var transactions: [Transaction] { [] } +protocol GroupedTransactions { + var title: String { get } + var iconName: String { get } + var infoText: String { get } + var fiatAmount: String { get } + var amount: Int64 { get } + var transactions: [Transaction] { get } } diff --git a/DashWallet/Sources/Models/Tx/Transactions.swift b/DashWallet/Sources/Models/Tx/Transactions.swift index d6f3b624e..f5a104024 100644 --- a/DashWallet/Sources/Models/Tx/Transactions.swift +++ b/DashWallet/Sources/Models/Tx/Transactions.swift @@ -28,7 +28,7 @@ final class Tx: NSObject { .init() } - private var txUserInfos: TxUserInfoDAO = TxUserInfoDAOImpl.shared + private var txUserInfos: TransactionMetadataDAO = TransactionMetadataDAOImpl.shared @objc func updateRateIfNeeded(for transaction: DSTransaction) { @@ -59,7 +59,7 @@ final class Tx: NSObject { set(rate: rate, currency: currency, maximumFractionDigits: maximumFractionDigits, for: .init(txHash: transaction.txHashData, taxCategory: transaction.defaultTaxCategory())) } - private func set(rate: Int, currency: String, maximumFractionDigits: Int, for userInfo: TxUserInfo) { + private func set(rate: Int, currency: String, maximumFractionDigits: Int, for userInfo: TransactionMetadata) { var userInfo = userInfo userInfo.update(rate: rate, currency: currency, maximumFractionDigits: maximumFractionDigits) txUserInfos.update(dto: userInfo) diff --git a/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m b/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m index 15830fe78..a7f171e16 100644 --- a/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m +++ b/DashWallet/Sources/Models/Uphold/DWUpholdMainnetConstants.m @@ -47,7 +47,6 @@ + (NSString *)transactionURLFormat { + (NSString *)logoutURLString { return @"https://uphold.com/"; - } @end diff --git a/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift b/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift index 0cd221846..3312cb90b 100644 --- a/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift +++ b/DashWallet/Sources/UI/CrowdNode/Views/CrowdNodeAPYView.swift @@ -17,7 +17,6 @@ import UIKit -@objc(DWCrowdNodeAPYView) class CrowdNodeAPYView: UIView { override init(frame: CGRect) { diff --git a/DashWallet/Sources/UI/DashPay/Explore/DWExploreTestnetViewController.m b/DashWallet/Sources/UI/DashPay/Explore/DWExploreTestnetViewController.m deleted file mode 100644 index d879c97a5..000000000 --- a/DashWallet/Sources/UI/DashPay/Explore/DWExploreTestnetViewController.m +++ /dev/null @@ -1,133 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWExploreTestnetViewController.h" - -#import "DWColoredButton.h" -#import "DWEnvironment.h" -#import "DWExploreHeaderView.h" -#import "DWExploreTestnetContentsView.h" -#import "DWScrollingViewController.h" -#import "DWUIKit.h" - -@implementation DWExploreTestnetViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor dw_darkBlueColor]; - - UIView *contentView = [[UIView alloc] init]; - contentView.translatesAutoresizingMaskIntoConstraints = NO; - [self.view addSubview:contentView]; - - UIView *footerView = [[UIView alloc] init]; - footerView.translatesAutoresizingMaskIntoConstraints = NO; - footerView.backgroundColor = [UIColor dw_backgroundColor]; - [self.view addSubview:footerView]; - - DWColoredButton *actionButton = [[DWColoredButton alloc] init]; - actionButton.translatesAutoresizingMaskIntoConstraints = NO; - actionButton.style = DWColoredButtonStyle_Black; - [actionButton setTitle:NSLocalizedString(@"Get Test Dash", nil) forState:UIControlStateNormal]; - [actionButton addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside]; - [footerView addSubview:actionButton]; - - CGFloat padding = 16.0; - [NSLayoutConstraint activateConstraints:@[ - [contentView.topAnchor constraintEqualToAnchor:self.view.topAnchor], - [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.view.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor], - - [footerView.topAnchor constraintEqualToAnchor:contentView.bottomAnchor], - [footerView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.view.trailingAnchor constraintEqualToAnchor:footerView.trailingAnchor], - [self.view.bottomAnchor constraintEqualToAnchor:footerView.bottomAnchor], - - [actionButton.topAnchor constraintEqualToAnchor:footerView.topAnchor - constant:padding], - [actionButton.leadingAnchor constraintEqualToAnchor:footerView.leadingAnchor - constant:padding], - [footerView.trailingAnchor constraintEqualToAnchor:actionButton.trailingAnchor - constant:padding], - [footerView.bottomAnchor constraintEqualToAnchor:actionButton.bottomAnchor - constant:padding], - - [actionButton.heightAnchor constraintEqualToConstant:46.0], - ]]; - - // Contents - - DWExploreHeaderView *headerView = [[DWExploreHeaderView alloc] init]; - headerView.translatesAutoresizingMaskIntoConstraints = NO; - headerView.image = [UIImage imageNamed:@"image.explore.dash.wallet"]; - headerView.title = NSLocalizedString(@"Explore Dash", nil); - headerView.subtitle = NSLocalizedString(@"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users.", nil); - - DWExploreTestnetContentsView *contentsView = [[DWExploreTestnetContentsView alloc] init]; - contentsView.translatesAutoresizingMaskIntoConstraints = NO; - - DWScrollingViewController *scrollingController = [[DWScrollingViewController alloc] init]; - scrollingController.keyboardNotificationsEnabled = NO; - - [self dw_embedChild:scrollingController inContainer:contentView]; - - UIView *parentView = scrollingController.contentView; - - UIView *overscrollView = [[UIView alloc] init]; - overscrollView.translatesAutoresizingMaskIntoConstraints = NO; - overscrollView.backgroundColor = [UIColor dw_backgroundColor]; - [parentView addSubview:overscrollView]; - - [parentView addSubview:headerView]; - [parentView addSubview:contentsView]; - - [NSLayoutConstraint activateConstraints:@[ - [headerView.topAnchor constraintEqualToAnchor:parentView.topAnchor], - [headerView.leadingAnchor constraintEqualToAnchor:parentView.leadingAnchor], - [parentView.trailingAnchor constraintEqualToAnchor:headerView.trailingAnchor], - - [contentsView.topAnchor constraintEqualToAnchor:headerView.bottomAnchor], - [contentsView.leadingAnchor constraintEqualToAnchor:parentView.leadingAnchor], - [parentView.trailingAnchor constraintEqualToAnchor:contentsView.trailingAnchor], - [parentView.bottomAnchor constraintEqualToAnchor:contentsView.bottomAnchor], - - [overscrollView.topAnchor constraintEqualToAnchor:contentsView.bottomAnchor - constant:-10], - [overscrollView.leadingAnchor constraintEqualToAnchor:parentView.leadingAnchor], - [parentView.trailingAnchor constraintEqualToAnchor:overscrollView.trailingAnchor], - [overscrollView.heightAnchor constraintEqualToConstant:500], - ]]; -} - -- (UIStatusBarStyle)preferredStatusBarStyle { - return UIStatusBarStyleLightContent; -} - -- (void)buttonAction { - DSAccount *account = [DWEnvironment sharedInstance].currentAccount; - NSString *paymentAddress = account.receiveAddress; - if (paymentAddress == nil) { - return; - } - - [UIPasteboard generalPasteboard].string = paymentAddress; - NSURL *url = [NSURL URLWithString:@"https://testnet-faucet.dash.org/"]; - [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; -} - -@end diff --git a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.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 14f117675..000000000 --- a/DashWallet/Sources/UI/Explore Dash/DWExploreTestnetViewController.m +++ /dev/null @@ -1,164 +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)showWhereToSpendViewController { - DWExploreTestnetViewController *__weak weakSelf = self; - - MerchantListViewController *vc = [[MerchantListViewController alloc] init]; - vc.payWithDashHandler = ^{ - [weakSelf.delegate exploreTestnetViewControllerShowSendPayment:weakSelf]; - }; - - [self.navigationController pushViewController:vc animated: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/ExploreDash.storyboard b/DashWallet/Sources/UI/Explore Dash/ExploreDash.storyboard deleted file mode 100644 index 939c47f91..000000000 --- a/DashWallet/Sources/UI/Explore Dash/ExploreDash.storyboard +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift b/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift new file mode 100644 index 000000000..662b39529 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/ExploreViewController.swift @@ -0,0 +1,191 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit +import SwiftUI + +private let kMerchantTypesShown = "merchantTypesInfoDialogShownKey" +private let kExploreHeaderViewHeight: CGFloat = 351.0 + +// MARK: - DWExploreTestnetViewControllerDelegate + +@objc(DWExploreViewControllerDelegate) +protocol ExploreViewControllerDelegate: AnyObject { + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) + func exploreViewControllerShowReceivePayment(_ controller: ExploreViewController) + func exploreViewControllerShowGiftCard(_ controller: ExploreViewController, txId: Data) +} + +// MARK: - DWExploreTestnetViewController + +@objc(DWExploreViewController) +class ExploreViewController: UIViewController, NavigationFullscreenable { + + @objc weak var delegate: ExploreViewControllerDelegate? + + var requiresNoNavigationBar: Bool { + return true + } + + override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .dw_darkBlue() + setupLayout() + } + + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } + + // MARK: - Layout Setup + + private func setupLayout() { + let headerView = ExploreHeaderView() + headerView.translatesAutoresizingMaskIntoConstraints = false + headerView.image = UIImage(named: "image.explore.dash.wallet") + headerView.title = NSLocalizedString("Explore Dash", comment: "") + headerView.subtitle = NSLocalizedString("Find merchants that accept Dash, where to buy it and how to earn income with it.", comment: "") + + headerView.setContentHuggingPriority(.defaultHigh, for: .vertical) + + let contentsView = ExploreContentsView() + contentsView.translatesAutoresizingMaskIntoConstraints = false + headerView.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + + contentsView.getTestDashHandler = { [weak self] in + self?.getTestDashAction() + } + + contentsView.whereToSpendHandler = { [weak self] in + self?.showWhereToSpendViewController() + } + contentsView.atmHandler = { [weak self] in + self?.showAtms() + } + contentsView.stakingHandler = { [weak self] in + self?.showStakingIfSynced() + } + + let parentView = UIStackView() + parentView.translatesAutoresizingMaskIntoConstraints = false + parentView.distribution = .equalSpacing + parentView.axis = .vertical + parentView.spacing = 34 + + parentView.addArrangedSubview(headerView) + parentView.addArrangedSubview(contentsView) + view.addSubview(parentView) + + NSLayoutConstraint.activate([ + headerView.heightAnchor.constraint(lessThanOrEqualToConstant: kExploreHeaderViewHeight), + parentView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10), + parentView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + parentView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + parentView.trailingAnchor.constraint(equalTo: view.trailingAnchor) + ]) + } + + // MARK: - Actions + + private func getTestDashAction() { + let account = DWEnvironment.sharedInstance().currentAccount + + if let paymentAddress = account.receiveAddress { + UIPasteboard.general.string = paymentAddress + } + + if let url = URL(string: "http://faucet.testnet.networks.dash.org/") { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + } + } + + private func showAtms() { + let vc = AtmListViewController() + vc.payWithDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreViewControllerShowReceivePayment(self) + } + vc.sellDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreViewControllerShowSendPayment(self) + } + navigationController?.pushViewController(vc, animated: true) + } + + private func showStakingIfSynced() { + if SyncingActivityMonitor.shared.state == .syncDone { + let vc = CrowdNodeModelObjcWrapper.getRootVC() + navigationController?.pushViewController(vc, animated: true) + } else { + notifyChainSyncing() + } + } + + private func notifyChainSyncing() { + let title = NSLocalizedString("The chain is syncing…", comment: "") + let message = NSLocalizedString("Wait until the chain is fully synced, so we can review your transaction history. Visit CrowdNode website to log in or sign up.", comment: "") + let alert = UIAlertController(title: title, message: message, preferredStyle: .alert) + + let websiteAction = UIAlertAction( + title: NSLocalizedString("Go to CrowdNode website", comment: ""), + style: .default + ) { _ in + UIApplication.shared.open(CrowdNodeObjcWrapper.crowdNodeWebsiteUrl(), options: [:], completionHandler: nil) + } + alert.addAction(websiteAction) + + let closeAction = UIAlertAction( + title: NSLocalizedString("Close", comment: ""), + style: .cancel, + handler: nil + ) + alert.addAction(closeAction) + + present(alert, animated: true, completion: nil) + } + + // MARK: - Where to Spend + + private func showWhereToSpendViewController() { + if UserDefaults.standard.bool(forKey: kMerchantTypesShown) != true { + let hostingController = UIHostingController(rootView: MerchantTypesDialog { [weak self] in + UserDefaults.standard.setValue(true, forKey: kMerchantTypesShown) + self?.showMerchants() + }) + hostingController.setDetent(640) + present(hostingController, animated: true) + } else { + showMerchants() + } + } + + private func showMerchants() { + let vc = MerchantListViewController() + vc.payWithDashHandler = { [weak self] in + guard let self = self else { return } + self.delegate?.exploreViewControllerShowSendPayment(self) + } + vc.onGiftCardPurchased = { [weak self] txId in + guard let self = self else { return } + self.dismiss(animated: true) + self.delegate?.exploreViewControllerShowGiftCard(self, txId: txId) + } + + navigationController?.pushViewController(vc, animated: true) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift index caf5a5e33..c9dbc8240 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/PointOfUseDetailsViewController.swift @@ -17,15 +17,17 @@ import MapKit import UIKit +import SwiftUI // MARK: - PointOfUseDetailsViewController class PointOfUseDetailsViewController: UIViewController { - internal let pointOfUse: ExplorePointOfUse + internal var pointOfUse: ExplorePointOfUse internal let isShowAllHidden: Bool @objc public var payWithDashHandler: (()->())? @objc var sellDashHandler: (()->())? + @objc var onGiftCardPurchased: ((Data)->())? private var contentView: UIView! private var detailsView: PointOfUseDetailsView! @@ -53,6 +55,7 @@ class PointOfUseDetailsViewController: UIViewController { super.viewDidLoad() title = pointOfUse.name configureHierarchy() + refreshTokenAndMerchantInfo() } } @@ -136,6 +139,13 @@ extension PointOfUseDetailsViewController { vc.sellDashHandler = wSelf.sellDashHandler wSelf.navigationController?.pushViewController(vc, animated: true) } + detailsView.buyGiftCardHandler = { [weak self] in + self?.showDashSpendPayScreen() + } + detailsView.dashSpendAuthHandler = { [weak self] in + self?.showCTXSpendLoginInfo() + } + detailsView.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(detailsView) @@ -165,8 +175,87 @@ extension PointOfUseDetailsViewController { return nil } } +} + +// Mark: DashSpend +extension PointOfUseDetailsViewController { + private func showCTXSpendLoginInfo() { + let swiftUIView = CTXSpendLoginInfoView( + onCreateNewAccount: { [weak self] in + self?.dismiss(animated: true) { + self?.showCTXSpendTerms() + } + }, + onLogIn: { [weak self] in + self?.dismiss(animated: true) { + self?.showCTXSpendAuth(authType: .signIn) + } + }, + onTermsAndConditions: { + UIApplication.shared.open(URL(string: CTXConstants.ctxGiftCardAgreementUrl)!, options: [:], completionHandler: nil) + } + ) + let hostingController = UIHostingController(rootView: swiftUIView) + hostingController.setDetent(450) + self.present(hostingController, animated: true) + } + + private func showCTXSpendTerms() { + let hostingController = UIHostingController( + rootView: CTXSpendTermsScreen { + self.navigationController?.popToViewController(ofType: PointOfUseDetailsViewController.self, animated: false) + self.showDashSpendPayScreen(justAuthenticated: true) + } + ) + hostingController.modalPresentationStyle = .fullScreen + self.navigationController?.pushViewController(hostingController, animated: true) + } + + private func showCTXSpendAuth(authType: CTXSpendUserAuthType) { + let hostingController = UIHostingController( + rootView: CTXSpendUserAuthScreen(authType: authType) { + self.navigationController?.popViewController(animated: false) + self.showDashSpendPayScreen(justAuthenticated: true) + } + ) + + self.navigationController?.pushViewController(hostingController, animated: true) + } + + private func showDashSpendPayScreen(justAuthenticated: Bool = false) { + let hostingController = UIHostingController( + rootView: DashSpendPayScreen(merchant: self.pointOfUse, justAuthenticated: justAuthenticated) { [weak self] txId in + // Navigate back to home and show gift card details + self?.onGiftCardPurchased?(txId) + } + ) + + self.navigationController?.pushViewController(hostingController, animated: true) + } + + private func refreshTokenAndMerchantInfo() { + Task { + if try await tryRefreshCtxToken(), let merchantId = pointOfUse.merchant?.merchantId { + let merchantInfo = try await CTXSpendService.shared.getMerchant(merchantId: merchantId) + pointOfUse = pointOfUse.updatingMerchant( + denominationsType: merchantInfo.denominationsType, + denominations: merchantInfo.denominations.compactMap { Int($0) } + ) + } + } + } + + private func tryRefreshCtxToken() async throws -> Bool { + do { + try await CTXSpendService.shared.refreshToken() + return true + } catch CTXSpendError.tokenRefreshFailed { + await showModalDialog(style: .warning, icon: .system("exclamationmark.triangle.fill"), heading: NSLocalizedString("Your session expired", comment: "DashSpend"), textBlock1: NSLocalizedString("It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash.", comment: "DashSpend"), positiveButtonText: NSLocalizedString("Dismiss", comment: "")) + return false + } + } } @@ -208,3 +297,45 @@ extension ExplorePointOfUse { } } } + +extension UIHostingController: NavigationBarDisplayable { + var isBackButtonHidden: Bool { true } + var isNavigationBarHidden: Bool { true } +} + +extension ExplorePointOfUse { + func updatingMerchant(denominationsType: String?, denominations: [Int]) -> ExplorePointOfUse { + guard case .merchant(let currentMerchant) = category else { return self } + + let updatedMerchant = ExplorePointOfUse.Merchant( + merchantId: currentMerchant.merchantId, + paymentMethod: currentMerchant.paymentMethod, + type: currentMerchant.type, + deeplink: currentMerchant.deeplink, + savingsBasisPoints: currentMerchant.savingsBasisPoints, + denominationsType: denominationsType, + denominations: denominations, + redeemType: currentMerchant.redeemType + ) + + return ExplorePointOfUse( + id: id, + name: name, + category: .merchant(updatedMerchant), + active: active, + city: city, + territory: territory, + address1: address1, + address2: address2, + address3: address3, + address4: address4, + latitude: latitude, + longitude: longitude, + website: website, + phone: phone, + logoLocation: logoLocation, + coverImage: coverImage, + source: source + ) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/Views/PointOfUseDetailsView.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/Views/PointOfUseDetailsView.swift index fe661bf31..b0339c7bf 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/Views/PointOfUseDetailsView.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Details/Views/PointOfUseDetailsView.swift @@ -17,13 +17,24 @@ import MapKit import UIKit +import Combine // MARK: - PointOfUseDetailsView -class PointOfUseDetailsView: UIView { - @objc public var payWithDashHandler: (()->())? - @objc public var sellDashHandler: (()->())? - @objc public var showAllLocationsActionBlock: (() -> ())? +class PointOfUseDetailsView: UIView, SyncingActivityMonitorObserver, NetworkReachabilityHandling { + private var disposeBag = Set() + private let ctxSpendService = CTXSpendService.shared + private let syncMonitor = SyncingActivityMonitor.shared + + // NetworkReachabilityHandling requirements + var networkStatusDidChange: ((NetworkStatus) -> ())? + var reachabilityObserver: Any! + + public var payWithDashHandler: (()->())? + public var sellDashHandler: (()->())? + public var dashSpendAuthHandler: (()->())? + public var buyGiftCardHandler: (()->())? + public var showAllLocationsActionBlock: (() -> ())? var containerView: UIStackView! var headerContainerView: UIStackView! @@ -35,9 +46,60 @@ class PointOfUseDetailsView: UIView { var nameLabel: UILabel! var subLabel: UILabel! var addressLabel: UILabel! + private var payButton: ActionButton! internal let merchant: ExplorePointOfUse internal var isShowAllHidden: Bool + + private let emailLabel: UILabel = { + let emailLabel = UILabel() + emailLabel.translatesAutoresizingMaskIntoConstraints = false + emailLabel.text = getEmailText() + emailLabel.font = .dw_font(forTextStyle: .footnote) + emailLabel.textColor = .dw_secondaryText() + emailLabel.textAlignment = .right + + return emailLabel + }() + + private lazy var loginStatusView: UIView = { + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + + emailLabel.lineBreakMode = .byTruncatingHead + + let logoutButton = UIButton(type: .system) + logoutButton.translatesAutoresizingMaskIntoConstraints = false + logoutButton.setTitle(NSLocalizedString("Log Out", comment: ""), for: .normal) + logoutButton.addTarget(self, action: #selector(logoutAction), for: .touchUpInside) + + if let buttonTitle = logoutButton.titleLabel { + let attributeString = NSMutableAttributedString(string: buttonTitle.text!) + attributeString.addAttribute(.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: attributeString.length)) + attributeString.addAttribute(.foregroundColor, value: UIColor.dw_secondaryText(), range: NSRange(location: 0, length: attributeString.length)) + logoutButton.setAttributedTitle(attributeString, for: .normal) + } + + logoutButton.setTitleColor(.dw_secondaryText(), for: .normal) + logoutButton.tintColor = .dw_secondaryText() + + view.addSubview(emailLabel) + view.addSubview(logoutButton) + + NSLayoutConstraint.activate([ + emailLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor), + emailLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor), + emailLabel.trailingAnchor.constraint(equalTo: logoutButton.leadingAnchor, constant: -8), + + logoutButton.centerYAnchor.constraint(equalTo: view.centerYAnchor), + logoutButton.trailingAnchor.constraint(equalTo: view.trailingAnchor), + logoutButton.widthAnchor.constraint(lessThanOrEqualToConstant: 100), + + view.heightAnchor.constraint(equalToConstant: 20) + ]) + + return view + }() public init(merchant: ExplorePointOfUse, isShowAllHidden: Bool = false) { self.isShowAllHidden = isShowAllHidden @@ -46,11 +108,17 @@ class PointOfUseDetailsView: UIView { super.init(frame: .zero) configureHierarchy() + configureObservers() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + deinit { + syncMonitor.remove(observer: self) + stopNetworkMonitoring() + } @objc func callAction() { @@ -86,6 +154,12 @@ class PointOfUseDetailsView: UIView { if case .merchant(let m) = merchant.category, let deeplink = m.deeplink, let url = URL(string: deeplink), UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) + } else if case .merchant(let m) = merchant.category, m.paymentMethod == .giftCard { + if ctxSpendService.isUserSignedIn { + buyGiftCardHandler?() + } else { + dashSpendAuthHandler?() + } } else { payWithDashHandler?() } @@ -117,10 +191,25 @@ class PointOfUseDetailsView: UIView { configureBottomButton() } - override func layoutSubviews() { - super.layoutSubviews() - - containerView.setNeedsLayout() + private func configureObservers() { + ctxSpendService.$isUserSignedIn + .receive(on: DispatchQueue.main) + .sink { [weak self] isSignedIn in + self?.refreshLoginStatus() + self?.updateButtonState() + } + .store(in: &disposeBag) + + // Monitor network status + networkStatusDidChange = { [weak self] _ in + DispatchQueue.main.async { + self?.updateButtonState() + } + } + startNetworkMonitoring() + + // Monitor sync status + syncMonitor.add(observer: self) } } @@ -251,10 +340,12 @@ extension PointOfUseDetailsView { @objc internal func configureBottomButton() { - let payButton = ActionButton() + payButton = ActionButton() payButton.translatesAutoresizingMaskIntoConstraints = false payButton.addTarget(self, action: #selector(payAction), for: .touchUpInside) containerView.addArrangedSubview(payButton) + containerView.addArrangedSubview(loginStatusView) + refreshLoginStatus() if case .merchant(let m) = merchant.category { if m.paymentMethod == .giftCard { @@ -262,12 +353,19 @@ extension PointOfUseDetailsView { payButton.setImage(UIImage(named: "image.explore.dash.gift-card"), for: .normal) payButton.accentColor = .dw_orange() - if let deeplink = m.deeplink, let url = URL(string: deeplink) { - payButton.isEnabled = UIApplication.shared.canOpenURL(url) - } else { - payButton.isEnabled = false + if m.savingsBasisPoints > 0 { + let savingsTag = SavingsTagView() + savingsTag.backgroundColor = .clear + savingsTag.translatesAutoresizingMaskIntoConstraints = false + savingsTag.setText(String(format: NSLocalizedString("Save %.2f%%", comment: "DashSpend"), m.toSavingPercentages())) + containerView.addSubview(savingsTag) + + NSLayoutConstraint.activate([ + savingsTag.trailingAnchor.constraint(equalTo: payButton.trailingAnchor, constant: -30), + savingsTag.bottomAnchor.constraint(equalTo: payButton.topAnchor, constant: 13), + savingsTag.heightAnchor.constraint(equalToConstant: 26), + ]) } - } else { payButton.setTitle(NSLocalizedString("Pay with Dash", comment: "Pay with Dash"), for: .normal) payButton.setImage(UIImage(named: "image.explore.dash.circle"), for: .normal) @@ -277,6 +375,76 @@ extension PointOfUseDetailsView { NSLayoutConstraint.activate([ payButton.heightAnchor.constraint(equalToConstant: 48), ]) + + // Set initial button state + updateButtonState() + } + + private static func getEmailText() -> String { + if let email = CTXSpendService.shared.userEmail, !email.isEmpty { + let maskedEmail = maskEmail(email) + return String.localizedStringWithFormat(NSLocalizedString("Logged in as %@", comment: "DashSpend"), maskedEmail) + } else { + return NSLocalizedString("Logged in", comment: "") + } + } + + private static func maskEmail(_ email: String) -> String { + let components = email.components(separatedBy: "@") + guard components.count == 2 else { return email } + + let username = components[0] + let domain = components[1] + + if username.count <= 1 { + return "******@\(domain)" + } + + let firstChar = String(username.prefix(1)) + return "\(firstChar)******@\(domain)" + } + + @objc + func logoutAction() { + ctxSpendService.logout() + loginStatusView.isHidden = true + } + + func refreshLoginStatus() { + if ctxSpendService.isUserSignedIn, + case .merchant(let m) = merchant.category, + m.paymentMethod == .giftCard { + emailLabel.text = PointOfUseDetailsView.getEmailText() + loginStatusView.isHidden = false + } else { + loginStatusView.isHidden = true + } + } + + private func updateButtonState() { + guard let payButton = payButton, + case .merchant(let m) = merchant.category, + m.paymentMethod == .giftCard else { + return + } + + let isActive = merchant.active + let isOnline = networkStatus == .online + let isSynced = syncMonitor.state == .syncDone + + payButton.isEnabled = isActive && isOnline && isSynced + } +} + +// MARK: - SyncingActivityMonitorObserver + +extension PointOfUseDetailsView { + func syncingActivityMonitorProgressDidChange(_ progress: Double) { } + + func syncingActivityMonitorStateDidChange(previousState: SyncingActivityMonitor.State, state: SyncingActivityMonitor.State) { + DispatchQueue.main.async { [weak self] in + self?.updateButtonState() + } } } @@ -297,3 +465,54 @@ final class VerticalButton: TintedButton { self.configuration = updatedConfiguration } } + +// MARK: - SavingsTagView + +final class SavingsTagView: UIView { + private let label = UILabel() + private let tailSize: CGFloat = 8 + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupView() { + label.font = .systemFont(ofSize: 16, weight: .medium) + label.textColor = UIColor.dw_background() + label.textAlignment = .center + label.translatesAutoresizingMaskIntoConstraints = false + addSubview(label) + + NSLayoutConstraint.activate([ + label.topAnchor.constraint(equalTo: topAnchor), + label.bottomAnchor.constraint(equalTo: bottomAnchor), + label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 12), + label.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -12), + ]) + } + + func setText(_ text: String) { + label.text = text + } + + override func draw(_ rect: CGRect) { + let path = UIBezierPath() + + let mainRect = rect.inset(by: UIEdgeInsets(top: 0, left: tailSize, bottom: 0, right: 0)) + let roundedRect = UIBezierPath(roundedRect: mainRect, cornerRadius: 4) + path.append(roundedRect) + + path.move(to: CGPoint(x: tailSize, y: 3)) + path.addLine(to: CGPoint(x: 0, y: rect.midY)) + path.addLine(to: CGPoint(x: tailSize, y: rect.midY)) + path.close() + + UIColor.dw_label().withAlphaComponent(0.7).setFill() + path.fill() + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/GiftCardInfoViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/GiftCardInfoViewController.swift deleted file mode 100644 index 8098dd7a4..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/GiftCardInfoViewController.swift +++ /dev/null @@ -1,112 +0,0 @@ -// -// Created by Pavel Tikhonenko -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -class GiftCardInfoViewController: PointOfUseInfoViewController { - override func configureHierarchy() { - super.configureHierarchy() - - let contentView = UIStackView() - contentView.axis = .vertical - contentView.spacing = 30 - contentView.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(contentView) - - let topStackView = UIStackView() - topStackView.axis = .vertical - topStackView.spacing = 10 - topStackView.translatesAutoresizingMaskIntoConstraints = false - contentView.addArrangedSubview(topStackView) - - let titleLabel = UILabel() - titleLabel.translatesAutoresizingMaskIntoConstraints = false - titleLabel.textColor = .dw_label() - titleLabel.font = .dw_font(forTextStyle: .title1) - titleLabel.textAlignment = .center - titleLabel.numberOfLines = 0 - titleLabel.text = NSLocalizedString("How to Use a Gift Card", comment: "") - topStackView.addArrangedSubview(titleLabel) - - let descLabel = UILabel() - descLabel.translatesAutoresizingMaskIntoConstraints = false - descLabel.textColor = .dw_label() - descLabel.font = UIFont.dw_font(forTextStyle: .callout) - descLabel.textAlignment = .center - descLabel.numberOfLines = 0 - descLabel - .text = NSLocalizedString("Not all of the stores accept DASH directly, but you can buy a gift card with your Dash.", - comment: "") - topStackView.addArrangedSubview(descLabel) - - let titles = [ - NSLocalizedString("Find a merchant.", comment: ""), - NSLocalizedString("Buy a gift card with Dash.", comment: ""), - NSLocalizedString("Redeem your gift card online within seconds or at the cashier.", comment: ""), - ] - let icons = [ - "image.explore.dash.wts.map", - "image.explore.dash.wts.card.blue", - "image.explore.dash.wts.lighting", - ] - let itemCount: size_t = 3 - - for i in 0.. UIStackView { - let itemStackView = UIStackView() - itemStackView.axis = .horizontal - itemStackView.spacing = 10 - itemStackView.translatesAutoresizingMaskIntoConstraints = false - itemStackView.alignment = .firstBaseline - - let iconImageView = UIImageView(image: image) - iconImageView.translatesAutoresizingMaskIntoConstraints = false - iconImageView.contentMode = .center - itemStackView.addArrangedSubview(iconImageView) - - - let itemTitleLabel = UILabel() - itemTitleLabel.text = title - itemTitleLabel.translatesAutoresizingMaskIntoConstraints = false - itemTitleLabel.textColor = .dw_label() - itemTitleLabel.font = UIFont.dw_font(forTextStyle: .body) - itemTitleLabel.textAlignment = .left - itemTitleLabel.numberOfLines = 0; - itemStackView.addArrangedSubview(itemTitleLabel) - - NSLayoutConstraint.activate([ - iconImageView.widthAnchor.constraint(equalToConstant: 50), - iconImageView.centerYAnchor.constraint(equalTo: itemTitleLabel.topAnchor, constant: 10), - ]) - - return itemStackView - } -} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/MerchantInfoViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/MerchantInfoViewController.swift deleted file mode 100644 index 5c6865774..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/MerchantInfoViewController.swift +++ /dev/null @@ -1,144 +0,0 @@ -// -// Created by Pavel Tikhonenko -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -class MerchantInfoViewController: PointOfUseInfoViewController { - - @objc - func learnMoreAction() { - let vc = GiftCardInfoViewController() - present(vc, animated: true) - } - - @objc - func continueButtonAction() { - dismiss(animated: true) - } - - override func configureHierarchy() { - super.configureHierarchy() - - let contentView = UIStackView() - contentView.axis = .vertical - contentView.spacing = 30 - contentView.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(contentView) - - let titleLabel = UILabel() - titleLabel.translatesAutoresizingMaskIntoConstraints = false - titleLabel.textColor = .dw_label() - titleLabel.font = UIFont.dw_font(forTextStyle: .title1) - titleLabel.textAlignment = .center - titleLabel.numberOfLines = 0 - titleLabel.text = NSLocalizedString("We have 2 types of merchants", comment: "") - contentView.addArrangedSubview(titleLabel) - - var itemView: UIStackView? - itemView = merchantTypeView(for: NSLocalizedString("Accepts DASH directly", comment: ""), - subtitle: NSLocalizedString("Pay with the DASH Wallet.", comment: ""), - image: UIImage(named: "image.explore.dash.wts.dash")) - if let itemView { - contentView.addArrangedSubview(itemView) - } - - let giftCardStack = UIStackView() - giftCardStack.axis = .vertical - giftCardStack.spacing = 2 - contentView.addArrangedSubview(giftCardStack) - - itemView = merchantTypeView(for: NSLocalizedString("Buy gift cards with your Dash", comment: ""), - subtitle: NSLocalizedString("Buy gift cards with your Dash for the exact amount of your purchase.", - comment: ""), - image: UIImage(named: "image.explore.dash.wts.card.orange")) - if let itemView { - giftCardStack.addArrangedSubview(itemView) - } - - let learnMoreButton = UIButton(type: .custom) - learnMoreButton.setTitle(NSLocalizedString("Learn More", comment: ""), for: .normal) - learnMoreButton.setTitleColor(UIColor.dw_dashBlue(), for: .normal) - learnMoreButton.titleLabel?.font = UIFont.dw_font(forTextStyle: UIFont.TextStyle.footnote) - learnMoreButton.addTarget(self, action: #selector(learnMoreAction), for: .touchUpInside) - giftCardStack.addArrangedSubview(learnMoreButton) - contentView.addArrangedSubview(UIView()) - - let continueButton = ActionButton() - continueButton.translatesAutoresizingMaskIntoConstraints = false - continueButton.setTitle(NSLocalizedString("Continue", comment: ""), for: .normal) - continueButton.addTarget(self, action: #selector(continueButtonAction), for: .touchUpInside) - view.addSubview(continueButton) - - NSLayoutConstraint.activate([ - contentView.topAnchor.constraint(equalTo: view.topAnchor, - constant: 74), - contentView.bottomAnchor.constraint(greaterThanOrEqualTo: continueButton.topAnchor, - constant: 30), - contentView.leadingAnchor.constraint(equalTo: view.leadingAnchor, - constant: 15), - contentView.trailingAnchor.constraint(equalTo: view.trailingAnchor, - constant: -15), - continueButton.heightAnchor.constraint(equalToConstant: 46), - continueButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, - constant: -15), - continueButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, - constant: 15), - continueButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, - constant: -15), - ]) - } - - func merchantTypeView(for title: String?, subtitle: String?, image: UIImage?) -> UIStackView? { - let itemStackView = UIStackView() - itemStackView.axis = .vertical - itemStackView.spacing = 10 - itemStackView.translatesAutoresizingMaskIntoConstraints = false - itemStackView.distribution = .equalSpacing - - let iconImageView = UIImageView(image: image) - iconImageView.translatesAutoresizingMaskIntoConstraints = false - iconImageView.contentMode = .scaleAspectFit - itemStackView.addArrangedSubview(iconImageView) - - let labelsStackView = UIStackView() - labelsStackView.translatesAutoresizingMaskIntoConstraints = false - labelsStackView.axis = .vertical - labelsStackView.spacing = 1 - labelsStackView.alignment = .center - itemStackView.addArrangedSubview(labelsStackView) - - let itemTitleLabel = UILabel() - itemTitleLabel.text = title - itemTitleLabel.translatesAutoresizingMaskIntoConstraints = false - itemTitleLabel.textColor = .dw_label() - itemTitleLabel.font = UIFont.dw_font(forTextStyle: .body) - itemTitleLabel.textAlignment = .center - itemTitleLabel.numberOfLines = 0 - labelsStackView.addArrangedSubview(itemTitleLabel) - - let descLabel = UILabel() - descLabel.text = subtitle - descLabel.translatesAutoresizingMaskIntoConstraints = false - descLabel.textColor = .dw_secondaryText() - descLabel.font = UIFont.dw_font(forTextStyle: .footnote) - descLabel.textAlignment = .center - descLabel.numberOfLines = 0 - labelsStackView.addArrangedSubview(descLabel) - return itemStackView - } -} - diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/MerchantTypesDialog.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/MerchantTypesDialog.swift new file mode 100644 index 000000000..61ba1c692 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/MerchantTypesDialog.swift @@ -0,0 +1,47 @@ +// +// 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 + +public struct MerchantTypesDialog: View { + @Environment(\.presentationMode) private var presentationMode + var action: (() -> Void)? = nil + + public var body: some View { + BottomSheet(showBackButton: .constant(false)) { + TextIntro( + icon: .custom("image.merchant"), + buttonLabel: NSLocalizedString("Ok", comment: ""), + action: { + presentationMode.wrappedValue.dismiss() + action?() + }, + inProgress: .constant(false), + topText: { + FeatureTopText( + title: NSLocalizedString("We have two types of merchants", comment: "Explore"), + text: NSLocalizedString("The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps.", comment: "Explore") + ) + }, + features: {[ + FeatureSingleItem(iconName: .custom("image.explore.dash.wts.payment.dash"), title: NSLocalizedString("Accept Dash directly", comment: "Explore"), description: NSLocalizedString("You can pay with Dash at the cashier.", comment: "Explore")), + FeatureSingleItem(iconName: .custom("image.explore.dash.wts.card.orange"), title: NSLocalizedString("Buy gift cards with your Dash", comment: "Explore"), description: NSLocalizedString("Buy gift cards with your Dash for the exact amount of your purchase.", comment: "Explore")), + ]} + ) + } + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/PointOfUseInfoViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/PointOfUseInfoViewController.swift deleted file mode 100644 index e64cc137f..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/Info/PointOfUseInfoViewController.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// Created by Pavel Tikhonenko -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -class PointOfUseInfoViewController: UIViewController { - @objc - func closeButtonAction() { - dismiss(animated: true) - } - - internal func configureHierarchy() { - view.backgroundColor = .dw_secondaryBackground() - - let configuration = UIImage.SymbolConfiguration(pointSize: 18, weight: .bold, scale: .medium) - let closeImage = UIImage(systemName: "xmark", withConfiguration: configuration) - - let closeButton = UIButton(type: .custom) - closeButton.translatesAutoresizingMaskIntoConstraints = false - closeButton.setImage(closeImage, for: .normal) - closeButton.addTarget(self, action: #selector(closeButtonAction), for: .touchUpInside) - view.addSubview(closeButton) - - NSLayoutConstraint.activate([ - closeButton.widthAnchor.constraint(equalToConstant: 30), - closeButton.heightAnchor.constraint(equalToConstant: 30), - closeButton.topAnchor.constraint(equalTo: view.topAnchor, constant: 12), - closeButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15), - - ]) - } - - override func viewDidLoad() { - super.viewDidLoad() - - configureHierarchy() - } -} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AllMerchantLocationsViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AllMerchantLocationsViewController.swift index 4fd9731a8..eb33c3064 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AllMerchantLocationsViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AllMerchantLocationsViewController.swift @@ -63,7 +63,7 @@ class AllMerchantLocationsViewController: ExplorePointOfUseListViewController { model = PointOfUseListModel(segments: [.init(tag: 0, title: "", showMap: true, showLocationServiceSettings: false, showReversedLocation: false, dataProvider: AllMerchantLocationsDataProvider(pointOfUse: pointOfUse), - filterGroups: [], defaultFilters: nil, territoriesDataSource: nil, showsFilters: true)]) + filterGroups: [], territoriesDataSource: nil, sortOptions: [.name, .distance, .discount])]) } override func configureHierarchy() { diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swift index 3193b98c0..db77c7e81 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/AtmListViewController.swift @@ -34,8 +34,7 @@ enum AtmListSegmnets: Int { defaultFilters.radius = .twenty return .init(tag: rawValue, title: title, showMap: true, showLocationServiceSettings: false, showReversedLocation: true, - dataProvider: dataProvider, filterGroups: filterGroups, defaultFilters: defaultFilters, - territoriesDataSource: territories, showsFilters: true) + dataProvider: dataProvider, filterGroups: filterGroups, territoriesDataSource: territories, sortOptions: [.name, .distance]) } } @@ -67,7 +66,7 @@ extension AtmListSegmnets { } var filterGroups: [PointOfUseListFiltersGroup] { - [.sortByDistanceOrName, .territory, .radius, .locationService] + [.sortBy, .territory, .radius, .locationService] } var territories: TerritoryDataSource { diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/MerchantItemCell.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/MerchantItemCell.swift index 486fe23bc..c62c1294f 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/MerchantItemCell.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/MerchantItemCell.swift @@ -22,6 +22,7 @@ import UIKit class MerchantItemCell: PointOfUseItemCell { private var paymentTypeIconView: UIImageView! + private var savingsLabel: UILabel! override func update(with pointOfUse: ExplorePointOfUse) { super.update(with: pointOfUse) @@ -43,6 +44,13 @@ class MerchantItemCell: PointOfUseItemCell { let isGiftCard = merchant.paymentMethod == .giftCard let paymentIconName = isGiftCard ? "image.explore.dash.wts.payment.gift-card" : "image.explore.dash.wts.payment.dash"; paymentTypeIconView.image = UIImage(named: paymentIconName) + + if merchant.savingsBasisPoints > 0 { + savingsLabel.isHidden = false + savingsLabel.text = String(format: NSLocalizedString("~%.0f%%", comment: "Savings percentage"), merchant.toSavingPercentages()) + } else { + savingsLabel.isHidden = true + } } } @@ -50,6 +58,14 @@ extension MerchantItemCell { override func configureHierarchy() { super.configureHierarchy() + savingsLabel = UILabel() + savingsLabel.translatesAutoresizingMaskIntoConstraints = false + savingsLabel.font = .systemFont(ofSize: 14, weight: .medium) + savingsLabel.textColor = .dw_secondaryText() + savingsLabel.isHidden = true + savingsLabel.textAlignment = .right + mainStackView.addArrangedSubview(savingsLabel) + paymentTypeIconView = UIImageView(image: UIImage(named: "image.explore.dash.wts.payment.dash")) paymentTypeIconView.translatesAutoresizingMaskIntoConstraints = false paymentTypeIconView.contentMode = .center diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseItemCell.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseItemCell.swift index ed2037e66..c0e007e85 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseItemCell.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseItemCell.swift @@ -78,7 +78,7 @@ extension PointOfUseItemCell { nameLabel = UILabel() nameLabel.translatesAutoresizingMaskIntoConstraints = false - nameLabel.font = UIFont.systemFont(ofSize: 14) + nameLabel.font = UIFont.systemFont(ofSize: 14, weight: .medium) textStackView.addArrangedSubview(nameLabel) subLabel = UILabel() diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseListFiltersCell.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseListFiltersCell.swift index 51252b682..64d815611 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseListFiltersCell.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Cells/PointOfUseListFiltersCell.swift @@ -69,7 +69,7 @@ class PointOfUseListFiltersCell: UITableViewCell { var label = UILabel() label.adjustsFontSizeToFitWidth = true label.translatesAutoresizingMaskIntoConstraints = false - label.font = .systemFont(ofSize: 20) + label.font = .systemFont(ofSize: 20, weight: .semibold) label.minimumScaleFactor = 0.5 txtStackView.addArrangedSubview(label) titleLabel = label 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..4724e42f1 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExplorePointOfUseListViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExplorePointOfUseListViewController.swift @@ -17,6 +17,7 @@ import CoreLocation import UIKit +import SwiftUI private let kExploreWhereToSpendSectionCount = 5 @@ -34,6 +35,20 @@ enum ExplorePointOfUseSections: Int { case nextPage } +protocol PointOfUseListFiltersViewControllerDelegate: AnyObject { + func apply(filters: PointOfUseListFilters?) +} + +public enum PointOfUseListFiltersGroup { + case paymentType + case sortBy + case denominationType + + case territory + case radius + case locationService +} + // MARK: - ExplorePointOfUseListViewController @objc @@ -42,6 +57,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 } @@ -51,6 +67,8 @@ class ExplorePointOfUseListViewController: UIViewController { internal var radius = 20 // In miles //Move to model internal var mapView: ExploreMapView! internal var showMapButton: UIButton! + internal var syncBannerView: ExploreSyncBannerView? + internal var syncBannerHeightConstraint: NSLayoutConstraint? internal var contentViewTopLayoutConstraint: NSLayoutConstraint! internal var contentView: UIView! @@ -126,6 +144,7 @@ class ExplorePointOfUseListViewController: UIViewController { let vc = PointOfUseDetailsViewController(pointOfUse: pointOfUse) vc.payWithDashHandler = payWithDashHandler vc.sellDashHandler = sellDashHandler + vc.onGiftCardPurchased = onGiftCardPurchased navigationController?.pushViewController(vc, animated: true) } @@ -134,6 +153,9 @@ class ExplorePointOfUseListViewController: UIViewController { showMapIfNeeded() DWLocationManager.shared.add(observer: self) + + // Check database sync status again in case it changed while navigating + checkDatabaseSyncStatus() } override func viewWillDisappear(_ animated: Bool) { @@ -142,6 +164,7 @@ class ExplorePointOfUseListViewController: UIViewController { super.viewWillDisappear(animated) DWLocationManager.shared.remove(observer: self) + NotificationCenter.default.removeObserver(self, name: ExploreDatabaseSyncManager.databaseHasBeenUpdatedNotification, object: nil) } override func viewDidLoad() { @@ -182,12 +205,76 @@ class ExplorePointOfUseListViewController: UIViewController { } configureHierarchy() + + // Check database sync status + checkDatabaseSyncStatus() + + // Observe database sync notifications + NotificationCenter.default.addObserver(self, selector: #selector(databaseHasBeenUpdated), name: ExploreDatabaseSyncManager.databaseHasBeenUpdatedNotification, object: nil) } } extension ExplorePointOfUseListViewController { @objc internal func configureModel() { } + + private func checkDatabaseSyncStatus() { + // Check if we need to show sync banner + // If database doesn't exist or has old schema, show banner + let documentsPath = FileManager.documentsDirectoryURL.appendingPathComponent(kExploreDashDatabaseName) + let fileExists = FileManager.default.fileExists(atPath: documentsPath.path) + + // If file doesn't exist or has old schema, show sync banner + if !fileExists || ExploreDatabaseConnection.hasOldMerchantIdSchema(at: documentsPath) { + showSyncBanner() + } else { + hideSyncBanner() + } + } + + private func showSyncBanner() { + guard syncBannerView?.isHidden == true else { return } + + syncBannerView?.isHidden = false + syncBannerHeightConstraint?.constant = 30 + + UIView.animate(withDuration: 0.3) { + self.view.layoutIfNeeded() + } + } + + private func hideSyncBanner() { + guard syncBannerView?.isHidden == false else { return } + + syncBannerHeightConstraint?.constant = 0 + + UIView.animate(withDuration: 0.3) { + self.view.layoutIfNeeded() + } completion: { _ in + self.syncBannerView?.isHidden = true + } + } + + @objc private func databaseHasBeenUpdated() { + DispatchQueue.main.async { [weak self] in + // Database has been updated, hide the sync banner + self?.hideSyncBanner() + + // The database connection needs to be re-established after update + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in + guard let self = self else { return } + + self.model.items = [] + if let currentProvider = self.model.currentDataProvider { + currentProvider.items = [] + currentProvider.currentPage = nil + } + + self.model.refreshItems() + self.tableView.reloadData() + } + } + } } // MARK: DWLocationObserver @@ -304,6 +391,12 @@ extension ExplorePointOfUseListViewController { contentView.layer.cornerRadius = 20 contentView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] view.addSubview(contentView) + + // Add sync banner attached to app bar but overlaying content + syncBannerView = ExploreSyncBannerView() + syncBannerView?.translatesAutoresizingMaskIntoConstraints = false + syncBannerView?.isHidden = true + view.addSubview(syncBannerView!) let stackView = UIStackView() stackView.axis = .vertical @@ -362,6 +455,10 @@ extension ExplorePointOfUseListViewController { contentViewTopLayoutConstraint = contentView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: -handlerViewHeight) + + syncBannerHeightConstraint = syncBannerView!.heightAnchor.constraint(equalToConstant: 0) + // Set high z-position to overlay content + syncBannerView!.layer.zPosition = 100 NSLayoutConstraint.activate([ contentViewTopLayoutConstraint, @@ -369,6 +466,12 @@ extension ExplorePointOfUseListViewController { contentView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), contentView.leadingAnchor.constraint(equalTo: view.leadingAnchor), contentView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + + // Sync banner constraints - attached to app bar, overlaying content + syncBannerView!.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + syncBannerView!.leadingAnchor.constraint(equalTo: view.leadingAnchor), + syncBannerView!.trailingAnchor.constraint(equalTo: view.trailingAnchor), + syncBannerHeightConstraint!, handlerView.heightAnchor.constraint(equalToConstant: handlerViewHeight), @@ -393,16 +496,24 @@ extension ExplorePointOfUseListViewController { // MARK: Actions extension ExplorePointOfUseListViewController { private func showFilters() { - let vc = PointOfUseListFiltersViewController.controller() - vc.filtersToUse = currentSegment.filterGroups.filter { filter in - DWLocationManager.shared.currentLocation != nil || (filter != .sortByDistanceOrName && filter != .radius) + let filterGroups = currentSegment.filterGroups.filter { filter in + DWLocationManager.shared.currentLocation != nil || (filter != .sortBy && filter != .radius) + } + + let filtersView = MerchantFiltersView( + currentFilters: model.filters, + filterGroups: currentSegment.filterGroups, + territoriesDataSource: currentSegment.territoriesDataSource, + sortOptions: currentSegment.sortOptions + ) { [weak self] filters in + self?.apply(filters: filters) } - vc.territoriesDataSource = currentSegment.territoriesDataSource - vc.delegate = self - vc.defaultFilters = model.initialFilters - vc.filters = model.filters ?? model.initialFilters - let nvc = UINavigationController(rootViewController: vc) - present(nvc, animated: true) + + let hostingController = UIHostingController( + rootView: NavigationView { filtersView } + ) + + present(hostingController, animated: true) } private func updateAppliedFiltersView() { diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExploreSyncBannerView.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExploreSyncBannerView.swift new file mode 100644 index 000000000..cf4dd8d9a --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/ExploreSyncBannerView.swift @@ -0,0 +1,54 @@ +// +// 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 + +class ExploreSyncBannerView: UIView { + + private let label: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.text = NSLocalizedString("Sync in progress… Results may not be complete.", comment: "Explore Dash") + label.textColor = .white + label.font = .dw_font(forTextStyle: .footnote) + label.textAlignment = .center + label.numberOfLines = 1 + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupView() + } + + private func setupView() { + backgroundColor = .dw_dashBlue() + + addSubview(label) + + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), + label.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), + label.topAnchor.constraint(equalTo: topAnchor, constant: 8), + ]) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/Model/TerritoryListModel.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/Model/TerritoryListModel.swift deleted file mode 100644 index d38e1737e..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/Model/TerritoryListModel.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// Created by tkhp -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -typealias Territory = String - -// MARK: - TerritoriesListModel - -final class TerritoriesListModel { - var territories: [Territory] = [] - - var territoriesDidChange: (() -> ())? - var territoriesDataSource: TerritoryDataSource? { - didSet { - fetchTerritories() - } - } - - init() { - fetchTerritories() - } - - private func fetchTerritories() { - guard let dataSource = territoriesDataSource else { return } - - dataSource { - [weak self] result in - switch result { - case .success(let r): - self?.territories = r - DispatchQueue.main.async { - self?.territoriesDidChange?() - } - case .failure: - break - } - } - } -} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/TerritoriesListViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/TerritoriesListViewController.swift deleted file mode 100644 index cfd92e40c..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/TerritoriesListViewController.swift +++ /dev/null @@ -1,222 +0,0 @@ -// -// Created by tkhp -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -private let tableViewCellIdentifier = "TerritoryCell" - -// MARK: - TerritoriesListViewControllerDelegate - -protocol TerritoriesListViewControllerDelegate: AnyObject { - func didSelectTerritory(_ territory: Territory) - func didSelectCurrentLocation() -} - -// MARK: - TerritoriesListViewController - -class TerritoriesListViewController: UITableViewController { - public var selectedTerritory: Territory? - public weak var delegate: TerritoriesListViewControllerDelegate? - - private var searchController: UISearchController! - private var searchResultsController: SelectLocationResultsViewController! - - private var model: TerritoriesListModel! - - public var territoriesDataSource: TerritoryDataSource? { - didSet { - model?.territoriesDataSource = territoriesDataSource - } - } - - override func viewDidLoad() { - super.viewDidLoad() - - configureModel() - configureHierarchy() - } - - class func controller() -> TerritoriesListViewController { - let storyboard = UIStoryboard(name: "ExploreDash", bundle: nil) - return storyboard.instantiateViewController(withIdentifier: "SelectStateViewController") as! TerritoriesListViewController - } -} - -extension TerritoriesListViewController { - private func configureModel() { - model = TerritoriesListModel() - model.territoriesDataSource = territoriesDataSource - model.territoriesDidChange = { [weak self] in - self?.tableView.reloadData() - } - } - - private func configureHierarchy() { - title = NSLocalizedString("Location", comment: "") - - let standardAppearance = UINavigationBarAppearance() - standardAppearance.configureWithOpaqueBackground() - standardAppearance.backgroundColor = .systemBackground - standardAppearance.shadowColor = nil - standardAppearance.shadowImage = nil - - let compactAppearance = standardAppearance.copy() - - let navBar = navigationController!.navigationBar - navBar.isTranslucent = true - navBar.standardAppearance = standardAppearance - navBar.scrollEdgeAppearance = standardAppearance - navBar.compactAppearance = compactAppearance - if #available(iOS 15.0, *) { - navBar.compactScrollEdgeAppearance = compactAppearance - } - - tableView.layoutMargins = .init(top: 0.0, left: 15, bottom: 0.0, right: 0) - tableView.separatorInset = tableView.layoutMargins - - searchResultsController = storyboard? - .instantiateViewController(withIdentifier: "SelectLocationResultsViewController") as? SelectLocationResultsViewController - searchResultsController.tableView.delegate = self - - searchController = UISearchController(searchResultsController: searchResultsController) - searchController.automaticallyShowsCancelButton = true - searchController.delegate = self - searchController.searchResultsUpdater = self - searchController.searchBar.autocapitalizationType = .none - searchController.searchBar.delegate = self - - navigationItem.searchController = searchController - navigationItem.hidesSearchBarWhenScrolling = false - - definesPresentationContext = true - } -} - -extension TerritoriesListViewController { - override func numberOfSections(in tableView: UITableView) -> Int { - 2 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - switch section { - case 0: - return 1 - default: - return model.territories.count - } - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - switch indexPath.section { - case 0: - let cell = tableView.dequeueReusableCell(withIdentifier: "CurrentLocationCell", for: indexPath) - return cell - default: - let territory = model.territories[indexPath.row] - let cell = tableView.dequeueReusableCell(withIdentifier: tableViewCellIdentifier, for: indexPath) - var configuration = cell.defaultContentConfiguration() - configuration.text = territory - cell.contentConfiguration = configuration - - return cell - } - } - - override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { - switch indexPath.section { - case 0: - cell.setSelected(selectedTerritory == nil, animated: false) - default: - let territory = model.territories[indexPath.row] - cell.isSelected = territory == selectedTerritory - } - } - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - switch indexPath.section { - case 0: - selectedTerritory = nil - delegate?.didSelectCurrentLocation() - default: - let territory = model.territories[indexPath.row] - selectedTerritory = territory - delegate?.didSelectTerritory(territory) - } - - tableView.reloadData() - } -} - -// MARK: UISearchControllerDelegate - -extension TerritoriesListViewController: UISearchControllerDelegate { - func presentSearchController(_ searchController: UISearchController) { } - - func willPresentSearchController(_ searchController: UISearchController) { } - - func didPresentSearchController(_ searchController: UISearchController) { } - - func willDismissSearchController(_ searchController: UISearchController) { } - - func didDismissSearchController(_ searchController: UISearchController) { } -} - -// MARK: UISearchBarDelegate - -extension TerritoriesListViewController: UISearchBarDelegate { } - -// MARK: UISearchResultsUpdating - -extension TerritoriesListViewController: UISearchResultsUpdating { - func updateSearchResults(for searchController: UISearchController) { - var filtered: [Territory] = model.territories - - let whitespaceCharacterSet = CharacterSet.whitespaces - let strippedString = searchController.searchBar.text!.trimmingCharacters(in: whitespaceCharacterSet).lowercased() - - filtered = filtered.filter { $0.lowercased().hasPrefix(strippedString) } - - if let resultsController = searchController.searchResultsController as? SelectLocationResultsViewController { - resultsController.result = filtered - resultsController.tableView.reloadData() - } - } -} - -// MARK: - SelectLocationResultsViewController - -class SelectLocationResultsViewController: UITableViewController { - var result: [String] = [] - - override func viewDidLoad() { - super.viewDidLoad() - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - result.count - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let product = result[indexPath.row] - - let cell = tableView.dequeueReusableCell(withIdentifier: tableViewCellIdentifier, for: indexPath) - var configuration = cell.defaultContentConfiguration() - configuration.text = product - cell.contentConfiguration = configuration - return cell - } -} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/Views/TerritoriesListCell.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/Views/TerritoriesListCell.swift deleted file mode 100644 index deccda183..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Locations List/Views/TerritoriesListCell.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// Created by tkhp -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -// MARK: - TerritoriesListCurrentLocationCell - -final class TerritoriesListCurrentLocationCell: UITableViewCell { - @IBOutlet var iconView: UIImageView! - @IBOutlet var label: UILabel! - - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - - let color: UIColor = selected ? .dw_dashBlue() : .label - - label.textColor = color - iconView.tintColor = color - - accessoryType = selected ? .checkmark : .none - tintColor = selected ? .dw_dashBlue() : .label - } -} - - -// MARK: - TerritoriesListItemCell - -final class TerritoriesListItemCell: UITableViewCell { - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - - guard var configuration = contentConfiguration as? UIListContentConfiguration else { return } - configuration.textProperties.color = selected ? .dw_dashBlue() : .label - contentConfiguration = configuration - - accessoryType = selected ? .checkmark : .none - tintColor = selected ? .dw_dashBlue() : .label - } -} - diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/MerchantFiltersView.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/MerchantFiltersView.swift new file mode 100644 index 000000000..d20307884 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/MerchantFiltersView.swift @@ -0,0 +1,267 @@ +// +// 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 + +struct MerchantFiltersView: View { + @StateObject private var viewModel: MerchantFiltersViewModel + @Environment(\.presentationMode) private var presentationMode + @State private var showTerritories: Bool = false + + let onApplyFilters: (PointOfUseListFilters?) -> Void + + init( + currentFilters: PointOfUseListFilters?, + filterGroups: [PointOfUseListFiltersGroup], + territoriesDataSource: TerritoryDataSource? = nil, + sortOptions: [PointOfUseListFilters.SortBy] = [.name, .distance], + onApplyFilters: @escaping (PointOfUseListFilters?) -> Void + ) { + self._viewModel = StateObject(wrappedValue: MerchantFiltersViewModel( + filters: currentFilters, + filterGroups: filterGroups, + territoriesDataSource: territoriesDataSource, + sortOptions: sortOptions + )) + self.onApplyFilters = onApplyFilters + } + + var body: some View { + VStack(spacing: 0) { + ScrollView { + VStack(spacing: 0) { + // Sort By Section - Only show if there are multiple options + if viewModel.sortOptions.contains(.distance) || viewModel.useGiftCard { + FilterSection(title: NSLocalizedString("Sort by", comment: "Explore Dash/Merchants/Filters")) { + RadioButtonRow( + title: NSLocalizedString("Name", comment: "Explore Dash: Filters"), + isSelected: viewModel.sortByName + ) { + viewModel.toggleSortBy(.name) + } + + if viewModel.sortOptions.contains(.distance) { + RadioButtonRow( + title: NSLocalizedString("Distance", comment: "Explore Dash: Filters"), + isSelected: viewModel.sortByDistance + ) { + viewModel.toggleSortBy(.distance) + } + } + + if viewModel.sortOptions.contains(.discount) { + RadioButtonRow( + title: NSLocalizedString("Discount", comment: "Explore Dash: Filters"), + isSelected: viewModel.sortByDiscount + ) { + viewModel.toggleSortBy(.discount) + } + } + } + } + + if viewModel.showPaymentTypes { + // Payment Type Section + FilterSection(title: NSLocalizedString("Payment Type", comment: "Explore Dash/Merchants/Filters")) { + RadioButtonRow( + title: NSLocalizedString("Dash", comment: "Explore Dash: Filters"), + icon: .custom("image.explore.dash.wts.payment.dash"), + isSelected: viewModel.payWithDash, + style: .checkbox + ) { + viewModel.togglePaymentMethod(.dash) + } + + RadioButtonRow( + title: NSLocalizedString("Gift Card", comment: "Explore Dash: Filters"), + icon: .custom("image.explore.dash.wts.payment.gift-card"), + isSelected: viewModel.useGiftCard, + style: .checkbox + ) { + viewModel.togglePaymentMethod(.giftCard) + } + } + } + + // Gift Card Types Section - Only show if Gift Card is selected + if viewModel.showGiftCardTypes && viewModel.useGiftCard { + FilterSection(title: NSLocalizedString("Gift card types", comment: "Explore Dash/Merchants/Filters")) { + RadioButtonRow( + title: NSLocalizedString("Flexible amounts", comment: "Explore Dash: Filters"), + isSelected: viewModel.denominationFlexible, + style: .checkbox + ) { + viewModel.toggleDenominationType(.flexible) + } + + RadioButtonRow( + title: NSLocalizedString("Fixed denominated amounts", comment: "Explore Dash: Filters"), + isSelected: viewModel.denominationFixed, + style: .checkbox + ) { + viewModel.toggleDenominationType(.fixed) + } + } + } + + // Location Section + if viewModel.showTerritory { + FilterSection(title: NSLocalizedString("Location", comment: "")) { + FilterDisclosureItem( + title: viewModel.selectedTerritory ?? NSLocalizedString("Current location", comment: "Explore Dash: Filters"), + action: { + showTerritories = true + } + ) + } + } + + // Radius Section + if viewModel.showRadius { + FilterSection(title: NSLocalizedString("Radius", comment: "Explore Dash/Merchants/Filters")) { + ForEach(viewModel.availableRadiusOptions) { option in + RadioButtonRow( + title: option.displayText, + isSelected: viewModel.selectedRadius == option + ) { + viewModel.toggleRadius(option) + } + } + } + } + + // Location Service Settings + if viewModel.showLocationSettings && !DWLocationManager.shared.isAuthorized { + FilterSection(title: NSLocalizedString("Current Location Settings", comment: "Explore Dash/Merchants/Filters")) { + FilterDisclosureItem( + title: DWLocationManager.shared.localizedStatus + ) { + if let settingsUrl = URL(string: UIApplication.openSettingsURLString) { + UIApplication.shared.open(settingsUrl) + } + } + } + } + + // Reset Filters + FilterSection(title: nil) { + Button(action: { + viewModel.resetFilters() + }) { + Text(NSLocalizedString("Reset Filters", comment: "Explore Dash")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(viewModel.canReset ? .red : Color.tertiaryText) + .padding() + .frame(maxWidth: .infinity, alignment: .center) + } + .disabled(!viewModel.canReset) + } + } + .padding(.horizontal, 20) + .animation(.easeInOut(duration: 0.3), value: viewModel.useGiftCard) + .animation(.easeInOut(duration: 0.3), value: viewModel.sortOptions) + } + + NavigationLink(destination: TerritoryPickerView( + selectedTerritory: viewModel.selectedTerritory, + territoriesDataSource: viewModel.territoriesDataSource + ) { territory in + viewModel.selectedTerritory = territory + }, isActive: $showTerritories) { + EmptyView() + } + } + .background(Color.primaryBackground) + .navigationBarTitle(NSLocalizedString("Filters", comment: "Explore Dash"), displayMode: .inline) + .navigationBarItems( + leading: Button(NSLocalizedString("Close", comment: "")) { + presentationMode.wrappedValue.dismiss() + } + .font(.system(size: 15, weight: .medium)) + .foregroundColor(.dashBlue), + trailing: Button(NSLocalizedString("Apply", comment: "")) { + let filters = viewModel.buildFilters() + onApplyFilters(filters) + presentationMode.wrappedValue.dismiss() + } + .font(.system(size: 15, weight: .medium)) + .foregroundColor(viewModel.canApply ? .dashBlue : Color.tertiaryText) + .disabled(!viewModel.canApply) + ) + } +} + +// MARK: - Supporting Views + +private struct FilterSection: View { + let title: String? + @ViewBuilder let content: () -> Content + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + if let title = title { + Text(title) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.secondaryText) + .padding(.leading, 15) + .padding(.vertical, 12) + } + + VStack(spacing: 0) { + content() + } + .padding(.vertical, 6) + .background(Color.secondaryBackground) + .clipShape(RoundedShape(corners: .allCorners, radii: 12)) + .padding(.bottom, 20) + } + } +} + + +private struct FilterDisclosureItem: View { + let title: String + let action: (() -> Void)? + + init(title: String, action: (() -> Void)? = nil) { + self.title = title + self.action = action + } + + var body: some View { + HStack { + Text(title) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + Spacer() + + Image(systemName: "chevron.right") + .foregroundColor(.gray) + .imageScale(.small) + } + .padding(.horizontal, 16) + .padding(.vertical, 16) + .contentShape(Rectangle()) + .onTapGesture { + action?() + } + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Model/MerchantFiltersViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Model/MerchantFiltersViewModel.swift new file mode 100644 index 000000000..30a52e82b --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Model/MerchantFiltersViewModel.swift @@ -0,0 +1,317 @@ +// +// Created by Claude Code +// 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 MerchantFiltersViewModel: ObservableObject { + + // MARK: - Filter Options + + @Published var sortByDistance = false + @Published var sortByName = false + @Published var sortByDiscount = false + + @Published var payWithDash = false + @Published var useGiftCard = false { + didSet { + if useGiftCard { + sortOptions = initialSortOptions + } else { + sortOptions = initialSortOptions.filter { option in + option != .discount + } + + if sortByDiscount { + sortByDiscount = false + sortByName = true + } + } + } + } + + @Published var sortOptions: [PointOfUseListFilters.SortBy] + + @Published var denominationFixed = false + @Published var denominationFlexible = false + + @Published var selectedRadius: PointOfUseListFilters.Radius? + @Published var selectedTerritory: Territory? + + @Published var isLocationServiceEnabled = DWLocationManager.shared.isAuthorized + + // MARK: - Computed Properties + + var canApply: Bool { + hasChanges + } + + var canReset: Bool { + hasAnyFiltersApplied || hasChanges + } + + private var hasChanges: Bool { + sortByDistance != initialSortByDistance || + sortByName != initialSortByName || + sortByDiscount != initialSortByDiscount || + payWithDash != initialPayWithDash || + useGiftCard != initialUseGiftCard || + denominationFixed != initialDenominationFixed || + denominationFlexible != initialDenominationFlexible || + selectedRadius != initialRadius || + selectedTerritory != initialTerritory + } + + private var hasAnyFiltersApplied: Bool { + sortByDistance || sortByName || sortByDiscount || + payWithDash || useGiftCard || + denominationFixed || denominationFlexible || + selectedRadius != nil || selectedTerritory != nil + } + + // MARK: - Initial State + + private let initialSortByDistance: Bool + private let initialSortByName: Bool + private let initialSortByDiscount: Bool + private let initialPayWithDash: Bool + private let initialUseGiftCard: Bool + private let initialDenominationFixed: Bool + private let initialDenominationFlexible: Bool + private let initialRadius: PointOfUseListFilters.Radius? + private let initialTerritory: Territory? + private let initialSortOptions: [PointOfUseListFilters.SortBy] + + // MARK: - Available Options + + let availableRadiusOptions: [PointOfUseListFilters.Radius] = [ + .one, .five, .twenty, .fifty + ] + + let showLocationSettings: Bool + let showRadius: Bool + let showTerritory: Bool + let showPaymentTypes: Bool + let showGiftCardTypes: Bool + + // MARK: - Data Sources + + var territoriesDataSource: TerritoryDataSource? + + // MARK: - Initialization + + init( + filters: PointOfUseListFilters?, + filterGroups: [PointOfUseListFiltersGroup], + territoriesDataSource: TerritoryDataSource? = nil, + sortOptions: [PointOfUseListFilters.SortBy] = [.name, .distance] + ) { + self.showLocationSettings = filterGroups.contains(.locationService) + self.showRadius = filterGroups.contains(.radius) && DWLocationManager.shared.isAuthorized + self.showTerritory = filterGroups.contains(.territory) + self.showPaymentTypes = filterGroups.contains(.paymentType) + self.showGiftCardTypes = filterGroups.contains(.denominationType) + self.territoriesDataSource = territoriesDataSource + self.initialSortOptions = sortOptions + self.sortOptions = sortOptions + + if let filters = filters { + self.initialSortByDistance = filters.sortBy == .distance + self.initialSortByName = filters.sortBy == .name + self.initialSortByDiscount = filters.sortBy == .discount + + self.initialPayWithDash = filters.merchantPaymentTypes?.contains(.dash) ?? false + self.initialUseGiftCard = filters.merchantPaymentTypes?.contains(.giftCard) ?? false + + self.initialDenominationFixed = filters.denominationType == .fixed || filters.denominationType == .both + self.initialDenominationFlexible = filters.denominationType == .flexible || filters.denominationType == .both + + // Convert PointOfUseListFilters.Radius to RadiusOption + if let filtersRadius = filters.radius { + switch filtersRadius { + case .one: self.initialRadius = .one + case .five: self.initialRadius = .five + case .twenty: self.initialRadius = .twenty + case .fifty: self.initialRadius = .fifty + } + } else { + self.initialRadius = nil + } + + self.initialTerritory = filters.territory + + // Set current values + self.sortByDistance = initialSortByDistance + self.sortByName = initialSortByName + self.sortByDiscount = initialSortByDiscount + self.payWithDash = initialPayWithDash + self.useGiftCard = initialUseGiftCard + self.denominationFixed = initialDenominationFixed + self.denominationFlexible = initialDenominationFlexible + self.selectedRadius = initialRadius + self.selectedTerritory = initialTerritory + } else { + self.initialSortByDistance = false + self.initialSortByName = true + self.initialSortByDiscount = false + self.initialPayWithDash = true + self.initialUseGiftCard = true + self.initialDenominationFixed = true + self.initialDenominationFlexible = true + self.initialRadius = .twenty + self.initialTerritory = nil + + resetFilters() + } + } + + // MARK: - Actions + + func resetFilters() { + sortByDistance = false + sortByName = true + sortByDiscount = false + payWithDash = true + useGiftCard = true + denominationFixed = true + denominationFlexible = true + selectedRadius = .twenty + selectedTerritory = nil + } + + func toggleSortBy(_ option: PointOfUseListFilters.SortBy) { + // Only one sort option can be selected at a time + sortByDistance = (option == .distance) + sortByName = (option == .name) + sortByDiscount = (option == .discount) + } + + func toggleRadius(_ option: PointOfUseListFilters.Radius) { + if selectedRadius == option { + selectedRadius = nil + } else { + selectedRadius = option + } + } + + func togglePaymentMethod(_ method: ExplorePointOfUse.Merchant.PaymentMethod) { + switch method { + case .dash: + if payWithDash && !useGiftCard { + // If unchecking the last option, check the other one + payWithDash = false + useGiftCard = true + } else { + payWithDash.toggle() + } + case .giftCard: + if useGiftCard && !payWithDash { + // If unchecking the last option, check the other one + useGiftCard = false + payWithDash = true + } else { + useGiftCard.toggle() + } + + // Reset denomination types when gift card is unchecked + if !useGiftCard { + denominationFixed = true + denominationFlexible = true + } + } + } + + func toggleDenominationType(_ type: PointOfUseListFilters.DenominationType) { + switch type { + case .flexible: + if denominationFlexible && !denominationFixed { + // If unchecking the last option, check the other one + denominationFlexible = false + denominationFixed = true + } else { + denominationFlexible.toggle() + } + case .fixed: + if denominationFixed && !denominationFlexible { + // If unchecking the last option, check the other one + denominationFixed = false + denominationFlexible = true + } else { + denominationFixed.toggle() + } + case .both: + // Not used in toggle + break + } + } + + func buildFilters() -> PointOfUseListFilters? { + var filters = PointOfUseListFilters() + var hasAnyFilters = false + + // Sort By + if sortByDistance { + filters.sortBy = .distance + hasAnyFilters = true + } else if sortByName { + filters.sortBy = .name + hasAnyFilters = true + } else if sortByDiscount { + filters.sortBy = .discount + hasAnyFilters = true + } + + // Payment Methods + var paymentMethods: [ExplorePointOfUse.Merchant.PaymentMethod] = [] + if payWithDash { + paymentMethods.append(.dash) + } + if useGiftCard { + paymentMethods.append(.giftCard) + } + if !paymentMethods.isEmpty { + filters.merchantPaymentTypes = paymentMethods + hasAnyFilters = true + } + + // Denomination Type + if denominationFixed && denominationFlexible { + filters.denominationType = .both + hasAnyFilters = true + } else if denominationFixed { + filters.denominationType = .fixed + hasAnyFilters = true + } else if denominationFlexible { + filters.denominationType = .flexible + hasAnyFilters = true + } + + // Radius + if let radius = selectedRadius { + filters.radius = radius + hasAnyFilters = true + } + + // Territory + if let territory = selectedTerritory { + filters.territory = territory + hasAnyFilters = true + } + + return hasAnyFilters ? filters : nil + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Model/PointOfUseListFiltersModel.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Model/PointOfUseListFiltersModel.swift index 035e2efcc..dc906b769 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Model/PointOfUseListFiltersModel.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/Model/PointOfUseListFiltersModel.swift @@ -35,6 +35,8 @@ extension PointOfUseListFilters.SortBy { return NSLocalizedString("Sorted by distance", comment: "Explore Dash/Filters") case .name: return NSLocalizedString("Sorted by name", comment: "Explore Dash/Filters") + case .discount: + return NSLocalizedString("Sorted by discount", comment: "Explore Dash/Filters") } } } @@ -46,27 +48,15 @@ struct PointOfUseListFilters: Equatable { enum SortBy { case distance case name + case discount } - enum Radius: Int { + enum Radius: Int, Identifiable { case one = 1 case five = 5 case twenty = 20 case fifty = 50 - var filterItem: PointOfUseListFilterItem { - switch self { - case .one: - return .radius1 - case .five: - return .radius5 - case .twenty: - return .radius20 - case .fifty: - return .radius50 - } - } - var meters: Double { switch self { case .one: @@ -79,12 +69,39 @@ struct PointOfUseListFilters: Equatable { return 80000 } } + + var id: Int { rawValue } + + var displayText: String { + if Locale.usesMetricMeasurementSystem { + switch self { + case .one: return NSLocalizedString("2 km", comment: "Explore Dash: Filters") + case .five: return NSLocalizedString("8 km", comment: "Explore Dash: Filters") + case .twenty: return NSLocalizedString("32 km", comment: "Explore Dash: Filters") + case .fifty: return NSLocalizedString("80 km", comment: "Explore Dash: Filters") + } + } else { + switch self { + case .one: return NSLocalizedString("1 mile", comment: "Explore Dash: Filters") + case .five: return NSLocalizedString("5 miles", comment: "Explore Dash: Filters") + case .twenty: return NSLocalizedString("20 miles", comment: "Explore Dash: Filters") + case .fifty: return NSLocalizedString("50 miles", comment: "Explore Dash: Filters") + } + } + } + } + + enum DenominationType { + case fixed + case flexible + case both } var sortBy: SortBy? var merchantPaymentTypes: [ExplorePointOfUse.Merchant.PaymentMethod]? var radius: Radius? var territory: Territory? + var denominationType: DenominationType? // In meters var currentRadius: Double { @@ -109,9 +126,9 @@ struct PointOfUseListFilters: Equatable { string.append(stringValue) } -// if let value = merchantPaymentTypes { TODO: gift cards are temporary disabled, not showing filters -// string += value.map { $0.filterLocalizedString } -// } + if let value = merchantPaymentTypes { + string += value.map { $0.filterLocalizedString } + } if let value = territory { string.append(value) @@ -125,255 +142,6 @@ struct PointOfUseListFilters: Equatable { } } -extension PointOfUseListFilters { - var items: Set { - var set: Set = [] - - if let value = sortBy { - set.insert(value == .name ? .sortName : .sortDistance) - } - - if let value = merchantPaymentTypes { - let filterItems: [PointOfUseListFilterItem] = value.map { $0 == .dash ? .paymentTypeDash : .paymentTypeGiftCard } - for item in filterItems { - set.insert(item) - } - } - - if let value = radius { - set.insert(value.filterItem) - } - - return set - } -} - -// MARK: - PointOfUseListFilterItem - -enum PointOfUseListFilterItem: String { - case sortDistance - case sortName - case paymentTypeDash - case paymentTypeGiftCard - case radius1 - case radius5 - case radius20 - case radius50 - case location - case locationService - case reset - - var otherItems: [PointOfUseListFilterItem] { - switch self { - case .sortDistance: - return [.sortName] - case .sortName: - return [.sortDistance] - case .radius1: - return [.radius5, .radius20, .radius50] - case .radius5: - return [.radius1, .radius20, .radius50] - case .radius20: - return [.radius1, .radius5, .radius50] - case .radius50: - return [.radius1, .radius5, .radius20] - case .paymentTypeDash: - return [.paymentTypeGiftCard] - case .paymentTypeGiftCard: - return [.paymentTypeDash] - default: - return [] - } - } - - var itemsToUnselect: [PointOfUseListFilterItem] { - switch self { - case .sortDistance: - return [.sortName] - case .sortName: - return [.sortDistance] - case .radius1: - return [.radius5, .radius20, .radius50] - case .radius5: - return [.radius1, .radius20, .radius50] - case .radius20: - return [.radius1, .radius5, .radius50] - case .radius50: - return [.radius1, .radius5, .radius20] - default: - return [] - } - } - - var cellIdentifier: String { - switch self { - case .reset: return "FilterItemResetCell" - case .location, .locationService: return "FilterItemDisclosureCell" - default: return "FilterItemSelectableCell" - } - } - - var image: String? { - switch self { - case .paymentTypeDash: - return "image.explore.dash.wts.payment.dash" - case .paymentTypeGiftCard: - return "image.explore.dash.wts.payment.gift-card" - default: return nil - } - } - - var title: String { - switch self { - case .paymentTypeDash: - return NSLocalizedString("Dash", comment: "Explore Dash: Filters") - case .paymentTypeGiftCard: - return NSLocalizedString("Gift Card", comment: "Explore Dash: Filters") - case .radius1: - if Locale.usesMetricMeasurementSystem { - return NSLocalizedString("2 km", comment: "Explore Dash: Filters") - } else { - return NSLocalizedString("1 mile", comment: "Explore Dash: Filters") - } - case .radius5: - if Locale.usesMetricMeasurementSystem { - return NSLocalizedString("8 km", comment: "Explore Dash: Filters") - } else { - return NSLocalizedString("5 miles", comment: "Explore Dash: Filters") - } - case .radius20: - if Locale.usesMetricMeasurementSystem { - return NSLocalizedString("32 km", comment: "Explore Dash: Filters") - } else { - return NSLocalizedString("20 miles", comment: "Explore Dash: Filters") - } - case .radius50: - if Locale.usesMetricMeasurementSystem { - return NSLocalizedString("80 km", comment: "Explore Dash: Filters") - } else { - return NSLocalizedString("50 miles", comment: "Explore Dash: Filters") - } - case .location: - return NSLocalizedString("Current location", comment: "Explore Dash: Filters") - case .locationService: - return DWLocationManager.shared.localizedStatus - case .reset: - return NSLocalizedString("Reset Filters", comment: "Explore Dash: Filters") - case .sortDistance: - return NSLocalizedString("Distance", comment: "Explore Dash: Filters") - case .sortName: - return NSLocalizedString("Name", comment: "Explore Dash: Filters") - } - } -} - -// MARK: - PointOfUseListFiltersModel - -final class PointOfUseListFiltersModel { - var selected: Set = [] - var initialFilters: Set! - var defaultFilters: Set! - var selectedTerritory: Territory? - var initialSelectedTerritory: Territory? { - didSet { - selectedTerritory = initialSelectedTerritory - } - } - - var canApply: Bool { - // TODO: Optimize - selected != initialFilters || selectedTerritory != initialSelectedTerritory - } - - var canReset: Bool { - selected != defaultFilters || canApply - } - - func isFilterSelected(_ filter: PointOfUseListFilterItem) -> Bool { - selected.contains(filter) - } - - func toggle(filter: PointOfUseListFilterItem) -> Bool { - if isFilterSelected(filter) { - if !filter.otherItems.filter({ isFilterSelected($0) }).isEmpty { - selected.remove(filter) - return true - } - } else { - unselect(filters: filter.itemsToUnselect) - selected.insert(filter) - return true - } - - return false - } - - func unselect(filters: [PointOfUseListFilterItem]) { - for item in filters { - selected.remove(item) - } - } - - func select(territory: Territory?) { - if territory == nil { - selected.remove(.location) - } else { - selected.insert(.location) - } - - selectedTerritory = territory - } - - func resetFilters() { - selected = defaultFilters - selectedTerritory = nil - } -} - -// MARK: PointOfUseListFiltersModel -extension PointOfUseListFiltersModel { - var appliedFilters: PointOfUseListFilters? { - if selected.isEmpty && selectedTerritory == nil { return nil } - - var filters = PointOfUseListFilters() - - if selected.contains(.sortName) { - filters.sortBy = .name - } - - if selected.contains(.sortDistance) { - filters.sortBy = .distance - } - - if selected.contains(.radius1) { - filters.radius = .one - } else if selected.contains(.radius5) { - filters.radius = .five - } else if selected.contains(.radius20) { - filters.radius = .twenty - } else if selected.contains(.radius50) { - filters.radius = .fifty - } - - if selected.contains(.paymentTypeDash) { - filters.merchantPaymentTypes = [.dash] - } - - if selected.contains(.paymentTypeGiftCard) { - var arr = (filters.merchantPaymentTypes ?? []) - arr.append(.giftCard) - - filters.merchantPaymentTypes = arr - } - - if let territory = selectedTerritory { - filters.territory = territory - } - - return filters - } -} - // MARK: Locale extension Locale { static var usesMetricMeasurementSystem: Bool { diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/PointOfUseListFiltersViewController.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/PointOfUseListFiltersViewController.swift deleted file mode 100644 index ce459a7bd..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/PointOfUseListFiltersViewController.swift +++ /dev/null @@ -1,504 +0,0 @@ -// -// Created by tkhp -// Copyright © 2022 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import CoreLocation -import UIKit - -typealias Item = PointOfUseListFilterItem - -// MARK: - PointOfUseListFiltersGroup - -public enum PointOfUseListFiltersGroup { - case paymentType - case sortByDistanceOrName - - case territory - case radius - case locationService - - var section: PointOfUseListFiltersViewController.Section { - switch self { - case .paymentType: - return .paymentType - case .sortByDistanceOrName: - return .sortBy - case .territory: - return .location - case .radius: - return .radius - case .locationService: - return .locationService - } - } - - var items: [PointOfUseListFilterItem] { - switch self { - case .paymentType: - return [.paymentTypeDash, .paymentTypeGiftCard] - case .sortByDistanceOrName: - return [.sortDistance, .sortName] - case .territory: - return [.location] - case .locationService: - return [.locationService] - case .radius: - return [.radius1, .radius5, .radius20, .radius50] - } - } -} - -// MARK: - PointOfUseListFiltersViewControllerDelegate - -protocol PointOfUseListFiltersViewControllerDelegate: AnyObject { - func apply(filters: PointOfUseListFilters?) -} - -// MARK: - PointOfUseListFiltersViewController - -class PointOfUseListFiltersViewController: UIViewController { - class DataSource: UITableViewDiffableDataSource { - override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - if #available(iOS 15.0, *) { - if let identifier = sectionIdentifier(for: section) { - return identifier.title - } - } else { - let identifier = snapshot().sectionIdentifiers[section] - return identifier.title - } - - return nil - } - } - - enum Section: CaseIterable { - case paymentType - case sortBy - case location - case radius - case locationService - case resetFilters - - var title: String? { - switch self { - case .paymentType: return NSLocalizedString("Payment Type", comment: "Explore Dash/Merchants/Filters") - case .sortBy: return NSLocalizedString("Sort by", comment: "Explore Dash/Merchants/Filters") - case .location: return NSLocalizedString("Location", comment: "") - case .radius: return NSLocalizedString("Radius", comment: "Explore Dash/Merchants/Filters") - case .locationService: return NSLocalizedString("Current Location Settings", - comment: "Explore Dash/Merchants/Filters") - default: - return nil - } - } - - - } - - public weak var delegate: PointOfUseListFiltersViewControllerDelegate? - - private var model = PointOfUseListFiltersModel() - private var dataSource: DataSource! = nil - private var currentSnapshot: NSDiffableDataSourceSnapshot! = nil - private var selectedCells: [Item: UITableViewCell] = [:] - - var territoriesDataSource: TerritoryDataSource? - var filtersToUse: [PointOfUseListFiltersGroup]! - var filters: PointOfUseListFilters? { - didSet { - model.selected = filters?.items ?? [] - model.initialFilters = filters?.items ?? [] - model.initialSelectedTerritory = filters?.territory - } - } - - var defaultFilters: PointOfUseListFilters? { - didSet { - model.defaultFilters = defaultFilters?.items ?? [] - } - } - - @IBOutlet var tableView: UITableView! - @IBOutlet var applyButton: UIBarButtonItem! - - private weak var resetCell: FilterItemResetCell? - - init(filters: [PointOfUseListFiltersGroup]) { - filtersToUse = filters - - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - @IBAction - func cancelAction() { - dismiss(animated: true) - } - - @IBAction - func applyAction() { - delegate?.apply(filters: model.appliedFilters) - dismiss(animated: true) - } - - override func viewWillAppear(_ animated: Bool) { - DWLocationManager.shared.add(observer: self) - - let appearance = UINavigationBarAppearance() - appearance.configureWithTransparentBackground() - - let navBar = navigationController!.navigationBar - navBar.isTranslucent = true - navBar.standardAppearance = appearance - navBar.scrollEdgeAppearance = appearance - - super.viewWillAppear(animated) - } - - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - - DWLocationManager.shared.remove(observer: self) - } - - override func viewDidLoad() { - super.viewDidLoad() - - configureHierarchy() - configureDataSource() - reloadDataSource() - - NotificationCenter.default.addObserver(self, - selector: #selector(enteredBackround), - name: UIApplication.didEnterBackgroundNotification, - object: nil) - } - - class func controller() -> PointOfUseListFiltersViewController { - let storyboard = UIStoryboard(name: "ExploreDash", bundle: nil) - return storyboard - .instantiateViewController(withIdentifier: "PointOfUseListFiltersViewController") as! PointOfUseListFiltersViewController - } - - @objc - func enteredBackround() { - dismiss(animated: false) - } -} - -// MARK: UITableViewDelegate - -extension PointOfUseListFiltersViewController: UITableViewDelegate { - func toggleCells(for items: [Item]) { - for item in items { - if let cell = selectedCells[item] { - cell.setSelected(false, animated: false) - selectedCells[item] = nil - } - } - } - - func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { - if let filterCell = cell as? FilterItemSelectableCell, - let item = dataSource.itemIdentifier(for: indexPath), - model.isFilterSelected(item) { - tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none) - filterCell.setSelected(true, animated: true) - selectedCells[item] = filterCell - return - } - - if let cell = cell as? FilterItemResetCell { - cell.isEnabled = model.canReset - resetCell = cell - return - } - } - - func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { - if cell is FilterItemSelectableCell, - let item = dataSource.itemIdentifier(for: indexPath) { - selectedCells[item] = nil - } - - if cell is FilterItemResetCell { - resetCell = nil - return - } - } - - func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { - if tableView.cellForRow(at: indexPath) is FilterItemSelectableCell, - let item = dataSource.itemIdentifier(for: indexPath) { - let deselected = model.toggle(filter: item) - if !deselected { - tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none) - } - updateApplyButton() - updateResetButton() - return - } - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let identifier = dataSource.identifier(for: indexPath.section) - - if let filterCell = tableView.cellForRow(at: indexPath) as? FilterItemSelectableCell, - let item = dataSource.itemIdentifier(for: indexPath) { - selectedCells[item] = filterCell - let selected = model.toggle(filter: item) - if !selected { - tableView.deselectRow(at: indexPath, animated: true) - } - - updateApplyButton() - updateResetButton() - toggleCells(for: item.itemsToUnselect) - return - } - - if let identifier, identifier == .locationService { - UIApplication.shared.open(URL(string:UIApplication.openSettingsURLString)!) - return - } - - if let identifier, identifier == .resetFilters { - model.resetFilters() - updateApplyButton() - updateResetButton() - tableView.reloadData() - return - } - - if let identifier, identifier == .location { - let vc = TerritoriesListViewController.controller() - vc.selectedTerritory = model.selectedTerritory - vc.territoriesDataSource = territoriesDataSource - vc.delegate = self - navigationController?.pushViewController(vc, animated: true) - } - - tableView.deselectRow(at: indexPath, animated: true) - } - - func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { - guard let dataSource else { return nil } - - let identifier = dataSource.identifier(for: section) - let title = identifier?.title - - let label = UILabel() - label.font = .dw_font(forTextStyle: .subheadline).withWeight(UIFont.Weight.medium.rawValue) - label.textColor = .dw_secondaryText() - label.text = title - label.translatesAutoresizingMaskIntoConstraints = false - - let view = UIView() - view.addSubview(label) - - NSLayoutConstraint.activate([ - label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15), - label.topAnchor.constraint(equalTo: view.topAnchor), - label.trailingAnchor.constraint(equalTo: view.trailingAnchor), - label.bottomAnchor.constraint(equalTo: view.bottomAnchor), - ]) - return view - } - - func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { - 30 - } -} - -extension PointOfUseListFiltersViewController { - private func configureHierarchy() { - title = NSLocalizedString("Filters", comment: "Explore Dash") - - tableView.allowsMultipleSelection = true - tableView.delegate = self - - view.backgroundColor = .dw_secondaryBackground() - - updateApplyButton() - updateResetButton() - } - - private func configureDataSource() { - dataSource = DataSource(tableView: tableView) { [weak self] - (tableView: UITableView, indexPath: IndexPath, item: Item) -> UITableViewCell? in - - guard let wSelf = self else { return UITableViewCell() } - - let section = wSelf.currentSnapshot.sectionIdentifiers[indexPath.section] - let cell = tableView.dequeueReusableCell(withIdentifier: item.cellIdentifier, for: indexPath) - cell.selectionStyle = .none - - if let filterCell = cell as? FilterItemCell { - if section == .location { - filterCell.nameLabel.text = self?.model.selectedTerritory ?? item.title - } else { - filterCell.update(with: item) - } - } - - return cell - } - } - - func reloadDataSource() { - var sections = filtersToUse.map { $0.section } - sections.append(.resetFilters) - - if !DWLocationManager.shared.isAuthorized { - sections = sections.filter { $0 != .radius } - } - - currentSnapshot = NSDiffableDataSourceSnapshot() - currentSnapshot.appendSections(sections) - - for group in filtersToUse { - if DWLocationManager.shared.isAuthorized || group.section != .radius { - currentSnapshot.appendItems(group.items, toSection: group.section) - } - } - - currentSnapshot.appendItems([.reset], toSection: .resetFilters) - - dataSource.apply(currentSnapshot, animatingDifferences: false) - dataSource.defaultRowAnimation = .none - } - - private func updateApplyButton() { - applyButton.isEnabled = model.canApply - } - - private func updateResetButton() { - resetCell?.isEnabled = model.canReset - } -} - -// MARK: TerritoriesListViewControllerDelegate - -extension PointOfUseListFiltersViewController: TerritoriesListViewControllerDelegate { - func didSelectTerritory(_ territory: Territory) { - model.select(territory: territory) - tableView.reloadData() - updateApplyButton() - updateResetButton() - navigationController?.popViewController(animated: true) - } - - func didSelectCurrentLocation() { - model.select(territory: nil) - tableView.reloadData() - updateApplyButton() - updateResetButton() - navigationController?.popViewController(animated: true) - } -} - - -// MARK: DWLocationObserver - -extension PointOfUseListFiltersViewController: DWLocationObserver { - func locationManagerDidChangeCurrentLocation(_ manager: DWLocationManager, location: CLLocation) { } - - func locationManagerDidChangeCurrentReversedLocation(_ manager: DWLocationManager) { } - - func locationManagerDidChangeServiceAvailability(_ manager: DWLocationManager) { - tableView.reloadData() - updateApplyButton() - updateResetButton() - } -} - -// MARK: - FilterItemSelectableCell - -class FilterItemSelectableCell: FilterItemCell { - @IBOutlet var iconImageView: UIImageView! - @IBOutlet var checkboxButton: UIButton! - - override func update(with item: Item) { - super.update(with: item) - - if let image = item.image { - iconImageView.image = UIImage(named: image) - iconImageView.isHidden = false - } else { - iconImageView.isHidden = true - } - } - - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - checkboxButton.isSelected = selected - } - - override func awakeFromNib() { - super.awakeFromNib() - - checkboxButton.isUserInteractionEnabled = false - } -} - - -// MARK: - FilterItemCell - -class FilterItemCell: UITableViewCell { - @IBOutlet var nameLabel: UILabel! - - func update(with item: Item) { - nameLabel.text = item.title - } -} - -// MARK: - FilterItemResetCell - -class FilterItemResetCell: UITableViewCell { - @IBOutlet var resetLabel: UILabel! - - var isEnabled = true { - didSet { - resetLabel.textColor = isEnabled ? .dw_red() : .dw_secondaryText() - } - } - - override func awakeFromNib() { - super.awakeFromNib() - - resetLabel.isUserInteractionEnabled = false - resetLabel.text = NSLocalizedString("Reset Filters", comment: "Explore Dash") - } -} - -extension PointOfUseListFiltersViewController.DataSource { - final func identifier(for section: Int) -> PointOfUseListFiltersViewController.Section? { - let identifier: PointOfUseListFiltersViewController.Section? - - if #available(iOS 15.0, *) { - identifier = self.sectionIdentifier(for: section) - } else { - identifier = snapshot().sectionIdentifiers[section] - } - - return identifier - } -} diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/TerritoryPickerView.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/TerritoryPickerView.swift new file mode 100644 index 000000000..7739b6090 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Filters/TerritoryPickerView.swift @@ -0,0 +1,155 @@ +// +// Created by Claude Code +// 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 UIKit + +typealias Territory = String + +struct TerritoryPickerView: View { + @Environment(\.presentationMode) private var presentationMode + @State private var territories: [Territory] = [] + @State private var isLoading = true + @State private var searchText = "" + + let selectedTerritory: Territory? + let territoriesDataSource: TerritoryDataSource? + let onTerritorySelected: (Territory?) -> Void + + private var filteredTerritories: [Territory] { + if searchText.isEmpty { + return territories + } + return territories.filter { territory in + territory.localizedCaseInsensitiveContains(searchText) + } + } + + var body: some View { + VStack(spacing: 0) { + // Search Bar + HStack { + Image(systemName: "magnifyingglass") + .foregroundColor(.gray) + + TextField(NSLocalizedString("Search territories", comment: ""), text: $searchText) + .textFieldStyle(PlainTextFieldStyle()) + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + .background(Color.gray400.opacity(0.1)) + .cornerRadius(10) + .padding(.horizontal, 20) + .padding(.vertical, 16) + + if isLoading { + Spacer() + SwiftUI.ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + Spacer() + } else { + ScrollViewReader { proxy in + ScrollView { + VStack(spacing: 0) { + // Current Location Option + RadioButtonRow( + title: NSLocalizedString("Current location", comment: "Explore Dash: Filters"), + icon: .system("location.circle"), + isSelected: selectedTerritory == nil + ) { + onTerritorySelected(nil) + presentationMode.wrappedValue.dismiss() + } + .background(Color.secondaryBackground) + .clipShape(RoundedShape(corners: .allCorners, radii: 12)) + .padding(.horizontal, 20) + .padding(.bottom, 8) + .id("current_location") + + // Territory Options + VStack(spacing: 0) { + ForEach(filteredTerritories, id: \.self) { territory in + RadioButtonRow( + title: territory, + isSelected: selectedTerritory == territory + ) { + onTerritorySelected(territory) + presentationMode.wrappedValue.dismiss() + } + .id(territory) + } + } + .background(Color.secondaryBackground) + .clipShape(RoundedShape(corners: .allCorners, radii: 12)) + .padding(.horizontal, 20) + } + } + .onAppear { + // Scroll to selected item after a small delay to ensure the view is loaded + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + withAnimation { + if let selected = selectedTerritory { + proxy.scrollTo(selected, anchor: .center) + } else { + proxy.scrollTo("current_location", anchor: .center) + } + } + } + } + } + } + } + .background(Color.primaryBackground) + .navigationTitle(NSLocalizedString("Location", comment: "")) + .navigationBarTitleDisplayMode(.inline) + .navigationBarBackButtonHidden(true) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(action: { + presentationMode.wrappedValue.dismiss() + }) { + Image(systemName: "xmark") + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(.primaryText) + } + } + } + .onAppear { + loadTerritories() + } + } + + private func loadTerritories() { + guard let dataSource = territoriesDataSource else { + isLoading = false + return + } + + dataSource { result in + DispatchQueue.main.async { + isLoading = false + switch result { + case .success(let territories): + self.territories = territories.sorted() + case .failure: + self.territories = [] + } + } + } + } +} + 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 f6b16904f..dd8fb2428 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/MerchantListViewController.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/MerchantListViewController.swift @@ -18,6 +18,7 @@ import CoreLocation import MapKit import UIKit +import SwiftUI // MARK: - MerchantsListSegment @@ -39,11 +40,7 @@ enum MerchantsListSegment: Int { let showReversedLocation: Bool let showMap: Bool let showLocationServiceSettings: Bool - var showsFilters = true - var defaultFilters = PointOfUseListFilters() - defaultFilters.merchantPaymentTypes = [.dash, .giftCard] - defaultFilters.radius = .twenty - defaultFilters.sortBy = .distance + var sortOptions: [PointOfUseListFilters.SortBy] = [.name, .distance, .discount] switch self { case .online: @@ -51,7 +48,7 @@ enum MerchantsListSegment: Int { showReversedLocation = false showMap = false dataProvider = OnlineMerchantsDataProvider() - showsFilters = false + sortOptions = [.name, .discount] case .nearby: showLocationServiceSettings = true @@ -66,7 +63,7 @@ enum MerchantsListSegment: Int { dataProvider = AllMerchantsDataProvider() } - return .init(tag: rawValue, title: title, showMap: showMap, showLocationServiceSettings: showLocationServiceSettings, showReversedLocation: showReversedLocation, dataProvider: dataProvider, filterGroups: filterGroups, defaultFilters: defaultFilters, territoriesDataSource: territories, showsFilters: showsFilters) + return .init(tag: rawValue, title: title, showMap: showMap, showLocationServiceSettings: showLocationServiceSettings, showReversedLocation: showReversedLocation, dataProvider: dataProvider, filterGroups: filterGroups, territoriesDataSource: territories, sortOptions: sortOptions) } } @@ -85,11 +82,11 @@ extension MerchantsListSegment { var filterGroups: [PointOfUseListFiltersGroup] { switch self { case .online: - return [] + return [.sortBy, .paymentType, .denominationType] case .nearby: - return [.sortByDistanceOrName, .radius, .locationService] + return [.sortBy, .paymentType, .denominationType, .territory, .radius, .locationService] case .all: - return [.sortByDistanceOrName, .territory, .radius, .locationService] + return [.sortBy, .paymentType, .denominationType, .territory, .radius, .locationService] } } @@ -103,6 +100,8 @@ extension MerchantsListSegment { @objc class MerchantListViewController: ExplorePointOfUseListViewController { + private var infoButton: UIBarButtonItem! + override var locationServicePopupTitle: String { NSLocalizedString("Merchant search works better with Location Services turned on.", comment: "") } @@ -193,6 +192,7 @@ class MerchantListViewController: ExplorePointOfUseListViewController { let vc = PointOfUseDetailsViewController(pointOfUse: pointOfUse, isShowAllHidden: merchant.type == .online) vc.payWithDashHandler = payWithDashHandler + vc.onGiftCardPurchased = onGiftCardPurchased navigationController?.pushViewController(vc, animated: true) } @@ -229,12 +229,6 @@ class MerchantListViewController: ExplorePointOfUseListViewController { } } - override func refreshFilterCell() { - super.refreshFilterCell() - - filterCell?.filterButton.isHidden = !model.currentSegment.showsFilters - } - override func configureHierarchy() { title = NSLocalizedString("Where to Spend", comment: ""); @@ -245,6 +239,8 @@ class MerchantListViewController: ExplorePointOfUseListViewController { override func viewDidLoad() { super.viewDidLoad() + + setupInfoButton() model.itemsDidChange = { [weak self] in guard let wSelf = self else { return } @@ -272,6 +268,17 @@ class MerchantListViewController: ExplorePointOfUseListViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) } + + private func setupInfoButton() { + let infoImage = UIImage(systemName: "info.circle")?.withRenderingMode(.alwaysOriginal).withTintColor(.systemBlue) + infoButton = UIBarButtonItem(image: infoImage, style: .plain, target: self, action: #selector(infoButtonAction)) + navigationItem.rightBarButtonItem = infoButton + } + + @objc + func infoButtonAction() { + let hostingController = UIHostingController(rootView: MerchantTypesDialog()) + hostingController.setDetent(640) + self.present(hostingController, animated: true) + } } - - diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/MerchantsDataProvider.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/MerchantsDataProvider.swift index a02e61a21..59a9f97d4 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/MerchantsDataProvider.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/MerchantsDataProvider.swift @@ -59,7 +59,7 @@ class AllMerchantsDataProvider: NearbyMerchantsDataProvider { with filters: PointOfUseListFilters?, offset: Int, completion: @escaping (Swift.Result, Error>) -> Void) { dataSource.allMerchants(by: query, in: nil, userPoint: userPoint, paymentMethods: filters?.merchantPaymentTypes, - sortBy: filters?.sortBy, territory: filters?.territory, + sortBy: filters?.sortBy, territory: filters?.territory, denominationType: filters?.denominationType, offset: offset, completion: completion) } } @@ -102,7 +102,7 @@ class NearbyMerchantsDataProvider: PointOfUseDataProvider { internal func fetch(by query: String?, in bounds: ExploreMapBounds?, userPoint: CLLocationCoordinate2D?, with filters: PointOfUseListFilters?, offset: Int, completion: @escaping (Swift.Result, Error>) -> Void) { - dataSource.nearbyMerchants(by: query, in: bounds, userPoint: userPoint, paymentMethods: filters?.merchantPaymentTypes, sortBy: filters?.sortBy, territory: filters?.territory, offset: offset, completion: completion) + dataSource.nearbyMerchants(by: query, in: bounds, userPoint: userPoint, paymentMethods: filters?.merchantPaymentTypes, sortBy: filters?.sortBy, territory: filters?.territory, denominationType: filters?.denominationType, offset: offset, completion: completion) } } @@ -137,6 +137,6 @@ class OnlineMerchantsDataProvider: PointOfUseDataProvider { with filters: PointOfUseListFilters?, offset: Int, completion: @escaping (Swift.Result, Error>) -> Void) { dataSource.onlineMerchants(query: query, onlineOnly: false, paymentMethods: filters?.merchantPaymentTypes, - userPoint: userPoint, offset: offset, completion: completion) + sortBy: filters?.sortBy, userPoint: userPoint, denominationType: filters?.denominationType, offset: offset, completion: completion) } } diff --git a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/PointOfUseListModel.swift b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/PointOfUseListModel.swift index b7d894af3..d76fabc84 100644 --- a/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/PointOfUseListModel.swift +++ b/DashWallet/Sources/UI/Explore Dash/Merchants & ATMs/List/Model/PointOfUseListModel.swift @@ -101,9 +101,8 @@ struct PointOfUseListSegment: Hashable { var showReversedLocation: Bool var dataProvider: PointOfUseDataProvider var filterGroups: [PointOfUseListFiltersGroup] - var defaultFilters: PointOfUseListFilters! var territoriesDataSource: TerritoryDataSource? - var showsFilters: Bool + var sortOptions: [PointOfUseListFilters.SortBy] } // MARK: - PointOfUseListModel @@ -121,9 +120,6 @@ final class PointOfUseListModel { internal var dataProviders: [PointOfUseListSegment: PointOfUseDataProvider] = [:] var filters: PointOfUseListFilters? - var initialFilters: PointOfUseListFilters! { - currentSegment.defaultFilters - } var currentSegment: PointOfUseListSegment { didSet { diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.m b/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.m deleted file mode 100644 index 0cf0ef252..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreHeaderView.m +++ /dev/null @@ -1,114 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWExploreHeaderView.h" - -#import "DWUIKit.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface DWExploreHeaderView () - -@property (readonly, nonatomic, strong) UIImageView *iconImageView; -@property (readonly, nonatomic, strong) UILabel *titleLabel; -@property (readonly, nonatomic, strong) UILabel *descLabel; - -@end - -NS_ASSUME_NONNULL_END - -@implementation DWExploreHeaderView - -CGFloat const kExploreHeaderViewHeight = 351.0f; - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor dw_darkBlueColor]; - self.spacing = 4; - self.axis = UILayoutConstraintAxisVertical; - self.distribution = UIStackViewDistributionFillProportionally; - - UIImageView *iconImageView = [[UIImageView alloc] init]; - iconImageView.translatesAutoresizingMaskIntoConstraints = NO; - iconImageView.contentMode = UIViewContentModeScaleAspectFit; - [self addArrangedSubview:iconImageView]; - - _iconImageView = iconImageView; - - UILabel *titleLabel = [[UILabel alloc] init]; - titleLabel.translatesAutoresizingMaskIntoConstraints = NO; - titleLabel.textColor = [UIColor whiteColor]; // always white - titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleLargeTitle]; - titleLabel.textAlignment = NSTextAlignmentCenter; - titleLabel.numberOfLines = 0; - titleLabel.minimumScaleFactor = 0.4; - titleLabel.adjustsFontSizeToFitWidth = YES; - [self addArrangedSubview:titleLabel]; - _titleLabel = titleLabel; - - UILabel *descLabel = [[UILabel alloc] init]; - descLabel.translatesAutoresizingMaskIntoConstraints = NO; - descLabel.textColor = [UIColor whiteColor]; // always white - descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleCallout]; - descLabel.textAlignment = NSTextAlignmentCenter; - descLabel.numberOfLines = 0; - descLabel.adjustsFontSizeToFitWidth = YES; - descLabel.minimumScaleFactor = 0.4; - [self addArrangedSubview:descLabel]; - _descLabel = descLabel; - - [iconImageView setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - [titleLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; - [descLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisVertical]; - - [NSLayoutConstraint activateConstraints:@[ - [iconImageView.heightAnchor constraintLessThanOrEqualToConstant:250.0], - [descLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor - constant:15.0], - [descLabel.trailingAnchor constraintEqualToAnchor:self.trailingAnchor - constant:-15.0], - ]]; - } - return self; -} - -- (UIImage *)image { - return self.iconImageView.image; -} - -- (void)setImage:(UIImage *)image { - self.iconImageView.image = image; -} - -- (NSString *)title { - return self.titleLabel.text; -} - -- (void)setTitle:(NSString *)title { - self.titleLabel.text = title; -} - -- (NSString *)subtitle { - return self.descLabel.text; -} - -- (void)setSubtitle:(NSString *)subtitle { - self.descLabel.text = subtitle; -} - -@end diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.h b/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.h deleted file mode 100644 index 7c76effb2..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface DWExploreTestnetContentsView : UIView -@property (nonatomic, copy) void (^whereToSpendHandler)(void); -@property (nonatomic, copy) void (^atmHandler)(void); -@property (nonatomic, copy) void (^stakingHandler)(void); -@end - -@interface DWExploreTestnetContentsViewCell : UIView -@property (nullable, nonatomic, strong) UIImage *image; -@property (nullable, nonatomic, copy) NSString *title; -@property (nullable, nonatomic, copy) NSString *subtitle; - -@property (nonatomic, copy) void (^actionHandler)(void); - -- (void)addContent:(UIView *)view; -@end - -@interface DWExploreCrowdNodeContentsViewCell : DWExploreTestnetContentsViewCell -@end - -NS_ASSUME_NONNULL_END diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.m b/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.m deleted file mode 100644 index 2a3d43684..000000000 --- a/DashWallet/Sources/UI/Explore Dash/Views/DWExploreTestnetContentsView.m +++ /dev/null @@ -1,273 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2021 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DWExploreTestnetContentsView.h" - -#import "DWEnvironment.h" -#import "DWUIKit.h" -#import "dashwallet-Swift.h" - - -@interface DWExploreTestnetContentsView () -@end - -@implementation DWExploreTestnetContentsView - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - self.backgroundColor = [UIColor dw_darkBlueColor]; - - UIView *contentView = [[UIView alloc] init]; - contentView.translatesAutoresizingMaskIntoConstraints = NO; - contentView.backgroundColor = [UIColor dw_secondaryBackgroundColor]; - contentView.layer.cornerRadius = 8.0; - contentView.layer.masksToBounds = YES; - contentView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; // TL | TR - [self addSubview:contentView]; - - UIView *subContentView = [[UIView alloc] init]; - subContentView.translatesAutoresizingMaskIntoConstraints = NO; - subContentView.backgroundColor = [UIColor dw_backgroundColor]; - subContentView.layer.cornerRadius = 8.0; - subContentView.layer.masksToBounds = YES; - [contentView addSubview:subContentView]; - - UIStackView *buttonsStackView = [UIStackView new]; - buttonsStackView.translatesAutoresizingMaskIntoConstraints = NO; - buttonsStackView.spacing = 8; - buttonsStackView.axis = UILayoutConstraintAxisVertical; - buttonsStackView.distribution = UIStackViewDistributionEqualSpacing; - [subContentView addSubview:buttonsStackView]; - - __weak typeof(self) weakSelf = self; - DWExploreTestnetContentsViewCell *merchantsItem = [self itemWithImage:[UIImage imageNamed:@"image.explore.dash.wheretospend"] - title:NSLocalizedString(@"Where to Spend?", nil) - subtitle:NSLocalizedString(@"Find merchants who accept Dash as payment.", nil) - action:^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - strongSelf.whereToSpendHandler(); - }]; - [buttonsStackView addArrangedSubview:merchantsItem]; - - DWExploreTestnetContentsViewCell *atmItem = [self itemWithImage:[UIImage imageNamed:@"image.explore.dash.atm"] - title:NSLocalizedString(@"ATMs", nil) - subtitle:NSLocalizedString(@"Find where to buy or sell DASH and other cryptocurrencies for cash.", nil) - action:^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - strongSelf.atmHandler(); - }]; - [buttonsStackView addArrangedSubview:atmItem]; - - // TODO: Fix typo in subtitle: should be taps not clicks - DWExploreTestnetContentsViewCell *cnItem = [self itemWithImage:[UIImage imageNamed:@"image.explore.dash.staking"] - title:NSLocalizedString(@"Staking", nil) - subtitle:NSLocalizedString(@"Easily stake Dash and earn passive income with a few simple clicks.", nil) - action:^{ - __strong typeof(weakSelf) strongSelf = weakSelf; - if (!strongSelf) { - return; - } - - strongSelf.stakingHandler(); - }]; - [cnItem addContent:[[DWCrowdNodeAPYView alloc] initWithFrame:CGRectZero]]; - [buttonsStackView addArrangedSubview:cnItem]; - - CGFloat verticalPadding = 10; - - [NSLayoutConstraint activateConstraints:@[ - [contentView.topAnchor constraintEqualToAnchor:self.topAnchor], - [contentView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - [contentView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], - [contentView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - - [subContentView.topAnchor constraintEqualToAnchor:contentView.topAnchor - constant:15], - [subContentView.bottomAnchor constraintLessThanOrEqualToAnchor:contentView.bottomAnchor - constant:-35], - [subContentView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor - constant:-15], - [subContentView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor - constant:15], - - [buttonsStackView.topAnchor constraintEqualToAnchor:subContentView.topAnchor - constant:verticalPadding], - [buttonsStackView.bottomAnchor constraintEqualToAnchor:subContentView.bottomAnchor - constant:-verticalPadding], - [buttonsStackView.trailingAnchor constraintEqualToAnchor:subContentView.trailingAnchor], - [buttonsStackView.leadingAnchor constraintEqualToAnchor:subContentView.leadingAnchor], - ]]; - } - return self; -} - -- (nonnull DWExploreTestnetContentsViewCell *)itemWithImage:(UIImage *)image title:(NSString *)title subtitle:(NSString *)subtitle action:(void (^)(void))action { - DWExploreTestnetContentsViewCell *item = [[DWExploreTestnetContentsViewCell alloc] initWithFrame:CGRectZero]; - item.translatesAutoresizingMaskIntoConstraints = NO; - [item setImage:image]; - [item setTitle:title]; - [item setSubtitle:subtitle]; - [item setActionHandler:action]; - return item; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - - if (indexPath.row == 0) { - _whereToSpendHandler(); - } - else if (indexPath.row == 1) { - _atmHandler(); - } - else { - _stakingHandler(); - } -} - -@end - -@interface DWExploreTestnetContentsViewCell () -@property (readonly, nonatomic, strong) UIImageView *iconImageView; -@property (readonly, nonatomic, strong) UILabel *titleLabel; -@property (readonly, nonatomic, strong) UILabel *descLabel; -@property (readonly, nonatomic, strong) UIStackView *contentStack; -@end - -@implementation DWExploreTestnetContentsViewCell - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self configureHierarchy]; - } - - return self; -} - -- (void)buttonAction:(UIButton *)sender { - _actionHandler(); -} - -- (void)configureHierarchy { - self.backgroundColor = [UIColor dw_backgroundColor]; - - UIStackView *stackView = [UIStackView new]; - stackView.axis = UILayoutConstraintAxisHorizontal; - stackView.spacing = 10; - stackView.alignment = UIStackViewAlignmentTop; - stackView.translatesAutoresizingMaskIntoConstraints = NO; - [self addSubview:stackView]; - - UIImageView *iconImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 34, 34)]; - iconImageView.translatesAutoresizingMaskIntoConstraints = NO; - iconImageView.contentMode = UIViewContentModeCenter; - [stackView addArrangedSubview:iconImageView]; - _iconImageView = iconImageView; - - UIStackView *labelsStackView = [UIStackView new]; - labelsStackView.translatesAutoresizingMaskIntoConstraints = NO; - labelsStackView.axis = UILayoutConstraintAxisVertical; - labelsStackView.spacing = 1; - labelsStackView.alignment = UIStackViewAlignmentLeading; - [stackView addArrangedSubview:labelsStackView]; - _contentStack = labelsStackView; - - UILabel *titleLabel = [[UILabel alloc] init]; - [titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - titleLabel.translatesAutoresizingMaskIntoConstraints = NO; - titleLabel.textColor = [UIColor labelColor]; - titleLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleBody]; - titleLabel.textAlignment = NSTextAlignmentLeft; - titleLabel.numberOfLines = 0; - [labelsStackView addArrangedSubview:titleLabel]; - _titleLabel = titleLabel; - - UILabel *descLabel = [[UILabel alloc] init]; - [descLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; - descLabel.translatesAutoresizingMaskIntoConstraints = NO; - descLabel.textColor = [UIColor secondaryLabelColor]; - descLabel.font = [UIFont dw_fontForTextStyle:UIFontTextStyleFootnote]; - descLabel.textAlignment = NSTextAlignmentLeft; - descLabel.numberOfLines = 0; - [labelsStackView addArrangedSubview:descLabel]; - _descLabel = descLabel; - - UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; - button.translatesAutoresizingMaskIntoConstraints = NO; - button.titleLabel.text = @""; - [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; - [self addSubview:button]; - - [NSLayoutConstraint activateConstraints:@[ - [iconImageView.widthAnchor constraintEqualToConstant:34], - [iconImageView.heightAnchor constraintEqualToConstant:34], - - [stackView.topAnchor constraintEqualToAnchor:self.topAnchor - constant:12], - [stackView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor - constant:-12], - [stackView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor - constant:15], - [stackView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - - [button.topAnchor constraintEqualToAnchor:self.topAnchor], - [button.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - [button.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], - [button.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - ]]; -} - -- (UIImage *)image { - return self.iconImageView.image; -} - -- (void)setImage:(UIImage *)image { - self.iconImageView.image = image; -} - -- (NSString *)title { - return self.titleLabel.text; -} - -- (void)setTitle:(NSString *)title { - self.titleLabel.text = title; -} - -- (NSString *)subtitle { - return self.descLabel.text; -} - -- (void)setSubtitle:(NSString *)subtitle { - self.descLabel.text = subtitle; -} - -- (void)addContent:(UIView *)view { - UIView *last = [[_contentStack arrangedSubviews] lastObject]; - [_contentStack setCustomSpacing:10 afterView:last]; - [_contentStack addArrangedSubview:view]; -} -@end diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendLoginInfoView.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendLoginInfoView.swift new file mode 100644 index 000000000..1512ab232 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendLoginInfoView.swift @@ -0,0 +1,67 @@ +// +// 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 + +struct CTXSpendLoginInfoView: View { + let onCreateNewAccount: () -> Void + let onLogIn: () -> Void + let onTermsAndConditions: () -> Void + @State private var inProgress: Bool = false + + var body: some View { + BottomSheet(showBackButton: .constant(false)) { + VStack { + TextIntro( + icon: .custom("ctx.logo", maxHeight: 60), + inProgress: $inProgress + ) { + FeatureTopText( + title: NSLocalizedString("Create an account or log into an existing one", comment: "DashSpend account title"), + label: NSLocalizedString("Terms & conditions", comment: "Terms & conditions"), + labelIcon: .custom("external.link"), + linkAction: onTermsAndConditions + ) + } + + ButtonsGroup( + orientation: .vertical, + size: .large, + positiveActionEnabled: true, + positiveButtonText: NSLocalizedString("Create new account", comment: ""), + positiveButtonAction: { + onCreateNewAccount() + }, + negativeButtonText: NSLocalizedString("Log in", comment: ""), + negativeButtonAction: { + onLogIn() + } + ) + .padding(.horizontal) + .padding(.bottom, 10) + } + } + } +} + +#Preview { + CTXSpendLoginInfoView( + onCreateNewAccount: {}, + onLogIn: {}, + onTermsAndConditions: {} + ) +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendTermsScreen.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendTermsScreen.swift new file mode 100644 index 000000000..571e37294 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendTermsScreen.swift @@ -0,0 +1,128 @@ +// +// 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 + +struct CTXSpendTermsScreen: View { + @Environment(\.presentationMode) private var presentationMode + @State private var isTermsAccepted: Bool = false + @State private var hasViewedTerms: Bool = false + @State private var shouldShakeLink: Bool = false + @State private var navigateToCreateAccount: Bool = false + + let onAuthSuccess: () -> Void + + var body: some View { + ZStack { + VStack(spacing: 0) { + HStack { + Spacer() + + Button(action: { + presentationMode.wrappedValue.dismiss() + }) { + Image(systemName: "xmark") + .font(.system(size: 18, weight: .semibold)) + .foregroundColor(.primaryText) + .padding(10) + } + } + .padding(.top, 5) + .padding(.horizontal, 10) + + TextIntro( + icon: .custom("dashspend.logo", maxHeight: 32), + inProgress: Binding.constant(false) + ) { + FeatureTopText( + title: NSLocalizedString("Accept terms and\nconditions", comment: "DashSpend"), + label: NSLocalizedString("Terms & conditions", comment: "Terms & conditions"), + labelIcon: .custom("external.link"), + linkAction: { + UIApplication.shared.open(URL(string: CTXConstants.ctxGiftCardAgreementUrl)!, options: [:], completionHandler: nil) + hasViewedTerms = true + shouldShakeLink = false + }, + shakeLabel: shouldShakeLink + ) + } + .padding(.top, 20) + + Spacer() + + VStack(spacing: 10) { + HStack(spacing: 8) { + ZStack { + if isTermsAccepted { + RoundedRectangle(cornerRadius: 6) + .fill(Color.dashBlue) + .frame(width: 22, height: 22) + + Image(systemName: "checkmark") + .font(.system(size: 14, weight: .bold)) + .foregroundColor(.white) + } else { + RoundedRectangle(cornerRadius: 6) + .strokeBorder(Color.gray300, lineWidth: 1.5) + .frame(width: 22, height: 22) + } + } + + Text(NSLocalizedString("I accept DashSpend terms and conditions", comment: "Accept terms checkbox")) + .font(.system(size: 14)) + .foregroundColor(.primaryText) + + Spacer() + } + .padding(.vertical, 8) + .onTapGesture { + if !hasViewedTerms { + shouldShakeLink = false + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + shouldShakeLink = true + } + } else { + isTermsAccepted.toggle() + } + } + + DashButton( + text: NSLocalizedString("Create account", comment: "Create account"), + isEnabled: isTermsAccepted, + action: { + navigateToCreateAccount = true + } + ) + } + .padding(20) + } + } + .navigationBarHidden(true) + .navigationBarBackButtonHidden(true) + .edgesIgnoringSafeArea(.top) + + NavigationLink( + destination: CTXSpendUserAuthScreen( + authType: .createAccount, + onAuthSuccess: onAuthSuccess + ).navigationBarHidden(true), + isActive: $navigateToCreateAccount + ) { + EmptyView() + } + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthScreen.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthScreen.swift new file mode 100644 index 000000000..be1ebe0c8 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthScreen.swift @@ -0,0 +1,211 @@ +// +// 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 Combine + +enum CTXSpendUserAuthType { + case createAccount + case signIn + case otp + + var screenTitle: String { + switch self { + case .createAccount: + return NSLocalizedString("Create account", comment: "DashSpend") + case .signIn: + return NSLocalizedString("Log in to your account", comment: "DashSpend") + case .otp: + return NSLocalizedString("Enter verification code", comment: "DashSpend") + } + } + + var screenSubtitle: String { + switch self { + case .createAccount: + return NSLocalizedString("Your email is only used to send a one-time password.", comment: "DashSpend") + case .signIn: + return NSLocalizedString("Your email is only used to send a one-time password.", comment: "DashSpend") + case .otp: + return NSLocalizedString("Check your email and enter the verification code.", comment: "DashSpend") + } + } + + var textInputHint: String { + switch self { + case .createAccount, .signIn: + return NSLocalizedString("Email", comment: "DashSpend") + case .otp: + return NSLocalizedString("Password", comment: "DashSpend") + } + } +} + +struct CTXSpendUserAuthScreen: View { + @Environment(\.presentationMode) private var presentationMode + @StateObject private var viewModel = CTXSpendUserAuthViewModel() + @FocusState private var isTextFieldFocused: Bool + @State private var navigateToOtp: Bool = false + + let authType: CTXSpendUserAuthType + let onAuthSuccess: () -> Void + + var body: some View { + VStack(spacing: 0) { + // Header + 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)) + .foregroundColor(.primaryText) + .frame(maxWidth: .infinity) + + Spacer() + + Color.clear + .frame(width: 44, height: 44) + } + .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) + + 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) + } + + 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, 20) + } + + NavigationLink( + destination: CTXSpendUserAuthScreen( + authType: .otp, + onAuthSuccess: onAuthSuccess + ).navigationBarHidden(true), + isActive: $navigateToOtp + ) { + EmptyView() + } + } + .background(Color.secondaryBackground) + .navigationBarHidden(true) + .navigationBarBackButtonHidden(true) + .edgesIgnoringSafeArea(.top) + .onAppear { + viewModel.setup(screenType: authType) + + if authType != .otp { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + isTextFieldFocused = true + } + } else { + isTextFieldFocused = false + } + } + .onChange(of: viewModel.screenType) { newValue in + if newValue != authType && newValue == .otp { + navigateToOtp = true + } + } + .onChange(of: viewModel.isUserSignedIn) { isSignedIn in + if (isSignedIn && authType == .otp) { + presentationMode.wrappedValue.dismiss() + onAuthSuccess() + } + } + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthViewModel.swift new file mode 100644 index 000000000..61dd9da54 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/CTXSpendUserAuthViewModel.swift @@ -0,0 +1,94 @@ +// +// 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 + +@MainActor +class CTXSpendUserAuthViewModel: ObservableObject { + @Published var input = "" + @Published var isLoading = false + @Published var showError = false + @Published var errorMessage = "" + @Published var screenType: CTXSpendUserAuthType = .createAccount + @Published var isUserSignedIn: Bool = false + + private let service = CTXSpendService.shared + + func setup(screenType: CTXSpendUserAuthType) { + self.isUserSignedIn = service.isUserSignedIn + self.screenType = screenType + } + + func onContinue() { + isLoading = true + showError = false + + Task { + do { + switch screenType { + case .createAccount, .signIn: + if try await service.signIn(email: input) { + screenType = .otp + } + case .otp: + if try await service.verifyEmail(code: input) { + isUserSignedIn = true + } + } + } catch CTXSpendError.invalidCode { + showError = true + errorMessage = NSLocalizedString("The code is incorrect. Please check and try again!", comment: "DashSpend") + } catch CTXSpendError.networkError { + showError = true + errorMessage = NSLocalizedString("Please check your network connection", comment: "") + } catch CTXSpendError.unauthorized { + showError = true + errorMessage = NSLocalizedString("Authorization error. Please try logging in again.", comment: "DashSpend") + } catch { + showError = true + errorMessage = NSLocalizedString("An error occurred", comment: "") + } + + isLoading = false + } + } + + func isInputValid(authType: CTXSpendUserAuthType) -> Bool { + if authType == .otp { + return !input.isEmpty + } + return input.isValidEmail + } + + func clearInput() { + input = "" + showError = false + } + + func logout() { + service.logout() + } +} + +private extension String { + var isValidEmail: Bool { + let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" + let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailRegex) + return emailPredicate.evaluate(with: self) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendConfirmationDialog.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendConfirmationDialog.swift new file mode 100644 index 000000000..d4fcba79d --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendConfirmationDialog.swift @@ -0,0 +1,161 @@ +// +// 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 + +struct DashSpendConfirmationDialog: View { + let amount: String + let merchantName: String + let merchantIconUrl: String + let originalPrice: Decimal + let discount: Decimal + let onConfirm: () -> Void + let onCancel: () -> Void + + @Environment(\.presentationMode) private var presentationMode + + private let fiatFormatter = NumberFormatter.fiatFormatter(currencyCode: kDefaultCurrencyCode) + + var body: some View { + VStack(spacing: 40) { + HStack { + Text(fiatFormatter.currencySymbol + amount) + .font(.system(size: 32, weight: .medium)) + .foregroundColor(.primaryText) + } + + // Details + VStack(spacing: 0) { + HStack(spacing: 8) { + Text(NSLocalizedString("From", comment: "DashSpend")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Image("image.explore.dash.wts.dash") + .resizable() + .frame(width: 24, height: 24) + + Text(NSLocalizedString("Dash Wallet", comment: "DashSpend")) + .font(.body2) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 12) + .frame(height: 50) + + HStack(spacing: 8) { + Text(NSLocalizedString("To", comment: "DashSpend")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + WebImage(url: URL(string: merchantIconUrl)) + .resizable() + .indicator(.activity) + .transition(.fade(duration: 0.3)) + .scaledToFit() + .frame(width: 24, height: 24) + .clipShape(Circle()) + + Text(merchantName) + .font(.body2) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 12) + .frame(height: 50) + + HStack { + Text(NSLocalizedString("Gift card total", comment: "DashSpend")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(fiatFormatter.string(from: NSDecimalNumber(decimal: originalPrice)) ?? "") + .font(.body2) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 12) + .frame(height: 50) + + HStack { + Text(NSLocalizedString("Discount", comment: "DashSpend")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text("\(NSDecimalNumber(decimal: discount * 100).intValue)%") + .font(.body2) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 12) + .frame(height: 50) + + HStack { + Text(NSLocalizedString("You pay", comment: "DashSpend")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(fiatFormatter.string(from: NSDecimalNumber(decimal: originalPrice * (1 - discount))) ?? "") + .font(.body2) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 12) + .frame(height: 50) + } + .background(Color.secondaryBackground) + .cornerRadius(12) + .shadow(color: Color.shadow, radius: 10, x: 0, y: 5) + + HStack(spacing: 20) { + Button(action: onCancel) { + Text(NSLocalizedString("Cancel", comment: "DashSpend")) + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(.primaryText) + .frame(maxWidth: .infinity) + .frame(height: 46) + } + .background(Color(UIColor.systemGray5)) + .cornerRadius(12) + + Button(action: onConfirm) { + Text(NSLocalizedString("Confirm", comment: "DashSpend")) + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(.white) + } + .frame(maxWidth: .infinity) + .frame(height: 46) + .background(Color.dashBlue) + .cornerRadius(12) + } + } + .padding(.top, 15) + .padding(.horizontal, 20) + .edgesIgnoringSafeArea(.bottom) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift new file mode 100644 index 000000000..675ae4b44 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayScreen.swift @@ -0,0 +1,310 @@ +// +// 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 + +struct DashSpendPayScreen: View { + @Environment(\.presentationMode) private var presentationMode + @StateObject private var viewModel: DashSpendPayViewModel + let merchant: ExplorePointOfUse + @State var justAuthenticated: Bool + @State var showConfirmToast: Bool + @State private var showConfirmationDialog = false + @State private var showErrorDialog = false + @State private var showCustomErrorDialog = false + @State private var errorMessage = "" + @State private var errorTitle = "" + let onPurchaseSuccess: ((Data) -> Void)? + + 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 { + ZStack(alignment: .bottom) { + VStack(spacing: 0) { + HStack { + Button(action: { + presentationMode.wrappedValue.dismiss() + }) { + Image(systemName: "chevron.left") + .font(.system(size: 18, weight: .semibold)) + .foregroundColor(.primaryText) + .padding(10) + } + + Spacer() + } + .padding(.top, 5) + .padding(.horizontal, 10) + + SendIntro( + title: NSLocalizedString("Buy gift card", comment: "DashSpend"), + preposition: NSLocalizedString("at", comment: "DashSpend"), + destination: viewModel.merchantTitle, + dashBalance: viewModel.isMixing ? viewModel.coinJoinBalance : viewModel.walletBalance, + balanceLabel: (viewModel.isMixing ? NSLocalizedString("Mixed balance", comment: "") : NSLocalizedString("Balance", comment: "")) + ":", + avatarView: { + WebImage(url: URL(string: viewModel.merchantIconUrl)) + .resizable() + .indicator(.activity) + .transition(.fade(duration: 0.3)) + .scaledToFit() + .clipShape(Circle()) + } + ).padding(.horizontal, 20) + + Spacer() + + Text(viewModel.currencySymbol + viewModel.input) + .font(.largeTitle) + .foregroundColor(.primaryText) + .lineLimit(1) + .minimumScaleFactor(0.5) + + HStack { + if viewModel.showLimits { + Text(viewModel.minimumLimitMessage) + .font(.body2) + .foregroundColor(Color.primaryText) + .padding(.leading, 20) + Spacer() + } + + if let error = viewModel.error { + Text(error.localizedDescription) + .font(.body2) + .foregroundColor(Color.systemRed) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + .padding(.horizontal, 10) + } else if viewModel.showCost { + Text(viewModel.costMessage) + .font(.body2) + .foregroundColor(Color.primaryText) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + .padding(.horizontal, 10) + } + + if viewModel.showLimits { + Spacer() + Text(viewModel.maximumLimitMessage) + .font(.body2) + .foregroundColor(Color.primaryText) + .padding(.trailing, 20) + } + + } + .frame(maxWidth: .infinity) + .frame(height: 20) + .padding(.top, 20) + .padding(.bottom, 10) + + Spacer() + + if viewModel.isFixedDenomination { + MerchantDenominations( + denominations: viewModel.denominations, + selectedDenomination: viewModel.selectedDenomination, + actionEnabled: viewModel.selectedDenomination != nil && viewModel.error == nil && !viewModel.isLoading, + onDenominationSelected: { denom in + viewModel.selectedDenomination = denom + }, + actionHandler: { + if !viewModel.isUserSignedIn { + showSignInError() + return + } + + showConfirmationDialog = true + } + ) + .frame(maxWidth: .infinity) + .padding(.top, 20) + .padding(.horizontal, 20) + .padding(.bottom, 30) + .background(Color.secondaryBackground) + .cornerRadius(20) + } else { + NumericKeyboardView( + value: $viewModel.input, + showDecimalSeparator: true, + actionButtonText: NSLocalizedString("Preview", comment: ""), + actionEnabled: viewModel.error == nil && !viewModel.showLimits && !viewModel.isLoading && viewModel.hasValidLimits, + inProgress: viewModel.isProcessingPayment, + actionHandler: { + if !viewModel.isUserSignedIn { + showSignInError() + return + } + + showConfirmationDialog = true + } + ) + .frame(maxWidth: .infinity) + .frame(height: 320) + .padding(.horizontal, 20) + .padding(.bottom, 30) + .background(Color.secondaryBackground) + .cornerRadius(20) + } + } + + if justAuthenticated { + ToastView( + text: NSLocalizedString("Logged in to DashSpend account", comment: "DashSpend"), + icon: .system("checkmark.circle") + ) + .frame(height: 20) + .padding(.bottom, 30) + } + + if showConfirmToast { + ToastView( + text: NSLocalizedString("Gift card purchase successful", comment: "DashSpend") + ) + .frame(height: 20) + .padding(.bottom, 30) + } + + if showErrorDialog { + ModalDialog( + style: .error, + icon: .system("exclamationmark.triangle.fill"), + heading: errorTitle, + textBlock1: errorMessage, + positiveButtonText: NSLocalizedString("OK", comment: ""), + positiveButtonAction: { + showErrorDialog = false + } + ) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color.black.opacity(0.7)) + .edgesIgnoringSafeArea(.all) + } + + if showCustomErrorDialog { + ModalDialog( + style: .error, + icon: .system("exclamationmark.triangle.fill"), + heading: errorTitle, + textBlock1: errorMessage, + positiveButtonText: NSLocalizedString("Close", comment: ""), + positiveButtonAction: { + showCustomErrorDialog = false + }, + negativeButtonText: NSLocalizedString("Contact CTX Support", comment: "DashSpend"), + negativeButtonAction: { + showCustomErrorDialog = false + viewModel.contactCTXSupport() + } + ) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color.black.opacity(0.7)) + .edgesIgnoringSafeArea(.all) + } + } + .ignoresSafeArea(.all, edges: .bottom) + .background(Color.primaryBackground) + .onAppear { + viewModel.subscribeToUpdates() + + if justAuthenticated { + DispatchQueue.main.asyncAfter(deadline: .now() + 3) { + justAuthenticated = false + } + } + } + .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"), + showBackButton: Binding.constant(false) + ) { + DashSpendConfirmationDialog( + amount: viewModel.input, + merchantName: viewModel.merchantTitle, + merchantIconUrl: viewModel.merchantIconUrl, + originalPrice: viewModel.amount, + discount: viewModel.savingsFraction, + onConfirm: { + showConfirmationDialog = false + purchaseGiftCard() + }, + onCancel: { + showConfirmationDialog = false + } + ) + }.background(Color.primaryBackground) + + if #available(iOS 16.0, *) { + dialog.presentationDetents([.height(500)]) + } else { + dialog + } + } + } + + private func purchaseGiftCard() { + Task { + do { + let txId = try await viewModel.purchaseGiftCardAndPay() + showConfirmationDialog = false + presentationMode.wrappedValue.dismiss() + onPurchaseSuccess?(txId) + } catch let error as CTXSpendError { + showConfirmationDialog = false + errorTitle = NSLocalizedString("Purchase Failed", comment: "DashSpend") + errorMessage = error.localizedDescription + + if case .customError = error { + showCustomErrorDialog = true + } else { + showErrorDialog = true + } + + DSLogger.log("Gift card purchase failed with CTXSpendError: \(error)") + } catch { + showConfirmationDialog = false + errorTitle = NSLocalizedString("Error", comment: "") + errorMessage = error.localizedDescription + showErrorDialog = true + + DSLogger.log("Gift card purchase failed with error: \(error)") + } + } + } + + private func showSignInError() { + errorTitle = NSLocalizedString("Sign in required", comment: "Alert title") + errorMessage = NSLocalizedString("You need to sign in to DashSpend to purchase gift cards.", comment: "DashSpend") + showErrorDialog = true + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift new file mode 100644 index 000000000..e5fff3828 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/DashSpendPayViewModel.swift @@ -0,0 +1,323 @@ +// +// 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 + +private let defaultCurrency = kDefaultCurrencyCode + +@MainActor +class DashSpendPayViewModel: NSObject, ObservableObject, NetworkReachabilityHandling { + private var cancellableBag = Set() + private let fiatFormatter = NumberFormatter.fiatFormatter(currencyCode: defaultCurrency) + private let ctxSpendService = CTXSpendService.shared + private let customIconProvider = CustomIconMetadataProvider.shared + private let txMetadataDao = TransactionMetadataDAOImpl.shared + private let sendCoinsService = SendCoinsService() + + // Network monitoring properties + var networkStatusDidChange: ((NetworkStatus) -> ())? + var reachabilityObserver: Any! + + 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 + return locale.displayName(forKey: .currencySymbol, value: defaultCurrency) ?? "$" + }() + + @Published var merchantTitle: String = "" + @Published var merchantIconUrl: String = "" + @Published var walletBalance: UInt64 = 0 + @Published var coinJoinBalance: UInt64 = 0 + @Published var minimumAmount: Decimal = 0 + @Published var maximumAmount: Decimal = 0 + @Published var error: Error? = nil + @Published var isFixedDenomination: Bool = false + @Published var denominations: [Int] = [] + @Published var selectedDenomination: Int? = nil { + didSet { + if let denom = selectedDenomination { + input = String(denom) + } else { + input = "0" + } + } + } + @Published var input: String = "0" { + didSet { + // Replace the initial "0" when entering a new digit + if oldValue == "0" && input.count > 1 && input.first == "0" && input[input.index(after: input.startIndex)] != "." { + input = String(input.dropFirst()) + } + + // Validate input to ensure no more than 2 decimal places + if let decimalSeparatorIndex = input.firstIndex(of: ".") { + let decimalPart = input[input.index(after: decimalSeparatorIndex)...] + if decimalPart.count > 2 { + input = oldValue + } + } + + if input.isEmpty { + input = "0" + } + + amount = input.decimal() ?? 0 + checkAmountForErrors() + } + } + + var costMessage: String { + let originalPrice = fiatFormatter.string(for: amount) ?? "0.00" + let discountedPrice = amount * (1 - savingsFraction) + let formattedDiscountedPrice = fiatFormatter.string(for: discountedPrice) ?? "0.00" + + let discount = NSDecimalNumber(decimal: savingsFraction * 100).intValue + return String.localizedStringWithFormat( + NSLocalizedString("You are buying a %@ gift card for %@ (%d%% discount)", comment: "DashSpend"), + originalPrice, formattedDiscountedPrice, discount) + } + var showCost: Bool { error == nil && amount >= minimumAmount && amount <= maximumAmount && hasValidLimits } + var showLimits: Bool { error == nil && !showCost && hasValidLimits } + var hasValidLimits: Bool { minimumAmount > 0 || maximumAmount > 0 } + var minimumLimitMessage: String { String.localizedStringWithFormat(NSLocalizedString("Min: %@", comment: "DashSpend"), fiatFormatter.string(for: minimumAmount) ?? "0.0" ) } + var maximumLimitMessage: String { String.localizedStringWithFormat(NSLocalizedString("Max: %@", comment: "DashSpend"), fiatFormatter.string(for: maximumAmount) ?? "0.0" ) } + var isMixing: Bool { CoinJoinService.shared.mixingState.isInProgress } + + 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 + } + + if let denomType = merchant.merchant?.denominationsType { + self.isFixedDenomination = denomType == DenominationType.Fixed.rawValue + self.denominations = merchant.merchant?.denominations.compactMap { Int($0) } ?? [] + } + + super.init() + + // Initialize with current sign-in state + isUserSignedIn = ctxSpendService.isUserSignedIn + + // Set up network status change handler + networkStatusDidChange = { [weak self] status in + self?.handleNetworkStatusChange(status) + } + } + + func subscribeToUpdates() { + // Start network monitoring + startNetworkMonitoring() + + NotificationCenter.default.publisher(for: NSNotification.Name.DSWalletBalanceDidChange) + .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() + .sink { [weak self] progress in + self?.coinJoinBalance = progress.coinJoinBalance + } + .store(in: &cancellableBag) + } + + self.refreshBalance() + + // Get updated merchant info from CTX API if user is signed in + Task { + await updateMerchantInfo() + } + } + + func purchaseGiftCardAndPay() async throws -> Data { + isProcessingPayment = true + defer { isProcessingPayment = false } + + let response = try await purchaseGiftCardAPI() + + // Process the payment using the payment URL + guard let paymentUrlString = response.paymentUrls?.first?.value else { + throw CTXSpendError.paymentProcessingError("No payment URL received") + } + + let transaction = try await sendCoinsService.payWithDashUrl(url: paymentUrlString) + + // Payment successful - save gift card information + DSLogger.log("Payment transaction completed: \(transaction.txHashHexString)") + markGiftCardTransaction(txId: transaction.txHashData) + customIconProvider.updateIcon(txId: transaction.txHashData, iconUrl: merchantIconUrl) + saveGiftCardDummy(txHashData: transaction.txHashData, giftCardId: response.paymentId) + + return transaction.txHashData + } + + func contactCTXSupport() { + let subject = "CTX Issue: Spending Limit Problem" + + var body = "Merchant details\n" + body += "name: \(merchantTitle)\n" + body += "id: \(merchantId)\n" + body += "min: \(minimumAmount)\n" + body += "max: \(maximumAmount)\n" + body += "discount: \(savingsFraction)\n" + body += "fixed denomination: \(isFixedDenomination)\n" + body += "denominations: \(denominations)\n" + body += "\n" + + body += "Purchase Details\n" + body += "amount: \(input)\n" + body += "\n" + + // Add device information + body += "Platform: iOS\n" + body += "App version: \(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "unknown")\n" + + if let emailURL = URL(string: "mailto:\(CTXConstants.supportEmail)?subject=\(subject.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")&body=\(body.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")") { + UIApplication.shared.open(emailURL) + } + } + + func unsubscribeFromAll() { + cancellableBag.removeAll() + stopNetworkMonitoring() + } + + private func refreshBalance() { + walletBalance = DWEnvironment.sharedInstance().currentWallet.balance + } + + private func checkAmountForErrors() { + // Check network availability first + guard networkStatus == .online else { + error = SendAmountError.networkUnavailable + return + } + + guard DWGlobalOptions.sharedInstance().isResyncingWallet == false || + DWEnvironment.sharedInstance().currentChainManager.syncPhase == .synced + else { + error = SendAmountError.syncingChain + return + } + + guard !canShowInsufficientFunds else { + error = isMixing ? SendAmountError.insufficientMixedFunds : SendAmountError.insufficientFunds + return + } + + error = nil + } + + private var canShowInsufficientFunds: Bool { + let dashAmount = (try? CurrencyExchanger.shared.convertToDash(amount: amount, currency: kDefaultCurrencyCode)) ?? 0 + + let account = DWEnvironment.sharedInstance().currentAccount + let allAvailableFunds = isMixing ? coinJoinBalance : account.maxOutputAmount + + return dashAmount.plainDashAmount > allAvailableFunds + } + + // MARK: - CTX Integration + + private func updateMerchantInfo() async { + guard !merchantId.isEmpty, ctxSpendService.isUserSignedIn else { return } + + do { + let merchantInfo = try await ctxSpendService.getMerchant(merchantId: merchantId) + + // Update merchant details + savingsFraction = Decimal(merchantInfo.savingsPercentage) / Decimal(10000) + + if merchantInfo.denominationType == .Range { + isFixedDenomination = false + minimumAmount = Decimal(merchantInfo.minimumCardPurchase) + maximumAmount = Decimal(merchantInfo.maximumCardPurchase) + } else { + isFixedDenomination = true + denominations = merchantInfo.denominations.compactMap { Int($0) } + } + + checkAmountForErrors() + } catch { + DSLogger.log("Failed to get merchant info: \(error)") + } + } + + private func purchaseGiftCardAPI() async throws -> GiftCardResponse { + guard !merchantId.isEmpty, ctxSpendService.isUserSignedIn else { + DSLogger.log("Purchase gift card failed: User not signed in or merchant ID is empty") + throw CTXSpendError.unauthorized + } + + DSLogger.log("Attempting to purchase gift card for merchant \(merchantId) with amount \(amount)") + let fiatAmountString = String(format: "%.2f", Double(truncating: amount as NSDecimalNumber)) + + return try await ctxSpendService.purchaseGiftCard( + merchantId: merchantId, + fiatAmount: fiatAmountString, + fiatCurrency: "USD", + cryptoCurrency: "DASH" + ) + } + + private func saveGiftCardDummy(txHashData: Data, giftCardId: String) { + DSLogger.log("Gift card saved - txId: \(txHashData.hexEncodedString()), giftCardId: \(giftCardId)") + + let giftCard = GiftCard( + txId: txHashData, + merchantName: merchantTitle, + merchantUrl: merchantUrl, + price: amount, + note: giftCardId // Store payment ID in note field temporarily + ) + + Task { + await GiftCardsDAOImpl.shared.create(dto: giftCard) + } + } + + private func markGiftCardTransaction(txId: Data) { + var txMetadata = TransactionMetadata(txHash: txId) + txMetadata.taxCategory = TxMetadataTaxCategory.expense + txMetadata.service = ServiceName.ctxSpend.rawValue + txMetadataDao.update(dto: txMetadata) + } + + private func handleNetworkStatusChange(_ status: NetworkStatus) { + // Re-check errors when network status changes + checkAmountForErrors() + } +} 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..b9d7c9e46 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsView.swift @@ -0,0 +1,376 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import SwiftUI +import SDWebImageSwiftUI +import CoreImage.CIFilterBuiltins + +struct GiftCardDetailsView: View { + @StateObject private var viewModel: GiftCardDetailsViewModel + @State private var showHowToUse = false + @State private var navigationController: UINavigationController? = nil + @State private var originalBrightness: CGFloat = -1 + @State private var openTransaction: Bool = false + @Binding var backNavigationRequested: Bool + var onShowBackButton: (Bool) -> Void + + init(txId: Data, backNavigationRequested: Binding, onShowBackButton: @escaping (Bool) -> Void) { + _viewModel = StateObject(wrappedValue: GiftCardDetailsViewModel(txId: txId)) + _backNavigationRequested = backNavigationRequested + self.onShowBackButton = onShowBackButton + } + + var body: some View { + ScrollView { + VStack(spacing: 0) { + // Merchant header + HStack(spacing: 15) { + ZStack(alignment: .bottomTrailing) { + if let icon = viewModel.uiState.merchantIcon { + Image(uiImage: icon) + .resizable() + .transition(.fade(duration: 0.3)) + .scaledToFit() + .frame(width: 48, height: 48) + .clipShape(Circle()) + } else { + Image("image.explore.dash.wts.payment.gift-card") + .resizable() + .scaledToFit() + .frame(width: 48, height: 48) + } + + // Secondary icon + if viewModel.uiState.merchantIcon != nil { + Image("image.explore.dash.wts.payment.gift-card") + .resizable() + .scaledToFit() + .frame(width: 20, height: 20) + .frame(width: 23, height: 23) + .background(Circle().fill(Color.secondaryBackground)) + .offset(x: 2, y: 2) + } + } + + VStack(alignment: .leading, spacing: 4) { + Text(viewModel.uiState.merchantName) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + if let date = viewModel.uiState.purchaseDate { + Text(date, formatter: dateFormatter) + .font(.footnote) + .foregroundColor(.tertiaryText) + } + } + + Spacer() + } + .padding(.horizontal, 25) + .padding(.top, 15) + + // Gift card info container + VStack(spacing: 0) { + // Barcode section + if let barcodeImage = viewModel.uiState.barcodeImage { + Image(uiImage: barcodeImage) + .resizable() + .scaledToFit() + .frame(height: 150) + } else { + ZStack { + RoundedRectangle(cornerRadius: 12) + .fill(Color.gray50) + .frame(height: 108) + + if viewModel.uiState.isLoadingCardDetails { + SwiftUI.ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .scaleEffect(0.8) + } else if viewModel.uiState.loadingError != nil { + Text(NSLocalizedString("Failed to load barcode", comment: "DashSpend")) + .font(.footnote) + .foregroundColor(.systemRed) + } else { + Text(NSLocalizedString("Barcode placeholder", comment: "DashSpend")) + .font(.caption) + .foregroundColor(.tertiaryText) + } + } + .padding(.horizontal, 20) + .padding(.top, 15) + } + + // Original purchase value + HStack { + Text(NSLocalizedString("Original purchase", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(viewModel.uiState.formattedPrice) + .font(.subheadline) + .foregroundColor(.primaryText) + } + .padding(.horizontal, 20) + .padding(.top, 20) + + // Check current balance link + if let merchantUrl = viewModel.uiState.merchantUrl { + Button(action: { + if let url = URL(string: merchantUrl) { + UIApplication.shared.open(url) + } + }) { + Text(NSLocalizedString("Check current balance", comment: "DashSpend")) + .font(.footnote) + .fontWeight(.medium) + .foregroundColor(.dashBlue) + } + .frame(maxWidth: .infinity, alignment: .trailing) + .padding(.horizontal, 16) + .padding(.top, 8) + } + + // Card number and PIN + if viewModel.uiState.isLoadingCardDetails { + SwiftUI.ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .padding(.vertical, 40) + } else if let error = viewModel.uiState.loadingError { + VStack(spacing: 10) { + Text(error.localizedDescription) + .font(.caption) + .foregroundColor(.systemRed) + .multilineTextAlignment(.center) + .padding(.horizontal, 20) + } + .padding(.vertical, 40) + } else { + VStack(spacing: 15) { + // Card number + if let cardNumber = viewModel.uiState.cardNumber { + HStack { + Text(NSLocalizedString("Card number", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(cardNumber) + .font(.subheadline) + .foregroundColor(.primaryText) + + Button(action: { + UIPasteboard.general.string = cardNumber + // TODO: Show toast + }) { + Image("icon_copy_outline") + .resizable() + .scaledToFit() + .tint(.primaryText) + .frame(width: 20, height: 20) + } + .frame(width: 28, height: 40) + } + .padding(.leading, 20) + .padding(.trailing, 10) + } + + // Card PIN + if let cardPin = viewModel.uiState.cardPin { + HStack { + Text(NSLocalizedString("Card PIN", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + + Spacer() + + Text(cardPin) + .font(.subheadline) + .foregroundColor(.primaryText) + + Button(action: { + UIPasteboard.general.string = cardPin + // TODO: Show toast + }) { + Image("icon_copy_outline") + .resizable() + .scaledToFit() + .tint(.primaryText) + .frame(width: 20, height: 20) + } + .frame(width: 32, height: 40) + } + .padding(.leading, 20) + .padding(.trailing, 10) + } + } + .padding(.top, 22) + .padding(.bottom, 15) + } + } + .background(Color.secondaryBackground) + .cornerRadius(12) + .padding(.horizontal, 20) + .padding(.top, 20) + + Button(action: { + openTransaction = true + onShowBackButton(true) + }) { + HStack { + Text(NSLocalizedString("View transaction details", comment: "DashSpend")) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + Spacer() + + Image("greyarrow") + .resizable() + .scaledToFit() + .frame(width: 12, height: 12) + } + .padding(.horizontal, 15) + .padding(.vertical, 20) + .background(Color.secondaryBackground) + .cornerRadius(12) + } + .padding(.horizontal, 20) + .padding(.top, 20) + + // How to use button + if !showHowToUse { + Button(action: { + withAnimation { + showHowToUse = true + } + }) { + Text(NSLocalizedString("See how to use this gift card", comment: "DashSpend")) + .font(.subtitle1) + .foregroundColor(.dashBlue) + } + .padding(.top, 30) + } else { + // How to use expanded content + VStack(alignment: .leading, spacing: 30) { + Text(NSLocalizedString("How to use your gift card", comment: "DashSpend")) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.tertiaryText) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.top, 20) + + // Self-checkout + FeatureSingleItem( + iconName: .custom("dp_user_generic"), + title: NSLocalizedString("Self-checkout", comment: "DashSpend"), + description: NSLocalizedString("Request assistance and show the barcode on your screen for scanning.", comment: "DashSpend") + ) + + // In store + FeatureSingleItem( + iconName: .custom("image.dashspend.shop"), + title: NSLocalizedString("In store", comment: "DashSpend"), + description: NSLocalizedString("Tell the cashier that you'd like to pay with a gift card and share the card number and pin.", comment: "DashSpend") + ) + + // Online + FeatureSingleItem( + iconName: .custom("image.dashspend.online"), + title: NSLocalizedString("Online", comment: "DashSpend"), + description: NSLocalizedString("In the payment section of your checkout, select \"gift card\" and enter your card number and pin.", comment: "DashSpend") + ) + } + .padding(.horizontal, 15) + .padding(.bottom, 35) + .background(Color.secondaryBackground) + .cornerRadius(12) + .padding(.horizontal, 20) + .padding(.top, 20) + } + + // Powered by CTX + VStack(spacing: 8) { + Text(NSLocalizedString("Powered by", comment: "DashSpend")) + .font(.callout) + .foregroundColor(.tertiaryText) + + Image("ctx.logo") + .resizable() + .frame(width: 49, height: 18) + } + .padding(.top, 34) + .padding(.bottom, 40) + } + + if let transaction = viewModel.uiState.transaction { + NavigationLink( + destination: + TXDetailVCWrapper( + transaction: transaction, + navigateBack: $backNavigationRequested, + onDismissed: { + onShowBackButton(false) + } + ).navigationBarHidden(true), + isActive: $openTransaction + ) { + SwiftUI.EmptyView() + }.opacity(0) + } + } + .background(Color.primaryBackground) + .onAppear { + viewModel.startObserving() + setMaxBrightness(true) + } + .onDisappear { + viewModel.stopObserving() + setMaxBrightness(false) + } + } + + private func setMaxBrightness(_ enable: Bool) { + if enable { + // Save original brightness + if originalBrightness < 0 { + originalBrightness = UIScreen.main.brightness + } + + UIScreen.main.brightness = 1.0 + } else { + // Restore original brightness + if originalBrightness >= 0 { + UIScreen.main.brightness = originalBrightness + originalBrightness = -1 + } + } + } + + private var dateFormatter: DateFormatter { + let formatter = DateFormatter() + formatter.dateFormat = "MMMM dd, yyyy 'at' h:mm a" + return formatter + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift new file mode 100644 index 000000000..6ce65f93f --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/DashSpend/GiftCardDetailsViewModel.swift @@ -0,0 +1,270 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2025 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation +import Combine +import UIKit + +struct GiftCardDetailsUIState { + var merchantName: String = "" + var merchantUrl: String? = nil + var formattedPrice: String = "$0.00" + var cardNumber: String? = nil + var cardPin: String? = nil + var barcodeImage: UIImage? = nil + var merchantIcon: UIImage? = nil + var purchaseDate: Date? = nil + var isLoadingCardDetails: Bool = false + var loadingError: Error? = nil + var transaction: DSTransaction? = nil +} + +@MainActor +class GiftCardDetailsViewModel: ObservableObject { + private var cancellableBag = Set() + private let ctxSpendService = CTXSpendService.shared + private let giftCardsDAO = GiftCardsDAOImpl.shared + private let customIconDAO = IconBitmapDAOImpl.shared + private let txMetadataDAO = TransactionMetadataDAOImpl.shared + private var tickerTimer: Timer? + private var retryCount = 0 + private let maxRetries = 3 + + let txId: Data + @Published private(set) var uiState = GiftCardDetailsUIState() + + private let currencyFormatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.numberStyle = .currency + formatter.currencyCode = "USD" + return formatter + }() + + init(txId: Data) { + self.txId = txId + loadTransaction() + } + + func startObserving() { + loadExistingMetadata() + + // Load the initial gift card data + Task { + await loadGiftCard() + } + + // Observe changes to gift card txId + giftCardsDAO.giftCardTxIdPublisher + .receive(on: DispatchQueue.main) + .sink { [weak self] publishedTxId in + guard let self = self, + let publishedTxId = publishedTxId, + publishedTxId == self.txId else { return } + + // The gift card for our txId has changed, fetch it + Task { + await self.loadGiftCard() + } + } + .store(in: &cancellableBag) + + self.txMetadataDAO.$lastChange + .receive(on: DispatchQueue.main) + .sink { [weak self] change in + guard let self = self, let change = change else { return } + + Task { + switch change { + case .created(let metadata), .updated(let metadata, _): + await self.loadIcon(metadata: metadata) + default: + break + } + } + } + .store(in: &cancellableBag) + } + + func stopObserving() { + cancellableBag.removeAll() + stopTicker() + } + + private func loadTransaction() { + Task.detached { [weak self] in + guard let self = self else { return } + + let transaction = DWEnvironment.sharedInstance().currentWallet.allTransactions.first { transaction in + return transaction.txHashData == self.txId + } + + await MainActor.run { + if let tx = transaction { + self.uiState.purchaseDate = Date(timeIntervalSince1970: TimeInterval(tx.timestamp)) + self.uiState.transaction = tx + } + } + } + } + + private func loadGiftCard() async { + guard let card = await giftCardsDAO.get(byTxId: txId) else { return } + + await MainActor.run { + self.uiState.merchantName = card.merchantName + self.uiState.merchantUrl = card.merchantUrl + self.uiState.formattedPrice = self.currencyFormatter.string(from: card.price as NSDecimalNumber) ?? "$0.00" + self.uiState.cardNumber = card.number + self.uiState.cardPin = card.pin + + // Generate barcode if we have the value + if let barcodeValue = card.barcodeValue { + self.generateBarcode(from: barcodeValue, format: card.barcodeFormat ?? "CODE128") + } + + // If we don't have card details yet but have a note (payment ID), start ticker + if card.number == nil && card.note != nil { + self.startTicker() + } else { + self.stopTicker() + } + } + } + + private func startTicker() { + guard tickerTimer == nil else { return } + + uiState.isLoadingCardDetails = true + uiState.loadingError = nil + + Task { + await fetchGiftCardInfo() + } + + // Set up timer for periodic fetches + tickerTimer = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: true) { [weak self] _ in + Task { [weak self] in + await self?.fetchGiftCardInfo() + } + } + } + + private func stopTicker() { + tickerTimer?.invalidate() + tickerTimer = nil + uiState.isLoadingCardDetails = false + retryCount = 0 + } + + private func fetchGiftCardInfo() async { + guard let giftCard = await giftCardsDAO.get(byTxId: txId), + let _ = giftCard.note, + ctxSpendService.isUserSignedIn else { + stopTicker() + return + } + + do { + let base58TxId = ((txId as NSData).reverse() as NSData).base58String() + let response = try await ctxSpendService.getGiftCardByTxid(txid: base58TxId) + + switch response.status { + case "fulfilled": + if let cardNumber = response.cardNumber, !cardNumber.isEmpty { + // Update gift card with received details + await giftCardsDAO.updateCardDetails( + txId: txId, + number: cardNumber, + pin: response.cardPin + ) + + // Save barcode + if !cardNumber.isEmpty { + let cleanNumber = cardNumber.replacingOccurrences(of: " ", with: "") + .replacingOccurrences(of: "-", with: "") + await giftCardsDAO.updateBarcode( + txId: txId, + value: cleanNumber, + format: "CODE128" + ) + } + stopTicker() + DSLogger.log("DashSpend: Gift card details fetched successfully") + } + + case "rejected": + await MainActor.run { + self.uiState.loadingError = CTXSpendError.customError( + NSLocalizedString("Gift card purchase was rejected", comment: "") + ) + } + stopTicker() + + default: + // Keep polling for other statuses + break + } + } catch { + retryCount += 1 + if retryCount >= maxRetries { + await MainActor.run { + self.uiState.loadingError = error + } + stopTicker() + } + DSLogger.log("DashSpend: Failed to fetch gift card info: \(error)") + } + } + + private func loadExistingMetadata() { + Task { + if let metadata = txMetadataDAO.get(by: txId) { + await self.loadIcon(metadata: metadata) + } + } + } + + private func loadIcon(metadata: TransactionMetadata) async { + if let customIconId = metadata.customIconId, + let iconBitmap = await self.customIconDAO.getBitmap(id: customIconId) { + guard let image = UIImage(data: iconBitmap.imageData) else { + DSLogger.log("Failed to create image from data for tx icon: \(metadata.txHash.hexEncodedString())") + return + } + + self.uiState.merchantIcon = image + } + } + + private func generateBarcode(from string: String, format: String) { + guard let filter = CIFilter(name: "CICode128BarcodeGenerator") else { return } + + let data = string.data(using: .ascii) + filter.setValue(data, forKey: "inputMessage") + + guard let outputImage = filter.outputImage else { return } + + let scaleX = 3.0 + let scaleY = 5.0 + let transformedImage = outputImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY)) + + let context = CIContext() + if let cgImage = context.createCGImage(transformedImage, from: transformedImage.extent) { + uiState.barcodeImage = UIImage(cgImage: cgImage) + } + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift new file mode 100644 index 000000000..62c4f8571 --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/ExploreContentsView.swift @@ -0,0 +1,252 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class ExploreContentsView: UIView { + + var getTestDashHandler: (() -> Void)? + var whereToSpendHandler: (() -> Void)? + var atmHandler: (() -> Void)? + var stakingHandler: (() -> Void)? + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupView() + } + + private var isTestnet: Bool { + return DWEnvironment.sharedInstance().currentChain.isTestnet() + } + + private func setupView() { + backgroundColor = .dw_darkBlue() + + let contentView = UIView() + contentView.translatesAutoresizingMaskIntoConstraints = false + contentView.backgroundColor = .dw_secondaryBackground() + contentView.layer.cornerRadius = 8.0 + contentView.layer.masksToBounds = true + contentView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + addSubview(contentView) + + let subContentView = UIView() + subContentView.translatesAutoresizingMaskIntoConstraints = false + subContentView.backgroundColor = .dw_background() + subContentView.layer.cornerRadius = 8.0 + subContentView.layer.masksToBounds = true + contentView.addSubview(subContentView) + + let buttonsStackView = UIStackView() + buttonsStackView.translatesAutoresizingMaskIntoConstraints = false + buttonsStackView.spacing = 8 + buttonsStackView.axis = .vertical + buttonsStackView.distribution = .equalSpacing + subContentView.addSubview(buttonsStackView) + + // Add "Get Test Dash" item if testnet + if isTestnet { + let getTestDashItem = createItem( + image: UIImage(named: "dashCurrency"), + title: NSLocalizedString("Get Test Dash", comment: ""), + subtitle: NSLocalizedString("Test Dash is free and can be obtained from what is called a faucet.", comment: "") + ) { [weak self] in + self?.getTestDashHandler?() + } + buttonsStackView.addArrangedSubview(getTestDashItem) + } + + let merchantsItem = createItem( + image: UIImage(named: "image.explore.dash.wheretospend"), + title: NSLocalizedString("Where to Spend?", comment: ""), + subtitle: NSLocalizedString("Find merchants that accept Dash payments.", comment: "") + ) { [weak self] in + self?.whereToSpendHandler?() + } + buttonsStackView.addArrangedSubview(merchantsItem) + + let atmItem = createItem( + image: UIImage(named: "image.explore.dash.atm"), + title: NSLocalizedString("ATMs", comment: ""), + subtitle: NSLocalizedString("Find ATMs where you can buy or sell Dash.", comment: "") + ) { [weak self] in + self?.atmHandler?() + } + buttonsStackView.addArrangedSubview(atmItem) + + let cnItem = createItem( + image: UIImage(named: "image.explore.dash.staking"), + title: NSLocalizedString("Staking", comment: ""), + subtitle: NSLocalizedString("Easily stake Dash and earn passive income with a few simple clicks.", comment: "") + ) { [weak self] in + self?.stakingHandler?() + } + cnItem.addContent(CrowdNodeAPYView(frame: .zero)) + buttonsStackView.addArrangedSubview(cnItem) + + let verticalPadding: CGFloat = 10 + + NSLayoutConstraint.activate([ + contentView.topAnchor.constraint(equalTo: topAnchor), + contentView.bottomAnchor.constraint(equalTo: bottomAnchor), + contentView.leadingAnchor.constraint(equalTo: leadingAnchor), + contentView.trailingAnchor.constraint(equalTo: trailingAnchor), + + subContentView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 15), + subContentView.bottomAnchor.constraint(lessThanOrEqualTo: contentView.bottomAnchor, constant: -35), + subContentView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -15), + subContentView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15), + + buttonsStackView.topAnchor.constraint(equalTo: subContentView.topAnchor, constant: verticalPadding), + buttonsStackView.bottomAnchor.constraint(equalTo: subContentView.bottomAnchor, constant: -verticalPadding), + buttonsStackView.trailingAnchor.constraint(equalTo: subContentView.trailingAnchor), + buttonsStackView.leadingAnchor.constraint(equalTo: subContentView.leadingAnchor) + ]) + } + + private func createItem(image: UIImage?, title: String, subtitle: String, action: @escaping () -> Void) -> ExploreContentsViewCell { + let item = ExploreContentsViewCell(frame: .zero) + item.translatesAutoresizingMaskIntoConstraints = false + item.image = image + item.title = title + item.subtitle = subtitle + item.actionHandler = action + return item + } +} + +// MARK: - ExploreContentsViewCell + +private class ExploreContentsViewCell: UIView { + + private let iconImageView = UIImageView() + private let titleLabel = UILabel() + private let descLabel = UILabel() + private let contentStack = UIStackView() + + var actionHandler: (() -> Void)? + + var image: UIImage? { + get { iconImageView.image } + set { iconImageView.image = newValue } + } + + var title: String? { + get { titleLabel.text } + set { titleLabel.text = newValue } + } + + var subtitle: String? { + get { descLabel.text } + set { descLabel.text = newValue } + } + + override init(frame: CGRect) { + super.init(frame: frame) + configureHierarchy() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + configureHierarchy() + } + + @objc private func buttonAction(_ sender: UIButton) { + actionHandler?() + } + + private func configureHierarchy() { + backgroundColor = .dw_background() + + let stackView = UIStackView() + stackView.axis = .horizontal + stackView.spacing = 10 + stackView.alignment = .top + stackView.translatesAutoresizingMaskIntoConstraints = false + addSubview(stackView) + + iconImageView.translatesAutoresizingMaskIntoConstraints = false + iconImageView.contentMode = .center + stackView.addArrangedSubview(iconImageView) + + let labelsStackView = UIStackView() + labelsStackView.translatesAutoresizingMaskIntoConstraints = false + labelsStackView.axis = .vertical + labelsStackView.spacing = 1 + labelsStackView.alignment = .leading + stackView.addArrangedSubview(labelsStackView) + contentStack.axis = .vertical + contentStack.spacing = 1 + contentStack.alignment = .leading + + titleLabel.setContentCompressionResistancePriority(.required, for: .vertical) + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.textColor = .label + titleLabel.font = .dw_font(forTextStyle: .body) + titleLabel.textAlignment = .left + titleLabel.numberOfLines = 0 + labelsStackView.addArrangedSubview(titleLabel) + + descLabel.setContentCompressionResistancePriority(.required, for: .vertical) + descLabel.translatesAutoresizingMaskIntoConstraints = false + descLabel.textColor = .secondaryLabel + descLabel.font = .dw_font(forTextStyle: .footnote) + descLabel.textAlignment = .left + descLabel.numberOfLines = 0 + labelsStackView.addArrangedSubview(descLabel) + + // Replace labelsStackView with contentStack for extensibility + stackView.removeArrangedSubview(labelsStackView) + stackView.addArrangedSubview(contentStack) + contentStack.addArrangedSubview(titleLabel) + contentStack.addArrangedSubview(descLabel) + + let button = UIButton(type: .custom) + button.translatesAutoresizingMaskIntoConstraints = false + button.titleLabel?.text = "" + button.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside) + addSubview(button) + + NSLayoutConstraint.activate([ + iconImageView.widthAnchor.constraint(equalToConstant: 34), + iconImageView.heightAnchor.constraint(equalToConstant: 34), + + stackView.topAnchor.constraint(equalTo: topAnchor, constant: 12), + stackView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -12), + stackView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 15), + stackView.trailingAnchor.constraint(equalTo: trailingAnchor), + + button.topAnchor.constraint(equalTo: topAnchor), + button.bottomAnchor.constraint(equalTo: bottomAnchor), + button.leadingAnchor.constraint(equalTo: leadingAnchor), + button.trailingAnchor.constraint(equalTo: trailingAnchor) + ]) + } + + func addContent(_ view: UIView) { + let last = contentStack.arrangedSubviews.last + if let last = last { + contentStack.setCustomSpacing(10, after: last) + } + contentStack.addArrangedSubview(view) + } +} diff --git a/DashWallet/Sources/UI/Explore Dash/Views/ExploreHeaderView.swift b/DashWallet/Sources/UI/Explore Dash/Views/ExploreHeaderView.swift new file mode 100644 index 000000000..fd7a1325e --- /dev/null +++ b/DashWallet/Sources/UI/Explore Dash/Views/ExploreHeaderView.swift @@ -0,0 +1,89 @@ +// +// Created by Andrew Podkovyrin +// Copyright © 2021 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class ExploreHeaderView: UIStackView { + + private let iconImageView = UIImageView() + private let titleLabel = UILabel() + private let descLabel = UILabel() + + var image: UIImage? { + get { iconImageView.image } + set { iconImageView.image = newValue } + } + + var title: String? { + get { titleLabel.text } + set { titleLabel.text = newValue } + } + + var subtitle: String? { + get { descLabel.text } + set { descLabel.text = newValue } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupView() + } + + required init(coder: NSCoder) { + super.init(coder: coder) + setupView() + } + + private func setupView() { + backgroundColor = .dw_darkBlue() + spacing = 4 + axis = .vertical + distribution = .fillProportionally + + iconImageView.translatesAutoresizingMaskIntoConstraints = false + iconImageView.contentMode = .scaleAspectFit + addArrangedSubview(iconImageView) + + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.textColor = .white + titleLabel.font = .dw_font(forTextStyle: .largeTitle) + titleLabel.textAlignment = .center + titleLabel.numberOfLines = 0 + titleLabel.minimumScaleFactor = 0.4 + titleLabel.adjustsFontSizeToFitWidth = true + addArrangedSubview(titleLabel) + + descLabel.translatesAutoresizingMaskIntoConstraints = false + descLabel.textColor = .white + descLabel.font = .dw_font(forTextStyle: .callout) + descLabel.textAlignment = .center + descLabel.numberOfLines = 0 + descLabel.adjustsFontSizeToFitWidth = true + descLabel.minimumScaleFactor = 0.4 + addArrangedSubview(descLabel) + + iconImageView.setContentHuggingPriority(.required, for: .vertical) + titleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + descLabel.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + + NSLayoutConstraint.activate([ + iconImageView.heightAnchor.constraint(lessThanOrEqualToConstant: 250.0), + descLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 15.0), + descLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -15.0) + ]) + } +} diff --git a/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift index e48ded7a2..244caf2d1 100644 --- a/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift +++ b/DashWallet/Sources/UI/Home/HomeViewController+Shortcuts.swift @@ -17,8 +17,7 @@ import UIKit -extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTestnetViewControllerDelegate { - +extension HomeViewController: DWLocalCurrencyViewControllerDelegate, ExploreViewControllerDelegate { func performAction(for action: ShortcutAction, sender: UIView?) { switch action.type { case .secureWallet: @@ -116,7 +115,7 @@ extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTe } private func showExploreDash() { - let controller = DWExploreTestnetViewController() + let controller = ExploreViewController() controller.delegate = self let navigationController = BaseNavigationController(rootViewController: controller) present(navigationController, animated: true, completion: nil) @@ -155,11 +154,15 @@ extension HomeViewController: DWLocalCurrencyViewControllerDelegate, DWExploreTe // MARK: - DWExploreTestnetViewControllerDelegate - func exploreTestnetViewControllerShowSendPayment(_ controller: DWExploreTestnetViewController) { + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) { delegate?.showPaymentsController(withActivePage: PaymentsViewControllerState.pay.rawValue) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: DWExploreTestnetViewController) { + func exploreViewControllerShowReceivePayment(_ controller: ExploreViewController) { delegate?.showPaymentsController(withActivePage: PaymentsViewControllerState.receive.rawValue) } + + func exploreViewControllerShowGiftCard(_ controller: ExploreViewController, txId: Data) { + showGiftCardDetails(txId: txId) + } } diff --git a/DashWallet/Sources/UI/Home/HomeViewController.swift b/DashWallet/Sources/UI/Home/HomeViewController.swift index 47aea95ab..71cabb9bc 100644 --- a/DashWallet/Sources/UI/Home/HomeViewController.swift +++ b/DashWallet/Sources/UI/Home/HomeViewController.swift @@ -19,12 +19,17 @@ import UIKit import SwiftUI import Combine +@objc(DWHomeViewControllerDelegate) +protocol HomeViewControllerDelegate: AnyObject { + func showPaymentsController(withActivePage pageIndex: Int) +} + class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { private var cancellableBag = Set() var model: DWHomeProtocol! var viewModel: HomeViewModel! private var homeView: HomeView! - weak var delegate: (DWHomeViewControllerDelegate & DWWipeDelegate)? + weak var delegate: (HomeViewControllerDelegate & DWWipeDelegate)? #if DASHPAY var isBackButtonHidden: Bool = false @@ -209,6 +214,14 @@ class HomeViewController: DWBasePayViewController, NavigationBarDisplayable { present(nvc, animated: true, completion: nil) } + func showGiftCardDetails(txId: Data) { + let hostingController = UIHostingController(rootView: + GiftCardDetailsSheet(txId: txId).background(Color.primaryBackground) + ) + + present(hostingController, animated: true, completion: nil) + } + private func configureObservers() { viewModel.$showTimeSkewAlertDialog .sink { [weak self] showTimeSkew in @@ -297,12 +310,6 @@ extension HomeViewController: HomeViewDelegate { let action = ShortcutAction(type: .createUsername) performAction(for: action, sender: nil) } - - func homeViewShowTxFilter() { - showTxFilter(displayModeCallback: { [weak self] mode in - self?.viewModel.displayMode = mode - }, shouldShowRewards: true) - } func homeViewShowSyncingStatus() { let controller = SyncingAlertViewController() diff --git a/DashWallet/Sources/UI/Home/Tx Metadata/CustomIconMetadataProvider.swift b/DashWallet/Sources/UI/Home/Tx Metadata/CustomIconMetadataProvider.swift new file mode 100644 index 000000000..6d7fbdd68 --- /dev/null +++ b/DashWallet/Sources/UI/Home/Tx Metadata/CustomIconMetadataProvider.swift @@ -0,0 +1,209 @@ +// +// 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 CryptoKit + +class CustomIconMetadataProvider: MetadataProvider, @unchecked Sendable { + static let shared = CustomIconMetadataProvider() + + private var cancellableBag = Set() + private let iconBitmapDao = IconBitmapDAOImpl.shared + private let metadataDao = TransactionMetadataDAOImpl.shared + private let metadataQueue = DispatchQueue(label: "CustomIconMetadataProvider.metadata", qos: .utility) + + private var _availableMetadata: [Data: TxRowMetadata] = [:] + var availableMetadata: [Data: TxRowMetadata] { + return metadataQueue.sync { _availableMetadata } + } + let metadataUpdated = PassthroughSubject() + + init() { + Task { + await 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, _): + Task { + await self.onMetadataUpdated(metadata: metadata) + } + + case .deleted(let metadata): + metadataQueue.async { [weak self] in + self?._availableMetadata.removeValue(forKey: metadata.txHash) + } + metadataUpdated.send(metadata.txHash) + + case .deletedAll: + let keys = metadataQueue.sync { self._availableMetadata.keys } + for key in keys { + metadataUpdated.send(key) + } + metadataQueue.async { [weak self] in + self?._availableMetadata = [:] + } + } + } + .store(in: &cancellableBag) + } + + private func loadMetadata() async { + let customIcons = metadataDao.getCustomIcons() + + for iconMetadata in customIcons { + guard let iconId = iconMetadata.customIconId else { continue } + let bitmap = await iconBitmapDao.getBitmap(id: iconId) + guard let data = bitmap?.imageData, let icon = UIImage(data: data) else { continue } + + metadataQueue.async { [weak self] in + guard let self = self else { return } + var txRowMetadata = self._availableMetadata[iconMetadata.txHash] + + if txRowMetadata != nil { + txRowMetadata!.iconId = iconMetadata.customIconId + txRowMetadata!.icon = icon + } else { + txRowMetadata = TxRowMetadata( + iconId: iconMetadata.customIconId, + icon: icon + ) + } + + self._availableMetadata[iconMetadata.txHash] = txRowMetadata + } + } + } + + private func onMetadataUpdated(metadata: TransactionMetadata) async { + guard let iconId = metadata.customIconId else { return } + let bitmap = await iconBitmapDao.getBitmap(id: iconId) + guard let data = bitmap?.imageData, let icon = UIImage(data: data) else { return } + + metadataQueue.async { [weak self] in + guard let self = self else { return } + var txRowMetadata = self._availableMetadata[metadata.txHash] + + if txRowMetadata != nil { + txRowMetadata!.iconId = metadata.customIconId + txRowMetadata!.icon = icon + } else { + txRowMetadata = TxRowMetadata( + iconId: metadata.customIconId, + icon: icon + ) + } + + self._availableMetadata[metadata.txHash] = txRowMetadata + + DispatchQueue.main.async { + self.metadataUpdated.send(metadata.txHash) + } + } + } + + func updateIcon(txId: Data, iconUrl: String) { + Task { + do { + guard let url = URL(string: iconUrl) else { + print("Invalid icon URL: \(iconUrl)") + return + } + + let (data, _) = try await URLSession.shared.data(from: url) + + guard let image = UIImage(data: data) else { + print("Failed to create image from data for URL: \(iconUrl)") + return + } + + // Calculate hash from original image data + let imageHash = SHA256.hash(data: data) + let hashData = Data(imageHash) + + let resizedImage = resizeIcon(image: image) + guard let resizedImageData = resizedImage.pngData() else { + return + } + + let iconBitmap = IconBitmap( + id: hashData, + imageData: resizedImageData, + originalUrl: iconUrl, + height: Int(resizedImage.size.height), + width: Int(resizedImage.size.width) + ) + + await iconBitmapDao.addBitmap(bitmap: iconBitmap) + + var metadata = TransactionMetadata(txHash: txId) + metadata.customIconId = hashData + metadataDao.update(dto: metadata) + + metadataQueue.async { [weak self] in + guard let self = self else { return } + var txRowMetadata = self._availableMetadata[txId] ?? TxRowMetadata(title: nil, details: nil) + txRowMetadata.iconId = hashData + txRowMetadata.icon = resizedImage + self._availableMetadata[txId] = txRowMetadata + } + + Task { @MainActor in + self.metadataUpdated.send(txId) + } + } catch { + print("Failed to fetch icon from URL \(iconUrl): \(error)") + } + } + } + + private func resizeIcon(image: UIImage) -> UIImage { + let destSize: CGFloat = 150.0 + var width = image.size.width + var height = image.size.height + + if width > destSize || height > destSize { + if width < height { + let scale = destSize / height + height = destSize + width = width * scale + } else if width > height { + let scale = destSize / width + width = destSize + height = height * scale + } else { + width = destSize + height = destSize + } + } + + let size = CGSize(width: width, height: height) + UIGraphicsBeginImageContextWithOptions(size, false, 0.0) + image.draw(in: CGRect(origin: .zero, size: size)) + let resizedImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + return resizedImage ?? image + } +} diff --git a/DashWallet/Sources/UI/Home/Tx Metadata/GiftCardMetadataProvider.swift b/DashWallet/Sources/UI/Home/Tx Metadata/GiftCardMetadataProvider.swift new file mode 100644 index 000000000..24ee7248b --- /dev/null +++ b/DashWallet/Sources/UI/Home/Tx Metadata/GiftCardMetadataProvider.swift @@ -0,0 +1,124 @@ +// +// 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 CryptoKit + +class GiftCardMetadataProvider: MetadataProvider, @unchecked Sendable { + static let shared = GiftCardMetadataProvider() + + private var cancellableBag = Set() + private let iconBitmapDao = IconBitmapDAOImpl.shared + private let giftCardDao = GiftCardsDAOImpl.shared + private let metadataDao = TransactionMetadataDAOImpl.shared + private let metadataQueue = DispatchQueue(label: "GiftCardMetadataProvider.metadata", qos: .utility) + + private var _availableMetadata: [Data: TxRowMetadata] = [:] + var availableMetadata: [Data: TxRowMetadata] { + return metadataQueue.sync { _availableMetadata } + } + let metadataUpdated = PassthroughSubject() + + init() { + Task { + await 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, _): + Task { + await self.onMetadataUpdated(metadata: metadata) + } + + case .deleted(let metadata): + metadataQueue.async { [weak self] in + self?._availableMetadata.removeValue(forKey: metadata.txHash) + } + metadataUpdated.send(metadata.txHash) + + case .deletedAll: + let keys = metadataQueue.sync { self._availableMetadata.keys } + for key in keys { + metadataUpdated.send(key) + } + metadataQueue.async { [weak self] in + self?._availableMetadata = [:] + } + } + } + .store(in: &cancellableBag) + } + + private func loadMetadata() async { + let giftCards = await giftCardDao.all() + + for giftCard in giftCards { + let title = String.localizedStringWithFormat(NSLocalizedString("Gift card · %@", comment: "DashSpend"), giftCard.merchantName) + + metadataQueue.async { [weak self] in + guard let self = self else { return } + var txRowMetadata = self._availableMetadata[giftCard.txId] + + if txRowMetadata != nil { + txRowMetadata!.title = title + txRowMetadata!.secondaryIcon = .custom("image.explore.dash.wts.payment.gift-card") + } else { + txRowMetadata = TxRowMetadata( + title: title, + secondaryIcon: .custom("image.explore.dash.wts.payment.gift-card") + ) + } + + self._availableMetadata[giftCard.txId] = txRowMetadata + } + } + } + + private func onMetadataUpdated(metadata: TransactionMetadata) async { + guard let service = metadata.service, service == ServiceName.ctxSpend.rawValue else { return } + guard let giftCard = await giftCardDao.get(byTxId: metadata.txHash) else { return } + let title = String.localizedStringWithFormat(NSLocalizedString("Gift card · %@", comment: "DashSpend"), giftCard.merchantName) + + metadataQueue.async { [weak self] in + guard let self = self else { return } + var txRowMetadata = self._availableMetadata[metadata.txHash] + + if txRowMetadata != nil { + txRowMetadata!.title = title + txRowMetadata!.secondaryIcon = .custom("image.explore.dash.wts.payment.gift-card") + } else { + txRowMetadata = TxRowMetadata( + title: title, + secondaryIcon: .custom("image.explore.dash.wts.payment.gift-card") + ) + } + + self._availableMetadata[metadata.txHash] = txRowMetadata + + DispatchQueue.main.async { + self.metadataUpdated.send(metadata.txHash) + } + } + } +} diff --git a/DashWallet/Sources/UI/Home/UIViewController+DWTxFilter.swift b/DashWallet/Sources/UI/Home/UIViewController+DWTxFilter.swift deleted file mode 100644 index ec6d4c8c9..000000000 --- a/DashWallet/Sources/UI/Home/UIViewController+DWTxFilter.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// Created by Andrew Podkovyrin -// Copyright © 2019 Dash Core Group. All rights reserved. -// -// Licensed under the MIT License (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://opensource.org/licenses/MIT -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -extension UIViewController { - @objc - func showTxFilter(displayModeCallback: @escaping (HomeTxDisplayMode) -> Void, shouldShowRewards: Bool) { - let title = NSLocalizedString("Filter Transactions", comment: "") - let alert = UIAlertController(title: title, - message: nil, - preferredStyle: .actionSheet) - - let allAction = UIAlertAction( - title: NSLocalizedString("All", comment: ""), - style: .default) { _ in - displayModeCallback(.all) - } - alert.addAction(allAction) - - let receivedAction = UIAlertAction( - title: NSLocalizedString("Received", comment: ""), - style: .default) { _ in - displayModeCallback(.received) - } - alert.addAction(receivedAction) - - let account = DWEnvironment.sharedInstance().currentAccount - if shouldShowRewards && account.hasCoinbaseTransaction { - let rewardsAction = UIAlertAction( - title: NSLocalizedString("Rewards", comment: ""), - style: .default) { _ in - displayModeCallback(.rewards) - } - alert.addAction(rewardsAction) - } - - let sentAction = UIAlertAction( - title: NSLocalizedString("Sent", comment: ""), - style: .default) { _ in - displayModeCallback(.sent) - } - alert.addAction(sentAction) - - let cancelAction = UIAlertAction( - title: NSLocalizedString("Cancel", comment: ""), - style: .cancel) - alert.addAction(cancelAction) - - present(alert, animated: true) - } -} diff --git a/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.swift b/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.swift index f1e041e88..cdd4c3094 100644 --- a/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.swift +++ b/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.swift @@ -82,7 +82,7 @@ struct HomeBalanceView: View { } } .frame(maxWidth: .infinity) - .background(Color.dashBlue) + .background(Color.navigationBarColor) .animation(.easeInOut(duration: 0.3), value: viewModel.isBalanceHidden) .onTapGesture { viewModel.toggleBalanceVisibility() diff --git a/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.xib b/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.xib deleted file mode 100644 index 1606ef926..000000000 --- a/DashWallet/Sources/UI/Home/Views/Home Balance View/HomeBalanceView.xib +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/DashWallet/Sources/UI/Home/Views/HomeView.swift b/DashWallet/Sources/UI/Home/Views/HomeView.swift index 273bbce1e..33abe1fb2 100644 --- a/DashWallet/Sources/UI/Home/Views/HomeView.swift +++ b/DashWallet/Sources/UI/Home/Views/HomeView.swift @@ -22,7 +22,6 @@ import Combine // MARK: - HomeViewDelegate protocol HomeViewDelegate: AnyObject { - func homeViewShowTxFilter() func homeViewShowSyncingStatus() func homeViewShowCoinJoin() @@ -133,9 +132,9 @@ final class HomeView: UIView { if status?.state == .done || completed { let identity = model.dashPayModel.blockchainIdentity - let notificaitonAmount = model.dashPayModel.unreadNotificationsCount + let notificationAmount = model.dashPayModel.unreadNotificationsCount - delegate?.homeView(self, didUpdateProfile: identity, unreadNotifications: notificaitonAmount) + delegate?.homeView(self, didUpdateProfile: identity, unreadNotifications: notificationAmount) } else { delegate?.homeView(self, didUpdateProfile: nil, unreadNotifications: 0) } @@ -177,10 +176,12 @@ struct TxPreviewModel: Identifiable, Equatable { struct HomeViewContent: View { @State private var selectedTxDataItem: TransactionListDataItem? = nil @State private var shouldShowMixDialog: Bool = false + @State private var showFilterDialog: Bool = false @State private var shouldShowJoinDashPayInfo: Bool = false @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 @@ -207,7 +208,7 @@ struct HomeViewContent: View { } .frame(height: 110) .frame(maxWidth: .infinity) - .background(Color.dashBlue) + .background(Color.navigationBarColor) .padding(.top, 5) .padding(.bottom, -12) @@ -258,7 +259,7 @@ struct HomeViewContent: View { #endif SyncingHeaderView(onFilterTap: { - delegate?.homeViewShowTxFilter() + showFilterDialog = true }, onSyncTap: { delegate?.homeViewShowSyncingStatus() }) @@ -294,6 +295,23 @@ struct HomeViewContent: View { .sheet(item: $selectedTxDataItem) { item in TransactionDetailsSheet(item: item) } + .sheet(item: $giftCardTxId) { txId in + GiftCardDetailsSheet(txId: txId) + } + .sheet(isPresented: $showFilterDialog) { + let dialog = TransactionFilterDialog( + selectedFilter: viewModel.displayMode, + onFilterSelected: { mode in + viewModel.displayMode = mode + } + ) + + if #available(iOS 16.0, *) { + dialog.presentationDetents([.height(350)]) + } else { + dialog + } + } #if DASHPAY .sheet(isPresented: $shouldShowMixDialog, onDismiss: { viewModel.shouldShowMixDashDialog = false @@ -405,15 +423,22 @@ 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, - icon: .custom(txItem.iconName), + details: metadata?.details?.isEmpty == false ? metadata?.details : nil, + icon: metadata?.icon == nil ? .custom(txItem.iconName) : .image(metadata!.icon!, effect: .rounded), + secondaryIcon: metadata?.icon == nil ? nil : metadata?.secondaryIcon == nil ? .custom(txItem.iconName) : metadata?.secondaryIcon, dashAmount: txItem.signedDashAmount, overrideFiatAmount: txItem.fiatAmount ) { - self.selectedTxDataItem = txDataItem + // Check if this is a gift card transaction + if GiftCardMetadataProvider.shared.availableMetadata[txItem.txHashData] != nil { + self.giftCardTxId = txItem.txHashData + } else { + self.selectedTxDataItem = txDataItem + } } } } @@ -434,6 +459,27 @@ struct HomeViewContent: View { #endif } +struct GiftCardDetailsSheet: View { + var txId: Data + @State private var showBackButton: Bool = false + @State private var backNavigationRequested: Bool = false + + var body: some View { + BottomSheet(showBackButton: $showBackButton, onBackButtonPressed: { + backNavigationRequested = true + }) { + GiftCardDetailsView( + txId: txId, + backNavigationRequested: $backNavigationRequested, + onShowBackButton: { show in + showBackButton = show + } + ) + } + .background(Color.primaryBackground) + } +} + struct TransactionDetailsSheet: View { @State private var showBackButton: Bool = false @State private var backNavigationRequested: Bool = false @@ -470,8 +516,14 @@ struct TransactionDetailsSheet: View { showBackButton = show } ) - case .tx(let txItem): + case .tx(let txItem, _): TXDetailVCWrapper(tx: txItem, navigateBack: $backNavigationRequested) } } } + +extension Data: Identifiable { + public var id: String { + return self.base64EncodedString() + } +} diff --git a/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift b/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift index 6d084f441..7dd46e6b7 100644 --- a/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift +++ b/DashWallet/Sources/UI/Home/Views/HomeViewModel.swift @@ -28,6 +28,7 @@ public enum HomeTxDisplayMode: UInt { case received case sent case rewards + case giftCard } class HomeViewModel: ObservableObject { @@ -44,6 +45,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 +105,7 @@ class HomeViewModel: ObservableObject { self.recalculateHeight() } + self.setupMetadataProviders() self.onSyncStateChanged() self.recalculateHeight() @@ -174,40 +177,32 @@ 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.passesFilter(tx: tx, displayMode: self.displayMode) { return nil } - - if self.displayMode == .received && ($0.direction != .received || $0 is DSCoinbaseTransaction) { + + if !self.crowdNodeTxSet.isComplete && self.crowdNodeTxSet.tryInclude(tx: tx) { return nil } - - if self.displayMode == .rewards && !($0 is DSCoinbaseTransaction) { - return nil - } - - if !self.crowdNodeTxSet.isComplete && self.crowdNodeTxSet.tryInclude(tx: $0) { - 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() @@ -248,21 +243,13 @@ class HomeViewModel: ObservableObject { self.queue.async { [weak self] in guard let self = self else { return } - if self.displayMode == .sent && tx.direction != .sent { - return - } - - if self.displayMode == .received && (tx.direction != .received || tx is DSCoinbaseTransaction) { - return - } - - if self.displayMode == .rewards && !(tx is DSCoinbaseTransaction) { + if !self.passesFilter(tx: tx, displayMode: self.displayMode) { return } 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 +270,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 } } } @@ -416,6 +407,85 @@ extension HomeViewModel { } } +// MARK: - Metadata + +extension HomeViewModel { + private func setupMetadataProviders() { + let giftCardMetadata = GiftCardMetadataProvider.shared + let customIconMetadata = CustomIconMetadataProvider.shared + self.metadataProviders = [giftCardMetadata, customIconMetadata] + + for provider in self.metadataProviders { + provider.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) + } + } + + private func resolveMetadata(for txId: Data) -> TxRowMetadata? { + var finalMetadata: TxRowMetadata? = nil + + // Metadata will not be replaced if already found, so in case + // of conflicts metadataProviders should be sorted by priority + for provider in self.metadataProviders { + let providerMetadata = provider.availableMetadata + guard let metadata = providerMetadata[txId] else { continue } + + if finalMetadata == nil { + finalMetadata = metadata + } else { + if finalMetadata?.title == nil { + finalMetadata?.title = metadata.title + } + + if finalMetadata?.details == nil { + finalMetadata?.details = metadata.details + } + + if finalMetadata?.icon == nil { + finalMetadata?.icon = metadata.icon + } + + if finalMetadata?.iconId == nil { + finalMetadata?.iconId = metadata.iconId + } + + if finalMetadata?.secondaryIcon == nil { + finalMetadata?.secondaryIcon = metadata.secondaryIcon + } + } + } + + return finalMetadata + } + + private func passesFilter(tx: DSTransaction, displayMode: HomeTxDisplayMode) -> Bool { + switch displayMode { + case .all: + return true + case .sent: + return tx.direction == .sent + case .received: + return tx.direction == .received && !(tx is DSCoinbaseTransaction) + case .rewards: + return tx is DSCoinbaseTransaction + case .giftCard: + return isGiftCard(tx: tx) + } + } + + private func isGiftCard(tx: DSTransaction) -> Bool { + return GiftCardMetadataProvider.shared.availableMetadata[tx.txHashData] != nil + } +} // 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..7de7b81f7 --- /dev/null +++ b/DashWallet/Sources/UI/Home/Views/MetadataProvider.swift @@ -0,0 +1,39 @@ +// +// 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 Combine + +struct TxRowMetadata: Equatable { + var title: String? + var details: String? + var iconId: Data? + var icon: UIImage? + var secondaryIcon: IconName? + + static func == (lhs: TxRowMetadata, rhs: TxRowMetadata) -> Bool { + return lhs.title == rhs.title && + lhs.details == rhs.details && + lhs.iconId == rhs.iconId && + lhs.secondaryIcon == rhs.secondaryIcon + } +} + +protocol MetadataProvider { + var availableMetadata: [Data: TxRowMetadata] { get } + var metadataUpdated: PassthroughSubject { get } +} diff --git a/DashWallet/Sources/UI/Home/Views/TransactionFilterDialog.swift b/DashWallet/Sources/UI/Home/Views/TransactionFilterDialog.swift new file mode 100644 index 000000000..9d465772a --- /dev/null +++ b/DashWallet/Sources/UI/Home/Views/TransactionFilterDialog.swift @@ -0,0 +1,49 @@ +import SwiftUI +import UIKit + +struct TransactionFilterDialog: View { + @Environment(\.presentationMode) private var presentationMode + let selectedFilter: HomeTxDisplayMode + var onFilterSelected: (HomeTxDisplayMode) -> Void + + private let filterOptions: [FilterOption] = [ + FilterOption(mode: .all, title: NSLocalizedString("All", comment: ""), icon: .custom("image.filter.options")), + FilterOption(mode: .sent, title: NSLocalizedString("Sent", comment: ""), icon: .custom("tx.item.sent.icon")), + FilterOption(mode: .received, title: NSLocalizedString("Received", comment: ""), icon: .custom("tx.item.received.icon")), + FilterOption(mode: .giftCard, title: NSLocalizedString("Gift card", comment: ""), icon: .custom("image.dashspend.giftcard")) + ] + + var body: some View { + BottomSheet( + title: NSLocalizedString("Filter transactions", comment: ""), + showBackButton: .constant(false) + ) { + VStack(spacing: 4) { + ForEach(filterOptions) { option in + RadioButtonRow( + title: option.title, + icon: option.icon, + isSelected: option.mode == selectedFilter + ) { + onFilterSelected(option.mode) + presentationMode.wrappedValue.dismiss() + } + } + } + .padding(.vertical, 6) + .background(Color.secondaryBackground) + .clipShape(RoundedShape(corners: .allCorners, radii: 12)) + .padding(.horizontal, 20) + .padding(.top, 25) + } + .background(Color.primaryBackground) + } +} + +struct FilterOption: Identifiable { + let id = UUID() + let mode: HomeTxDisplayMode + let title: String + let icon: IconName +} + diff --git a/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift b/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift index 65ee6303b..8b0f0c3f1 100644 --- a/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift +++ b/DashWallet/Sources/UI/Home/Views/TransactionListDataItem.swift @@ -28,7 +28,7 @@ class TransactionGroup: Identifiable { } enum TransactionListDataItem { - case tx(Transaction) + case tx(Transaction, TxRowMetadata?) case crowdnode(FullCrowdNodeSignUpTxSet) case coinjoin(CoinJoinMixingTxSet) } @@ -40,7 +40,7 @@ extension TransactionListDataItem: Identifiable { return FullCrowdNodeSignUpTxSet.id case .coinjoin(let set): return set.id - case .tx(let tx): + case .tx(let tx, _): return tx.txHashHexString } } @@ -51,7 +51,7 @@ extension TransactionListDataItem: Identifiable { return set.transactionMap.values.first!.date case .coinjoin(let set): return set.groupDay - case .tx(let tx): + case .tx(let tx, _): return tx.date } } diff --git a/DashWallet/Sources/UI/Main/MainTabbarController.swift b/DashWallet/Sources/UI/Main/MainTabbarController.swift index a21dc8afe..8020bdc48 100644 --- a/DashWallet/Sources/UI/Main/MainTabbarController.swift +++ b/DashWallet/Sources/UI/Main/MainTabbarController.swift @@ -87,7 +87,7 @@ class MainTabbarController: UITabBarController { #if DASHPAY weak var contactsNavigationController: DWRootContactsViewController? - weak var exploreNavigationController: DWExploreTestnetViewController? + weak var exploreNavigationController: ExploreViewController? #endif // TODO: Refactor this and send notification about wiped wallet instead of chaining the delegate @@ -226,7 +226,7 @@ extension MainTabbarController { item = UITabBarItem(title: nil, image: MainTabbarTabs.explore.icon, selectedImage: MainTabbarTabs.explore.selectedIcon) item.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0) - let exploreVC = DWExploreTestnetViewController() + let exploreVC = ExploreViewController() exploreVC.delegate = self exploreNavigationController = exploreVC nvc = BaseNavigationController(rootViewController: exploreVC) @@ -344,6 +344,11 @@ extension MainTabbarController: DWMainMenuViewControllerDelegate { func mainMenuViewControllerOpenHomeScreen(_ controller: DWMainMenuViewController) { selectedIndex = MainTabbarTabs.home.rawValue } + + func showGiftCard(_ txId: Data!) { + selectedIndex = MainTabbarTabs.home.rawValue + homeController?.showGiftCardDetails(txId: txId) + } } // MARK: DWWipeDelegate @@ -385,9 +390,9 @@ extension MainTabbarController: PaymentsViewControllerDelegate { } } -// MARK: DWHomeViewControllerDelegate +// MARK: HomeViewControllerDelegate -extension MainTabbarController: DWHomeViewControllerDelegate { +extension MainTabbarController: HomeViewControllerDelegate { func showPaymentsController(withActivePage pageIndex: NSInteger) { showPaymentsController(withActivePage: PaymentsViewControllerState(rawValue: pageIndex)!) } @@ -428,12 +433,16 @@ extension MainTabbarController: UITabBarControllerDelegate { // MARK: DWExploreTestnetViewControllerDelegate -extension MainTabbarController: DWExploreTestnetViewControllerDelegate { - func exploreTestnetViewControllerShowSendPayment(_ controller: DWExploreTestnetViewController) { +extension MainTabbarController: ExploreViewControllerDelegate { + func exploreViewControllerShowGiftCard(_ controller: ExploreViewController, txId: Data) { + homeController?.showGiftCardDetails(txId: txId) + } + + func exploreViewControllerShowSendPayment(_ controller: ExploreViewController) { showPaymentsController(withActivePage: PaymentsViewControllerState.pay) } - func exploreTestnetViewControllerShowReceivePayment(_ controller: DWExploreTestnetViewController) { + func exploreViewControllerShowReceivePayment(_ controller: ExploreViewController) { showPaymentsController(withActivePage: PaymentsViewControllerState.receive) } } diff --git a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m index fb491ae58..a3f707f4a 100644 --- a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m +++ b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewController.m @@ -21,7 +21,6 @@ #import #import "DWAboutModel.h" -#import "DWExploreTestnetViewController.h" #import "DWGlobalOptions.h" #import "DWMainMenuModel.h" #import "DWSecurityMenuViewController.h" @@ -38,7 +37,7 @@ @interface DWMainMenuViewController () @@ -138,7 +137,7 @@ - (void)mainMenuContentView:(DWMainMenuContentView *)view didSelectMenuItem:(id< break; } case DWMainMenuItemType_Explore: { - DWExploreTestnetViewController *controller = [[DWExploreTestnetViewController alloc] init]; + DWExploreViewController *controller = [[DWExploreViewController alloc] init]; controller.delegate = self; DWNavigationController *nvc = [[DWNavigationController alloc] initWithRootViewController:controller]; [self presentViewController:nvc animated:YES completion:nil]; @@ -249,14 +248,18 @@ - (void)settingsMenuViewControllerDidRescanBlockchain:(DWSettingsMenuViewControl } #pragma mark - DWExploreTestnetViewControllerDelegate -- (void)exploreTestnetViewControllerShowSendPayment:(DWExploreTestnetViewController *)controller { +- (void)exploreViewControllerShowSendPayment:(DWExploreViewController *)controller { [self.delegate showPaymentsControllerWithActivePage:DWPaymentsViewControllerIndex_Pay]; } -- (void)exploreTestnetViewControllerShowReceivePayment:(DWExploreTestnetViewController *)controller { +- (void)exploreViewControllerShowReceivePayment:(DWExploreViewController *)controller { [self.delegate showPaymentsControllerWithActivePage:DWPaymentsViewControllerIndex_Receive]; } +- (void)exploreViewControllerShowGiftCard:(DWExploreViewController *)controller txId:(NSData *)txId { + [self.delegate showGiftCard:txId]; +} + #pragma mark - DWRootEditProfileViewControllerDelegate #if DASHPAY diff --git a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h index a40e52e87..bb11c35ae 100644 --- a/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h +++ b/DashWallet/Sources/UI/Menu/Main/DWMainMenuViewControllerDelegate.h @@ -25,6 +25,7 @@ - (void)mainMenuViewControllerImportPrivateKey:(DWMainMenuViewController *)controller; - (void)mainMenuViewControllerOpenHomeScreen:(DWMainMenuViewController *)controller; - (void)showPaymentsControllerWithActivePage:(NSInteger)pageIndex; +- (void)showGiftCard:(NSData *)txId; @end diff --git a/DashWallet/Sources/UI/Menu/Settings/SettingsMenuViewController.swift b/DashWallet/Sources/UI/Menu/Settings/SettingsMenuViewController.swift index f193a305d..e59407471 100644 --- a/DashWallet/Sources/UI/Menu/Settings/SettingsMenuViewController.swift +++ b/DashWallet/Sources/UI/Menu/Settings/SettingsMenuViewController.swift @@ -229,7 +229,7 @@ struct SettingsMenuContent: View { title: cjItem.title, subtitleView: AnyView(CoinJoinSubtitle(cjItem)), icon: .custom("image.coinjoin.menu"), - badgeText: NSLocalizedString("Beta", comment: ""), + badgeText: nil, action: cjItem.action ) } else { diff --git a/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift b/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift index 406fdf659..86f99dd3e 100644 --- a/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift +++ b/DashWallet/Sources/UI/Payment Controller/Enter Amount/ProvideAmountViewController.swift @@ -93,7 +93,11 @@ final class ProvideAmountViewController: SendAmountViewController { destination: destination, balanceLabel: balanceLabel, model: self.model as! SendAmountModel, - avatarView: { UIViewWrapper(uiView: avatarView ?? EmptyUIView()) } + avatarView: { + if let avatarView = avatarView { + UIViewWrapper(uiView: avatarView) + } + } ) let swiftUIController = UIHostingController(rootView: intro) swiftUIController.view.backgroundColor = UIColor.dw_secondaryBackground() diff --git a/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift b/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift index 7f48436ec..0c4b9b536 100644 --- a/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift +++ b/DashWallet/Sources/UI/Payments/Amount/Model/Send/SendAmountModel.swift @@ -23,6 +23,7 @@ enum SendAmountError: Error, ColorizedText, LocalizedError { case insufficientFunds case insufficientMixedFunds case syncingChain + case networkUnavailable var errorDescription: String? { switch self { @@ -30,6 +31,7 @@ enum SendAmountError: Error, ColorizedText, LocalizedError { case .insufficientFunds: return NSLocalizedString("Insufficient funds", comment: "Send screen") case .syncingChain: return NSLocalizedString("Wait until wallet is synced to complete the transaction", comment: "Send screen") + case .networkUnavailable: return NSLocalizedString("Network Unavailable", comment: "Network Unavailable") } } @@ -38,6 +40,7 @@ enum SendAmountError: Error, ColorizedText, LocalizedError { case .insufficientFunds: return .systemRed case .insufficientMixedFunds: return .systemRed case .syncingChain: return .secondaryLabel + case .networkUnavailable: return .secondaryLabel } } } @@ -76,7 +79,6 @@ class SendAmountModel: BaseAmountModel { .removeDuplicates() .sink { [weak self] progress in self?.coinJoinBalance = progress.coinJoinBalance - print("CoinJoin: setCoinJoin balance \(progress.coinJoinBalance)") } .store(in: &cancellableBag) } diff --git a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInput.h b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInput.h index d9b8160dd..e7f6d3f31 100644 --- a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInput.h +++ b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInput.h @@ -28,6 +28,7 @@ typedef NS_ENUM(NSUInteger, DWPaymentInputSource) { DWPaymentInputSource_Pasteboard, DWPaymentInputSource_ScanQR, DWPaymentInputSource_NFC, + DWPaymentInputSource_DeepLink, DWPaymentInputSource_URL, DWPaymentInputSource_BlockchainUser, DWPaymentInputSource_PlainAddress diff --git a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInputBuilder.m b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInputBuilder.m index 1fa084742..dc1a03aa7 100644 --- a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInputBuilder.m +++ b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentInputBuilder.m @@ -124,6 +124,8 @@ - (void)payFirstFromArray:(NSArray *)array - (DWPaymentInput *)paymentInputWithURL:(NSURL *)url { DSChain *chain = [DWEnvironment sharedInstance].currentChain; DSPaymentRequest *request = nil; + DWPaymentInputSource sourceType = DWPaymentInputSource_URL; + if ([url.scheme isEqualToString:@"pay"]) { NSString *path = url.absoluteString; if ([path hasPrefix:@"pay:"]) { @@ -135,7 +137,12 @@ - (DWPaymentInput *)paymentInputWithURL:(NSURL *)url { request = [DSPaymentRequest requestWithURL:url onChain:chain]; } - DWPaymentInput *paymentInput = [[DWPaymentInput alloc] initWithSource:DWPaymentInputSource_URL]; + // Check if the request contains a valid Dash address to determine if this is a deep link + if (request && [request.paymentAddress isValidDashAddressOnChain:chain]) { + sourceType = DWPaymentInputSource_DeepLink; + } + + DWPaymentInput *paymentInput = [[DWPaymentInput alloc] initWithSource:sourceType]; paymentInput.request = request; return paymentInput; diff --git a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m index e9ce68724..4a455dd04 100644 --- a/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m +++ b/DashWallet/Sources/UI/Payments/PaymentModels/DWPaymentProcessor.m @@ -159,7 +159,7 @@ - (void)processPaymentInput:(DWPaymentInput *)paymentInput { self.paymentInput = paymentInput; if (paymentInput.request) { - if ((paymentInput.source == DWPaymentInputSource_ScanQR || paymentInput.source == DWPaymentInputSource_URL) && paymentInput.request.isValidAsNonDashpayPaymentRequest) { + if ((paymentInput.source == DWPaymentInputSource_ScanQR || paymentInput.source == DWPaymentInputSource_DeepLink) && paymentInput.request.isValidAsNonDashpayPaymentRequest) { DSPaymentProtocolRequest *protocolRequest = [self protocolRequestFromPaymentRequest:self.paymentInput.request]; [self txManagerRequestingAdditionalInfo:DSRequestingAdditionalInfo_Amount protocolRequest:protocolRequest]; diff --git a/DashWallet/Sources/UI/SwiftUI Components/BottomSheet.swift b/DashWallet/Sources/UI/SwiftUI Components/BottomSheet.swift index c4fd83eb5..fe332cfad 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/BottomSheet.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/BottomSheet.swift @@ -56,7 +56,7 @@ struct BottomSheet: View { .padding(.top, 6) Spacer() - + Button { presentationMode.wrappedValue.dismiss() } label: { diff --git a/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift b/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift index d6e6e0dd4..3f10b1e94 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/Color+DWStyle.swift @@ -62,6 +62,10 @@ extension Color { Color("Gray500") } + static var gray50: Color { + Color("Gray50") + } + // Background and secondary background are mismatched in the assests. // The correct values per the design: // Primary background: #F7F7F7 diff --git a/DashWallet/Sources/UI/SwiftUI Components/Dialogs/ModalDialog.swift b/DashWallet/Sources/UI/SwiftUI Components/Dialogs/ModalDialog.swift index 59a427686..fb388ce16 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/Dialogs/ModalDialog.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/Dialogs/ModalDialog.swift @@ -43,7 +43,7 @@ struct ModalDialog: View { VStack { if let icon = icon { switch icon { - case .custom(let name): + case .custom(let name, let maxHeight): Image(name) .resizable() .scaledToFit() @@ -62,6 +62,13 @@ struct ModalDialog: View { .clipShape(Circle()) .padding(.top, 12) .padding(.bottom, 16) + case .image(let image, let maxHeight): + Image(uiImage: image) + .resizable() + .scaledToFit() + .frame(width: 48, height: 48) + .padding(.top, 12) + .padding(.bottom, 16) } } diff --git a/DashWallet/Sources/UI/SwiftUI Components/FeatureTopText.swift b/DashWallet/Sources/UI/SwiftUI Components/FeatureTopText.swift index ee3994212..273bab07e 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/FeatureTopText.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/FeatureTopText.swift @@ -19,25 +19,30 @@ import SwiftUI struct FeatureTopText: View { var title: String - var text: String + var text: String? var label: String? = nil var alignment: TextAlignment = .center var labelIcon: IconName? = nil var linkAction: (() -> Void)? = nil + var shakeLabel: Bool = false var body: some View { VStack(alignment: getStackAlignment(), spacing: 6) { Text(title) - .font(Font.system(size: 24).weight(.bold)) + .font(.h5Bold) .multilineTextAlignment(alignment) + .lineLimit(2) + .fixedSize(horizontal: false, vertical: true) .lineSpacing(3) .foregroundColor(.primaryText) - Text(text) - .font(Font.system(size: 14)) - .multilineTextAlignment(alignment) - .lineSpacing(3) - .foregroundColor(.secondaryText) + if let text = text { + Text(text) + .font(.body2) + .multilineTextAlignment(alignment) + .lineSpacing(3) + .foregroundColor(.secondaryText) + } if let label = label { DashButton(text: label, trailingIcon: labelIcon, style: .plain, size: .small, stretch: false) { @@ -45,6 +50,7 @@ struct FeatureTopText: View { } .padding(.top, 8) .overrideForegroundColor(.dashBlue) + .wiggle(shakeLabel) } } .padding(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20)) @@ -63,6 +69,33 @@ struct FeatureTopText: View { } } +extension View { + func wiggle(_ trigger: Bool) -> some View { + modifier(WiggleModifier(trigger: trigger)) + } +} + +struct WiggleModifier: ViewModifier { + let trigger: Bool + @State private var isAnimating = false + + func body(content: Content) -> some View { + content + .offset(x: isAnimating ? -10 : 0) + .onChange(of: trigger) { newValue in + guard newValue else { return } + withAnimation(.easeInOut(duration: 0.05).repeatCount(3)) { + isAnimating = true + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) { + isAnimating = false + } + } + } +} + + #Preview { FeatureTopText( title: "Simplify your crypto taxes", diff --git a/DashWallet/Sources/UI/SwiftUI Components/Icon.swift b/DashWallet/Sources/UI/SwiftUI Components/Icon.swift index bb3e884bf..e0fd51786 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/Icon.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/Icon.swift @@ -17,9 +17,28 @@ import SwiftUI -enum IconName { +enum IconName: Equatable { case system(_ name: String) - case custom(_ name: String) + case custom(_ name: String, maxHeight: CGFloat? = nil) + case image(_ uiImage: UIImage, effect: ImageEffect = .none) + + static func == (lhs: IconName, rhs: IconName) -> Bool { + switch (lhs, rhs) { + case (.system(let lhsName), .system(let rhsName)): + return lhsName == rhsName + case (.custom(let lhsName, let lhsHeight), .custom(let rhsName, let rhsHeight)): + return lhsName == rhsName && lhsHeight == rhsHeight + case (.image(_, let lhsEffect), .image(_, let rhsEffect)): + return lhsEffect == rhsEffect + default: + return false + } + } +} + +enum ImageEffect: Equatable { + case none + case rounded } struct Icon: View { @@ -36,10 +55,22 @@ struct Icon: View { Image(systemName: name) .imageScale(.medium) } - case .custom(let name): + case .custom(let name, let height): Image(name) .resizable() .scaledToFit() + .frame(maxHeight: height) + case .image(let uiImage, let effect): + if effect == .rounded { + Image(uiImage: uiImage) + .resizable() + .scaledToFit() + .clipShape(Circle()) + } else { + Image(uiImage: uiImage) + .resizable() + .scaledToFit() + } } } } diff --git a/DashWallet/Sources/UI/SwiftUI Components/MenuItem.swift b/DashWallet/Sources/UI/SwiftUI Components/MenuItem.swift index c225b3fe3..dd7299d17 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/MenuItem.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/MenuItem.swift @@ -113,7 +113,7 @@ struct MenuItem: View { if let icon = icon { ZStack(alignment: .leading) { Icon(name: icon) - .frame(width: 28, height: 28) + .frame(width: 30, height: 30) .padding(0) if let secondaryIcon = secondaryIcon { @@ -123,7 +123,7 @@ struct MenuItem: View { Spacer() Icon(name: secondaryIcon) .padding(2) - .frame(width: 18, height: 18) + .frame(width: 20, height: 20) .background(Color.secondaryBackground) .clipShape(.circle) .offset(x: 2, y: 2) diff --git a/DashWallet/Sources/UI/SwiftUI Components/MerchantDenominations.swift b/DashWallet/Sources/UI/SwiftUI Components/MerchantDenominations.swift new file mode 100644 index 000000000..5a6bd454b --- /dev/null +++ b/DashWallet/Sources/UI/SwiftUI Components/MerchantDenominations.swift @@ -0,0 +1,107 @@ +// +// Created by Andrei Ashikhmin +// Copyright © 2024 Dash Core Group. All rights reserved. +// +// Licensed under the MIT License (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://opensource.org/licenses/MIT +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES 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 + +struct MerchantDenominations: View { + let denominations: [Int] + let currency: String = "USD" + let selectedDenomination: Int? + let actionEnabled: Bool + let onDenominationSelected: (Int) -> Void + let actionHandler: () -> Void + + private var numberFormatter: NumberFormatter { + let formatter = NumberFormatter() + formatter.numberStyle = .currency + formatter.currencyCode = currency + formatter.minimumFractionDigits = 0 + formatter.maximumFractionDigits = 0 + return formatter + } + + private let columns = [ + GridItem(.adaptive(minimum: 76, maximum: 120), spacing: 16) + ] + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + Text(NSLocalizedString("Select amount", comment: "DashSpend")) + .font(.h5Bold) + .foregroundColor(.primaryText) + + Text(NSLocalizedString("This merchant sells gift cards at fixed prices", comment: "DashSpend")) + .font(.body2) + .foregroundColor(.secondaryText) + .padding(.top, 4) + + LazyVGrid(columns: columns, spacing: 16) { + ForEach(denominations, id: \.self) { denomination in + DenominationChip( + denomination: denomination, + isSelected: denomination == selectedDenomination, + formattedValue: numberFormatter.string(from: NSNumber(value: denomination)) ?? "\(denomination)", + onTap: { + onDenominationSelected(denomination) + } + ) + } + } + .padding(.top, 20) + + DashButton( + text: NSLocalizedString("Continue", comment: ""), + style: .filled, + size: .large, + stretch: true, + isEnabled: selectedDenomination != nil && selectedDenomination != 0 && actionEnabled, + action: actionHandler + ) + .padding(.top, 20) + } + } +} + +private struct DenominationChip: View { + let denomination: Int + let isSelected: Bool + let formattedValue: String + let onTap: () -> Void + + var body: some View { + Button(action: onTap) { + Text(formattedValue) + .font(.subtitle1) + .foregroundColor(.primaryText) + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity) + .frame(width: 76, height: 54) + .background( + RoundedRectangle(cornerRadius: 14) + .fill(isSelected ? Color.dashBlue.opacity(0.1) : Color.clear) + ) + .overlay( + RoundedRectangle(cornerRadius: 14) + .stroke( + isSelected ? Color.dashBlue : Color.primaryText.opacity(0.08), + lineWidth: 1.5 + ) + ) + } + .buttonStyle(PlainButtonStyle()) + } +} diff --git a/DashWallet/Sources/UI/SwiftUI Components/NumericKeyboardView.swift b/DashWallet/Sources/UI/SwiftUI Components/NumericKeyboardView.swift new file mode 100644 index 000000000..a46e3df03 --- /dev/null +++ b/DashWallet/Sources/UI/SwiftUI Components/NumericKeyboardView.swift @@ -0,0 +1,88 @@ +import SwiftUI + +struct NumericKeyboardView: View { + @Binding var value: String + let showDecimalSeparator: Bool + let actionButtonText: String + let actionEnabled: Bool + let inProgress: Bool + let actionHandler: () -> Void + + private var rows: [[String]] { + let lastRow: [String] + if showDecimalSeparator { + lastRow = [".", "0", "⌫"] + } else { + lastRow = ["", "0", "⌫"] + } + + return [ + ["1", "2", "3"], + ["4", "5", "6"], + ["7", "8", "9"], + lastRow + ] + } + + var body: some View { + VStack(spacing: 0) { + ForEach(rows, id: \.self) { row in + HStack(spacing: 0) { + ForEach(row, id: \.self) { key in + Button(action: { + handleKeyPress(key) + }) { + if key == "⌫" { + Image(systemName: "delete.left") + .frame(maxWidth: .infinity, maxHeight: .infinity) + .font(.system(size: 20)) + .foregroundColor(.primaryText) + } else { + Text(key) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .font(.system(size: 20, weight: .medium)) + .foregroundColor(.primaryText) + } + } + .disabled(inProgress) + } + } + .opacity(inProgress ? 0.5 : 1.0) + } + + DashButton( + text: actionButtonText, + isEnabled: !value.isEmpty && actionEnabled, + isLoading: inProgress, + action: actionHandler + ) + .padding(.top, 20) + } + .background(Color.secondaryBackground) + } + + private func handleKeyPress(_ key: String) { + if key == "⌫" { + if !value.isEmpty { + value.removeLast() + } + } else if key == "." { + if showDecimalSeparator && !value.contains(".") { + value += "." + } + } else if !key.isEmpty { + value += key + } + } +} + +#Preview { + NumericKeyboardView( + value: .constant(""), + showDecimalSeparator: true, + actionButtonText: NSLocalizedString("Verify", comment: "Button title for numeric keyboard action"), + actionEnabled: true, + inProgress: false, + actionHandler: { print("Action button tapped") } + ).frame(height: 400) +} diff --git a/DashWallet/Sources/UI/SwiftUI Components/RadioButtonRow.swift b/DashWallet/Sources/UI/SwiftUI Components/RadioButtonRow.swift new file mode 100644 index 000000000..74f9b4b08 --- /dev/null +++ b/DashWallet/Sources/UI/SwiftUI Components/RadioButtonRow.swift @@ -0,0 +1,74 @@ +// +// 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 + +/// A reusable radio button row component that displays an optional icon, title, and radio button indicator +struct RadioButtonRow: View { + enum Style { + case radio + case checkbox + } + + let title: String + let icon: IconName? + let isSelected: Bool + let style: Style + let action: () -> Void + + init(title: String, icon: IconName? = nil, isSelected: Bool, style: Style = .radio, action: @escaping () -> Void) { + self.title = title + self.icon = icon + self.isSelected = isSelected + self.style = style + self.action = action + } + + var body: some View { + Button(action: action) { + HStack(spacing: 16) { + if let icon = icon { + Icon(name: icon) + .frame(width: 30, height: 30) + } + + Text(title) + .font(.body2) + .fontWeight(.medium) + .foregroundColor(.primaryText) + + Spacer() + + switch style { + case .radio: + Circle() + .stroke(isSelected ? Color.dashBlue : Color.gray300.opacity(0.5), lineWidth: isSelected ? 6 : 2) + .frame(width: isSelected ? 21 : 24, height: isSelected ? 21 : 24) + .padding(.trailing, isSelected ? 2 : 0) + case .checkbox: + Image(isSelected ? "icon_checkbox_square_checked" : "icon_checkbox_square") + .resizable() + .frame(width: 24, height: 24) + } + } + .padding(.horizontal, 16) + .contentShape(Rectangle()) + .frame(minHeight: 54) + } + .buttonStyle(PlainButtonStyle()) + } +} diff --git a/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift b/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift index d1f6cd43f..946587d27 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/SendIntro.swift @@ -21,6 +21,7 @@ struct SendIntro: View { @State private var balanceHidden: Bool = true var title: String + var preposition: String = NSLocalizedString("to", comment: "Send Screen") var destination: String? = nil var dashBalance: UInt64? = nil var balanceLabel: String? = nil @@ -30,18 +31,19 @@ struct SendIntro: View { var body: some View { VStack(alignment: .leading, spacing: 0) { Text(title) - .font(.largeTitle) + .font(.title) .fontWeight(.bold) if let destination = destination { HStack(spacing: 2) { - Text(NSLocalizedString("to", comment: "Send Screen: to address")) + Text(preposition) .font(.subheadline) + avatarView() + .padding(.leading, 2) + .frame(width: 20, height: 20) Text(destination) .font(.subheadline) .padding(.leading, 2) - avatarView() - .frame(width: 20, height: 20) } .padding(.top, 4) .padding(.bottom, 2) diff --git a/DashWallet/Sources/UI/SwiftUI Components/TextInput.swift b/DashWallet/Sources/UI/SwiftUI Components/TextInput.swift index 43c3949d4..d65cda0c4 100644 --- a/DashWallet/Sources/UI/SwiftUI Components/TextInput.swift +++ b/DashWallet/Sources/UI/SwiftUI Components/TextInput.swift @@ -23,8 +23,12 @@ struct TextInput: View { let label: String @Binding var text: String var isError: Bool = false + var keyboardType: UIKeyboardType = .default + var autocapitalization: TextInputAutocapitalization? = .sentences + var isEnabled: Bool = true var trailingIcon: Image? var trailingAction: (() -> Void)? + var onSubmit: (() -> Void)? var body: some View { VStack(alignment: .leading, spacing: 0) { @@ -37,10 +41,16 @@ struct TextInput: View { .animation(.spring(response: 0.2, dampingFraction: 0.8), value: isFocused || !text.isEmpty) TextField("", text: $text) + .keyboardType(keyboardType) + .textInputAutocapitalization(autocapitalization) .focused($isFocused) .autocorrectionDisabled(true) .font(.body2) .padding(.top, 15) + .disabled(!isEnabled) + .onSubmit { + onSubmit?() + } HStack { Spacer() @@ -114,14 +124,20 @@ struct TextInput: View { } } - // Preview struct TextInput_Previews: PreviewProvider { static var previews: some View { VStack(spacing: 20) { TextInput(label: "Username", text: .constant("")) TextInput(label: "Password", text: .constant("password")) - TextInput(label: "Email", text: .constant("user@example.com"), isError: true) + TextInput( + label: "Email", + text: .constant("user@example.com"), + isError: true, + onSubmit: { + print("Submit pressed on email field") + } + ) } .padding() } diff --git a/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift b/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift index d47476961..5cca3ee28 100644 --- a/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift +++ b/DashWallet/Sources/UI/Tx/Details/Model/TxDetailModel.swift @@ -23,7 +23,7 @@ import Foundation class TxDetailModel: NSObject { var transaction: Transaction var transactionId: String - var txTaxCategory: TxUserInfoTaxCategory + var txTaxCategory: TxMetadataTaxCategory var title: String { direction.title @@ -61,11 +61,11 @@ class TxDetailModel: NSObject { txTaxCategory = txTaxCategory.nextTaxCategory let txHash = transaction.txHashData - var txUserInfo = transaction.userInfo ?? TxUserInfo(txHash: txHash, taxCategory: txTaxCategory) + var txUserInfo = transaction.userInfo ?? TransactionMetadata(txHash: txHash, taxCategory: txTaxCategory) txUserInfo.taxCategory = txTaxCategory // TODO: Move it to Domain layer - TxUserInfoDAOImpl.shared.update(dto: txUserInfo) + TransactionMetadataDAOImpl.shared.update(dto: txUserInfo) } func copyTransactionIdToPasteboard() -> Bool { 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 72b53e41c..25e967a58 100644 --- a/DashWallet/ar.lproj/Localizable.strings +++ b/DashWallet/ar.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "قبول شروط الاستخدام ..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "استرجاع الحساب"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "الكمية المرسلة"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "تجربة بديهية ومألوفة عبر جميع أجهزتك"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "التطبيق %@ ترغب في استلام مفتاحك الرئيسي. هذا يمكن أن تستخدم لتتبع محفظتك ، وهذا لا يمكن أن تستخدم لتحريك داش الخاص بك."; +/* No comment provided by engineer. */ +"Apply" = "تطبيق"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "بين محفظة داش وحساب Coinbase الخاص بك"; /* Voting */ -"Block" = "Block"; +"Block" = "بلوك"; /* No comment provided by engineer. */ "block #%d of %d" = "كتلة # %1$d من %2$d"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "شراء بطاقة هدية"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "شراء بطاقة هدية مع داش."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "قم بشراء وتحويل داش بعملات مشفرة أخرى"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "قم بشراء داش - لا حساب لازم"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "شراء بطاقات الهدايا مع داش الخاص بك"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "افحص اتصالك"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "تأكد"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "تأكيد الرقم السري"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "اتصل بدعم كوين بيس"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "استمر"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "إنشاء حساب"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "قم بإنشاء حساب CrowdNode عبر الإنترنت"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "إنشاء حساب على الإنترنت"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "رصيد داش"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "رصيد داش على كوين بيس"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "محفظة داش"; + /* Buy Dash */ "Dash Wallet on this device" = "محفظة داش على هذا الجهاز"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "تم قطع الاتصال"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "تجاهل"; /* No comment provided by engineer. */ "Display Name" = "Display Name"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "على سبيل المثال johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "أدخل رمز 2FA الخاص بك أدناه"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "خطأ"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "منقي"; /* No comment provided by engineer. */ -"Filter Transactions" = "تصفية المعاملات"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "عوامل التصفية"; -/* No comment provided by engineer. */ -"Find a merchant." = "ابحث عن تاجر."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "من CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "كرت هدية"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "انتقل إلى موقع CrowdNode"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "كيفية تأكيد عنوان API Dash الخاص بك"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "كيفية استخدام بطاقة الهدايا"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "المعرف الشخصي التابع لعقدة Evolution"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "أقبل أنني سأفقد عملاتي إذا لم أعد أمتلك كلمة الإستراد"; @@ -1135,6 +1204,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" = "دخل"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "اعرف المزيد"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "مقفول"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "سجّل الدخول إلى CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "تسجيل الخروج"; + /* No comment provided by engineer. */ "Log out from Uphold" = "تسجيل الخروج من Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "الحد الأقصى"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "يعمل بحث التاجر بشكل أفضل مع تشغيل خدمات الموقع."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "رسوم الشبكة"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "لا يوجد"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "لا تقبل جميع المتاجر داش مباشرةً ، ولكن يمكنك شراء بطاقة هدايا باستخدام داش."; - /* Fiat amount */ "Not available" = "غير متاح"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "حسنا"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "معاينة الطلب"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "مفاتيح المالك"; +/* DashSpend */ +"Password" = "كلمة المرور"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "ادفع بسهولة"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "طريقة الدفع "; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "يرجى وضع هاتفك بالقرب من جهاز NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "يرجى النقر على الكلمات من عبارة الاسترداد بالترتيب الصحيح"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "شراء"; +/* Alert title */ +"Purchase Failed" = "الشراء لم ينجح"; + /* No comment provided by engineer. */ "Quick Receive" = "إستقبال سريع"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "استرد بطاقة الهدايا الخاصة بك عبر الإنترنت في غضون ثوانٍ أو عند الصراف."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "حفظ"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "تكون لقطات الشاشة مرئية للتطبيقات والأجهزة الأخرى. إنشاء كلمة الإستراد جديدة والحفاظ على سريتها."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "بحث"; /* No comment provided by engineer. */ "Search for a contact" = "Search for a contact"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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" = "مشاهدة في أفلود"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "اختر عملة "; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "بيع"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "أرسلت الى"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "اظهر جملة الاسترداد"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "المزامنة جارية... قد لا تكون النتائج كاملة."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "فئة الضريبة"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "توضح هذه الخطوة الإضافية أنك تحاول حقًا إجراء معاملة."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "سيكون الرقم السري هذا مطلوبًا لإلغاء قفل تطبيقك في كل مرة تستخدمه."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "إلى"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "لبدء التخزين ، أنشئ حسابًا على CrowdNode أو اتصل بحساب موجود."; @@ -2396,7 +2564,7 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "إلى عنوان Dash المخصص لحساب CrowdNode الخاص بك في Dash Wallet على هذا الجهاز"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "اليوم"; /* No comment provided by engineer. */ "Tools" = "ادوات"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "إلمس لمعرفة الحد"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "تاريخ المعاملات"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "لم نتمكن من الانسحاب من حسابك في CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "لدينا نوعان من التجار"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "قمنا بالترقية"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2774,7 +2945,7 @@ "Yes" = "Yes"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "في الامس"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "You accepted the contact request from %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "يمكنك الاطلاع على معلومات مفصلة حول الإيداعات والسحوبات وأرباح المكافآت."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "ليس لديك رصيد كافي لإتمام هذه المعاملة"; + /* Coinbase */ "You don’t have enough balance" = "ليس لديك رصيد كافي"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "تم إعداد حساب CrowdNode الخاص بك وهو جاهز للاستخدام!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "تم إنشاء حساب CrowdNode الخاص بك باستخدام هذه المعاملات."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "تم تأكيد عنوان CrowdNode الخاص بك."; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/bg.lproj/Localizable.strings b/DashWallet/bg.lproj/Localizable.strings index c20dcf786..004c74d57 100644 --- a/DashWallet/bg.lproj/Localizable.strings +++ b/DashWallet/bg.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Изпратени суми"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Интуитивно и познато преживяване на всичките Ви устройства"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Приложението %@ иска да получи вашият Master Public Key. Това може да бъде използване за проследяване на вашият портфейл,но не може да се използва за преместване на вашите Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Удостоверяването не е налично"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; /* Voting */ -"Block" = "Block"; +"Block" = "Блок"; /* No comment provided by engineer. */ "block #%d of %d" = "блок #%1$d от %2$d"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Промяна"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Проверете връзката"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Потвърди"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Потвърди ПИН"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Продължи"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dash баланс"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Отхвърляне"; /* No comment provided by engineer. */ "Display Name" = "Display Name"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Въведи фразата за възстановяване"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Въведете вашият 2FA код по-долу"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Грешка"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Филтър"; /* No comment provided by engineer. */ -"Filter Transactions" = "Филтър на транзакциите "; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Приемам, че ще загубя монетите си, ако вече не притежавам фразата за възстановяване"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Невалидна сума"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Заключена"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Излез от профила"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Излез от Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Влизане с Face ID"; @@ -1389,7 +1488,7 @@ "Low to high" = "Low to high"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "Основна мрежа"; /* Usernames */ "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Макс"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Мрежа"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Мрежова такса"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Нод IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Никакъв"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Не е налично"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Адрес на собственика"; /* No comment provided by engineer. */ "Owner Keys" = "Ключове на собственика"; +/* DashSpend */ +"Password" = "Парола"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Платете с лекота"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Моля поставете вашият телефон близо до NFC устройство."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Моля, докоснете думите от фразата за възстановяване в правилния ред"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Бързо получаване"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Възнаграждение"; -/* No comment provided by engineer. */ -"Rewards" = "Възнаграждения"; - /* No comment provided by engineer. */ "Save" = "Съхрани"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Изпратени на"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Задаване на доверен нод"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Покажи фраза за възстановяване"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Неуспешно синхронизиране"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Синхронизирай сега"; @@ -2279,13 +2429,19 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "Тестова мрежа"; /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Този ПИН ще бъде необходим за отключване на приложението ви всеки път, когато го използвате."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID лимит"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Устоановихме, че Dash Wallet се е повредил по време на миграцията. Повторното сканиране на блок веригата може да реши този проблем или опитайте отново. Повторното сканиране е препоръчително да се извърши чрез wifi и може да отнеме до половин час. Вашите средства ще бъдат налични след като синхронизацията приключи. "; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Надградихме"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "На път сте да изпразните този портфейл от това устройство. Средствата, свързани с този портфейл, могат да бъдат изтеглени само ако имате фраза за възстановяване."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Нямате достатъчно средства за да извършите тази транзакция"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Вашата транзакция беше изпратена и сумата би трябвало да се появи във вашият портфейл до няколко минути."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/ca.lproj/Localizable.strings b/DashWallet/ca.lproj/Localizable.strings index ca8b339ef..dd7555bc4 100644 --- a/DashWallet/ca.lproj/Localizable.strings +++ b/DashWallet/ca.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Comissió de xarxa"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "D'acord"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Desa"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/cs.lproj/Localizable.strings b/DashWallet/cs.lproj/Localizable.strings index 7fe11b464..c70716062 100644 --- a/DashWallet/cs.lproj/Localizable.strings +++ b/DashWallet/cs.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Přijmout"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Přijímá DASH"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Odeslaná částka"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Intuitivní používání napříč všemi tvými zařízeními"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Aplikace %@ si přeje získat váš hlavní veřejný klíč.\nMůže být použit ke sledování pohybů na peněžence ale nelze ho použít pro přesouvání Dash."; +/* No comment provided by engineer. */ +"Apply" = "Aplikovat"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Autentizace není dostupná"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Od %1$ld do %2$ld znaků"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; /* Voting */ -"Block" = "Block"; +"Block" = "Blok"; /* No comment provided by engineer. */ "block #%d of %d" = "blok #%1$d z %2$d"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Nákup dárkového poukazu"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Koupit dárkový poukaz za Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Nákup dárkových poukazů za Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Změnit"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Zkontrolujte vaše připojení"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Vyberte váš"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Potvrdit"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Potvrdit PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Čeká na přidání mezi kontakty"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Kontakty"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Pokračovat"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Vytvořit účet"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Vytvořit pozvánku"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dash bilance"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash uživatelské jméno"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Odpojeno"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Zavřít"; /* No comment provided by engineer. */ "Display Name" = "Zobrazované jméno"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Každá pozvánka bude financována touto částkou, aby si příjemce mohl rychle vytvořit uživatelské jméno na Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Dřívější"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Zadejte frázi pro obnovení"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Vložte váš 2FA kód níže"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Chyba"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Při aktualizaci profilu se stala chyba"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtr"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filtrovat transakce"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtry"; -/* No comment provided by engineer. */ -"Find a merchant." = "Najít obchodníka."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Najdi uživatele na Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Nalezená pravděpodobně chybějící slova:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Dárkový poukaz"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Jak použít dárkový poukaz"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Souhlasím s tím, že přijdu o prostředky pokud ztratím frázi pro obovení"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Neplatná částka"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Neplatný QR kód"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Pozvání"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Pozvánka byla úspěšně vytvořena"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Poplatek za pozvánku"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Více informací"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Blokováno"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Přihlásit do CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Odhlásit"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Odhlásit z účtu Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Přihlásit přes Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Vyhledávání obchodníků funguje lépe se zapnutým určením polohy."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Síť"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Poplatek síti"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Žádná"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Ne všechny obchody přijímají přímo DASH, můžete si ale za Dash koupit dárkový poukaz."; - /* Fiat amount */ "Not available" = "Není dostupný"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa majitele"; /* No comment provided by engineer. */ "Owner Keys" = "Klíče majitele"; +/* DashSpend */ +"Password" = "Heslo"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Plať snadno"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Platby peněženkou DASH."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Placení"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Placení..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Přiložte váš telefon k zařízení NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Klepněte na slova z vaší fráze pro obnovení ve správném pořadí"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Náhled pozvánky"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Přijmout"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Fráze pro obnovení musí mít 12, 15, 18, 21 nebo 24 slov"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Uplatněte dárkový poukaz online během několika sekund nebo u pokladny."; - /* Button title, Register (username) */ "Register" = "Registrovat"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Odměna"; -/* No comment provided by engineer. */ -"Rewards" = "Odměny"; - /* No comment provided by engineer. */ "Save" = "Uložit"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Uložit změny"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Snímky obrazovky jsou dostupné pro ostatní aplikace a zařízení. Vygenerujte novou frázi pro obnovení a udržujte ji v tajnosti."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Vyhledávání"; /* No comment provided by engineer. */ "Search for a contact" = "Vyhledat kontakt"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Výsledky hledání pro \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Hledání uživatele %@ na Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Prodej"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Odeslat na"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Nastavit důvěryhodný node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Zobrazit frázi pro obnovení"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Řadit kontakty"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Synchronizace selhala"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Synchronizovat"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Obrázek, který vyberete, bude anonymně nahrán na Imgur."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Tento PIN bude požadován pro odemčení aplikace pokaždé, když ji budete chtít použít."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Abyste mohli začít službu používat, vytvořte si účet CrowdNode nebo připojte již existující."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Máme 2 typy obchodníků"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Během migrace jsme zachytili pád aplikace Dash Wallet. Opětovné načtení blockchainu vyřeší tento problém nebo to můžete zkusit znovu. Načtení blockchainu by mělo být uskutočněno při připojení na Wi-Fi a může trvat až hodinu. Vaše prostředky budou k dispozici po dokončení synchronizačního procesu."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Vylepšovali jsme"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Chystáte se smazat tuto peněženku ze zařízení. Prostředky spojené s touto peněženkou budou moci být opětovně získány pouze pokud máte frázi pro obnovení."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Nemáte dostatečné prostředky pro uskutečnění této transakce"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Transakce byla odeslána a částka by se měla objevit v pěněžence během pár minut."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Tvoje uživatelské jméno %@ bylo úspěšně vytvořeno na Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/da.lproj/Localizable.strings b/DashWallet/da.lproj/Localizable.strings index 74dc6132a..a86334747 100644 --- a/DashWallet/da.lproj/Localizable.strings +++ b/DashWallet/da.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Fejl"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Netværksgebyr"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "O.k."; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Gem"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/dashwallet-Bridging-Header.h b/DashWallet/dashwallet-Bridging-Header.h index c5d9e55b7..d2960e9bd 100644 --- a/DashWallet/dashwallet-Bridging-Header.h +++ b/DashWallet/dashwallet-Bridging-Header.h @@ -146,9 +146,7 @@ static const bool _SNAPSHOT = 0; #import "DWMainMenuViewController.h" #import "DWWipeDelegate.h" #import "DWPayModel.h" -#import "DWHomeViewControllerDelegate.h" #import "DWMainMenuViewControllerDelegate.h" -#import "DWExploreTestnetViewController.h" //MARK: Home #import "DWHomeModel.h" diff --git a/DashWallet/de.lproj/Localizable.strings b/DashWallet/de.lproj/Localizable.strings index 841d6bb9e..d14c68a16 100644 --- a/DashWallet/de.lproj/Localizable.strings +++ b/DashWallet/de.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ darf nicht auf die Touch ID zugreifen"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu Kontakte/ %3$lu Profil-Updates"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d die Stimmen werden abgegeben, da du mehrere Abstimmungs-Schlüssel in deiner Wallet gespeichert hast"; /* Voting */ "%ld duplicates" = "%ld Duplikate"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Akzeptieren"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "AGB akzeptieren"; /* CrowdNode */ "Accepting terms of use…" = "AGB akzeptieren ..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "DASH direkt akzeptieren"; - /* CrowdNode */ "Account Recovery" = "Kontowiederherstellung"; @@ -152,7 +155,7 @@ "Advanced" = "Erweitert"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Ein fortschrittliches Privatsphäre-Level erfordert eine zuverlässige Internetverbindung"; /* No comment provided by engineer. */ "Advanced Security" = "Erhöhte Sicherheit"; @@ -167,7 +170,7 @@ "Agree" = "Zustimmen"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "weiter"; /* No comment provided by engineer. */ "All" = "Alles"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Guthaben gesendet"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Eine intuitive und gewohnte Erfahrung über alle Gerätetypen hinweg"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "und"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Anwendung %@ möchte ihren öffentlichen Master-Key empfangen. Ihre Gelder können damit nicht versendet werden, lediglich beobachtet."; +/* No comment provided by engineer. */ +"Apply" = "Anfragen"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Bist du sicher, dass du diesen Handel stornieren möchtest?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Da die meisten nicht genau 1000 Dash zur Hand haben, hat CrowdNode einen Service entwickelt der Einlagen von Mitgliedern zusammenlegt, damit diese die Vorteile, die durch das Besitzen eines Masternodes entstehen, nutzen können."; +/* DashSpend */ +"at" = "bei"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Die Suche nach Automaten funktioniert besser, wenn der Standortdienst angeschaltet ist."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentifizierung nicht verfügbar"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Autorisiert"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "zurück"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Zwischen %1$ld und %2$ld Zeichen"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Zwischen 3 und 23 Zeichen"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Zwischen der Dash Wallet und Coinbase"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Gutscheinkarte kaufen"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Kaufe eine Gutscheinkarte mit Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Kaufe und konvertiere Dash in eine andere Kryptowährung"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Kaufe Credits"; /* No comment provided by engineer. */ "Buy Dash" = "Dash kaufen"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Dash kaufen. Es wird kein Konto benötigt."; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Kaufe Gutscheinkarten mit Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Die Stornierung dieser Transaktion führt nicht zur Stornierung des Handelsauftrags. Du wirst deine DASH in Kürze auf deinem Coinbase Konto erhalten."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Karten-PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Ändern"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Wechsel zu Standard"; +/* No comment provided by engineer. */ +"Check current balance" = "Aktuellen Kontostand prüfen"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Datum- und Zeiteinstellungen prüfen"; /* No comment provided by engineer. */ "Check your connection" = "Verbindung überprüfen"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Wähle deinen"; @@ -456,16 +483,13 @@ "CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; /* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; - -/* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin erstellt Stückelungen"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "CoinJoin-Mixing"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Coinjoin-Mixinggebühr"; /* No comment provided by engineer. */ "Confirm" = "Bestätigen"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Bestätigen(%1$d %2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "PIN bestätigen"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Coinbase Support kontaktieren"; +/* DashSpend */ +"Contact CTX Support" = "CTX-Support kontaktieren"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Kontaktanfrage ausstehend"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Kontakte"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Fortfahren"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Trotzdem fortfahren"; /* Coinbase Entry Point */ "Convert Crypto" = "Kryptowährung umwandeln"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Konto erstellen"; +/* Create DashSpend account */ +"Create account" = "Konto erstellen"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Einen neues CrowdNode online Konto erstellen"; /* No comment provided by engineer. */ "Create invitation" = "Erstelle eine Einladung"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Online Konto erstellen"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Benutzernamen erstellen"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Erstelle deinen Benutzernamen, finde Freunde und Familie mit ihren Benutzernamen und füge sie zu deinen Kontakten hinzu"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "CrowdNode Auszahlungslimits"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · Konto"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ DashWallet"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash Adresse, die für dein CrowdNode Konto in der Dash Wallet auf diesem Gerät bestimmt ist."; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dash-Guthaben"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash Guthaben auf Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash-Benutzername"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet auf diesem Gerät"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Standardwährung, Shortcuts, über..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Standardmäßige Filtereinstellung"; /* Location Service Status */ "Denied" = "Abgelehnt"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Verbindung getrennt"; +/* DashSpend confirmation */ +"Discount" = "Rabatt"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Schließen"; /* No comment provided by engineer. */ "Display Name" = "Name anzeigen"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "z.B. maxmustermann@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Jede Einladung wird mit diesem Betrag versehen damit der Empfänger schnell einen eigenen Nutzernamen im Dash-Netzwerk beanspruchen kann"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Früher"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Wiederherstellungs-Wortfolge eingeben"; +/* Enter verification code */ +"Enter verification code" = "Verifizierungscode eingeben"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Trage den 2FA-Code unten ein"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Fehler"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Fehler beim Updaten deines Profils"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Fehler"; /* No comment provided by engineer. */ "Exit" = "Beenden"; @@ -842,7 +881,7 @@ "Export all transactions" = "Alle Transaktionen exportieren"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "CSV exportieren"; /* No comment provided by engineer. */ "Extended Public Keys" = "Erweiterter Public Key"; @@ -850,6 +889,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."; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Transaktionen filtern"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Sortiert nach"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filter"; -/* No comment provided by engineer. */ -"Find a merchant." = "Finde einen Händler."; - /* No comment provided by engineer. */ "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."; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Erste Mindesteinlage"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Festgesetzte Beträge"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible Beträge"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Potenziell fehlende Wörter gefunden:\n%@"; +/* DashSpend confirmation */ +"From" = "Von"; + /* from CrowdNode */ "from CrowdNode" = "von CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "von deinem Coinbase Konto"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Vollständig gemixt"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Erhalte Erträge für Einzahlungen in Dash Masternodes bereits ab 0.5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gutscheinkarte"; +/* No comment provided by engineer. */ +"Gift card" = "Gutscheinkarte"; + +/* 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" = "Preis der Geschenkkarte"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Geschenkkarten-Typen"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Gehe zur CrowdNode Webseite"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Hier ist die Dash Adresse, die für dein CrowdNode Konto in der Dash Wallet auf diesem Gerät bestimmt ist."; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Ausblenden"; /* adjective, security level */ "High" = "Hoch"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Wie du deine API Dash Adresse bestätigst"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Wie man eine Gutscheinkarte verwendet"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1058,7 +1124,10 @@ "I Accept" = "Ich akzeptiere"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Ich akzeptiere"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I akzeptiere die AGB von DashSpend."; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Ich akzeptiere, dass ich meine Coins verlieren werden, wenn ich die Wiederherstellungsphrase verlieren sollte"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "In Bearbeitung"; +/* No comment provided by engineer. */ +"In store" = "Im Laden"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Guthaben nicht ausreichend"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Gemixtes Guthaben nicht ausreichend. Warte bis das CoinJoin-Mixen abgeschlossen ist oder deaktiviere dieses Feature in den Einstellungen, um die Transaktion abzuschließen."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Wallet Guthaben nicht ausreichend"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Standard"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Ein durchschnittliches Privatsphäre-Level erfordert eine zuverlässige Internetverbindung"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Interne Transaktion"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Ungültiger Betrag"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Ungültige Dash Adresse"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Ungültiger QR-Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Einladung"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Einladung erfolgreich erstellt"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Einladungsgebühr"; /* No comment provided by engineer. */ "Invitation used by" = "Einladung genutzt von"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Es kann bis zu 10 Minuten dauern, Dash von Coinbase zur Dash Wallet auf diesem Gerät zu übertragen."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Es wird empfohlen, ein Wi-Fi-Netzwerk zu nutzen, um zusätzliche Mixing-Gebühren zu vermeiden."; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Es wäre selbst für erfahrene Nutzer sehr schwer, deine Transaktionshistorie zu bestimmen."; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Letztes Server-Update"; -/* No comment provided by engineer. */ -"Learn More" = "Mehr erfahren"; - /* Info Screen */ "Learn More..." = "Mehr erfahren..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Gesichert"; +/* Log in */ +"Log in" = "Einloggen"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Bei CrowdNode anmelden"; +/* DashSpend */ +"Log in to your account" = "In dein Konto einloggen"; + +/* Log out button */ +"Log Out" = "Abmelden"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Aus Uphold abmelden"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Mit Face ID einloggen"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Verfasse einen Beitrag mit dem obigen Text auf einer bekannten Social Media- oder Messaging-Plattform und füge den unten stehenden Link ein, um zu überprüfen, ob du der ursprüngliche Besitzer des gewünschten Benutzernamens bist"; /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS-Erlaubnis verwalten"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximal 75 Zeichen"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Die Händlersuche funktioniert besser, wenn die Standortdienste aktiviert sind."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,7 +1554,7 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Gemixtes Guthaben"; /* CoinJoin */ "Mixing" = "Mixing"; @@ -1458,13 +1563,13 @@ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Mixing ist nur möglich, wenn die App geöffnet ist"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Mixing pausiert"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Gemixte Transaktionen"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Das Mixen deiner Dash macht deine Transaktionen anonymer."; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Netzwerk"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Netzwerk-Gebühr"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Kein Ergebniss gefunden"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Kein Vote übrig"; /* No comment provided by engineer. */ "Node IP" = "Knoten-IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Kein"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Keine gültige URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nicht alle Geschäfte akzeptieren DASH direkt, aber du kannst mit deinen Dash auch einen Gutschein kaufen."; - /* Fiat amount */ "Not available" = "Nicht verfügbar"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Nicht festgelegt"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Nicht gestartet"; /* No comment provided by engineer. */ "Not yet used" = "Noch nicht verwendet"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Alt nach neu"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Sobald %@ deine Anfrage angenommen hat, kannst du Zahlungen direkt an seinen Benutzernamen senden"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Ein Vote übrig"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vorschau bestellen"; +/* DashSpend */ +"Original purchase" = "Anschaffungswert"; + /* No comment provided by engineer. */ "Owner Address" = "Besitzer-Adresse"; /* No comment provided by engineer. */ "Owner Keys" = "Besitzer-Schlüssel"; +/* DashSpend */ +"Password" = "Passwort"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Mit Leichtigkeit bezahlen"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Mit der DASH Wallet bezahlen."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Bezahle"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Bezahle..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Zahlungsmethode"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Zahlungsart"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Bitte halte dein Telefon nahe an das NFC-Gerät."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Bitte tippe die Wörter deiner Wiederherstellungsphrase in der richtigen Reihenfolge an"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Einladung begutachten"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Kaufen"; +/* Alert title */ +"Purchase Failed" = "Kauf fehlgeschlagen"; + /* No comment provided by engineer. */ "Quick Receive" = "Schnell Empfangen"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Wiederherstellungsphrasen müssen 12, 15, 18, 21 oder 24 Worte enthalten"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Die Geschenkkarte kann innerhalb von Sekunden online oder an der Kasse eingelöst werden."; - /* Button title, Register (username) */ "Register" = "Registrieren"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Deinen Nutzernamen beantragen"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Angefragter Benutzername wurde blockiert"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Angefragter Benutzername wurde an eine andere Person vergeben"; /* An action */ "Rescan" = "Erneut scannen"; @@ -1956,7 +2082,7 @@ "Restricted" = "Eingeschränkt"; /* Usernames */ -"Results" = "Results"; +"Results" = "Ergebnisse"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Gemeinsamen Transaktionsverlauf erhalten"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Belohnung"; -/* No comment provided by engineer. */ -"Rewards" = "Belohnungen"; - /* No comment provided by engineer. */ "Save" = "Speichern"; +/* DashSpend */ +"Save %.2f%%" = "Spare %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Änderungen speichern"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots sind sichtbar für andere Apps und Geräte. Generieren Sie eine neue Wiederherstellungs-Wortfolge und halten Sie diese geheim."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Suchen"; /* No comment provided by engineer. */ "Search for a contact" = "Kontakt suchen"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Suchergebnisse für \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Nach Benutzernamen %@ im Dash-Netzwerk suchen"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Dienst auswählen"; +/* DashSpend denomination selection */ +"Select amount" = "Betrag auswählen"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Blockexplorer auswählen"; /* No comment provided by engineer. */ "Select from Gallery" = "Aus der Galerie wählen"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Wähle einen Coin aus"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-Checkout"; + /* Sell */ "Sell" = "Verkaufen"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Senden an"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Zuverlässigen Knoten einrichten"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Wiederherstellungsphrase anzeigen"; +/* Alert title */ +"Sign in required" = "Anmeldung erforderlich"; + /* CrowdNode */ "Sign the message" = "Signiere die Nachricht."; @@ -2195,7 +2339,7 @@ "Skip" = "Überspringen"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Manche Benutzernamen können blockiert werden"; /* No comment provided by engineer. */ "Something went wrong" = "Etwas hat nicht funktioniert"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Kontakte sortieren"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Nach Entfernung sortiert"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Mixen beenden"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Einreichen"; /* No comment provided by engineer. */ "Swept!" = "Geleert!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Synchronisierung fehlgeschlagen"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Synchronisierung läuft... Ergebnisse können unvollständig sein."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Jetzt synchronisieren"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Steuerliche Kategorie"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash besitzen keinen echten Wert, aber du kannst sie an DashPay Alpha-Nutzern senden oder erhalten."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash ist kostenlos und kann an einem so genannten Faucet erworben werden."; /* 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Das ausgewählte Bild wird anonym auf Imgur hochgeladen."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Der Link, den du sendest, ist nur für die Betreiber des Netzwerkes sichtbar"; /* Coinbase */ "The minimum amount you can send is %@" = "Der Mindestbetrag für eine Transaktion ist %@."; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Dieser zusätzliche Schritt beweist, dass es wirklich du bist der die Transaktion ausführt."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Dieser Händler verkauft seine Geschenkkarten zu festen Preisen."; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Die PIN muss bei jedem Verwenden der App zum Entsperren eingegeben werden."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "nach"; +/* DashSpend confirmation */ +"To" = "Bis"; + /* Coinbase */ "to Dash Wallet on this device" = "zur Dash Wallet auf diesem Gerät"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Um zu verhindern, dass andere Personen sehen können, an wen du Zahlungen vornimmst, wird empfohlen, dein Guthaben zu mixen, bevor du deinen Benutzernamen erstellst."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Um mit dem Staking zu beginnen, erstelle ein Konto bei CrowdNode oder verbinde ein bereits bestehendes."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "zu der vorgesehenen Dash Adresse für dein CrowdNode Konto in der Dash Wallet dieses Gerätes"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Heute"; /* No comment provided by engineer. */ "Tools" = "Werkzeuge"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Lade deine Credits auf, um weiterhin Änderungen an deinem Profil durchführen und Kontakte hinzufügen zu können"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch-ID Limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaktionshistorie"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Gerätecode aktivieren"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Ausgeschaltet"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Das Anschalten dieses Features wird deinen Akkuverbrauch erhöhen."; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Dein Bild kann nicht hochgeladen werden. Bitte versuche es erneut."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Freigeben"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Benutzername verfügbar"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Benutzername ist verfügbar"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Abstimmung ist nur in manchen Fällen notwendig"; /* No comment provided by engineer. */ "Voting Keys" = "Abstimmungs-Schlüssel"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Wir konnten keine Auszahlung von deinem CrowdNode Konto durchführen."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Wir haben 2 Arten von Händlern"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Wir haben festgestellt, dass Dash Wallet während der Migration abgestürzt ist. Ein erneutes Scannen der Blockchain sollte dieses Problem lösen. Zum erneuten Scannen sollte WiFi eingeschaltet werden und es dauert etwa eine halbe Stunde. Dein Guthaben sollte wieder sichtbar sein, nachdem der Synchronisierungsvorgang abgeschlossen wurde."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Wir haben ein Upgrade durchgeführt"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Sobald die Transaktion bestätigt ist, ist die andere Wallet wertlos und sollte aus Sicherheitsgründen nicht wieder verwendet werden."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Wenn du die App schließt oder den Bildschirm sperrst, stoppt der Mixing-Prozess. Er wird fortgeführt, wenn du die App wieder öffnest."; /* No comment provided by engineer. */ "Where to Spend" = "Wo bezahlen"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Möchtest du die Einladung akzeptieren?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Möchtest du eine Einzahlung mit dem hinterlegten Bankkonto durchführen?"; @@ -2774,7 +2945,7 @@ "Yes" = "Ja"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Gestern"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Du hast die Kontaktanfrage von %@ angenommen"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Du bist dabei, die Wallet von diesem Gerät zu löschen. Guthaben aus dieser Wallet, kann nur wiedergewonnen werden, wenn du die Wiederherstellungsphrase hast."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Das hochgeladene Bild kann entfernt werden, solange du Zugang zu dieser Wallet besitzt."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Du kannst ändern, wann und wie die Auszahlungen deiner Rewards vorgenommen werden."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Du kannst DashPay weiterhin für Zahlungen nutzen, aber es ist nicht möglich dein Profil zu updaten oder weitere Kontakt hinzuzufügen, sofern du dein Credit-Guthaben nicht aufgeladen hast"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Du kannst deinen Schlüssel in einem der folgenden Formaten eingeben: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Du kannst detaillierte Informationen über deine Einzahlungen, Auszahlungen und Erträge sehen."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Du kannst diese Einladung nicht beanspruchen, da du bereits einen Dash-Benutzernamen besitzt."; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Zurzeit hast du keine Kontakte"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Dein Guthaben reicht nicht aus, um diese Transaktion zu tätigen"; + /* Coinbase */ "You don’t have enough balance" = "Du hast nicht genug Guthaben"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Du musst 5 Minuten warten, bevor du die nächste Auszahlung beginnen kannst."; /* CrowdNode */ "You only need %@ to join the pool." = "Du brauchst lediglich %@ um dem Pool beizutreten."; +/* DashSpend confirmation */ +"You pay" = "Du bezahlst"; + /* Coinbase */ "You receive" = "Du erhältst"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Du erhältst automatisch Teilzahlungen, die standardmäßig reinvestiert werden. Du kannst jedoch auch automatische Entnahme einrichten, um wiederkehrende Auszahlungen zu erhalten."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Dein Credit-Guthaben ist vollständig aufgebraucht"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Dein Credit-Guthaben ist niedrig"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Dein CrowdNode Konto wird erstellt..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Dein CrowdNode Konto ist fertig und zur Nutzung bereit!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Dein CrowdNode Konto wurde mit diesen Transaktionen erstellt."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Deine CrowdNode Adresse wurde bestätigt."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Deine Einzahlung auf CrowdNode wurde erhalten."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Deine Gerätezeit ist %1$@ zu %2$d Sekunden.u kannst CoinJoin aufgrund dieses Unterschiedes nicht nutzen.\n\nDie Zeiteinstellungen auf deinem Gerät muss auf „Zeit automatisch einstellen“ geändert werden, um CoinJoin nutzen zu können."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Die Gerätezeit geht %dMinuten falsch. Daher ist es möglicherweise nicht möglich Dash zu senden. \n\nÜberprüfe und korrigiere bitte Datum, Uhrzeit und Zeitzone, falls dies nötig ist."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Die Uhrzeit deines Geräts weicht um mehr als 5 Sekunden ab. Du kannst CoinJoin aufgrund dieses Unterschiedes nicht nutzen.\n\nDie Zeiteinstellungen auf deinem Gerät muss auf „Zeit automatisch einstellen“ geändert werden, bevor du den Dienst nutzen kannst."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Deine E-Mail wird nicht in der DashPay Wallet oder auf anderen Servern gespeichert. Sie wird lediglich dazu genutzt um die Gravatar Kontodetails abzurufen. Danach wird die E-Mail entfernt."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Deine E-Mail wird nur benötigt, um dir ein einmaliges Password zu senden."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Deine Einladung von %@ wurde bereits beansprucht"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Deine Anfrage wurde abgebrochen."; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Deine Transaktion wurde versendet und der Betrag sollte in ein paar Minuten in der Wallet zu sehen sein."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Dein Benutzername %@ wurde erfolgreich im Dash-Netzwerk erstellt"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/el.lproj/Localizable.strings b/DashWallet/el.lproj/Localizable.strings index ad3a4cf32..13d37dfb6 100644 --- a/DashWallet/el.lproj/Localizable.strings +++ b/DashWallet/el.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ δεν επιτρέπεται να έχετε πρόσβαση στο Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@~ %2$lu επαφές / %3$lu ενημερώσεις προφίλ"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d ψήφοι θα δοθούν καθώς έχετε αποθηκεύσει πολλαπλά κλειδιά ψηφοφορίας στο πορτοφόλι"; /* Voting */ "%ld duplicates" = "%ld διπλότυπα"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Αποδοχή"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Αποδοχή των Όρων Χρήσης"; /* CrowdNode */ "Accepting terms of use…" = "Αποδοχή των όρων χρήσης..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Δέχεται απευθείας DASH"; - /* CrowdNode */ "Account Recovery" = "Ανάκτηση λογαριασμού"; @@ -152,7 +155,7 @@ "Advanced" = "Προηγμένα"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Το προχωρημένο επίπεδο απορρήτου απαιτεί αξιόπιστη σύνδεση στο διαδίκτυο"; /* No comment provided by engineer. */ "Advanced Security" = "Ενισχυμένη Ασφάλεια"; @@ -167,7 +170,7 @@ "Agree" = "Συμφωνώ"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "μπροστά"; /* No comment provided by engineer. */ "All" = "Όλα"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Ποσοστό Απεσταλμένων"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Μια διαισθητική και οικεία εμπειρία σε όλες τις συσκευές σας"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "και"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Η εφαρμογή %@ θέλει να λάβει το Κύριο Δημόσιο κλειδί σας. Αυτό μπορεί να χρησιμοποιηθεί για να παρακολουθείτε το πορτοφόλι σας, αυτό δεν μπορεί να χρησιμοποιηθεί για να μετακινήσετε τα Dash σας."; +/* No comment provided by engineer. */ +"Apply" = "Εφαρμογή"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Σίγουρα θέλετε να ακυρώσετε αυτή την παραγγελία;"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Καθώς οι περισσότεροι δεν έχουν ακριβώς 1000 Dash στη διάθεσή τους, η Crowdnode έχει δημιουργήσει μια υπηρεσία όπου, συγκεντρώνοντας καταθέσεις από τα μέλη, θα μπορούν να απολαύσουν τα οφέλη της κατοχής ενός Masternode."; +/* DashSpend */ +"at" = "σε"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Η αναζήτηση ΑΤΜ λειτουργεί καλύτερα με ενεργοποιημένες τις Υπηρεσίες τοποθεσίας."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Η ταυτοποίηση δεν είναι διαθέσιμη"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Εξουσιοδοτημένο"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "πίσω "; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Ενδιάμεσα σε %1$ld και %2$ld χαρακτήρες"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Μεταξύ 3 και 23 χαρακτήρων"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Μεταξύ Dash Wallet και Coinbase."; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Μεταξύ του Dash Wallet και του λογαριασμού σας στην Coinbase."; /* Voting */ -"Block" = "Block"; +"Block" = "Μπλόκ"; /* No comment provided by engineer. */ "block #%d of %d" = "μπλόκ #%1$d από %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Αγοράστε μια δωροκάρτα"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Αγοράστε μια δωροκάρτα με Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Αγοράστε και μετατρέψτε τα Dash σε άλλο κρυπτονόμισμα"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Αγοράστε Credits"; /* No comment provided by engineer. */ "Buy Dash" = "Αγορά Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Αγοράστε Dash - Δεν απαιτείται λογαριασμός"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Αγοράστε δωροκάρτες με το Dash σας"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Η ακύρωση αυτής της συναλλαγής δεν ακυρώνει την εντολή ανταλλαγής. Θα λάβετε DASH στο λογαριασμό σας Coinbase σύντομα."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN κάρτας"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Αλλαγή"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Αλλαγή σε Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Έλεγχος τρέχοντος υπολοίπου"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Ελέγξτε ρυθμίσεις ημερομηνίας και ώρας"; /* No comment provided by engineer. */ "Check your connection" = "Ελέγξτε την σύνδεση σας"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Επιλέξτε "; @@ -456,16 +483,13 @@ "CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; /* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; - -/* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin Δημιουργία ονομαστικών μονάδων"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Ανάμειξη CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Προμήθεια ανάμειξης CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Επιβεβαίωση"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Επιβεβαιώστε (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Επιβεβαίωση PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Επικοινωνία με την υποστήριξη της Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Επικοινωνήστε με την CTX υποστήριξη"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Εκκρεμεί Αίτημα Επαφής"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Επαφές"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Συνέχεια"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Συνέχεια Ούτως ή άλλως"; /* Coinbase Entry Point */ "Convert Crypto" = "Μετατροπή Κρυπτονομισμάτων"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Δημιουργία λογαριασμού"; +/* Create DashSpend account */ +"Create account" = "Δημιουργία λογαριασμού"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Δημιουργήστε έναν online λογαριασμό στο CrowdNode"; /* No comment provided by engineer. */ "Create invitation" = "Δημιουργία πρόσκλησης"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Δημιουργία online λογαριασμού"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Δημιουργήστε το όνομα χρήστη σας"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Δημιουργήστε το Όνομα Χρήστη σας, βρείτε φίλους και συγγενείς με τα ονόματα χρήστη τους και προσθέστε τους στις επαφές σας."; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Όρια ανάληψης στην CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "Λογαριασμός · CrowdNode"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ DashWallet"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Διεύθυνση Dash που έχει οριστεί για το λογαριασμό σας στο CrowdNode στο πορτοφόλι Dash σε αυτή τη συσκευή"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Υπόλοιπο Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Υπόλοιπο Dash στην Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Όνομα Χρήστη Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Πορτοφόλι"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet σε αυτή τη συσκευή"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Προεπιλεγμένο νόμισμα, συντομεύσεις, σχετικά με..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Προεπιλεγμένη ρύθμιση φίλτρου"; /* Location Service Status */ "Denied" = "Απορρίφθηκε"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Αποσυνδεδεμένο"; +/* DashSpend confirmation */ +"Discount" = "Έκπτωση"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Ματαίωση"; /* No comment provided by engineer. */ "Display Name" = "Όνομα προβολής"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Κάθε πρόσκληση θα χρηματοδοτείται με αυτό το ποσό, ώστε ο παραλήπτης να μπορεί να δημιουργήσει γρήγορα το όνομα χρήστη του στο δίκτυο Dash."; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Νωρίτερα"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Εισάγετε την φράσης ανάκτησης"; +/* Enter verification code */ +"Enter verification code" = "Πληκτρολογήστε τον κωδικό επαλήθευσης"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Εισάγετε τον 2FA κωδικό παρακάτω"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Σφάλμα"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Σφάλμα ενημέρωσης του προφίλ σας"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Σφάλμα ·"; /* No comment provided by engineer. */ "Exit" = "Έξοδος"; @@ -842,7 +881,7 @@ "Export all transactions" = "Εξαγωγή όλων των συναλλαγών"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Εξαγωγή CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Εκτεταμένα Δημόσια Κλειδιά"; @@ -850,6 +889,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" = "Αποτυχία εκκίνησης περιόδου λειτουργίας εξουσιοδότησης"; @@ -890,7 +932,7 @@ "Filter" = "Φίλτρο"; /* No comment provided by engineer. */ -"Filter Transactions" = "Φίλτρο Συναλλαγών"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Φιλτραρισμένο από"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Φίλτρα"; -/* No comment provided by engineer. */ -"Find a merchant." = "Βρείτε έναν έμπορο."; - /* No comment provided by engineer. */ "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 %@" = "Η πρώτη κατάθεση πρέπει να είναι μεγαλύτερη από %@ "; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Πρώτη ελάχιστη κατάθεση"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Ποσά σε σταθερές μονάδες"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Βρέθηκαν οι πιθανές λέξεις που λείπουν:\n%@"; +/* DashSpend confirmation */ +"From" = "Από"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "από τον λογαριασμό σας στην Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Πλήρως αναμεμειγμένα"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Κερδίστε ανταμοιβές από καταθέσεις σε Dash Masternodes με μόλις 0,5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Δωροκάρτα"; +/* No comment provided by engineer. */ +"Gift card" = "Δωροκάρτα"; + +/* 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" = "Σύνολο δωροκάρτας"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Τύποι δωροκάρτας"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Μεταβείτε στον ιστότοπο του CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Αυτή είναι μια διεύθυνση Dash που έχει οριστεί για το λογαριασμό σας CrowdNode στο πορτοφόλι Dash σε αυτή τη συσκευή"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Απόκρυψη"; /* adjective, security level */ "High" = "Υψηλά"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Πώς να επιβεβαιώσετε τη διεύθυνση API Dash σας"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Πώς να χρησιμοποιήσετε μια δωροκάρτα"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Κλειδιά Evolution Node ID "; @@ -1058,7 +1124,10 @@ "I Accept" = "Αποδέχομαι"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Δέχομαι"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Αποδέχομαι τους όρους και τις προϋποθέσεις του DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Αποδέχομαι ότι θα χάσω τα νομίσματά μου εάν δεν διαθέτω πλέον τη φράση ανάκτησης"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "Σε εξέλιξη..."; +/* No comment provided by engineer. */ +"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" = "Εισόδημα"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Ανεπαρκή χρήματα"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Ανεπαρκή μικτά κεφάλαια. Περιμένετε να ολοκληρωθεί η ανάμειξη του CoinJoin ή απενεργοποιήστε αυτή τη λειτουργία στις ρυθμίσεις για να ολοκληρώσετε αυτή τη συναλλαγή."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Ανεπαρκές υπόλοιπο πορτοφολιού"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Intermediate"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Το επίπεδο προστασίας προσωπικών δεδομένων ενδιάμεσου επιπέδου απαιτεί αξιόπιστη σύνδεση στο διαδίκτυο."; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Εσωτερική Μεταφορά"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Ανεπαρκές ποσό"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Μη έγκυρη διεύθυνση Dash!"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Μη έγκυρος κωδικός QR"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Πρόσκληση"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Πρόσκληση δημιουργήθηκε επιτυχώς"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Παράβολο πρόσκλησης"; /* No comment provided by engineer. */ "Invitation used by" = "Η πρόσκληση χρησιμοποιείται από"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Η μεταφορά Dash από την Coinbase στο Dash Wallet μπορεί να διαρκέσει έως και 10 λεπτά σε αυτή τη συσκευή."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Συνιστάται να βρίσκεστε σε δίκτυο Wi-Fi για να αποφύγετε πρόσθετα τέλη ανάμειξης."; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Θα ήταν πολύ δύσκολο για προχωρημένους χρήστες με οποιοδήποτε επίπεδο τεχνική εξειδίκευση να προσδιορίσουν το ιστορικό συναλλαγών σας."; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Τελευταία ενημέρωση διακομιστή"; -/* No comment provided by engineer. */ -"Learn More" = "Μάθετε περισσότερα"; - /* Info Screen */ "Learn More..." = "Μάθετε περισσότερα"; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Κλείδωσε"; +/* Log in */ +"Log in" = "Είσοδος"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Συνδεθείτε στο CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Συνδεθείτε στο λογαριασμό σας"; + +/* Log out button */ +"Log Out" = "Αποσύνδεση"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Αποσύνδεση από το Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Είσοδος μέσω Face ID"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Κάντε μια ανάρτηση με το παραπάνω κείμενο σε ένα γνωστό μέσο κοινωνικής δικτύωσης ή σε μια πλατφόρμα ανταλλαγής μηνυμάτων για να επαληθεύσετε ότι είστε ο αρχικός κάτοχος του ζητούμενου ονόματος χρήστη και επικολλήστε τον παρακάτω σύνδεσμο"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Διαχείριση άδειας GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Μέγιστο"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Μέγιστο 75 χαρακτήρες"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Η εμπορική αναζήτηση λειτουργεί καλύτερα με ενεργοποιημένες τις Υπηρεσίες τοποθεσίας."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Υπόλοιπο αναμειγμένων: "; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Ανάμιξη"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Η ανάμειξη είναι δυνατή μόνο με ανοιχτή την εφαρμογή"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Ανάμειξη σε παύση"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Ανάμειξη συναλλαγών"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Η μίξη των Dash νομισμάτων σας θα καταστήσει τις συναλλαγές σας πιο ιδιωτικές."; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Ανάμιξη ·"; /* No comment provided by engineer. */ "More" = "Περισσότερα"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Δίκτυο"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Τέλος δικτύου"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Δεν βρέθηκαν αποτελέσματα"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Δεν έχουν απομείνει ψήφοι"; /* No comment provided by engineer. */ "Node IP" = "IP Κόμβου"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "κανενα"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Δεν είναι έγκυρο URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Δεν δέχονται όλα τα καταστήματα το DASH απευθείας, αλλά μπορείτε να αγοράσετε μια δωροκάρτα με το Dash σας."; - /* Fiat amount */ "Not available" = "Μη διαθέσιμο"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Δεν έχει καθοριστεί"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Δεν ξεκίνησε"; /* No comment provided by engineer. */ "Not yet used" = "Δεν έχουν χρησιμοποιηθεί ακόμη"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Παλαιά προς νέα"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Μόλις ο/η %@ αποδεχτεί το αίτημα σας, θα μπορείτε να πληρώσετε απευθείας στο όνομα χρήστη"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Μία ψήφος έμεινε"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Προεπισκόπηση παραγγελίας"; +/* DashSpend */ +"Original purchase" = "Αρχική αγορά"; + /* No comment provided by engineer. */ "Owner Address" = "Διεύθυνση Κατόχου"; /* No comment provided by engineer. */ "Owner Keys" = "Κλειδιά Κατόχου"; +/* DashSpend */ +"Password" = "Κωδικός"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Πληρώστε με ευκολία"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Πληρώστε με το πορτοφόλι DASH."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Πληρωμή"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Πληρωμή..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Μέθοδος πληρωμής"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Τύπος πληρωμής"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Τοποθετήστε το τηλέφωνό σας κοντά στη συσκευή NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Πατήστε στις λέξεις από τη φράση ανάκτησης σας με τη σωστή σειρά"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Παρακαλώ να το γράψετε"; +/* No comment provided by engineer. */ +"Powered by" = "Με την υποστήριξη"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Προεπισκόπηση πρόσκλησης"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Αγορά"; +/* Alert title */ +"Purchase Failed" = "Η αγορά απέτυχε"; + /* No comment provided by engineer. */ "Quick Receive" = "Γρήγορη Λήψη"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Η φράση ανάκτησης πρέπει να έχει 12, 15, 18, 21 ή 24 λέξεις"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Εξαργυρώστε τη δωροκάρτα σας online μέσα σε λίγα δευτερόλεπτα ή σε ταμείο."; - /* Button title, Register (username) */ "Register" = "Εγγραφή"; @@ -1922,6 +2045,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" = "Λεπτομέρειες αιτήματος"; @@ -1929,10 +2055,10 @@ "Request your username" = "Ζητήστε το όνομα χρήστη σας"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Το ζητούμενο όνομα χρήστη έχει μπλοκαριστεί"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Το ζητούμενο όνομα χρήστη έχει δοθεί σε κάποιον άλλο"; /* An action */ "Rescan" = "Επανάληψη της σάρωσης"; @@ -1956,7 +2082,7 @@ "Restricted" = "Περιορισμένο"; /* Usernames */ -"Results" = "Results"; +"Results" = "Αποτελέσματα"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Διατήρηση Ιστορικού Αμοιβαίων Συναλλαγών"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Ανταμοιβή"; -/* No comment provided by engineer. */ -"Rewards" = "Ανταμοιβές"; - /* No comment provided by engineer. */ "Save" = "Αποθήκευση"; +/* DashSpend */ +"Save %.2f%%" = "Aποθήκευση %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Αποθήκευση αλλαγών"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Οι λήψεις οθόνης είναι ορατές σε άλλες εφαρμογές και συσκευές. Δημιουργήστε μια νέα φράση ανάκτησης και κρατήστε την μυστική. "; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Αναζήτηση"; /* No comment provided by engineer. */ "Search for a contact" = "Αναζήτηση επαφής"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Αποτελέσματα αναζήτησης για \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Αναζήτηση για όνομα χρήστη %@ στο Dash Δικτυο"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Επιλέξτε μια υπηρεσία"; +/* DashSpend denomination selection */ +"Select amount" = "επιλεξτε ποσό"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Επιλέξτε blockchain explorer"; /* No comment provided by engineer. */ "Select from Gallery" = "Επιλέξτε από την Συλλογή"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Επιλέξτε το νόμισμα"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Πωλήστε"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Αποστόλη στο"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Θέστε έναν έμπιστο κόμβο"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Προβολή Φράσης Ανάκτησης"; +/* Alert title */ +"Sign in required" = "Απαιτείται είσοδος"; + /* CrowdNode */ "Sign the message" = "Υπογράψτε το μήνυμα"; @@ -2195,7 +2339,7 @@ "Skip" = "Παράλειψη"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Ορισμένα ονόματα χρηστών μπορούν να μπλοκαριστούν"; /* No comment provided by engineer. */ "Something went wrong" = "Κάτι πήγε στραβά"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Ταξινόμηση Επαφών"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Ταξινόμηση κατά απόσταση"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Διακοπή μίξης"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Υποβολή"; /* No comment provided by engineer. */ "Swept!" = "Σαρώθηκε"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Ο Συγχρονισμός Απέτυχε!"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Συγχρονισμός σε εξέλιξη... Τα αποτελέσματα μπορεί να μην είναι πλήρη."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Συγχρονισμός Τώρα"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Φορολογική κατηγορία"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Τα Test Dash δεν έχουν καμία αξία στον πραγματικό κόσμο, αλλά μπορείτε να στείλετε και να λάβετε με άλλους χρήστες του DashPay Alpha."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Τα Test Dash είναι δωρεάν και μπορούν να ληφθούν από αυτό που ονομάζεται 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 σας."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Η εικόνα που επιλέγετε θα μεταφορτωθεί στο Imgur ανώνυμα."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Ο σύνδεσμος που στέλνετε θα είναι ορατός μόνο στους ιδιοκτήτες του δικτύου."; /* Coinbase */ "The minimum amount you can send is %@" = "Το ελάχιστο ποσό που μπορείτε να στείλετε είναι %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Αυτό το επιπλέον βήμα δείχνει ότι πραγματικά προσπαθείτε να κάνετε μια συναλλαγή."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Αυτός ο έμπορος πωλεί δωροκάρτες σε σταθερές τιμές"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Αυτός ο κωδικός PIN θα χρειαστεί να ξεκλειδώσετε την εφαρμογή σας κάθε φορά που την χρησιμοποιείτε."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "στο"; +/* DashSpend confirmation */ +"To" = "Σε"; + /* Coinbase */ "to Dash Wallet on this device" = "στο Dash Wallet σε αυτή τη συσκευή"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Για να αποτρέψετε άλλα άτομα από το να βλέπουν σε ποιον κάνετε πληρωμές, συνιστάται να αναμίξετε το υπόλοιπό σας πριν δημιουργήσετε το όνομα χρήστη σας."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Για να ξεκινήσετε το staking, δημιουργήστε έναν λογαριασμό στο CrowdNode ή συνδεθείτε σε έναν ήδη υπάρχοντα."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "στη διεύθυνση Dash που έχει οριστεί για το λογαριασμό σας CrowdNode στο Dash Wallet σε αυτή τη συσκευή"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Σήμερα"; /* No comment provided by engineer. */ "Tools" = "Εργαλεία"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Συμπληρώστε τα credits σας για να συνεχίσετε να κάνετε αλλαγές στο προφίλ σας και να προσθέτετε επαφές."; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Όριο Touch ID "; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Ιστορικό συναλλαγών"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Ενεργοποιήστε τον κωδικό πρόσβασης της συσκευής"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Απενεργοποιημένο"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Ενεργοποιώντας αυτήν τη λειτουργία θα οδηγήσει σε αυξημένη χρήση της μπαταρίας."; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Δεν είναι δυνατή η μεταφόρτωση της εικόνας σας. Προσπαθήστε ξανά."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Ξεμπλοκάρισμα"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Διαθέσιμο όνομα χρήστη"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Το όνομα χρήστη είναι διαθέσιμο"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Προβολή Φράσης Ανάκτησης"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Ψηφίστε για Όλους"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Η ψηφοφορία απαιτείται μόνο σε ορισμένες περιπτώσεις"; /* No comment provided by engineer. */ "Voting Keys" = "Κλειδιά ψήφου"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Δεν μπορέσαμε να κάνουμε ανάληψη από το λογαριασμό σας στο CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Έχουμε 2 τύπους εμπόρων"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Εντοπίσαμε ότι το Dash Wallet κατέρρευσε κατά τη διάρκεια της μεταφοράς. Η επανασάρωση του blockchain θα λύσει αυτό το ζήτημα ή μπορείτε να προσπαθήσετε ξανά. Η επανασάρωση θα πρέπει κατά προτίμηση να εκτελεστει σε wifi και θα διαρκέσει έως και μισή ώρα. Τα χρηματά σας θα είναι διαθέσιμα μόλις ολοκληρωθεί η διαδικασία συγχρονισμού."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Αναβαθμίσαμε"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Όταν επιβεβαιωθεί η συναλλαγή, το άλλο πορτοφόλι θα είναι άχρηστο και δεν θα πρέπει να επαναχρησιμοποιηθεί για λόγους ασφαλείας."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Όταν κλείσετε την εφαρμογή ή κλειδώσετε την οθόνη, η διαδικασία ανάμειξης σταματά. Θα συνεχιστεί όταν ανοίξετε ξανά την εφαρμογή."; /* No comment provided by engineer. */ "Where to Spend" = "Πού να ξοδέψετε"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Θέλετε να αποδεχθείτε την πρόσκληση;"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Θα θέλατε να κάνετε μια κατάθεση για την πληρωμή της αγοράς σας χρησιμοποιώντας έναν συνδεδεμένο τραπεζικό λογαριασμό;"; @@ -2774,7 +2945,7 @@ "Yes" = "Ναι"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Εχθές"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Αποδεχθήκατε το αίτημα επαφής από %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Πρόκειται να σκανάρετε αυτό το πορτοφόλι από αυτήν τη συσκευή. Τα χρήματα που σχετίζονται με αυτό το πορτοφόλι μπορούν να ανακτηθούν μόνο αν έχετε την φράση ανάκτησης."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Μπορείτε πάντα να διαγράψετε την ανεβασμένη εικόνα, εφόσον έχετε πρόσβαση σε αυτό το πορτοφόλι."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Μπορείτε να αλλάξετε τον τρόπο και τον χρόνο καταβολής των κερδών της ανταμοιβής σας."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Μπορείτε να συνεχίσετε να χρησιμοποιείτε το DashPay για πληρωμές, αλλά δεν μπορείτε να ενημερώσετε το προφίλ σας ή να προσθέσετε περισσότερες επαφές μέχρι να γεμίσετε το credit υπόλοιπο σας."; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Μπορείτε να εισάγετε το κλειδί σας σε οποιαδήποτε από τις ακόλουθες μορφές: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Μπορείτε να δείτε λεπτομερείς πληροφορίες σχετικά με τις καταθέσεις, τις αναλήψεις και τα κέρδη ανταμοιβής σας."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Δεν μπορείτε να διεκδικήσετε αυτή την πρόσκληση αφού έχετε ήδη ένα όνομα χρήστη Dash."; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Δεν έχετε επαφές αυτή τη στιγμή"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Δεν έχετε αρκετά χρήματα για να ολοκληρώσετε αυτή την συναλλαγή"; + /* Coinbase */ "You don’t have enough balance" = "Δεν έχετε αρκετό υπόλοιπο"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Πρέπει να περιμένετε 5 λεπτά πριν ξεκινήσετε άλλη ανάληψη."; /* CrowdNode */ "You only need %@ to join the pool." = "Χρειάζεστε μόνο %@ για να ενταχθείτε στο pool."; +/* DashSpend confirmation */ +"You pay" = "Πληρώνετε"; + /* Coinbase */ "You receive" = "Θα λάβετε"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Θα λαμβάνετε αυτόματα αποσπασματικές πληρωμές και θα επανεπενδύονται εξ ορισμού, ωστόσο, είναι επίσης εύκολο να ρυθμίσετε αυτόματες αναλήψεις για να λαμβάνετε επαναλαμβανόμενες πληρωμές."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Το υπόλοιπο των credits σας έχει εξαντληθεί"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Το υπόλοιπο των credits σας είναι χαμηλό"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Ο λογαριασμός σας στο CrowdNode δημιουργείται..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Ο λογαριασμός σας στο CrowdNode έχει ρυθμιστεί και είναι έτοιμος για χρήση!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Ο λογαριασμός σας στο CrowdNode δημιουργήθηκε χρησιμοποιώντας αυτές τις συναλλαγές."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Η διεύθυνση του CrowdNode σας έχει επιβεβαιωθεί."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Η κατάθεσή σας στο CrowdNode ελήφθη."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Η ώρα της συσκευής σας είναι%1$@ με %2$d δεύτερα. Δεν μπορείτε να χρησιμοποιήσετε το CoinJoin λόγω αυτής της διαφοράς.\n\nΟι ρυθμίσεις ώρας στη συσκευή σας πρέπει να αλλάξουν σε \"Αυτόματη ρύθμιση ώρας\" για να χρησιμοποιήσετε το CoinJoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Ο χρόνος της συσκευής σας είναι λάθος κατά %d λεπτά. Ενδεχομένως να μην μπορείτε να στείλετε ή να λάβετε Dash εξαιτίας αυτού του προβλήματος.\n\nΠρέπει να ελέγξετε και αν χρειάζεται να διορθώσετε στις ρυθμίσεις την ημερομηνία, την ώρα και την ζώνη ώρας."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Ο χρόνος της συσκευής σας απέχει περισσότερο από 5 δευτερόλεπτα. Δεν μπορείτε να χρησιμοποιήσετε το CoinJoin λόγω αυτής της διαφοράς.\n\nΟι ρυθμίσεις ώρας στη συσκευή σας πρέπει να αλλάξουν σε \"Αυτόματη ρύθμιση ώρας\" πριν χρησιμοποιήσετε το CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Το email σας δεν αποθηκεύεται στο πορτοφόλι DashPay ούτε σε κανέναν διακομιστή. Χρησιμοποιείται μία φορά για να λάβετε τα στοιχεία του λογαριασμού σας Gravatar και στη συνέχεια απορρίπτεται."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Το email σας χρησιμοποιείται μόνο για την αποστολή ενός κωδικού πρόσβασης μιας χρήσης."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Η πρόσκλησή σας από %@ έχει ήδη διεκδικηθεί"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Το αίτημά σας ακυρώθηκε"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Η συναλλαγή σας απεστάλη και το ποσό θα πρέπει να εμφανιστεί στο πορτοφόλι σας σε λίγα λεπτά."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Το όνομα χρήστη %@ δημιουργήθηκε με επιτυχία στο Dash Δίκτυο"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/en.lproj/Localizable.strings b/DashWallet/en.lproj/Localizable.strings index e37041b0d..0cba67f80 100644 --- a/DashWallet/en.lproj/Localizable.strings +++ b/DashWallet/en.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Save"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/eo.lproj/Localizable.strings b/DashWallet/eo.lproj/Localizable.strings index 350a16ad4..a3562dcdf 100644 --- a/DashWallet/eo.lproj/Localizable.strings +++ b/DashWallet/eo.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Eraro"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "Jes"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Savi"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/es.lproj/Localizable.strings b/DashWallet/es.lproj/Localizable.strings index 6a60084d9..b8b97f3ed 100644 --- a/DashWallet/es.lproj/Localizable.strings +++ b/DashWallet/es.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ no está permitido a acceder al Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contactos / %3$lu actualizaciones de perfil"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d Los votos se emitirán ya que tienes múltiples llaves de votación almacenadas en la billetera."; /* Voting */ "%ld duplicates" = "%ld duplicados"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Aceptar"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Aceptar los términos de uso"; /* CrowdNode */ "Accepting terms of use…" = "Aceptando los términos de uso…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Acepta DASH directamente"; - /* CrowdNode */ "Account Recovery" = "Recuperación de cuenta"; @@ -152,7 +155,7 @@ "Advanced" = "Avanzado"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "El nivel de privacidad avanzado requiere una conexión a Internet confiable"; /* No comment provided by engineer. */ "Advanced Security" = "Seguridad Avanzada"; @@ -167,7 +170,7 @@ "Agree" = "Aceptar"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "adelante"; /* No comment provided by engineer. */ "All" = "Todos"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Monto Enviado"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Una experiencia intuitiva y familiar a través de todos tus dispositivos"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "y"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "La aplicación %@ desea recibir su Llave Maestra Pública. Esto puede ser usado para seguir el rastro de su cartera, no puede ser utilizado para mover su Dash."; +/* No comment provided by engineer. */ +"Apply" = "Aplicar"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "¿Estás seguro de que deseas cancelar este pedido?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Como la mayoría de las personas no tienen exactamente 1000 Dash a mano, CrowdNode ha creado un servicio donde, al agrupar los depósitos de los miembros, pueden lograr los beneficios de poseer un Masternode."; +/* DashSpend */ +"at" = "en"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "La búsqueda de cajeros automáticos funciona mejor con los servicios de ubicación activados."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Autenticación no disponible"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Autorizado"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "detrás"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Entre %1$ld y %2$ld caracteres"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Entre 3 y 23 caracteres"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Entre la billetera de Dash y Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Entre la billetera de Dash y tu cuenta de Coinbase."; /* Voting */ -"Block" = "Block"; +"Block" = "Bloque"; /* No comment provided by engineer. */ "block #%d of %d" = "bloque #%1$d de %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Comprar una Tarjeta de regalo"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Compra un tarjeta de regalo con tus Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Compra y convierte Dash con otra criptomoneda"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Comprar créditos"; /* No comment provided by engineer. */ "Buy Dash" = "Comprar Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Compra Dash. No se necesita una cuenta"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Compra tarjetas de regalo con tus Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "La cancelación de esta transacción no cancela la orden comercial. Recibirás DASH en tu cuenta de Coinbase en breve."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN de tarjeta"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Cambia"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Cambiar a Intermedio"; +/* No comment provided by engineer. */ +"Check current balance" = "Consultar saldo actual"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Comprobar la configuración de fecha y hora"; /* No comment provided by engineer. */ "Check your connection" = "Verifique tu conección"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Escoge tu"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Entradas colaterales de CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin Crea denominaciones"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Mezcla de CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Tarifa de mezcla de CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Confirmar"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirmar (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirmar PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Ponte en contacto con el soporte de Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Contacte al soporte de CTX para mayor información."; + /* No comment provided by engineer. */ "Contact Request Pending" = "Solicitud de contacto pendiente"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Contactos"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continuar"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Continuar de todos modos"; /* Coinbase Entry Point */ "Convert Crypto" = "Convertir Criptomonedas"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Crear una cuenta"; +/* Create DashSpend account */ +"Create account" = "Crear cuenta"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Crear una cuenta de CrowdNode en línea"; /* No comment provided by engineer. */ "Create invitation" = "Crear invitación"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Crear cuenta online"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Crea tu nombre de usuario"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Crea tu nombre de usuario, encuentra amigos y familiares con sus nombres de usuario y agrégalos a tus contactos"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Límites de retiro de CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · Cuenta"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ Billetera de Dash"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dirección de Dash designada para tu cuenta de CrowdNode en la billetera de Dash en este dispositivo"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Saldo en Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo de Dash en Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Nombre de usuario de Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Billetera de Dash"; + /* Buy Dash */ "Dash Wallet on this device" = "Billetera de Dash en este dispositivo"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Moneda predeterminada, atajos, acerca..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Configuración de filtro predeterminada"; /* Location Service Status */ "Denied" = "Negado"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Desconectado"; +/* DashSpend confirmation */ +"Discount" = "Descuento"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Rechazar"; /* No comment provided by engineer. */ "Display Name" = "Nombre para mostrar"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "por ejemplo, johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Cada invitación se financiará con esta cantidad para que el receptor pueda crear rápidamente su nombre de usuario en la red de Dash."; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Antes"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Ingresar Frase de Recuperación"; +/* Enter verification code */ +"Enter verification code" = "Ingresar código de verificación"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Ingresar tu código 2FA debajo"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error al actualizar tu perfil"; @@ -842,7 +881,7 @@ "Export all transactions" = "Exportar todas las transacciones"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Exportar CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Llaves públicas extendidas"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtrar"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filtrar Transacciones"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtrado por"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtros"; -/* No comment provided by engineer. */ -"Find a merchant." = "Encontrar un comercio."; - /* No comment provided by engineer. */ "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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Primer depósito mínimo"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Montos fijos denominados"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Montos flexibles"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Se encontraron posibles palabras faltantes:\n%@"; +/* DashSpend confirmation */ +"From" = "desde"; + /* from CrowdNode */ "from CrowdNode" = "desde CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "desde tu cuenta de Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Completamente mezclado"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Obtén recompensas de depósitos en Masternodes de Dash con tan solo 0.5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Tarjeta de regalo"; +/* No comment provided by engineer. */ +"Gift card" = "Tarjeta de regalo"; + +/* 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" = "Total de la tarjeta de regalo"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Tipos de tarjetas de regalo"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Ir al sitio web de CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Aquí hay una dirección de Dash designada para tu cuenta de CrowdNode en la billetera de Dash en este dispositivo."; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Ocultar"; /* adjective, security level */ "High" = "Alto"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Cómo confirmar tu dirección API de Dash"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Como usar una tarjeta de regalo"; +"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"; @@ -1058,7 +1124,10 @@ "I Accept" = "Yo acepto"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Yo acepto"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Acepto los términos y condiciones de DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Acepto que perderé mis monedas si ya no tengo mi frase de recuperación"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "En proceso..."; +/* No comment provided by engineer. */ +"In store" = "En tienda"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Fondos insuficientes"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Fondos mixtos insuficientes. Espera a que finalice la mezcla de CoinJoin o desactiva esta función en la configuración para completar esta transacción."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Saldo de billetera insuficiente"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Intermedio"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "El nivel de privacidad intermedio requiere una conexión a Internet confiable"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transferencia interna"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Monto inválido"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Dirección inválida de Dash"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Codigo QR invalido"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitación "; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitación creada con éxito"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Tarifa de invitación"; /* No comment provided by engineer. */ "Invitation used by" = "Invitación utilizada por"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Podría tomar hasta 10 minutos transferir Dash de Coinbase a la billetera de Dash en este dispositivo"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Se recomienda estar en una red Wi-Fi para evitar incurrir en cargos de mezcla adicionales."; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Sería muy difícil para usuarios avanzados con cualquier nivel de experiencia técnica determinar tu historial de transacciones."; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "última actualización del servidor"; -/* No comment provided by engineer. */ -"Learn More" = "Aprende más"; - /* Info Screen */ "Learn More..." = "Aprender más..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Asegurado"; +/* Log in */ +"Log in" = "Iniciar sesión"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Iniciar sesión en CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Inicia sesión en tu cuenta"; + +/* Log out button */ +"Log Out" = "Cerrar sesión"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Cerrar sesión desde Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login con Face ID"; @@ -1389,10 +1488,10 @@ "Low to high" = "Bajo a alto"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "Red principal"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Haz una publicación con el texto anterior en una red social o plataforma de mensajería conocida para verificar que eres el propietario original del nombre de usuario solicitado y pega el enlace a continuación."; /* No comment provided by engineer. */ "Manage GPS Permission" = "Administrar permisos de GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Máx"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Máximo 75 caracteres"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "La búsqueda de comerciantes funciona mejor con los servicios de ubicación activados."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Balance mixto"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Mezclando"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "La mezcla solo es posible con la aplicación abierta"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Mezcla en pausa ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Transacciones mixtas"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Mezclar tus monedas Dash hará que tus transacciones sean más privadas"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Mezclando ·"; /* No comment provided by engineer. */ "More" = "Más"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Red de trabajo"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Comisión de red"; @@ -1554,14 +1662,11 @@ "No Results Found" = "No se han encontrado resultados"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "No quedan votos"; /* No comment provided by engineer. */ "Node IP" = "IP del Nodo"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Ninguna"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "No es una URL válida"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "No todas las tiendas aceptan DASH directamente, pero puedes comprar una tarjeta de regalo con tus Dash."; - /* Fiat amount */ "Not available" = "No disponible"; @@ -1587,7 +1689,7 @@ "Not Determined" = "No determinado"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "No iniciado"; /* No comment provided by engineer. */ "Not yet used" = "No utilizada aún"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Viejo a nuevo"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Una vez que %@ aceptes tu solicitud, puedes pagar directamente al nombre de usuario"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Queda un voto"; /* Online */ "Online" = "En línea"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Vista previa del pedido"; +/* DashSpend */ +"Original purchase" = "Compra original"; + /* No comment provided by engineer. */ "Owner Address" = "Dirección de Propietario"; /* No comment provided by engineer. */ "Owner Keys" = "Llaves del propietario"; +/* DashSpend */ +"Password" = "Contraseña"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Paga con facilidad"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Paga con la billetera de DASH."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Pagando"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Pagando..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Método de pago"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipo de pago"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Coloca tu teléfono cerca del dispositivo NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Por favor escribe las palabras de tu frase de recuperación en el orden correcto"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Anótala, por favor"; +/* No comment provided by engineer. */ +"Powered by" = "Energizado por"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Invitación de vista previa"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Compra"; +/* Alert title */ +"Purchase Failed" = "Compra fallida"; + /* No comment provided by engineer. */ "Quick Receive" = "Recibir Rápidamente "; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "La frase de recuperación debe tener 12, 15, 18, 21 o 24 palabras"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Canjea tu tarjeta de regalo en línea en segundos o en el cajero."; - /* Button title, Register (username) */ "Register" = "Registro"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Solicita tu nombre de usuario"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "El nombre de usuario solicitado ha sido bloqueado"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "El nombre de usuario solicitado ha sido proporcionado a otra persona"; /* An action */ "Rescan" = "Escanear nuevamente"; @@ -1956,7 +2082,7 @@ "Restricted" = "Restringido"; /* Usernames */ -"Results" = "Results"; +"Results" = "Resultados"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Conservar el historial de transacciones mutuas"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Recompensa"; -/* No comment provided by engineer. */ -"Rewards" = "Recompensas"; - /* No comment provided by engineer. */ "Save" = "Guardar"; +/* DashSpend */ +"Save %.2f%%" = "Salvar %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Guardar cambios"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Las capturas de pantalla son visibles para otras aplicaciones y dispositivos. Genere una nueva frase de recuperación y téngala en secreto."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Buscar"; /* No comment provided by engineer. */ "Search for a contact" = "Buscar un contacto"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Resultados de búsqueda de \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Buscando nombre de usuaro %@en la red Dash "; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Selecciona un servicio"; +/* DashSpend denomination selection */ +"Select amount" = "Selecciona el monto"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Seleccionar explorador de bloques"; /* No comment provided by engineer. */ "Select from Gallery" = "Seleccionar de la galería"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Selecciona la moneda"; +/* No comment provided by engineer. */ +"Self-checkout" = "Autoverificación"; + /* Sell */ "Sell" = "Vender"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Enviado para"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Configura un nodo de confianza"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostrar Frase de Recuperación"; +/* Alert title */ +"Sign in required" = "Es necesario iniciar sesión"; + /* CrowdNode */ "Sign the message" = "Firmar el mensaje"; @@ -2195,7 +2339,7 @@ "Skip" = "Salta"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Algunos nombres de usuario pueden ser bloqueados"; /* No comment provided by engineer. */ "Something went wrong" = "Algo salió mal"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Ordenar contactos"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Ordenado por distancia"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Dejar de mezclar"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Entregar"; /* No comment provided by engineer. */ "Swept!" = "¡Barrido!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Falla en la Sincronizacío"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sincronización en curso… Es posible que los resultados no estén completos."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sincronizar Ahora"; @@ -2279,13 +2429,19 @@ "Tax Category" = "Categoría de impuestos"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Los Dash de prueba no tienen ningún valor en el mundo real, pero puedes enviarlos y recibirlos con otros usuarios de DashPay Alpha."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash es gratuito y se puede obtener mediante lo que se denomina un 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."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "Red de prueba"; /* No comment provided by engineer. */ "The chain is syncing…" = "La cadena esta sincronizando..."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "La imagen que selecciones se cargará en Imgur de forma anónima."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "El enlace que envíes será visible solo para los propietarios de la red."; /* Coinbase */ "The minimum amount you can send is %@" = "El monto mínimo que puedes enviar es %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Este paso adicional muestra que realmente eres tú quien intenta realizar una transacción."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Este comerciante vende tarjetas de regalo a precios fijos"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Este PIN será requerido para desbloquear tu app cada vez que la utilices."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "a"; +/* DashSpend confirmation */ +"To" = "para"; + /* Coinbase */ "to Dash Wallet on this device" = "a la billetera de Dash en este dispositivo"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Para evitar que otras personas vean a quién realiza pagos, se recomienda mezclar tu saldo antes de crear tu nombre de usuario."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Para comenzar a hacer staking, crea una cuenta en CrowdNode o conéctate a una existente."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "a la dirección de Dash designada para tu cuenta de CrowdNode en la billetera de Dash en este dispositivo"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Hoy"; /* No comment provided by engineer. */ "Tools" = "Herramientas"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Recarga tus créditos para seguir realizando cambios en tu perfil y añadiendo contactos"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Límite de Touch ID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Historial de transacciones"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Habilita la clave de acceso de tu dispositivo"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Apagado"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Activar esta función resultará en un mayor uso de la batería"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "No se puede cargar tu imagen. Inténtalo de nuevo."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Desbloquear"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Nombre de usuario disponible"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "El nombre de usuario está disponible"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "El voto sólo es necesario en algunos casos"; /* No comment provided by engineer. */ "Voting Keys" = "Llaves para votar"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "No pudimos retirar dinero de tu cuenta de CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Tenemos 2 tipos de comerciantes"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Hemos detectado que Dash Wallet se bloqueó durante la migración. Volver a escanear la cadena de bloques resolverá este problema o puedes intentarlo de nuevo. La reexploración debe realizarse preferiblemente en wifi y demorará hasta media hora. Tus fondos estarán disponibles una vez que se complete el proceso de sincronización."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Actualizamos"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Al confirmarse la transacción, la billetera de papel quedará inutilizada y no deberá ser reutilizada por razones de seguridad."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Cuando cierras la aplicación o bloqueas la pantalla, el proceso de mezcla se detiene y se reanuda cuando vuelves a abrir la aplicación."; /* No comment provided by engineer. */ "Where to Spend" = "Donde gastar?"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "¿Te gustaría aceptar la invitación?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "¿Te gustaría realizar un depósito para tu compra utilizando una cuenta bancaria vinculada?"; @@ -2774,7 +2945,7 @@ "Yes" = "Si"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Ayer"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Aceptaste la solicitud de contacto de %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Estás a punto de limpiar esta billetera de este dispositivo. Fondos asociados a esta billetera solo podrán ser recuperados si tienes esta frase de recuperación."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Siempre puedes eliminar la imagen cargada, siempre que tengas acceso a esta billetera."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Puedes cambiar cómo / cuándo se te pagan las ganancias de tus recompensas."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Puedes seguir usando DashPay para realizar pagos, pero no podrás actualizar tu perfil ni agregar más contactos hasta que recargues tu saldo de crédito."; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Puedes ingresar tu clave en cualquiera de los siguientes formatos: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Puedes ver información detallada sobre tus depósitos, retiros y ganancias de recompensas."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "No puedes reclamar esta invitación porque ya tienes un nombre de usuario de Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "No tienes ningún contacto en este momento"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "No tienes fondos suficientes para completar esta transacción."; + /* Coinbase */ "You don’t have enough balance" = "No tienes saldo suficiente"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Debes esperar 5 minutos antes de iniciar otro retiro."; /* CrowdNode */ "You only need %@ to join the pool." = "Solo necesitas %@ para unirte al pool."; +/* DashSpend confirmation */ +"You pay" = "Tu pagas"; + /* Coinbase */ "You receive" = "Tu recibes"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Recibirás pagos fraccionados automáticamente y se reinvertirán de manera predeterminada; sin embargo, también es fácil configurar retiros automáticos para recibir pagos recurrentes."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Tu saldo de crédito se ha agotado por completo"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Tu saldo de crédito es bajo"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Tu cuenta de CrowdNode está creando..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "¡Tu cuenta de CrowdNode está configurada y lista para usar!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Tu cuenta de CrowdNode se creó utilizando estas transacciones."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Tu dirección de CrowdNode ha sido confirmada."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Tu depósito en CrowdNode ha sido recibido."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "La hora de tu dispositivo es %1$@ por %2$d segundos. No puedes usar CoinJoin debido a esta diferencia.\n\nLa configuración de hora en tu dispositivo debe cambiarse a “Establecer hora automáticamente” para poder usar CoinJoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "La hora de tu dispositivo está desfasada %d minutos. Probablemente no puedas enviar ni recibir Dash debido a este problema.\n\nDebes comprobar y, si es necesario, corregir la configuración de fecha, hora y zona horaria."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "La hora de tu dispositivo tiene un desfase de más de 5 segundos. No puedes usar CoinJoin debido a esta diferencia.\n\nLa configuración de hora en tu dispositivo debe cambiarse a “Establecer hora automáticamente” antes de usar CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Tu correo electrónico no se almacena en la billetera de DashPay ni en ningún servidor. Se usa una vez para obtener los detalles de tu cuenta de Gravatar y luego se descarta."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Tu correo electrónico sólo se utiliza para enviar una contraseña de un solo uso."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Tu invitación desde %@ ya ha sido reclamada"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Tu solicitud fue cancelada"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Tu transacción se envió y la cantidad debería aparecer en tu billetera en unos minutos."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Tu nombre de usuario %@ se ha creado con éxito en la red Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/et.lproj/Localizable.strings b/DashWallet/et.lproj/Localizable.strings index 7bac90ffc..591c8c9c1 100644 --- a/DashWallet/et.lproj/Localizable.strings +++ b/DashWallet/et.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Rakendus %@ soovib saada sinu Master Public Key'd. Kasuta Master Public Key'd ja jälgi oma rahakoti, kuid Dashi kandeid sellega teha ei saa."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Kinnita"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Nõustun, et kui kaotan rahakoti taastamise sala-lause, siis jään oma coinidest ilma"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Save"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/fa.lproj/Localizable.strings b/DashWallet/fa.lproj/Localizable.strings index 101e0ff50..83514c3c8 100644 --- a/DashWallet/fa.lproj/Localizable.strings +++ b/DashWallet/fa.lproj/Localizable.strings @@ -26,7 +26,7 @@ "%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%dرای در نظر گرفته می شود چون چند کلید رای‌دهی در کیف پول‌تان دارید"; /* Voting */ "%ld duplicates" = "%ld duplicates"; @@ -38,7 +38,7 @@ "%ld/%ld Characters" = "%1$ld/%2$ld Characters"; /* No comment provided by engineer. */ -"(1/3) Processing Payment" = "(1/3) Processing Payment"; +"(1/3) Processing Payment" = "۱/۳ پردازش پرداخت"; /* No comment provided by engineer. */ "(1/3) Unable to process payment" = "(1/3) Unable to process payment"; @@ -53,7 +53,7 @@ "(3/3) Can't register username" = "(3/3) Can't register username"; /* No comment provided by engineer. */ -"(3/3) Registering Username" = "(3/3) Registering Username"; +"(3/3) Registering Username" = "(۳/۳) درخواست نام کاربری"; /* No comment provided by engineer. */ "1 hour" = "۱ ساعت"; @@ -110,10 +110,16 @@ "About" = "اطلاعات بیشتر"; /* No comment provided by engineer. */ -"About me" = "About me"; +"About me" = "درباره م"; /* No comment provided by engineer. */ -"Accept" = "Accept"; +"Accept" = "قبول"; + +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; @@ -121,14 +127,11 @@ /* CrowdNode */ "Accepting terms of use…" = "پذیرش شرایط استفاده..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "بازیابی حساب"; /* No comment provided by engineer. */ -"Activity" = "Activity"; +"Activity" = "فعالیت"; /* No comment provided by engineer. */ "Add" = "اضافه کردن"; @@ -137,37 +140,37 @@ "Add %@ as your contact to Pay Directly to Username and Retain Mutual Transaction History" = "Add %@ as your contact to Pay Directly to Username and Retain Mutual Transaction History"; /* No comment provided by engineer. */ -"Add a New Contact" = "Add a New Contact"; +"Add a New Contact" = "یک تماس جدید اضافه کنید"; /* No comment provided by engineer. */ -"Add your Friends & Family" = "Add your Friends & Family"; +"Add your Friends & Family" = "اضافه کردن دوستان و اعضای خانواده"; /* Usernames */ -"Add your friends & family" = "Add your friends & family"; +"Add your friends & family" = "دوستان و اعضای خانواده‌تان را اضافه کنید"; /* No comment provided by engineer. */ "Address" = "نشانی"; /* CoinJoin */ -"Advanced" = "Advanced"; +"Advanced" = "پیشرفته"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "سطح بالای مخرمانگی نیازمند اتصال اینترنتی مطمئن است."; /* No comment provided by engineer. */ "Advanced Security" = "گزینه‌های پیشرفته امنیتی"; /* Coinbase */ -"Advanced users who have a very high level of technical expertise can determine your transaction history" = "Advanced users who have a very high level of technical expertise can determine your transaction history"; +"Advanced users who have a very high level of technical expertise can determine your transaction history" = "کاربران پیشرفته که سطح بالایی از تخصص فنی را دارند می‌توانند سابقه تراکنش را تعیین کنند."; /* Usernames */ -"After the voting ends we will notify you about its results" = "After the voting ends we will notify you about its results"; +"After the voting ends we will notify you about its results" = "پس از پایان رای‌گیری، نتایج به اطلاع‌تان می‌رسد"; /* No comment provided by engineer. */ -"Agree" = "Agree"; +"Agree" = "موافقم"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "جلو"; /* No comment provided by engineer. */ "All" = "همه"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "مبلغ ارسالی"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "تجربه‌ای ساده و آشنا روی همه دستگاه‌ها"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "اعمال"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -236,13 +245,13 @@ "Are you sure you want to cancel this transaction?" = "Are you sure you want to cancel this transaction?"; /* CoinJoin */ -"Are you sure you want to change the privacy level?" = "Are you sure you want to change the privacy level?"; +"Are you sure you want to change the privacy level?" = "آیا مطمئن هستید که می‌خواهید سطح محرمانگی را تغییر دهید؟"; /* CoinJoin */ -"Are you sure you want to stop mixing?" = "Are you sure you want to stop mixing?"; +"Are you sure you want to stop mixing?" = "آیا مطمئن هستید که می‌خواهید ترکیب را متوقف کنید؟"; /* No comment provided by engineer. */ -"Are you sure?" = "Are you sure?"; +"Are you sure?" = "آیا مطمئن هستید؟"; /* Voting */ "As a masternode owner you can vote to approve requested usernames before users will be able to create it.\nYou can block the creation of the usernames that you feel inappropriate." = "As a masternode owner you can vote to approve requested usernames before users will be able to create it.\nYou can block the creation of the usernames that you feel inappropriate."; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "در"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,20 +316,20 @@ /* 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" = "از طریق کراودنود یکی از مسترنودهای دش بشوید."; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "عقب"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "بین ۳ تا ۲۳ کاراکتر"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "بین دش والت و کوینبیس"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "بین داش والت و حساب کوین‌بیس شما"; /* Voting */ -"Block" = "Block"; +"Block" = "بلاک"; /* No comment provided by engineer. */ "block #%d of %d" = "block #%1$d of %2$d"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "خرید کارت هدیه"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "با دش یک کارت هدیه بخرید. "; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "خرید و مبادله دش با سایر رمزارزها"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "دش بخرید - بدون نیاز به حساب"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "خرید کارت هدیه با دش"; @@ -387,14 +402,20 @@ "Cancel" = "لغو"; /* Voting */ -"Cancel Approval" = "Cancel Approval"; +"Cancel Approval" = "لغو تائید"; /* No comment provided by engineer. */ -"Cancel Request" = "Cancel Request"; +"Cancel Request" = "لغو درخواست"; /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "رمز کارت"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,20 +431,26 @@ /* CoinJoin */ "Change to Intermediate" = "Change to Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "مشاهده موجودی فعلی"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; /* No comment provided by engineer. */ "Check your connection" = "لطفا اتصال‌ به اینترنت را بررسی کنید"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; /* No comment provided by engineer. */ -"Choose Your Username" = "Choose Your Username"; +"Choose Your Username" = "نام کاربری‌تان را انتخاب کنید"; /* No comment provided by engineer. */ -"Claimed" = "Claimed"; +"Claimed" = "پذیرفته‌شده"; /* No comment provided by engineer. */ "Clear" = "Clear"; @@ -450,22 +477,19 @@ "Coinbase Fee" = "کارمزد کوین‌بیس"; /* CoinJoin */ -"CoinJoin" = "CoinJoin"; - -/* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; +"CoinJoin" = "کوین‌جوین"; /* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "ورودی وثیقه‌ای کوین‌جوین"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "کوین‌جوین واحد پولی ایجاد می‌کند. "; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "ترکیب کوین‌جوین"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "کارمزد ترکیب کوین‌جوین"; /* No comment provided by engineer. */ "Confirm" = "تائید"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "پین کد را تائید کنید"; @@ -508,26 +526,26 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "با پشتیبانی کوین‌بیس تماس بگیرید"; +/* DashSpend */ +"Contact CTX Support" = "تماس با پشتیبانی CTX"; + /* No comment provided by engineer. */ -"Contact Request Pending" = "Contact Request Pending"; +"Contact Request Pending" = "درخواست تماس پاسخی دریافت نکرده است"; /* No comment provided by engineer. */ -"Contact Requests" = "Contact Requests"; +"Contact Requests" = "درخواست ارتباط با مخاطب"; /* No comment provided by engineer. */ "Contact Support" = "تماس با پشتیبانی"; /* No comment provided by engineer. */ -"Contacts" = "Contacts"; - -/* Usernames */ -"Contested" = "Contested"; +"Contacts" = "تماس‌ها"; /* No comment provided by engineer. */ "Continue" = "ادامه"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "در هر صورت، ادامه بده"; /* Coinbase Entry Point */ "Convert Crypto" = "تبدیل رمزارز"; @@ -539,7 +557,7 @@ "Copy" = "کپی"; /* No comment provided by engineer. */ -"Copy Invitation Link" = "Copy Invitation Link"; +"Copy Invitation Link" = "کپی لینک دعوتنامه"; /* No comment provided by engineer. */ "Copy Logs" = "Copy Logs"; @@ -569,35 +587,44 @@ "Couldn't transmit payment to Dash network" = "Couldn't transmit payment to Dash network"; /* No comment provided by engineer. */ -"Create a new Invitation" = "Create a new Invitation"; +"Create a new Invitation" = "دعوتنامه جدید ایجاد کنید"; /* No comment provided by engineer. */ -"Create a new invitation" = "Create a new invitation"; +"Create a new invitation" = "ایجاد یک دعوتنامه جدید"; /* No comment provided by engineer. */ "Create a New Wallet" = "ایجاد یک کیف پول جدید"; /* Usernames */ -"Create a username" = "Create a username"; +"Create a username" = "ایجاد یک حساب کاربری"; /* CrowdNode */ "Create Account" = "ایجاد حساب"; +/* Create DashSpend account */ +"Create account" = "ایجاد حساب"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "یک حساب آنلاین کراودنود ایجاد کنید"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "ایجاد حساب آنلاین"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "نام کاربری‌تان را ایجاد کنید"; /* No comment provided by engineer. */ -"Create your Username, find friends & family with their usernames and add them to your contacts" = "Create your Username, find friends & family with their usernames and add them to your contacts"; +"Create your Username, find friends & family with their usernames and add them to your contacts" = "نام کاربری‌تان را ایجاد کنید، دوستان و اعضای خانواده‌تان را با نام کاربری‌شان بیابید و آنها را به مخاطبان‌تان اضافه کنید"; /* Coinbase/Payment Methods */ "Credit Card" = "کارت اعتباری"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "موجودی دش"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "موجودش دش در کوینبیس"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "دش والت"; + /* Buy Dash */ "Dash Wallet on this device" = "دش والت روی این دستگاه"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "واحد پول پیش‌فرض، میان‌برها، درباره..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "تنظیمات پیش‌فرض فیلتر"; /* Location Service Status */ "Denied" = "غیرمجاز"; @@ -727,11 +757,14 @@ Coinbase Entry Point */ "Disconnected" = "عدم اتصال به شبکه"; +/* DashSpend confirmation */ +"Discount" = "تخفیف"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "متوجه شدم!"; /* No comment provided by engineer. */ -"Display Name" = "Display Name"; +"Display Name" = "نمایش نام"; /* Explore Dash: Filters */ "Distance" = "فاصله"; @@ -740,7 +773,7 @@ "Do not take a screenshot" = "اسکرین‌شات نگیرید"; /* Usernames */ -"Do you really want to cancel the username request?" = "Do you really want to cancel the username request?"; +"Do you really want to cancel the username request?" = "آیا مطمئنید که می‌خواهید درخواست نام کاربری را لغو کنید"; /* No comment provided by engineer. */ "Done" = "انجام شد"; @@ -763,23 +796,23 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "برای هر دعوت، مبلغی اختصاص می‌یابد تا دریافت‌کننده بتواند نام کاربری‌اش را در شبکه دش ایجاد کتد."; /* (List of notifications happened) Earlier (some time ago) */ -"Earlier" = "Earlier"; +"Earlier" = "قدیمی‌تر"; /* No comment provided by engineer. */ "Easily stake Dash and earn passive income with a few simple clicks." = "با چند کلیک ساده، به راحتی دش را سپرده‌گذاری کرده و درآمدی جانبی برای خودتان ایجاد کنید. "; /* No comment provided by engineer. */ -"Edit Profile" = "Edit Profile"; +"Edit Profile" = "ویرایش پروفایل"; /* No comment provided by engineer. */ "Edit profile" = "Edit profile"; /* Invitation tag placeholder */ -"eg: Dad" = "eg: Dad"; +"eg: Dad" = "مثلا: بابا"; /* Input username textfield placeholder */ "eg: johndoe" = "eg: johndoe"; @@ -808,18 +841,24 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "شماره تائید را وارد کنید"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "کد 2FA خود را در زیر وارد کنید"; /* No comment provided by engineer. */ -"Enter your Gravatar Email ID" = "Enter your Gravatar Email ID"; +"Enter your Gravatar Email ID" = "شناسه ایمیل گراواتار خود را وارد کنید"; /* Voting */ -"Enter your voting key" = "Enter your voting key"; +"Enter your voting key" = "کلید رای‌گیری‌تان را وارد کنید"; /* No comment provided by engineer. */ "Error" = "خطا"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -875,7 +917,7 @@ "Fees in crypto purchases" = "کارمزد خرید رمزارز"; /* No comment provided by engineer. */ -"Fetching Image" = "Fetching Image"; +"Fetching Image" = "در حال دریافت تصویر"; /* Explore Dash */ "Fetching Info" = "Fetching Info"; @@ -890,7 +932,7 @@ "Filter" = "فیلتر"; /* No comment provided by engineer. */ -"Filter Transactions" = "فیلتر تراکنش‌ها"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -902,22 +944,19 @@ "Filters" = "فیلترها"; /* No comment provided by engineer. */ -"Find a merchant." = "یک فروشنده بیابید. "; +"Find a user on the Dash Network" = "یک کاربر را در شبکه دش بیابید"; /* No comment provided by engineer. */ -"Find a user on the Dash Network" = "Find a user on the Dash Network"; +"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" = "فروشنده‌ای بیابید که دش می‌پذیرد"; /* No comment provided by engineer. */ -"Find merchants that accept Dash, where to buy it and how to earn income with it." = "پدیرندگانی را بیابید که دش قبول می‌کنند، محل خرید و نیز کسب درآمد با دش"; - -/* No comment provided by engineer. */ -"Find merchants who accept Dash as payment." = "یافتن فروشندگانی که دش را می‌پذیرند"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "مبالغ تعیین‌شده ثابت"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "مبالغ منعطف"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "از"; + /* from CrowdNode */ "from CrowdNode" = "از کراودنود"; @@ -986,10 +1034,10 @@ "Get started by setting up your profile picture and other information." = "Get started by setting up your profile picture and other information."; /* No comment provided by engineer. */ -"Get Test Dash" = "Get Test Dash"; +"Get Test Dash" = "دریافت تست دش"; /* No comment provided by engineer. */ -"Get your Username" = "Get your Username"; +"Get your Username" = "انتتخاب نام کاربری"; /* CrowdNode */ "Getting started with CrowdNode" = "آغاز کار با کراودنود"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "کارت هدیه"; + +/* 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" = "جمع کارت هدیه"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "انواع کارت هدیه"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "رفتن به وب‌سایت کراودنود"; @@ -1028,13 +1094,13 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "پنهان کردن"; /* adjective, security level */ "High" = "بالا"; /* Voting */ -"High to low" = "High to low"; +"High to low" = "زیاد به کم"; /* No comment provided by engineer. */ "History" = "سابقه"; @@ -1043,22 +1109,25 @@ "How CrowdNode staking works" = "عملکرد استیکینگ کراونود"; /* No comment provided by engineer. */ -"How do I get Test Dash?" = "How do I get Test Dash?"; +"How do I get Test Dash?" = "چگونه تست دش دریافت کنم؟ "; /* CrowdNode */ "How to confirm your API Dash address" = "چطور نشانی ای‌پی‌آی دش‌تان را تائید کنید"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "چطور از کارت هدیه استفاده کنیم"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "کلیدهای شناسه اولوشن نود"; /* No comment provided by engineer. */ -"I Accept" = "I Accept"; +"I Accept" = "قبول می‌کنم"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "قبول می‌کنم"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "شرایط و مقررات دش‌اسپند را می‌پذیرم. "; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1067,7 +1136,7 @@ "I agree to CrowdNode" = "I agree to CrowdNode"; /* Voting */ -"I have approved" = "I have approved"; +"I have approved" = "تائيد کردک"; /* Voting */ "I have not voted" = "I have not voted"; @@ -1076,13 +1145,13 @@ "I wrote it down" = "عبارت بازیابی را نوشتم"; /* Voting */ -"Identity" = "Identity"; +"Identity" = "هویت"; /* Usernames */ "If enough of the network feels that a username is inappropriate, they can block it" = "If enough of the network feels that a username is inappropriate, they can block it"; /* Usernames */ -"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "If somebody else requests the same username as you, we will let the network decide whom to give this username"; +"If somebody else requests the same username as you, we will let the network decide whom to give this username" = "اگر شخص دیگری همین نام کاربری را درخواست کند، تصمیم‌گیری درباره اینکه این نام کاربری به چه کسی داده شود را به شبکه می‌سپاریم."; /* Geoblock */ "If you choose to grant permissions at a later time and you are not in the UK, you can use Coinbase" = "If you choose to grant permissions at a later time and you are not in the UK, you can use Coinbase"; @@ -1097,16 +1166,16 @@ "If you still would like to wipe it please input: \"%@\"" = "If you still would like to wipe it please input: \"%@\""; /* Usernames */ -"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "If you tap “Cancel Request”, you will still have a chance to request another username without paying again"; +"If you tap “Cancel Request”, you will still have a chance to request another username without paying again" = "اگر دگمه «لغو درخواست» را بزنید، همچنان این فرصت را دارید تا یک نام کاربری دیگر را بدون پرداخت دوباره درخواست کنید"; /* No comment provided by engineer. */ "If you would like to save manually reclassified types for transactions you should export a CSV transaction file." = "If you would like to save manually reclassified types for transactions you should export a CSV transaction file."; /* No comment provided by engineer. */ -"Ignore" = "Ignore"; +"Ignore" = "رد"; /* No comment provided by engineer. */ -"Image uploaded can be viewed publicly by anyone." = "Image uploaded can be viewed publicly by anyone."; +"Image uploaded can be viewed publicly by anyone." = "تصایر آپلود شده به صورت عمومی قابل مشاهده است"; /* No comment provided by engineer. */ "Image URL can't be longer than %ld characters." = "Image URL can't be longer than %ld characters."; @@ -1130,11 +1199,17 @@ "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster." = "In case of larger withdrawals CrowdNode will pay withdrawals within two weeks. This is due to their security protocols and will most often be handled much faster."; /* Usernames */ -"In case you lose your passphrase you will lose your right to your requested username." = "In case you lose your passphrase you will lose your right to your requested username."; +"In case you lose your passphrase you will lose your right to your requested username." = "در صورتی که عبارت بازیابی را گم کنید، حق دسترسی به نام کاربری درخواستی را از دست خواهید داد. "; /* CrowdNode Portal */ "In process…" = "اجرای فرآیند..."; +/* No comment provided by engineer. */ +"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" = "درآمد"; @@ -1148,19 +1223,19 @@ "Insufficient funds" = "موجودی ناکافی"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "موجودی ترکیبی کافی نیست. منتظر بمانید تا فرایند ترکیب کوین‌جوین تمام شود و یا این قابلیت را از طریق تنظیمات غیرفعال کنید تا این تراکنش صورت گیرد. "; /* No comment provided by engineer. */ -"Insufficient Wallet Balance" = "Insufficient Wallet Balance"; +"Insufficient Wallet Balance" = "موجودی کیف پول کافی نیست"; /* Coinbase/Payment Methods */ "Interac" = "Interac"; /* CoinJoin */ -"Intermediate" = "Intermediate"; +"Intermediate" = "متوسط"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "سطح میانی محرمانگی نیازمند اتصال اینترنتی مطمئن است"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal Transfer"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,47 +1273,50 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ -"Invitation" = "Invitation"; +"Invitation" = "دعوتنامه"; /* Invitation #3 */ "Invitation %ld" = "Invitation %ld"; /* No comment provided by engineer. */ -"Invitation already claimed" = "Invitation already claimed"; +"Invitation already claimed" = "این دعوتنامه قبلا استفاده شده است"; /* No comment provided by engineer. */ -"Invitation Created Successfully" = "Invitation Created Successfully"; +"Invitation Created Successfully" = "دعوتنامه با موفقیت ایجاد شد"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "کارمزد دعوت"; /* No comment provided by engineer. */ -"Invitation used by" = "Invitation used by"; +"Invitation used by" = "دعوتنامه‌های استفاده شده توسط"; /* No comment provided by engineer. */ -"Invitations History" = "Invitations History"; +"Invitations History" = "سابقه دعوتنامه‌ها"; /* No comment provided by engineer. */ -"Invite" = "Invite"; +"Invite" = "دعوت"; /* No comment provided by engineer. */ -"Invite Someone to join the Dash Network" = "Invite Someone to join the Dash Network"; +"Invite Someone to join the Dash Network" = "یک نفر را به شبکه دش دعوت کنید"; /* No comment provided by engineer. */ -"Invite your family, find your friends by searching their usernames" = "Invite your family, find your friends by searching their usernames"; +"Invite your family, find your friends by searching their usernames" = "با جستجوی نام‌های کاربری، دوستان‌تان را بیابید و اعضای خانواده‌تان را دعوت کنید."; /* Usernames */ -"Invite your family, find your friends by searching their usernames." = "Invite your family, find your friends by searching their usernames."; +"Invite your family, find your friends by searching their usernames." = "با جستجوی نام‌های کاربری، دوستان‌تان را بیابید و اعضای خانواده‌تان را دعوت کنید."; /* No comment provided by engineer. */ -"Invite your friends & family" = "Invite your friends & family"; +"Invite your friends & family" = "دوستان و اعضای خانواده‌تان را دعوت کنید."; /* No comment provided by engineer. */ -"Invite your friends and family to join the Dash Network." = "Invite your friends and family to join the Dash Network."; +"Invite your friends and family to join the Dash Network." = "دوستان و اعضای خانواده‌تان را به شبکه دش دعوت کنید"; /* No comment provided by engineer. */ -"Invite your friends and family to the Dash Network" = "Invite your friends and family to the Dash Network"; +"Invite your friends and family to the Dash Network" = "دوستان و اعضای خانواده‌تان را به شبکه دش دعوت کنید. "; /* No comment provided by engineer. */ "iOS Dash Wallet: %@ Reported issue" = "iOS Dash Wallet: %@ Reported issue"; @@ -1253,10 +1334,13 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "توصیه می‌شود برای جلوگیری از هزینه‌های اضافی میکسینگ، به شبکه وای‌فای متصل باشید."; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ -"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "حتی برای کاربران با تخصص فنی بالا نیز تعیین سابقه تراکنش شما دشوار است"; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device."; @@ -1265,19 +1349,19 @@ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?" = "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 11 words, would you like to automatically recover the missing word?"; /* No comment provided by engineer. */ -"Join DashPay" = "Join DashPay"; +"Join DashPay" = "به دش‌پی بپیوندید"; /* No comment provided by engineer. */ "Join Evolution" = "Join Evolution"; /* No comment provided by engineer. */ -"Join Now" = "Join Now"; +"Join Now" = "الان بپیوندید"; /* CrowdNode */ "Joining the pool" = "پیوستن به مجموعه"; /* Usernames */ -"Keep your passphrase safe" = "Keep your passphrase safe"; +"Keep your passphrase safe" = "عبارت بازیابی را در جایی امن نگه دارید."; /* No comment provided by engineer. */ "Key Id" = "کلید شناسه"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "اطلاعات بیشتر"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1317,13 +1398,13 @@ "Letter, numbers and hyphens only" = "Letter, numbers and hyphens only"; /* Validation rule */ -"Letters, numbers and hyphens only" = "Letters, numbers and hyphens only"; +"Letters, numbers and hyphens only" = "فقط حرف، عدد یا خط‌تیره"; /* No comment provided by engineer. */ "Let’s Get Started" = "Let’s Get Started"; /* Voting */ -"Link" = "Link"; +"Link" = "لینک"; /* Dash Service Overview */ "Link Coinbase Account" = "حساب کوین‌بیس‌ را متصل کنید"; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "قفل‌شده"; +/* Log in */ +"Log in" = "ورود به حساب"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "ورود به کراودنود"; +/* DashSpend */ +"Log in to your account" = "ورود به حساب شما"; + +/* Log out button */ +"Log Out" = "خروج"; + /* No comment provided by engineer. */ "Log out from Uphold" = "خروج از آپهولد"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1386,13 +1485,13 @@ "Low" = "پائین"; /* Voting */ -"Low to high" = "Low to high"; +"Low to high" = "م به زیاد"; /* No comment provided by engineer. */ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "یک پست با متن بالا در یک شبکه اجتماعی سرشناس و یا یک پلتفرم پیام‌رسان منتشر کنید تا مشخص شود شما مالک اصلی نام کاربری درخواست شده هستید و لینک زیر را در آن بچسبانید"; /* No comment provided by engineer. */ "Manage GPS Permission" = "اجازه استفاده از جی‌پی‌اس"; @@ -1404,7 +1503,7 @@ "Map" = "Map"; /* Voting */ -"Masternode IP address" = "Masternode IP address"; +"Masternode IP address" = "آی‌پی‌ آدرس مسترنود"; /* No comment provided by engineer. */ "Masternode Keys" = "کلید مسترنود"; @@ -1422,16 +1521,19 @@ "Masternode Update" = "به‌روزرسانی مسترند"; /* Voting */ -"Masternode Voting Key" = "Masternode Voting Key"; +"Masternode Voting Key" = "کلید رای‌گیری مسترنود"; /* Contracted variant of 'Maximum' word */ "Max" = "حداکثر"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; /* No comment provided by engineer. */ -"Maybe later" = "Maybe later"; +"Maybe later" = "شاید بعدا"; /* adjective, security level */ "Medium" = "متوسط"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "پس از روشن کردن موقعیت مکانی دستگاه، جستجوی فروشندگان بهتر عمل می‌کند. "; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1452,7 +1557,7 @@ "Mixed balance" = "Mixed balance"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "در حال ترکیب"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; @@ -1464,10 +1569,10 @@ "Mixing Paused ·" = "Mixing Paused ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "ترکیب تراکنش‌ها"; /* CoinJoin */ -"Mixing your Dash coins will make your transactions more private" = "Mixing your Dash coins will make your transactions more private"; +"Mixing your Dash coins will make your transactions more private" = "ترکیب کوین‌های دش موجب می‌شود تراکنش‌هایتان محرمانه‌تر شود"; /* CoinJoin */ "Mixing ·" = "Mixing ·"; @@ -1479,10 +1584,10 @@ "More Control" = "مدیریت بیشتر"; /* No comment provided by engineer. */ -"More Suggestions" = "More Suggestions"; +"More Suggestions" = "پیشنهادات بیشتر"; /* No comment provided by engineer. */ -"Move and Zoom your photo to find the perfect fit" = "Move and Zoom your photo to find the perfect fit"; +"Move and Zoom your photo to find the perfect fit" = "حرکت دهید و روی عکس‌تان زوم کنید تا بهترین حالت را بیابید"; /* No comment provided by engineer. */ "Moved from" = "منتقل شد از"; @@ -1491,13 +1596,13 @@ "Moved to Address" = "Moved to Address"; /* CoinJoin */ -"Multiple hours" = "Multiple hours"; +"Multiple hours" = "چند ساعت"; /* Validation rule */ -"Must start and end with a letter or number" = "Must start and end with a letter or number"; +"Must start and end with a letter or number" = "باید با یک حرف یا عدد شروع و تمام شود "; /* No comment provided by engineer. */ -"My Contacts" = "My Contacts"; +"My Contacts" = "مخاطبان من"; /* No comment provided by engineer. */ "Name" = "نام"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "کارمزد شبکه"; @@ -1518,16 +1626,16 @@ "Network Unavailable" = "شبکه در دسترس نیست"; /* (List of) New (notifications) */ -"New" = "New"; +"New" = "جدید"; /* CrowdNode */ "New CrowdNode Account" = "ایجاد حساب جدید کراودنود"; /* Voting */ -"New to old" = "New to old"; +"New to old" = "از جدید به قدیم"; /* Coinbase */ -"Newly received Dash will be automatically mixed when the wallet is opened" = "Newly received Dash will be automatically mixed when the wallet is opened"; +"Newly received Dash will be automatically mixed when the wallet is opened" = "دش‌هایی که به تازگی دریافت شده وقتی که کیف پول باز می‌شود، به صورت خودکار ترکیب خواهد شد"; /* No comment provided by engineer. */ "NFC device" = "NFC device"; @@ -1536,7 +1644,7 @@ "NFC device didn't transmit a valid Dash address" = "NFC device didn't transmit a valid Dash address"; /* No comment provided by engineer. */ -"No" = "No"; +"No" = "خیر"; /* Coinbase */ "No active user" = "No active user"; @@ -1554,14 +1662,11 @@ "No Results Found" = "هیچ نتیجه‌ای یافت نشد"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "هیچ رایی باقی نمانده است. "; /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "هیچ کدام"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "این طور نیست که همه این فروشندگان، دش را به صورت مستقیم بپذیرند. اما می‌توانید با دش اقدام به خرید کارت هدیه کنید."; - /* Fiat amount */ "Not available" = "در دسترس نیست"; @@ -1601,14 +1703,17 @@ /* No comment provided by engineer. */ "OK" = "باشه"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ -"Old to new" = "Old to new"; +"Old to new" = "از قدیم به جدید"; /* Once accepts your request... */ "Once %@ accepts your request you can Pay Directly to Username" = "Once %@ accepts your request you can Pay Directly to Username"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "فقط یک رای باقی مانده است. "; /* Online */ "Online" = "آنلاین"; @@ -1620,10 +1725,10 @@ "Online Merchant" = "Online Merchant"; /* Voting */ -"Only duplicates" = "Only duplicates"; +"Only duplicates" = "فقط تکراری‌ها"; /* No comment provided by engineer. */ -"Only requests with links" = "Only requests with links"; +"Only requests with links" = "فقط درخواست‌ها با لینگ"; /* Voting */ "Only with links" = "Only with links"; @@ -1637,20 +1742,26 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "پیش‌نمایش سفارش"; +/* DashSpend */ +"Original purchase" = "خرید اصلی"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "کلیدهای مالک"; +/* DashSpend */ +"Password" = "گذرواژه"; + /* Usernames */ "Past link here" = "Past link here"; /* No comment provided by engineer. */ -"Paste your image URL" = "Paste your image URL"; +"Paste your image URL" = "نشانی اینترنتی را اینجا بچسبانید"; /* No comment provided by engineer. */ -"Pay" = "Pay"; +"Pay" = "پرداخت"; /* No comment provided by engineer. */ "Pay and get paid instantly with easy to use payment flows" = "به شکلی ساده و سریع مبلغی را پرداخت یا دریافت کنید"; @@ -1662,7 +1773,7 @@ "Pay to usernames. No more alphanumeric addresses" = "Pay to usernames. No more alphanumeric addresses"; /* Usernames */ -"Pay to usernames. No more alphanumeric addresses." = "Pay to usernames. No more alphanumeric addresses."; +"Pay to usernames. No more alphanumeric addresses." = "پرداخت به نام کاربری. بدون نیاز به نشانی طولانی کیف پول"; /* Coinbase/Buy Dash */ "Pay with" = "پرداخت با"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "به راحتی پرداخت کنید"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,14 +1796,20 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "روش پرداخت"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; /* No comment provided by engineer. */ -"Payments made directly to addresses won’t be retained in activity." = "Payments made directly to addresses won’t be retained in activity."; +"Payments made directly to addresses won’t be retained in activity." = "پرداخت‌هایی که به صورت مستقیم به نشانی (کیف پول) ارسال می‌شود، در سابقه فعالیت ثبت نمی‌شود. "; /* CrowdNode */ "Payout Options" = "گزینه‌های پاداش"; @@ -1704,7 +1818,7 @@ "PayPal" = "PayPal"; /* No comment provided by engineer. */ -"Pending" = "Pending"; +"Pending" = "معلق"; /* CrowdNode */ "per 24 hours" = "هر ۲۴ ساعت"; @@ -1716,10 +1830,10 @@ "per transaction" = "به ازای هر تراکنش"; /* Usernames */ -"Personalise profile" = "Personalise profile"; +"Personalise profile" = "شخصی‌سازی پروفایل"; /* No comment provided by engineer. */ -"Personalize" = "Personalize"; +"Personalize" = "شخصی‌سازی"; /* No comment provided by engineer. */ "PIN is always required to make a payment" = "برای پرداخت، همیشه باید پین کد را وارد کنید"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "لطفا این کلمات را بر اساس ترتیب کلمات در عبارت بازیابی، به ترتیب انتخاب کنید. "; @@ -1776,13 +1893,13 @@ "Please vote to approve my requested Dash username - %@" = "Please vote to approve my requested Dash username - %@"; /* No comment provided by engineer. */ -"Please Wait" = "Please Wait"; +"Please Wait" = "لطفا منتظر بمانید"; /* No comment provided by engineer. */ "Please wait" = "لطفا منتظر بمانید"; /* CrowdNode */ -"Please wait before initiating the next withdrawal" = "Please wait before initiating the next withdrawal"; +"Please wait before initiating the next withdrawal" = "لطفاً پیش از آغاز برداشت بعدی منتظر بمانید"; /* No comment provided by engineer. */ "Please wait until the wallet is fully synced before exporting your transaction history" = "Please wait until the wallet is fully synced before exporting your transaction history"; @@ -1791,19 +1908,25 @@ "Please write it down" = "لطفا آن را یادداشت کنید"; /* No comment provided by engineer. */ -"Preview Invitation" = "Preview Invitation"; +"Powered by" = "قدرت گرفته از"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + +/* No comment provided by engineer. */ +"Preview Invitation" = "مشاهده دعوتنامه"; /* No comment provided by engineer. */ "Previously used at: " = "Previously used at: "; /* Stale rates */ -"Prices are at least 30 minutes old. Fiat values may be incorrect." = "Prices are at least 30 minutes old. Fiat values may be incorrect."; +"Prices are at least 30 minutes old. Fiat values may be incorrect." = "قیمت‌ها متعلق به حداقل ۳۰ دقیقه یش است. قیمت‌های پول رسمی شاید درست نباشد. "; /* Stale rates */ -"Prices have fluctuated more than 50% since the last update." = "Prices have fluctuated more than 50% since the last update."; +"Prices have fluctuated more than 50% since the last update." = "قیمت‌ها از به‌روزرسانی قبلی بیش از ۵۰ درصد نوسان کرده است. "; /* Stale rates */ -"Prices weren't retrieved. Fiat values may be incorrect." = "Prices weren't retrieved. Fiat values may be incorrect."; +"Prices weren't retrieved. Fiat values may be incorrect." = "قیمت‌ها به دست نیامد. قیمت‌های بدون تغییر شاید نادرست باشد"; /* CrowdNode */ "Primary Dash address" = "Primary Dash address"; @@ -1821,7 +1944,7 @@ "Protect your savings" = " از پس‌اندازهایتان محافظت کنید"; /* Usernames */ -"Prove your identity" = "Prove your identity"; +"Prove your identity" = "هویت‌تان را اثبات کنید"; /* No comment provided by engineer. */ "Provider Address" = "Provider Address"; @@ -1833,16 +1956,19 @@ "Public key (legacy)" = "Public key (legacy)"; /* No comment provided by engineer. */ -"Public URL" = "Public URL"; +"Public URL" = "نشانی اینترنتی عمومی"; /* Coinbase/Buy Dash */ "Purchase" = "خرید"; +/* Alert title */ +"Purchase Failed" = "عملیات خرید ناموفق بود"; + /* No comment provided by engineer. */ "Quick Receive" = "دریافت سریع"; /* Voting */ -"Quick Voting" = "Quick Voting"; +"Quick Voting" = "رای‌دهی سریع"; /* No comment provided by engineer. */ "Quorums validated: %d/%d" = "Quorums validated: %1$d/%2$d"; @@ -1878,7 +2004,7 @@ "Received at" = "دریافت شد در"; /* No comment provided by engineer. */ -"Received from" = "Received from"; +"Received from" = "دریافت از"; /* CrowdNode */ "Receiving rewards" = "دریافت پاداش"; @@ -1901,11 +2027,8 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "کارت هدیه را به صورت آنلاین یا در یک فروشگاه، طی چند ثانیه استفاده کنید. "; - /* Button title, Register (username) */ -"Register" = "Register"; +"Register" = "ثبت‌نام"; /* No comment provided by engineer. */ "Register?" = "Register?"; @@ -1922,17 +2045,20 @@ /* 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"; +"Request details" = "جزئیات درخواست"; /* Voting */ "Request your username" = "Request your username"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "نام کاربری درخواستی‌تان مسدود شده است. "; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "نام کاربری درخواستی به فرد دیگری داده شده است. "; /* An action */ "Rescan" = "اسکن دوباره"; @@ -1956,7 +2082,7 @@ "Restricted" = "Restricted"; /* Usernames */ -"Results" = "Results"; +"Results" = "نتایج"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Retain Mutual Transaction History"; @@ -1973,14 +2099,14 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "ذخیره"; +/* DashSpend */ +"Save %.2f%%" = "پس‌انداز%.2f%%"; + /* No comment provided by engineer. */ -"Save Changes" = "Save Changes"; +"Save Changes" = "ذخیره تغییرات"; /* No comment provided by engineer. */ "Scan" = "اسکن"; @@ -2010,16 +2136,16 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "جستجو"; /* No comment provided by engineer. */ -"Search for a contact" = "Search for a contact"; +"Search for a contact" = "جستجو برای یک مخاطب"; /* No comment provided by engineer. */ "Search for a contact request" = "Search for a contact request"; /* No comment provided by engineer. */ -"Search for a User on the Dash Network" = "Search for a User on the Dash Network"; +"Search for a User on the Dash Network" = "جستجو برای یک کاربر در شبکه دش"; /* No comment provided by engineer. */ "Search for a username" = "Search for a username"; @@ -2027,11 +2153,14 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; /* No comment provided by engineer. */ -"Secure Your Wallet" = "Secure Your Wallet"; +"Secure Your Wallet" = "کیف پول‌تان را امن کنید"; /* No comment provided by engineer. */ "Security" = "امنیت"; @@ -2039,11 +2168,14 @@ /* 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" = "مشاهده در آپهلد"; /* No comment provided by engineer. */ -"Select" = "Select"; +"Select" = "انتخاب"; /* Coinbase */ "Select a coin" = "یک رمزارز را انتخاب کنید"; @@ -2051,19 +2183,25 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "مبلغ را انتخاب کنید"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "انتخاب مرورگر بلاکچین"; /* No comment provided by engineer. */ -"Select from Gallery" = "Select from Gallery"; +"Select from Gallery" = "انتخاب از گالری"; /* CoinJoin */ -"Select mixing level" = "Select mixing level"; +"Select mixing level" = "انتخاب سطح ترکیب"; /* Coinbase */ "Select the coin" = "یک رمزارز انتخاب کنید"; +/* No comment provided by engineer. */ +"Self-checkout" = "خرید نهایی خودکار"; + /* Sell */ "Sell" = "فروش"; @@ -2080,13 +2218,13 @@ "Send %@ from your primary Dash address that you currently use for your CrowdNode account" = "Send %@ from your primary Dash address that you currently use for your CrowdNode account"; /* No comment provided by engineer. */ -"Send again" = "Send again"; +"Send again" = "ارسال دوباره"; /* No comment provided by engineer. */ -"Send Contact Request" = "Send Contact Request"; +"Send Contact Request" = "درخواست تماس بفرستید"; /* No comment provided by engineer. */ -"Send Invitation" = "Send Invitation"; +"Send Invitation" = "ارسال دعوتنامه"; /* Coinbase CrowdNode */ @@ -2096,7 +2234,7 @@ "Send to" = "ارسال به"; /* No comment provided by engineer. */ -"Send to a Contact" = "Send to a Contact"; +"Send to a Contact" = "ارسال برای یک مخاطب"; /* No comment provided by engineer. */ "Send to contact" = "Send to contact"; @@ -2111,7 +2249,7 @@ "Sending" = "در حال ارسال"; /* No comment provided by engineer. */ -"Sending Contact Request" = "Sending Contact Request"; +"Sending Contact Request" = "ارسال درخواست تماس"; /* No comment provided by engineer. */ "Sending to" = "ارسال برای "; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "ارسال شد به"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2150,7 +2291,7 @@ "Set PIN" = "پین کد را تعیین کنید"; /* No comment provided by engineer. */ -"Set Your PIN" = "Set Your PIN"; +"Set Your PIN" = "رمز چهاررقمی‌تان را انتخاب کنید"; /* No comment provided by engineer. */ "Settings" = "تنظیمات"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "نشان دادن عبارت بازیابی"; +/* Alert title */ +"Sign in required" = "نیازمند ورود به حساب"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2195,7 +2339,7 @@ "Skip" = "رد کردن"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "برخی از نام‌های کاربری ممکن است بلاک شوند"; /* No comment provided by engineer. */ "Something went wrong" = "Something went wrong"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2222,16 +2369,16 @@ "Staking" = "سپرده‌گذاری"; /* CoinJoin */ -"Start Mixing" = "Start Mixing"; +"Start Mixing" = "آغاز ترکیب"; /* Step 1 */ "Step %ld" = "Step %ld"; /* CoinJoin */ -"Stop Mixing" = "Stop Mixing"; +"Stop Mixing" = "توقف ترکیب"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "ثبت"; /* No comment provided by engineer. */ "Swept!" = "Swept!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "فرآیند همزمان‌سازی در جریان است...نتایج شاید کامل نباشد. "; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2264,7 +2414,7 @@ "Syncing…" = "Syncing…"; /* No comment provided by engineer. */ -"Tag for your reference" = "Tag for your reference"; +"Tag for your reference" = "تگ برای شناسایی"; /* No comment provided by engineer. */ "Take a Photo from Camera" = "Take a Photo from Camera"; @@ -2279,7 +2429,13 @@ "Tax Category" = "دسته‌بندی مالیاتی"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ -"The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; +"The image you select will be uploaded to Imgur anonymously." = "تصویری که انتخاب می‌کنید به صورت بدون نام روی پلتفرم ایمجور آپلود می‌شود"; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "لینکی که فرستادید فقط برای مالکان شبکه قابل مشاهده خواهد بود."; /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2330,7 +2486,7 @@ "them (Fetching Info)" = "them (Fetching Info)"; /* No comment provided by engineer. */ -"There are no new notifications" = "There are no new notifications"; +"There are no new notifications" = "هیچ اعلانی وجود ندارد"; /* No comment provided by engineer. */ "There are no transactions to display" = "هیچ تراکنشی برای نمایش وجود ندارد"; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "این گام اضافه نشان می‌دهد واقعا خودتان قصد انجام این تراکنش را دارید. "; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "این فروشنده کارت‌های هدیه را با قیمت‌های ثابت به فروش می‌رساند"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "برای هر بار باز کردن قفل اپلیکیشن در مواقع استفاده، به این پین کد نیاز خواهید داشت."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "به"; +/* DashSpend confirmation */ +"To" = "به"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "برای اینکه افراد دیگر نتوانند پرداخت‌هایتان را ببینند، توصیه می‌شود پیش از ایجاد نام کاربری، موجودی‌تان را ترکیب کنید. "; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "برای آغاز سپرده‌گذاری، ابتدا یک حساب در کراودنود ایجاد کنید و یا به یک حساب موجود در آن متصل شوید. "; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "به نشانی دشی که برای حساب کراودنود در دش والت روی این دستگاه در نظر گرفته‌اید"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "امروز"; /* No comment provided by engineer. */ "Tools" = "ابزارها"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "برای ادامه اعمال تغییرات به پروفایل و اضافه کردن مخاطب، اعتبارتان را افزایش دهید"; /* Dash Portal */ "Topper" = "تاپر"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "سابقه تراکنش‌ها"; @@ -2446,22 +2617,22 @@ "Transfer successful" = "تراکنش موفق"; /* An action */ -"Try again" = "Try again"; +"Try again" = "دوباره تلاش کنید"; /* Alert title */ "Turn device passcode on" = "Turn device passcode on"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "خاموش شده"; /* Coinbase */ -"Turning this feature on will result a higher battery usage" = "Turning this feature on will result a higher battery usage"; +"Turning this feature on will result a higher battery usage" = "روشن کردن این قابلیت موجب استفاده بیشتر از باتری می‌شود"; /* Coinbase */ "Two factor auth required" = "Two factor auth required"; /* Voting */ -"Type" = "Type"; +"Type" = "نوع"; /* No comment provided by engineer. */ "Unable to accept contact request" = "Unable to accept contact request"; @@ -2470,7 +2641,7 @@ "Unable to connect" = "امکان اتصال وجود ندارد"; /* No comment provided by engineer. */ -"Unable to fetch contact details" = "Unable to fetch contact details"; +"Unable to fetch contact details" = "جزئیات مخاطبان منتقل نشد"; /* No comment provided by engineer. */ "Unable to fetch image. Please enter a valid image URL or check your connection." = "Unable to fetch image. Please enter a valid image URL or check your connection."; @@ -2482,16 +2653,16 @@ "Unable to get new QR code" = "Unable to get new QR code"; /* No comment provided by engineer. */ -"Unable to provide suggestions" = "Unable to provide suggestions"; +"Unable to provide suggestions" = "ارائه پیشنهاد ناموفق بود"; /* No comment provided by engineer. */ "Unable to send contact request" = "Unable to send contact request"; /* No comment provided by engineer. */ -"Unable to upload your picture. Please try again." = "Unable to upload your picture. Please try again."; +"Unable to upload your picture. Please try again." = "آپلود عکس ناموفق بود. لطفا دوباره تلاش کنید."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "آنبلاک"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2509,7 +2680,7 @@ "Unsupported URL" = "Unsupported URL"; /* CoinJoin */ -"up to 30 minutes" = "up to 30 minutes"; +"up to 30 minutes" = "تا ۳۰ دقیقه"; /* ex., Updated: 27.12, 8:30 */ "Updated: %@" = "Updated: %@"; @@ -2518,7 +2689,7 @@ "Updating Price" = "Updating Price"; /* No comment provided by engineer. */ -"Updating Profile on Dash Network" = "Updating Profile on Dash Network"; +"Updating Profile on Dash Network" = "به‌روزرسانی پروفایل روی شبکه دش"; /* No comment provided by engineer. */ "Upgrade" = "به‌روزرسانی"; @@ -2536,16 +2707,16 @@ "Uphold error" = "خطای آپهولد"; /* No comment provided by engineer. */ -"Upload Error" = "Upload Error"; +"Upload Error" = "خطا در آپلود"; /* No comment provided by engineer. */ -"Upload your picture, personalize your identity" = "Upload your picture, personalize your identity"; +"Upload your picture, personalize your identity" = "عکس‌تان را آپلود کنید، هویت‌تان را شخصی‌سازی کنید. "; /* Usernames */ -"Upload your picture, personalize your identity." = "Upload your picture, personalize your identity."; +"Upload your picture, personalize your identity." = "تصویرتان را به‌روزرسانی کنید، هویت‌تان را شخصی‌سازی کنید"; /* No comment provided by engineer. */ -"Uploading your picture to the network" = "Uploading your picture to the network"; +"Uploading your picture to the network" = "عکس‌تان را روی شبکه آپلود کنید"; /* Explore Dash/Filters */ "Use gift card" = "Use gift card"; @@ -2560,25 +2731,25 @@ "User (Fetching Info)" = "User (Fetching Info)"; /* Voting */ -"Username" = "Username"; +"Username" = "نام کاربری"; /* Usernames */ "Username %@ has been requested on the Dash network. After the voting ends (%@) we will notify you about its results" = "Username %1$@ has been requested on the Dash network. After the voting ends (%2$@) we will notify you about its results"; /* No comment provided by engineer. */ -"Username already found" = "Username already found"; +"Username already found" = "نام کاربری قبلا پیدا شده"; /* No comment provided by engineer. */ -"Username available" = "Username available"; +"Username available" = "نام کاربری موجود است"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "نام کاربری موجود است"; /* Usernames */ "Username request failed" = "Username request failed"; /* No comment provided by engineer. */ -"Username taken" = "Username taken"; +"Username taken" = "نام کاربری قبلا انتخاب شده"; /* Voting */ "Username voting" = "Username voting"; @@ -2596,7 +2767,7 @@ "Validating username failed" = "Validating username failed"; /* No comment provided by engineer. */ -"Validating username…" = "Validating username…"; +"Validating username…" = "بررسی نام کاربری ..."; /* CrowdNode Portal */ "Verification Required" = "نیازمند تائید"; @@ -2611,10 +2782,10 @@ "Verify your API Dash address" = "نشانی ای‌پی‌آی دش‌تان را تائید کنید. "; /* Usernames */ -"Verify your identity" = "Verify your identity"; +"Verify your identity" = "احراز هویت کنید"; /* Usernames */ -"Verify your identity to enhance your chances of getting your requested username" = "Verify your identity to enhance your chances of getting your requested username"; +"Verify your identity to enhance your chances of getting your requested username" = "هویت‌تان را احراز کنید "; /* adjective, security level */ "Very High" = "بسیار بالا"; @@ -2637,11 +2808,14 @@ /* 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"; +"Vote for All" = "رای‌دهی برای همه"; /* Voting */ -"Vote to Approve" = "Vote to Approve"; +"Vote to Approve" = "رای‌گیری برای تائید"; /* Voting */ "Votes: High to low" = "Votes: High to low"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "در برخی موارد، نیاز به رای‌گیری است"; /* No comment provided by engineer. */ "Voting Keys" = "کلیدهای رای‌دهی"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "نتوانستیم از حساب کراودنود شما مبلغی برداشت کنیم. "; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "ما دو نوع فروشنده داریم"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "ما ارتقاء دادیم"; @@ -2710,10 +2884,10 @@ "Welcome" = "خوش آمدید"; /* No comment provided by engineer. */ -"Welcome to DashPay" = "Welcome to DashPay"; +"Welcome to DashPay" = "به دش‌پی خوش آمدید"; /* Usernames */ -"What is username voting?" = "What is username voting?"; +"What is username voting?" = "رای‌گیری نام کاربری چیست؟"; /* No comment provided by engineer. */ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "وقتی که تراکنش تائید شد، کیف پول کاغذی مذکور دیگر بی‌ارزش خواهد شد و به دلایل امنیتی، بهتر است دیگر از آن استفاده نکنید. "; @@ -2761,20 +2935,17 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "آیا مایلید مقداری موجودی برای خریدتان با استفاده از حساب بانکی متصل‌شده تهیه کنید؟ "; /* No comment provided by engineer. */ -"Would you like to save the changes you made to your profile?" = "Would you like to save the changes you made to your profile?"; +"Would you like to save the changes you made to your profile?" = "آیا مایلید تغییراتی که در پروفایل‌تان ایجاد کردید را ذخیره کنید؟"; /* No comment provided by engineer. */ -"Yes" = "Yes"; +"Yes" = "بله"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "دیروز"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "You accepted the contact request from %@"; @@ -2785,8 +2956,11 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ -"You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; +"You can always delete the image uploaded, as long as you have access to this wallet." = "همیشه می‌توانید عکس‌ آپلودشده را پاک کنید، به شرط اینکه دسترسی به کیف‌پول‌تان داشته باشید"; /* No comment provided by engineer. */ "You can authenticate with Face ID for payments below" = "You can authenticate with Face ID for payments below"; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "می‌توانید نحوه برداشت/زمان برداشت پاداشی که به شما داده می‌شود را تغییر دهید. "; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "همچنان می‌توانید از دش‌پی برای پرداخت‌ها استفاده کنید، ولی نمی‌توانید پروفایل‌تان را به‌روزرسانی کرده و یا مخاطبان بیشتری اضافه کنید، تا وقتی که موجودی اعتبارتان را افزایش دهید"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "جزئیات مربوط به واریزها، برداشت‌ها و پاداش‌ها را می‌توانید ببینید. "; @@ -2810,10 +2987,10 @@ "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network." = "You can specify any URL which is publicly available on the internet so other users can see it on the Dash network."; /* No comment provided by engineer. */ -"You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; +"You cannot claim this invite since you already have a Dash username" = "نمی‌توانید این دعوتنامه را بپذیرید، چون قبلا نام کاربری دش به آن اختصاص یافته است"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "موجودی‌تان برای انجام این تراکنش، کافی نیست"; + /* Coinbase */ "You don’t have enough balance" = "موجودی کافی ندارید"; @@ -2843,7 +3023,7 @@ "You have chose \"%@\" as your username. Username cannot be changed once it is registered." = "You have chose \"%@\" as your username. Username cannot be changed once it is registered."; /* Voting */ -"You have entered an invalid key" = "You have entered an invalid key"; +"You have entered an invalid key" = "کلید اشتباه وارد کردید"; /* No comment provided by engineer. */ "You have insufficient funds to proceed" = "You have insufficient funds to proceed"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ -"You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; +"You need to wait 5 minutes before initiating another withdrawal" = "پیش از برداشت بعدی، باید ۵ دقیقه منتظر بمانید"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "مبلغی که پرداخت می‌کنید"; + /* Coinbase */ "You receive" = "You receive"; @@ -2897,7 +3083,7 @@ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "اگر دستگاه‌تان گم شود یا آسیب ببیند یا دش والت از روی دستگاه‌تان پاک شود، برای دسترسی به موجودی‌تان به این عبارت بازیابی نیاز خواهید داشت. "; /* Coinbase */ -"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time."; +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "فقط وقتی می‌توانید دش‌های ترکیب‌شده‌تان را خرج کنید که این گزینه روشن باشد. می‌توانید هر وقت که بخواهید، آن را خاموش کنید. "; /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer."; @@ -2909,7 +3095,7 @@ "Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "موجودی اعتباری‌تان پائین است"; /* CrowdNode */ "Your CrowdNode account is creating…" = "حساب کراودنود شما در حال ایجاد شدن است..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "حساب کراودنود شما ایجاد شده و آماده استفاده است! "; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "حساب کراودنود با استفاده از این تراکنش‌ها ایجاد شد"; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "نشانی کراودنود شما تائید شد. "; @@ -2942,7 +3128,10 @@ "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; /* No comment provided by engineer. */ -"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +"Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "این ایمیل در کیف پول دش‌بی یا هر سرور دیگری ذخیره نخواهد شد. این ایمیل یک بار برای دریافت جزئیات حساب گراواتار استفاده می‌شود و سپس از حذف می‌شود. "; + +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "ایمیل‌تان فقط برای ارسال گذرواژه یک‌بارمصرف استفاده می‌شود. "; /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2978,13 +3170,16 @@ "Your username has been successfully created" = "Your username has been successfully created"; /* No comment provided by engineer. */ -"Your vote was cancelled" = "Your vote was cancelled"; +"Your vote was cancelled" = "رای‌تان لغو شد"; /* Voting */ -"Your vote was submitted" = "Your vote was submitted"; +"Your vote was submitted" = "رای‌تان ثبت شد"; /* No comment provided by engineer. */ "Your wallet is secured now. You can use your recovery phrase anytime to recover your account on another device." = "کیف پول‌تان اکنون امن است. هر گاه خواستید می‌توانید از این عبارت بازیابی برای بازگرداندن حساب‌تان روی دستگاهی دیگر استفاده کنید. "; /* No comment provided by engineer. */ "ZenLedger" = "ذن‌لجر"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/fi.lproj/Localizable.strings b/DashWallet/fi.lproj/Localizable.strings index 6b84eb749..992c0e41b 100644 --- a/DashWallet/fi.lproj/Localizable.strings +++ b/DashWallet/fi.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Virhe"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Suodata"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Verkon maksukulu"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Tallenna"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/fil.lproj/Localizable.strings b/DashWallet/fil.lproj/Localizable.strings index 243f902c1..3a54e1490 100644 --- a/DashWallet/fil.lproj/Localizable.strings +++ b/DashWallet/fil.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ ay hindi pinahihintulutang i-access ang Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu mga contact / %3$lu mga update sa profile"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "ipapalabas ang mga %d boto dahil marami kang voting key na nakaimbak sa wallet"; /* Voting */ "%ld duplicates" = "%ld duplicate"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Tanggapin"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Tanggapin ang Mga Tuntunin ng paggamit"; /* CrowdNode */ "Accepting terms of use…" = "Tumatanggap ng mga tuntunin sa paggamit…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Direktang tumatanggap ng DASH"; - /* CrowdNode */ "Account Recovery" = "Pagbawi ng Account"; @@ -152,7 +155,7 @@ "Advanced" = "Advanced"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Ang advanced na antas ng privacy ay nangangailangan ng maaasahang koneksyon sa internet"; /* No comment provided by engineer. */ "Advanced Security" = "Masusing seguridad"; @@ -167,7 +170,7 @@ "Agree" = "Sumang-ayon"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "sa unahan"; /* No comment provided by engineer. */ "All" = "Lahat"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Halagang ipinadala"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Ang sapantaha at pamilyar na karanasan sa lahat ng iyong aparato"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "at"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Ang application %@ ay gustong makuha ang iyong Master Public Key. Ito ay maaaring gamitin upang masubaybayan ang iyong pitaka, ito ay hindi maaaring gamitin sa paglipat ng iyong Dash."; +/* No comment provided by engineer. */ +"Apply" = "Mag-apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Sigurado ka bang gusto mong kanselahin ang order na ito?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Dahil karamihan sa mga tao ay walang eksaktong 1000 Dash, gumawa ang Crowdnode ng isang serbisyo kung saan, sa pamamagitan ng pagsasama-sama ng mga deposito mula sa mga miyembro, makakamit nila ang mga benepisyo ng pagmamay-ari ng Masternode."; +/* DashSpend */ +"at" = "sa"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Mas gumagana ang paghahanap sa ATM kapag naka-on ang Mga Serbisyo sa Lokasyon."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Hindi magagamit ang pagpapatunay"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Awtorisado"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "sa huli"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Sa pagitan ng %1$ld at %2$ld karakter"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Sa pagitan ng 3 at 23 na mga karakter"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Sa pagitan ng Dash Wallet at Coinbase"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Bumili ng Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Bumili ng gift card gamit ang iyong Dash"; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Bumili at i-convert ang Dash gamit ang isa pang crypto"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Bumili ng Mga Kredito"; /* No comment provided by engineer. */ "Buy Dash" = "Bumili ng Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Bumili ng Dash · Walang kinakailangang account"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Bumili ng mga gift card gamit ang iyong Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Ang pagkansela sa transaksyong ito ay hindi makakansela sa trade order. Makakatanggap ka ng DASH sa iyong Coinbase account sa ilang sandali."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN ng Card"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Baguhin"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Baguhin sa Intermediate"; +/* No comment provided by engineer. */ +"Check current balance" = "Suriin ang kasalukuyang balanse"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Suriin ang mga setting ng petsa at oras"; /* No comment provided by engineer. */ "Check your connection" = "Suriin ang koneksyon"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Pumili ng iyong"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Mga Collateral na Input ng CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin Lumikha ng mga Denominasyon"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Paghahalo ng CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Bayad sa Paghahalo ng CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Kumpirmahin"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Kumpirmahin (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Kumpirmahin ang PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Makipag-ugnayan sa Suporta sa Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Makipag-ugnayan sa Suporta sa CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Nakabinbin ang Kahilingan sa Pakikipag-ugnay"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Mga Contact"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Ipagpatuloy"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Magpatuloy pa rin"; /* Coinbase Entry Point */ "Convert Crypto" = "I-convert ang Crypto"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Lumikha ng Account"; +/* Create DashSpend account */ +"Create account" = "Gumawa ng account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Lumikha ng online na CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Gumawa ng imbitasyon"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Lumikha ng Online na Account"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Gumawa ng iyong username"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Lumikha ng iyong Username, maghanap ng mga kaibigan at pamilya gamit ang kanilang mga username at idagdag sila sa iyong mga contact"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address na itinalaga para sa iyong CrowdNode account sa Dash Wallet sa device na ito"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Balanse ng Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balanse sa Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet sa device na ito"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Default na pananalapi, shortcuts, about..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Default na setting ng filter"; /* Location Service Status */ "Denied" = "Tinanggihan"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Idiskonekta"; +/* DashSpend confirmation */ +"Discount" = "Diskwento"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Buwagin"; /* No comment provided by engineer. */ "Display Name" = "I-display ang pangalan"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "hal. juandelacruz@gmail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Ang bawat imbitasyon ay popondohan ng halagang ito upang mabilis na magawa ng tatanggap ang kanilang username sa Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Mas maaga"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Ilagay ang Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Ilagay ang verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Ilagay ang iyong 2FA code sa ibaba"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Mali"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error sa pag-update ng iyong profile"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Pagkakamali ·"; /* No comment provided by engineer. */ "Exit" = "Lumabas"; @@ -842,7 +881,7 @@ "Export all transactions" = "I-export ang lahat ng transaksyon"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "I-export ang CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Pinalawak na Public Key"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Salain"; /* No comment provided by engineer. */ -"Filter Transactions" = "Salain ang transaksyon"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Na-filter ng"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Mga filter"; -/* No comment provided by engineer. */ -"Find a merchant." = "Maghanap ng merchant."; - /* No comment provided by engineer. */ "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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Unang Minimum na Deposito"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Mga nakapirming halaga"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Mga flexible na amount"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Natagpuan ang mga potensyal na nawawalang salita:\n%@"; +/* DashSpend confirmation */ +"From" = "mula sa"; + /* from CrowdNode */ "from CrowdNode" = "mula sa CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "mula sa iyong Coinbase account"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Ganap na Nahalo"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Makakuha ng mga reward mula sa mga deposito sa Dash Masternodes na may kasing liit na 0.5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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" = "kabuuang gift card"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Mga uri ng gift card"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Pumunta sa website ng CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Narito ang isang Dash address na itinalaga para sa iyong CrowdNode account sa Dash Wallet sa device na ito."; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Magtago"; /* adjective, security level */ "High" = "Mataas"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Paano kumpirmahin ang iyong API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Paano Gumamit ng Gift Card"; +"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"; @@ -1058,7 +1124,10 @@ "I Accept" = "Tinatanggap Ko"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Tinatanggap Ko"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Tinatanggap ko ang mga tuntunin at kundisyon ng DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Tinatanggap ko na mawawala ko ang aking mga barya kung sakaling hindi ko na maalala ang recovery phrase"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "Pinoproseso…"; +/* No comment provided by engineer. */ +"In store" = "Nakatago"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Hindi sapat na pondo"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Hindi sapat na pinaghalong pondo. Hintayin ang paghahalo ng CoinJoin upang matapos o huwag paganahin ang tampok na ito sa mga setting upang makumpleto ang transaksyong ito."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Hindi sapat na Balanse sa Wallet"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Intermediate"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Ang intermediate na antas ng privacy ay nangangailangan ng maaasahang koneksyon sa internet"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Internal na pagpapadala"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Hindi wasto ang iyong Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Hindi wasto ang QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Imbitasyon"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Matagumpay na Nagawa ang Imbitasyon"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Bayad sa Imbitasyon"; /* No comment provided by engineer. */ "Invitation used by" = "Imbitasyon na ginamit ni"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Maaaring tumagal ng hanggang 10 minuto upang ilipat ang Dash mula sa Coinbase patungo sa Dash Wallet sa device na ito"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Inirerekomenda na nasa isang Wi-Fi network upang maiwasan ang pagkakaroon ng karagdagang mga bayarin sa paghahalo"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Napakahirap para sa mga advanced na user na may anumang antas ng teknikal na kadalubhasaan na matukoy ang iyong kasaysayan ng transaksyon"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Huling pag-update ng server"; -/* No comment provided by engineer. */ -"Learn More" = "Matuto pa"; - /* Info Screen */ "Learn More..." = "Matuto pa..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Naka-lock"; +/* Log in */ +"Log in" = "mag-log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Mag-log in sa CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Mag-log in sa iyong account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Mag-log out mula sa Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Buksan gamit ang Face ID"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Gumawa ng post gamit ang text sa itaas sa isang kilalang social media o messaging platform para i-verify na ikaw ang orihinal na may-ari ng hiniling na username at i-paste ang link sa ibaba"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Pamahalaan ang Pahintulot sa GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum na 75 character"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Mas mahusay na gumagana ang paghahanap ng merchant kapag naka-on ang Mga Serbisyo sa Lokasyon."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Pinaghalong balanse"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Paghahalo"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Posible lamang ang paghahalo kapag bukas ang app"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Nakahinto ang Paghahalo ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Paghahalo ng mga Transaksyon"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Ang paghahalo ng iyong mga Dash coins ay gagawing mas pribado ang iyong mga transaksyon"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Paghahalo ·"; /* No comment provided by engineer. */ "More" = "Marami"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Walang nahanap na resulta"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Walang natitirang boto"; /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Wala"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Hindi wastong URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Hindi lahat ng tindahan ay direktang tumatanggap ng DASH, ngunit maaari kang bumili ng gift card gamit ang iyong Dash."; - /* Fiat amount */ "Not available" = "Hindi available"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Hindi determinado"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Hindi nagsimula"; /* No comment provided by engineer. */ "Not yet used" = "Hindi pa ito nagamit"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Luma sa bago"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Kapag tinanggap ng %@ ang iyong kahilingan maaari kang Magbayad Direkta sa Username"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Isang boto ang natitira"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Preview ng Order"; +/* DashSpend */ +"Original purchase" = "Orihinal na pagbili"; + /* No comment provided by engineer. */ "Owner Address" = "Address ng may-ari"; /* No comment provided by engineer. */ "Owner Keys" = "Susi ng may-ari"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Magbayad ng walang kahirap-hirap"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Magbayad gamit ang DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Nagbabayad"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Nagbabayad..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Paraan ng Pagbayad"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Uri ng Pagbabayad"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Pakilagay ang iyong phone malapit sa NFC device"; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Paki-pindot ang mga salita mula sa iyong recovery phrase sa tamang pagkakasunod-sunod."; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Paki-sulat sa ibaba"; +/* No comment provided by engineer. */ +"Powered by" = "Pinatatakbo ng"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "I-preview ang Imbitasyon"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Bumili"; +/* Alert title */ +"Purchase Failed" = "Nabigo ang Pagbili"; + /* No comment provided by engineer. */ "Quick Receive" = "Tanggapin ng mabilis"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = " Ang recovery phrase ay kailangang mayroong 12, 15, 18, 21 o 24 na salita"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "I-redeem ang iyong gift card online sa loob ng ilang segundo o sa cashier."; - /* Button title, Register (username) */ "Register" = "Magparehistro"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Hilingin ang iyong username"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Na-block ang hiniling na username"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Ang hiniling na username ay ibinigay sa ibang tao"; /* An action */ "Rescan" = "I-scan muli"; @@ -1956,7 +2082,7 @@ "Restricted" = "Pinaghihigpitan"; /* Usernames */ -"Results" = "Results"; +"Results" = "Mga resulta"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Panatlihin ang Kasaysayan ng Kapwang Transaksyon"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Gantimpala"; -/* No comment provided by engineer. */ -"Rewards" = "Mga gantimpala"; - /* No comment provided by engineer. */ "Save" = "I-save"; +/* DashSpend */ +"Save %.2f%%" = "Makatipid ng %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "I-save ang mga pagbabago"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Ang mga screenshot ay kita sa ibang apps o device. Lumikha ng bagong recovery phrase at panatilihin itong sikreto. "; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Maghanap"; /* No comment provided by engineer. */ "Search for a contact" = "Maghanap para sa isang contact"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Mga resulta ng paghahanap para sa \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Naghahanap ng username %@ sa Network ng Dash"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Pumili ng isang Serbisyo"; +/* DashSpend denomination selection */ +"Select amount" = "Pumili ng halaga"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Piliin ang block explorer"; /* No comment provided by engineer. */ "Select from Gallery" = "Pumili mula sa Gallery"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Piliin ang barya"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "magbenta"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Ipadala kay"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Mag-set ng pinagkakatiwalaang node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Ipakita ang recovery phrase"; +/* Alert title */ +"Sign in required" = "Kailangang mag-sign in"; + /* CrowdNode */ "Sign the message" = "Lagdaan ang mensahe"; @@ -2195,7 +2339,7 @@ "Skip" = "Laktawan"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Maaaring i-block ang ilang mga username"; /* No comment provided by engineer. */ "Something went wrong" = "May maling nangyari"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Pag-uri-uriin ang mga Contact"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Inayos ayon sa distansya"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Itigil ang Paghahalo"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Isumite"; /* No comment provided by engineer. */ "Swept!" = "Tangayin!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Pumalya ang pag-sync"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Kasalukuyang isinasagawa ang pag-sync... Maaaring hindi kumpleto ang resulta."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "I-sync ngayon"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Kategorya ng Buwis"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "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."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Ang Test Dash ay libre at maaaring makuha mula sa tinatawag na gripo."; /* 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Ang larawang pipiliin mo ay ia-upload sa Imgur nang hindi nagpapakilala."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Ang link na iyong ipapadala ay makikita lamang ng mga may-ari ng network"; /* Coinbase */ "The minimum amount you can send is %@" = "Ang pinakamababang halaga na maaari mong ipadala ay %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Ipinapakita ng karagdagang hakbang na ito na ikaw talaga ang sumusubok na gumawa ng transaksyon."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Ang merchant na ito ay nagbebenta ng mga gift card sa mga nakapirming presyo"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Ang PIN na ito ay kailangan upang i-unlock ang iyong app kapag nais gamitin."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "para kay:"; +/* DashSpend confirmation */ +"To" = "Sa"; + /* Coinbase */ "to Dash Wallet on this device" = "Sa Dash wallet sa device na ito"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Upang makatulong na pigilan ang ibang tao na makita kung kanino ka magbabayad, inirerekomendang ihalo ang iyong balanse bago mo gawin ang iyong username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Para simulan ang staking, gumawa ng account sa CrowdNode o kumonekta sa mayroon na."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Para sa Dash address na itinalaga para sa iyong CrowdNode account sa Dash Wallet sa device na ito"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Ngayon"; /* No comment provided by engineer. */ "Tools" = "Kagamitan"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "I-top-up ang iyong mga credit upang magpatuloy sa paggawa ng mga pagbabago sa iyong profile at pagdaragdag ng mga contact"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Kasaysayan ng Transaksyon"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "I-turn on ang device passcode"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Naka-off"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Ang pag-on sa feature na ito ay magreresulta ng mas mataas na paggamit ng baterya"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Hindi ma-upload ang iyong larawan. Pakisubukang muli."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "i-unblock"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Available ang username"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Available ang username"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Ang pagboto ay kinakailangan lamang sa ilang mga kaso"; /* No comment provided by engineer. */ "Voting Keys" = "Mga susi ng pagboto"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Hindi kami makapag-withdraw mula sa iyong CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Mayroon kaming 2 uri ng merchant"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Aming nabatid na nagkaroon ng problema ang Dash Wallet habang inililipat. Ang pagre-scan sa block chain ay makakalutas sa isyung ito o subukan muli. Mas mainam na isagawa ang pag-scan gamit and wifi at aabot ito ng hanggang kalahating oras. Ang iyong pondo ay magiging available na kapag natapos na ang proseso."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Kami ay nag-upgrade"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Kapag ang transaksyon ay nakumpirma, ang ibang wallet ay mawawalan ng bisa at hindi na pwedeng gamitin ulit para sa panseguridad. "; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Kapag isinara mo ang app o ni-lock ang screen, hihinto ang proseso ng paghahalo. Magpapatuloy ito kapag binuksan mo muli ang app."; /* No comment provided by engineer. */ "Where to Spend" = "Saan Gagastos"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Gusto mo bang tanggapin ang imbitasyon?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Gusto mo bang magdeposito para sa iyong pagbili gamit ang isang naka-link na bank account?"; @@ -2774,7 +2945,7 @@ "Yes" = "Oo"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Kahapon"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Tinanggap mo ang kahilingan sa pakikipag-ugnay mula sa %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Ikaw ay magwa-wipe na ng eallet dito sa device. Anumang pondo na kalakip nito ay maaaring lamang maiblik kung mayroon kang recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Maaari mong i-delete anumang oras ang larawang na-upload, hangga't may access ka sa wallet na ito."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Maaari mong baguhin kung paano / kailan binabayaran sa iyo ang iyong mga kita sa reward."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Maaari mong patuloy na gamitin ang DashPay para sa mga pagbabayad ngunit hindi mo mai-update ang iyong profile o magdagdag ng higit pang mga contact hanggang sa ma-top up mo ang iyong balanse sa kredito"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Maaari mong ilagay ang iyong susi sa alinman sa mga sumusunod na format: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Maaari mong makita ang detalyadong impormasyon tungkol sa iyong mga deposito, pag-withdraw at mga kita ng reward."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Hindi mo ma-claim ang imbitasyong ito dahil mayroon ka nang Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Wala kang anumang mga contact sa ngayon"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Wala ka nang sapat na pondo para makompleto ang transaksyong ito"; + /* Coinbase */ "You don’t have enough balance" = "Wala kang sapat na balanse"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Kailangan mong maghintay ng 5 minuto bago simulan ang isa pang withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "Kailangan mo lang ng %@ para sumali sa pool."; +/* DashSpend confirmation */ +"You pay" = "Magbabayad ka"; + /* Coinbase */ "You receive" = "natatanggap mo"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Awtomatiko kang makakatanggap ng mga fractional na pagbabayad at bilang default, ire-invest ang mga ito, gayunpaman, madali ring mag-set up ng mga awtomatikong withdrawal upang makatanggap ng mga umuulit na payout."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Ang iyong balanse sa kredito ay ganap na naubos"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Ang iyong balanse sa kredito ay mababa"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Linilikha na ang iyong CrowdNode account..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Ang iyong CrowdNode account ay naka-set up at handa nang gamitin!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Ang iyong CrowdNode account ay nilikha gamit ang mga transaksyong ito."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Ang iyong CrowdNode address ay nakumpirma na."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Natanggap na ang iyong deposito sa CrowdNode."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Ang oras ng iyong device ay %1$@ sa pamamagitan ng %2$d segundo. Yhindi mo magagamit ang CoinJoin dahil sa pagkakaibang ito.\n\nAng mga setting ng oras sa iyong device ay kailangang baguhin sa “Awtomatikong itakda ang oras” para magamit ang CoinJoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Naka-off ang oras ng iyong device nang %d minuto. Malamang na hindi ka makakapagpadala o makakatanggap ng Dash dahil sa problemang ito.\n\nDapat mong suriin at kung kinakailangan itama ang iyong mga setting ng petsa, oras at timezone."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Ang oras ng iyong device ay naka-off nang higit sa 5 segundo. Hindi mo magagamit ang CoinJoin dahil sa pagkakaibang ito.\n\nAng mga setting ng oras sa iyong device ay kailangang baguhin sa “Awtomatikong itakda ang oras” bago gamitin ang CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Ang iyong Email ay hindi nakaimbak sa DashPay wallet o sa anumang mga server. Ginagamit ito nang isang beses upang makuha ang mga detalye ng iyong Gravatar account at pagkatapos ay itapon."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Ang iyong email ay ginagamit lamang upang magpadala ng isang beses na password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Na-claim na ang iyong imbitasyon mula sa %@ "; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Kinansela ang iyong kahilingan"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ang iyong transaksyon ay naipadala at ang halaga ay dapat makita sa iyong pitaka sa loob ng ilang minuto."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Ang iyong username %@ ay matagumpay na nilikha sa Network ng Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/fr.lproj/Localizable.strings b/DashWallet/fr.lproj/Localizable.strings index 0f02652c7..d17c956c4 100644 --- a/DashWallet/fr.lproj/Localizable.strings +++ b/DashWallet/fr.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ n'est pas autorisé à accéder à Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu mises à jour de profil"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes seront enregistrés car votre portefeuille possède plusieurs clés de vote"; /* Voting */ "%ld duplicates" = "%ld doublons"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accepter"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accepter les conditions d'utilisation"; /* CrowdNode */ "Accepting terms of use…" = "Acceptation des conditions d'utilisation…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepte directement Dash"; - /* CrowdNode */ "Account Recovery" = "Restauration de compte"; @@ -152,7 +155,7 @@ "Advanced" = "Avancé"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Le niveau avancé de confidentialité réclame une connexion Internet fiable."; /* No comment provided by engineer. */ "Advanced Security" = "Sécurité avancée"; @@ -167,7 +170,7 @@ "Agree" = "Accepter"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "en avant"; /* No comment provided by engineer. */ "All" = "Tous"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Montant envoyé"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Une utilisation familière et intuitive sur tous vos appareils"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "et"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "L'application %@ voudrait recevoir votre clé publique. Celle-ci peut être utilisée pour garder une trace de vos transactions, elle ne peut pas être utilisée pour déplacer (ou voler) vos fonds."; +/* No comment provided by engineer. */ +"Apply" = "Appliquer"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Êtes-vous sûr(e) de vouloir annuler cet ordre ?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Comme beaucoup de gens n'ont pas 1000 dashs sous la main, CrowdNode a bâti un service qui permet à ses membres, par la réunion de leurs dépôts, de bénéficier des revenus de la propriété d'un masternode."; +/* DashSpend */ +"at" = "à"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "La recherche de distributeur fonctionne mieux lorsque les Services de Localisation sont activés"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "L'authentification n'est pas disponible"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Autorisé"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "en arrière"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Entre %1$ld et %2$ld caractères"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "entre 3 et 23 caractères"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Entre Dash Wallet et Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Entre Dash Wallet et votre compte Coinbase"; /* Voting */ -"Block" = "Block"; +"Block" = "Bloc"; /* No comment provided by engineer. */ "block #%d of %d" = "bloc #%1$d de %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Acheter une carte-cadeau"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Achetez une carte-cadeau avec Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Acheter et convertir des dashs avec une autre crypto"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Acheter des crédits"; /* No comment provided by engineer. */ "Buy Dash" = "Acheter du Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Achetez des dashs · Aucun compte requis"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Achetez des cartes-cadeau avec vos dashs"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Annuler cette transaction n'annule pas l'ordre de trading. Vous recevrez sous peu des dashs sur votre compte Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Code PIN de carte"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Modifier"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Basculer sur Intermédiaire"; +/* No comment provided by engineer. */ +"Check current balance" = "Vérifier le solde actuel"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Voir les réglages jour & heure"; /* No comment provided by engineer. */ "Check your connection" = "Vérifier votre connexion"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choisissez votre"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Entrées de caution CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "Création de coupures CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Mélange CoinJoin en cours"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Frais de mélange CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Confirmer"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirmer (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirmer le code PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contacter le service de soutien Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Contacter le support de CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Demande de contact en attente"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continuer"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Continuer quand même"; /* Coinbase Entry Point */ "Convert Crypto" = "Convertir les crypto"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Créer un compte"; +/* Create DashSpend account */ +"Create account" = "Créer le compte"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Créer un compte en ligne CrowdNode"; /* No comment provided by engineer. */ "Create invitation" = "Créer une invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Créer un compte en ligne"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Créez votre nom d'utilisateur"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Créer votre nom d'utilisateur, trouver des amis & membres de famille avec leurs noms d'utilisateur, et les ajouter à vos contacts"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Limites de retrait CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · Compte"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ DashWallet"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Adresse Dash attribuée à votre compte CrowdNode dans Dash Wallet sur cet appareil"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Solde Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Solde Dash sur Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Nom d'utilisateur Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Portefeuille Dash"; + /* Buy Dash */ "Dash Wallet on this device" = "Portefeuille Dash sur cet appareil"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Monnaie par défaut, raccourcis, à propos…"; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Réglage de filtre par défaut"; /* Location Service Status */ "Denied" = "Refusé"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Déconnecté"; +/* DashSpend confirmation */ +"Discount" = "Réduction"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Ignorer"; /* No comment provided by engineer. */ "Display Name" = "Afficher le nom"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "par exemple johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Chaque invitation percevra ce montant, et le bénéficiaire peut créer rapidement son nom d'utilisateur sur le réseau Dash"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Plus tôt"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Saisissez la phrase de récupération"; +/* Enter verification code */ +"Enter verification code" = "Entrez le code de vérification"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Tapez ci-dessous votre code 2FA"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Erreur"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Erreur en modifiant votre profil"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Erreur ·"; /* No comment provided by engineer. */ "Exit" = "Quitter"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtre"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filtrer les transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtré par"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtres"; -/* No comment provided by engineer. */ -"Find a merchant." = "Trouvez un vendeur."; - /* No comment provided by engineer. */ "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 à %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Premier dépôt minimum"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Montants fixes"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Montants flexibles"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Possibles mots manquants détectés :\n%@"; +/* DashSpend confirmation */ +"From" = "De"; + /* from CrowdNode */ "from CrowdNode" = "depuis CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "depuis votre compte Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Entièrement mélangé"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Percevez des récompenses grâce à vos transferts sur des masternodes Dash, dès la petite somme de 0,5 dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Carte-cadeau"; +/* No comment provided by engineer. */ +"Gift card" = "Carte-cadeau"; + +/* 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" = "Total carte-cadeau"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Types de cartes-cadeau"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Aller sur le site CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Voici une adresse Dash attribuée à votre compte CrowdNode dans Dash Wallet sur cet appareil"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Cacher"; /* adjective, security level */ "High" = "Élevé"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Comment confirmer votre adresse API Dash"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Comment utiliser une carte-cadeau"; +"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"; @@ -1058,7 +1124,10 @@ "I Accept" = "J'accepte"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "J'accepte"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "J'accepte les termes et conditions de DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Je reconnais que je perdrai tous mes fonds si je ne possède plus la phrase de récupération"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "En cours..."; +/* No comment provided by engineer. */ +"In store" = "En magasin"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Fonds insuffisants"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Fonds mélangés insuffisants. Veuillez attendre que le mélange CoinJoin se termine, ou bien désactivez cette fonction dans les réglages pour que la transaction soit exécutée."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Solde de portefeuille insuffisant"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Intermédiaire"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Le niveau intermédiaire de confidentialité réclame une connexion Internet fiable."; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transfert interne"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Montant invalide"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Adresse Dash non valide"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "QR-code non valide"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation créée avec succès"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Frais d'invitation"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation utilisée par"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Sur cet appareil, le transfert de dashs depuis Coinbase vers Dash Wallet peut prendre jusqu'à 10 minutes"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Il est conseillé d'être connecté à un réseau Wi-Fi pour éviter des frais de mélange supplémentaires"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Il serait très difficile, pour des utilisateurs avancés avec quelque niveau d'expertise technique, de déterminer votre historique de transaction"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Dernière mise à jour du serveur"; -/* No comment provided by engineer. */ -"Learn More" = "En savoir plus"; - /* Info Screen */ "Learn More..." = "En savoir plus…"; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Verrouillé"; +/* Log in */ +"Log in" = "Se connecter"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Se connecter à CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Se connecter à votre compte"; + +/* Log out button */ +"Log Out" = "Se déconnecter"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Se déconnecter d'Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Se connecter avec Face ID"; @@ -1389,10 +1488,10 @@ "Low to high" = "De bas à haut"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "Réseau principal"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Publiez le texte ci-dessus sur un réseau social connu ou une plateforme de messagerie pour vérifier que vous êtes le propriétaire véritable du nom d'utilisateur demandé, et collez le lien ci-dessous"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Gérer la permission GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "75 caractères maximum"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "La recherche de vendeurs marche mieux lorsque les services de localisation sont activés."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Solde de fonds mélangés"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Mélange"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Le mélange n'est possible qu'avec l'application ouverte"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Mélange en pause"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Transactions de mélange"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Mélanger vos dashs rendra vos transactions plus confidentielles"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Mélange en cours"; /* No comment provided by engineer. */ "More" = "Plus"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Réseau"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Frais de réseau"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Aucun résultat trouvé"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Plus de vote possible"; /* No comment provided by engineer. */ "Node IP" = "IP du nœud"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Aucun"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Adresse URL invalide"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Tous les magasins n'acceptent pas Dash directement, mais vous pouvez acheter une carte-cadeau avec vos dashs."; - /* Fiat amount */ "Not available" = "Non disponible"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Indéterminé"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Non démarré"; /* No comment provided by engineer. */ "Not yet used" = "Pas encore utilisé"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "D'ancien vers récent"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Une fois que %@ aura accepté votre demande, vous pourrez payer directement à son nom d'utilisateur"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Plus qu'un vote"; /* Online */ "Online" = "En ligne"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Prévisualisation de la commande"; +/* DashSpend */ +"Original purchase" = "Achat original"; + /* No comment provided by engineer. */ "Owner Address" = "Adresse du propriétaire"; /* No comment provided by engineer. */ "Owner Keys" = "Clés de propriétaire"; +/* DashSpend */ +"Password" = "Mot de passe"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Payez facilement"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Payer avec le portefeuille Dash."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paiement en cours"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paiement en cours..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Méthode de paiement"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Type de paiement"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Veuillez placer votre téléphone près de l'appareil NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Veuillez saisir les mots de votre phrase de récupération dans le bon ordre"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Veuillez l'écrire quelque part"; +/* No comment provided by engineer. */ +"Powered by" = "Fourni par"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Prévisualiser l'invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Achat"; +/* Alert title */ +"Purchase Failed" = "Échec de l'achat"; + /* No comment provided by engineer. */ "Quick Receive" = "Réception rapide"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "La phrase de récupération doit avoir 12, 15, 18, 21 ou 24 mots"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Profitez en ligne de votre carte-cadeau en quelques secondes ou auprès du responsable de la caisse."; - /* Button title, Register (username) */ "Register" = "Enregistrer"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Demander votre nom d'utilisateur"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Le nom d'utilisateur demandé a été bloqué"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Le nom d'utilisateur demandé a été accordé à quelqu'un d'autre"; /* An action */ "Rescan" = "Réanalyser"; @@ -1956,7 +2082,7 @@ "Restricted" = "Restreint"; /* Usernames */ -"Results" = "Results"; +"Results" = "Résultats"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "conserver un historique de vos transactions mutuelles"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Récompense"; -/* No comment provided by engineer. */ -"Rewards" = "Récompenses"; - /* No comment provided by engineer. */ "Save" = "Enregistrer"; +/* DashSpend */ +"Save %.2f%%" = "Économisez %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Enregistrer les modifications"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Les captures d'écran sont visibles aux autres applis et appareils. Générez une nouvelle phrase de récupération et gardez-la secrète."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Chercher"; /* No comment provided by engineer. */ "Search for a contact" = "Rechercher un contact"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Résultats de recherche pour \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Recherche du nom d'utilisateur %@ sur le réseau Dash"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Choisissez un service"; +/* DashSpend denomination selection */ +"Select amount" = "Choisir le montant"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Choisir l’explorateur de blocs"; /* No comment provided by engineer. */ "Select from Gallery" = "Choisir dans la galerie"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Choisir les pièces"; +/* No comment provided by engineer. */ +"Self-checkout" = "Paiement automatique"; + /* Sell */ "Sell" = "Vendre"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Envoyé à"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Mettre en place un nœud de confiance"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Voir la phase de récupération"; +/* Alert title */ +"Sign in required" = "Connexion requise"; + /* CrowdNode */ "Sign the message" = "Signer le message"; @@ -2195,7 +2339,7 @@ "Skip" = "Ignorer"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Certains noms d'utilisateur peuvent être bloqués"; /* No comment provided by engineer. */ "Something went wrong" = "Il y a eu un problème"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Trier les contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Trié par distance"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Arrêter le mélange"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Valider"; /* No comment provided by engineer. */ "Swept!" = "Récupéré !"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Échec de synchronisation"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Synchronisation en cours… Les résultats peuvent être encore incomplets."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Synchroniser maintenant"; @@ -2279,13 +2429,19 @@ "Tax Category" = "Catégorie de taxe"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Les dashs de test n'ont pas de valeur réelle, mais vous pouvez les envoyer et recevoir avec d'autres utilisateurs DashPay Alpha."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Les dashs de test sont gratuits et peuvent être obtenus par ce qu'on appelle un robinet."; /* 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."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "Réseau de test"; /* No comment provided by engineer. */ "The chain is syncing…" = "Synchronisation de la chaîne..."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "L'image que vous choisissez sera envoyée anonymement à Imgur."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Le lien que vous envoyez sera visible seulement par les propriétaires du réseau"; /* Coinbase */ "The minimum amount you can send is %@" = "Le montant minimal que vous pouvez envoyer est %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Cette étape supplémentaire montre que c'est vraiment vous qui essaie de faire une transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Ce fournisseur vend des cartes-cadeau à prix fixe"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Ce code PIN sera demandé pour déverrouiller votre app avant chaque utilisation."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "vers"; +/* DashSpend confirmation */ +"To" = "À"; + /* Coinbase */ "to Dash Wallet on this device" = "vers Dash Wallet sur cet appareil"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Pour empêcher d'autres gens de voir à qui vous faites des paiements, il est recommandé de mélanger votre solde avant de créer votre nom d'utilisateur."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Pour commencer à investir, créez un compte sur CrowdNode ou connectez-vous à un compte existant."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "vers l'adresse Dash associée à votre compte CrowdNode dans le Dash Wallet de cet appareil"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Aujourd'hui"; /* No comment provided by engineer. */ "Tools" = "Outils"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Rechargez vos crédits pour continuer à modifier votre profil et à ajouter des contacts"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limite pour TouchID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Historique des transactions"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Activer le code d'accès de l'appareil"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Désactivé"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Activer cette fonction entraînera une plus grande utilisation de la batterie."; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Impossible de transmettre votre image. Veuillez réessayer."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Débloquer"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Nom d'utilisateur disponible"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Le nom d'utilisateur est disponible"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Voter est requis seulement dans certains cas"; /* No comment provided by engineer. */ "Voting Keys" = "Clés de vote"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Nous n'avons pu faire un retrait depuis votre compte CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Nous avons 2 types de vendeurs"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Nous avons détecté que Dash Wallet a planté pendant la migration. Réinspecter la blockchain résoudra ce problème, ou bien vous pouvez réessayer. La réinspection doit être faite de préférence sur un réseau wifi et peut prendre jusqu'à une demi-heure. Vos fonds seront disponibles quand la synchronisation sera achevée."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Nous avons mis à jour"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Quand la transaction sera confirmée, l'autre portefeuille ne contiendra plus de fonds, et il ne devra pas être réutilisé pour des raisons de sécurité."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Quand vous fermez l'application ou que vous verrouillez l'écran, le mélange se met en pause. Il reprendra quand vous réouvrirez l'application."; /* No comment provided by engineer. */ "Where to Spend" = "Où dépenser"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Souhaitez-vous accepter l'invitation ?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Souhaitez-vous faire un dépôt pour votre achat en utilisant un compte bancaire lié ?"; @@ -2774,7 +2945,7 @@ "Yes" = "Oui"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Hier"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Vous avez accepté la demande de contact de %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Vous êtes sur le point d'effacer ce portefeuille de cet appareil. Les fonds associés à ce portefeuille ne peuvent être récupérés que si vous avez votre phrase de récupération."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Vous pouvez toujours effacer l'image transmise, tant que vous avez accès à ce portefeuille."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Vous pouvez modifier comment et quand vos gains de récompense vous sont payés."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Vous pouvez continuer à utiliser DashPay pour des paiements, mais vous ne pouvez pas mettre à jour votre profil ou ajouter des contacts sans recharger votre solde de crédits"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Saisissez votre clé dans un de ces formats : WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Vous pouvez consulter des informations détaillées sur vos transferts, vos retraits et vos gains de récompense."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Vous ne pouvez pas réclamer cette invitation car vous avez déjà un nom d'utilisateur Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Vous n'avez aucun contact pour l'instant"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Vous n'avez pas assez de fonds pour terminer cette transaction"; + /* Coinbase */ "You don’t have enough balance" = "Vous n'avez pas un solde suffisant"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Vous devez attendre 5 minutes avant de lancer un autre retrait"; /* CrowdNode */ "You only need %@ to join the pool." = "Vous avez seulement besoin de %@ pour rejoindre le groupe."; +/* DashSpend confirmation */ +"You pay" = "Vous payez"; + /* Coinbase */ "You receive" = "Vous recevez"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Vous recevrez automatiquement les paiements partiels, et ils seront réinvestis par défaut. Cependant, il est également simple d'opter pour des retraits automatiques pour recevoir les paiements récurrents."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Votre solde de crédits a été entièrement épuisé"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Votre solde de crédits est bas"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Votre compte CrowdNode est en cours de création..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Votre compte CrowdNode est créé et prêt à être utilisé !"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Votre compte CrowdNode a été créé en utilisant ces transactions."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Votre adresse CrowdNode a été confirmée."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Votre transfert vers CrowdNode a été reçu."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "L'heure de votre appareil est %1$@ de %2$d secondes. Vous ne pouvez pas utiliser CoinJoin en raison de cette différence.\n\nLe réglage de l'heure de votre appareil doit être mis sur “Réglage de l'heure automatique” pour pouvoir utiliser CoinJoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "L'heure de votre appareil est décalée de %d minutes. C'est sans doute en raison de ce problème que vous ne pouvez envoyer ni recevoir de dashs.\n\nIl vous est conseillé de vérifier (voire de corriger) la date, l'heure et le fuseau horaire dans les réglages de l'appareil."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "L'heure de votre appareil est décalée de plus de 5 secondes. Vous ne pouvez pas utiliser CoinJoin en raison de cette différence.\n\nLe réglage de l'heure de votre appareil doit être mis sur “Réglage de l'heure automatique” pour pouvoir utiliser CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Votre adresse e-mail n'est pas stockée dans le portefeuille DashPay, ni sur aucun serveur. Elle est utilisée une seule fois pour obtenir les détails de votre compte Gravatar, puis elle est oubliée."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Votre adresse e-mail n'est utilisée que pour vous envoyer un mot de passe temporaire."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Votre invitation par %@ a déjà été réclamée"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Votre demande a été annulée"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Votre transaction a été envoyée et le montant devrait apparaître dans votre portefeuille sous quelques minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Votre nom d'utilisateur %@ a bien été créé sur le réseau Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/hr.lproj/Localizable.strings b/DashWallet/hr.lproj/Localizable.strings index b56a5f9ce..53142f916 100644 --- a/DashWallet/hr.lproj/Localizable.strings +++ b/DashWallet/hr.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Spremi"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/hu.lproj/Localizable.strings b/DashWallet/hu.lproj/Localizable.strings index cba6422f3..26005937f 100644 --- a/DashWallet/hu.lproj/Localizable.strings +++ b/DashWallet/hu.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Megerősítés"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dash egyenleg"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Elvet"; /* No comment provided by engineer. */ "Display Name" = "Display Name"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Írd be alább a 2FA kódodat"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Hiba"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Szűrő"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Zárolva"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Kijelentkezés"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Kijelentkezés az Uphold-ból"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Hálózat"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Hálózati díj"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Tulajdonosi Kulcsok"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Helyezd a telefonod az NFC eszköz közelébe."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Mentés"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID összeghatár"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/id.lproj/Localizable.strings b/DashWallet/id.lproj/Localizable.strings index 6463c1fee..0ed4efe36 100644 --- a/DashWallet/id.lproj/Localizable.strings +++ b/DashWallet/id.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ tidak diizinkan mengakses Pengenal Sentuh"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu kontak / %3$lu pembaruan profil"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d suara akan diberikan karena Anda memiliki beberapa kunci pemungutan suara yang disimpan di dompet"; /* Voting */ "%ld duplicates" = "%ld duplikat"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Terima"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Terima Ketentuan Penggunaan"; /* CrowdNode */ "Accepting terms of use…" = "Menerima persyaratan penggunaan…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Menerima DASH secara langsung"; - /* CrowdNode */ "Account Recovery" = "Pemulihan Akun"; @@ -152,7 +155,7 @@ "Advanced" = "Lanjutan"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Tingkat privasi tingkat lanjut memerlukan koneksi internet yang andal"; /* No comment provided by engineer. */ "Advanced Security" = "Keamanan Tingkat Lanjut"; @@ -167,7 +170,7 @@ "Agree" = "Setuju"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "lebih awal"; /* No comment provided by engineer. */ "All" = "Semua"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Jumlah Dikirim"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Pengalaman intuitif dan akrab di semua perangkat Anda"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "dan"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Aplikasi %@ ingin menerima Master Kunci Publik Anda. Ini dapat digunakan untuk melacak dompet Anda, ini tidak dapat digunakan untuk memindahkan Dash Anda."; +/* No comment provided by engineer. */ +"Apply" = "Terapkan"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Anda yakin ingin membatalkan pesanan ini?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Karena kebanyakan orang tidak memiliki 1000 Dash, Crowdnode telah membuat layanan di mana, dengan mengumpulkan simpanan dari anggota, mereka dapat memperoleh keuntungan dari memiliki Masternode."; +/* DashSpend */ +"at" = "pada"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Pencarian ATM berfungsi lebih baik dengan Layanan Lokasi diaktifkan"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Otentikasi tidak tersedia"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Resmi"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "dibelakang"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Antara %1$ld dan %2$ld karakter"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Antara 3 dan 23 karakter"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Antara Dompet Dash dan Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Antara Dash Wallet dan akun Coinbase Anda"; /* Voting */ -"Block" = "Block"; +"Block" = "Blok"; /* No comment provided by engineer. */ "block #%d of %d" = "blok #%1$d dari %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Beli Kartu Hadiah"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Beli kartu hadiah dengan Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Beli dan konversikan Dash dengan crypto lain"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Beli kredit"; /* No comment provided by engineer. */ "Buy Dash" = "Beli Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Beli Dash · Tidak memerlukan akun"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Beli kartu hadiah dengan Dash Anda"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Membatalkan transaksi ini tidak membatalkan pesanan perdagangan. Anda akan segera menerima DASH di akun Coinbase Anda."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN kartu"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Ubah"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Ubah ke Menengah"; +/* No comment provided by engineer. */ +"Check current balance" = "Periksa saldo saat ini"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Periksa pengaturan tanggal & waktu"; /* No comment provided by engineer. */ "Check your connection" = "Periksa koneksi anda"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Pilih Anda"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; +"CoinJoin Collateral Inputs" = "Input Agunan CoinJoin"; /* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Create Denominations" = "CoinJoin Buat Denominasi"; /* CoinJoin */ "CoinJoin Mixing" = "CoinJoin Mixing"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; - -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Biaya CoinJoin Mixing"; /* No comment provided by engineer. */ "Confirm" = "Memastikan"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "konfirmasi (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Pastikan PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Hubungi Dukungan Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Hubungi dukungan CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Permintaan Kontak Tertunda"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Kontak"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Teruskan"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Lanjutkan"; /* Coinbase Entry Point */ "Convert Crypto" = "Konversi Kripto"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Buat Akun"; +/* Create DashSpend account */ +"Create account" = "Buat akun"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Buat akun CrowdNode online"; /* No comment provided by engineer. */ "Create invitation" = "Buat undangan"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Buat Akun Online"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Buat Nama Pengguna anda"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Buat Nama Pengguna Anda, temukan teman & keluarga dengan nama pengguna mereka dan tambahkan ke kontak Anda"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Batas penarikan CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · Akun"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ DashWallet"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Alamat dash yang ditujukan untuk akun CrowdNode Anda di Dash Wallet pada perangkat ini"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Saldo Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash di Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Nama pengguna Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dompet Dash"; + /* Buy Dash */ "Dash Wallet on this device" = "Dompet Dash di perangkat ini"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Mata uang standar, pintasan, tentang ..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Pengaturan filter default"; /* Location Service Status */ "Denied" = "Ditolak"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Terputus"; +/* DashSpend confirmation */ +"Discount" = "Diskon"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Tolak"; /* No comment provided by engineer. */ "Display Name" = "Nama Tampilan"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "misalnya johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Setiap undangan akan didanai dengan jumlah ini sehingga penerima dapat dengan cepat membuat nama pengguna mereka di Jaringan Dash"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Sebelumnya"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Masukkan Frasa pemulihan"; +/* Enter verification code */ +"Enter verification code" = "Masukkan Kode verifikasi"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Masukkan kode 2FA Anda di bawah ini"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Kesalahan"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Terjadi kesalahan saat memperbarui profil Anda"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Kesalahan ·"; /* No comment provided by engineer. */ "Exit" = "Keluar"; @@ -842,7 +881,7 @@ "Export all transactions" = "Ekspor semua transaksi"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Ekspor CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Kunci Publik Diperpanjang"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Menyaring"; /* No comment provided by engineer. */ -"Filter Transactions" = "Saring Transaksi"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Difilter menurut"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Menyaring"; -/* No comment provided by engineer. */ -"Find a merchant." = "Cari pedagang."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Temukan pengguna di Jaringan Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Setoran minimum pertama"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Jumlah denominasi tetap"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Jumlah yang fleksibel"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Menemukan kata-kata potensial yang hilang:\n%@"; +/* DashSpend confirmation */ +"From" = "Dari"; + /* from CrowdNode */ "from CrowdNode" = "dari CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "dari akun Coinbase Anda"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Tercampur sepenuhnya"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Dapatkan hadiah dari deposit di Dash Masternodes hanya dengan 0,5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Kartu ucapan"; +/* No comment provided by engineer. */ +"Gift card" = "Kartu Hadiah"; + +/* 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" = "Total kartu hadiah"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Tipe kartu hadiah"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Buka situs web CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Berikut adalah alamat Dash yang ditujukan untuk akun CrowdNode Anda di Dash Wallet pada perangkat ini"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Sembunyikan"; /* adjective, security level */ "High" = "Tinggi"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Bagaimana cara mengonfirmasi API alamat Dash Anda"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Cara Menggunakan Kartu Hadiah"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Kunci Evolution Node ID"; @@ -1058,7 +1124,10 @@ "I Accept" = "Saya terima"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Saya terima"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Say menerima syarat dan ketentuan DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Saya menerima bahwa saya akan kehilangan koin saya jika saya tidak lagi memiliki frasa pemulihan"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "Dalam proses…"; +/* No comment provided by engineer. */ +"In store" = "Di toko"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Dana tidak mencukupi"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Dana campuran tidak mencukupi. Tunggu hingga pencampuran CoinJoin selesai atau nonaktifkan fitur ini di pengaturan untuk menyelesaikan transaksi ini."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Saldo Wallet tidak mencukupi"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Menengah"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Tingkat privasi menengah memerlukan koneksi internet yang andal"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transfer Internal"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Jumlah tidak valid"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Alamat Dash Salah"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Kode QR tidak valid"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Undangan"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Undangan Berhasil Dibuat"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Biaya Undangan"; /* No comment provided by engineer. */ "Invitation used by" = "Undangan telah digunakan oleh"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Diperlukan waktu hingga 10 menit untuk mentransfer Dash dari Coinbase ke Dash Wallet di perangkat ini"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Disarankan untuk menggunakan jaringan Wi-Fi untuk menghindari biaya mixing tambahan"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Akan sangat sulit bagi pengguna tingkat lanjut dengan tingkat keahlian teknis apa pun untuk menentukan riwayat transaksi Anda"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Pembaruan server terakhir"; -/* No comment provided by engineer. */ -"Learn More" = "Pelajari lebih lanjut"; - /* Info Screen */ "Learn More..." = "Pelajari lebih lanjut..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Terkunci"; +/* Log in */ +"Log in" = "Masuk"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Masuk ke CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Masuk ke akun anda"; + +/* Log out button */ +"Log Out" = "Keluar"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Keluar dari Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Masuk dengan Pengenal Wajah"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Buat postingan dengan teks di atas di media sosial atau platform perpesanan terkenal untuk memverifikasi bahwa Anda adalah pemilik asli nama pengguna yang diminta dan tempel tautan di bawah"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Kelola Izin GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maksimum 75 karakter"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Pencarian pedagang bekerja lebih baik dengan Layanan Lokasi diaktifkan."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Saldo Tercampur"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Pencampuran"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Pencampuran hanya dapat dilakukan dengan membuka aplikasi"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Pencampuran Dijeda ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Mencampur Transaksi"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Mencampur koin Dash Anda akan membuat transaksi Anda lebih pribadi"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Pencampuran ·"; /* No comment provided by engineer. */ "More" = "Lebih"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Jaringan"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Biaya jaringan"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Tidak ada hasil yang ditemukan"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Tidak ada suara tersisa"; /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Tidak ada"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Bukan URL yang valid"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Tidak semua toko menerima DASH secara langsung, tetapi Anda dapat membeli kartu hadiah dengan Dash."; - /* Fiat amount */ "Not available" = "Tak tersedia"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Tidak ditentukan"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Belum dimulai"; /* No comment provided by engineer. */ "Not yet used" = "Belum digunakan"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Lama ke Baru"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Setelah %@ menerima permintaan Anda, Anda dapat Membayar Langsung ke Nama Pengguna"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Satu suara tersisa"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Pratinjau Pesanan"; +/* DashSpend */ +"Original purchase" = "Pembelian asli"; + /* No comment provided by engineer. */ "Owner Address" = "Alamat pemilik"; /* No comment provided by engineer. */ "Owner Keys" = "Kunci Pemilik"; +/* DashSpend */ +"Password" = "Kata sandi"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Bayar dengan Mudah"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Bayar dengan dompet DASH"; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Membayar"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Membayar..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Metode pembayaran"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipe Pembayaran"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Silakan letakkan ponsel Anda di dekat perangkat NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Ketuk kata-kata dari frasa pemulihan Anda dalam urutan yang benar"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Tolong catat"; +/* No comment provided by engineer. */ +"Powered by" = "Didukung Oleh"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Pratinjau Undangan"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Beli"; +/* Alert title */ +"Purchase Failed" = "Pembelian gagal"; + /* No comment provided by engineer. */ "Quick Receive" = "Terima Cepat"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Frasa pemulihan harus memiliki 12, 15, 18, 21, atau 24 kata"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Tukarkan kartu hadiah Anda secara online dalam hitungan detik atau di kasir."; - /* Button title, Register (username) */ "Register" = "Daftar"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Minta Nama Pengguna anda"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Nama pengguna yang diminta telah diblokir"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Nama pengguna yang diminta telah diberikan kepada orang lain"; /* An action */ "Rescan" = "Pindai ulang"; @@ -1956,7 +2082,7 @@ "Restricted" = "Terbatas"; /* Usernames */ -"Results" = "Results"; +"Results" = "Hasil"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Simpan Sejarah Transaksi Bersama"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Hadiah"; -/* No comment provided by engineer. */ -"Rewards" = "Hadiah"; - /* No comment provided by engineer. */ "Save" = "Simpan"; +/* DashSpend */ +"Save %.2f%%" = "Simpan %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Simpan Perubahan"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Tangkapan layar terlihat oleh aplikasi dan perangkat lain. Hasilkan frasa pemulihan baru dan jaga kerahasiaannya."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Cari"; /* No comment provided by engineer. */ "Search for a contact" = "Cari kontak"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Hasil pencarian \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Mencari nama pengguna %@ di jaringan Dash"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Pilih layanan"; +/* DashSpend denomination selection */ +"Select amount" = "Pilih jumlah"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Pilih penjelajah blok"; /* No comment provided by engineer. */ "Select from Gallery" = "Pilih dari galeri"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Pilih koin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Pembayaran mandiri"; + /* Sell */ "Sell" = "Jual"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Terkirim ke"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Tetapkan node tepercaya"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Tampilkan Frasa pemulihan"; +/* Alert title */ +"Sign in required" = "Diperlukan masuk"; + /* CrowdNode */ "Sign the message" = "Tandatangani pesan"; @@ -2195,7 +2339,7 @@ "Skip" = "Lewati"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Beberapa nama pengguna dapat diblokir"; /* No comment provided by engineer. */ "Something went wrong" = "Ada yang salah"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Urutkan kontak"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Diurutkan berdasarkan jarak"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Hentikan Mixing"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Kirim"; /* No comment provided by engineer. */ "Swept!" = "bersihkan!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sinkronisasi Gagal"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sinkronisasi sedang berlangsung... Hasil mungkin tidak lengkap."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sinkronkan Sekarang"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Kategori Pajak"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash tidak memiliki nilai apa pun di dunia nyata tetapi Anda dapat mengirim dan menerimanya dengan pengguna DashPay Alpha lainnya."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash gratis dan dapat diperoleh melalui apa yang disebut 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Gambar yang Anda pilih akan diunggah ke Imgur secara anonim."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Tautan yang Anda kirimkan hanya akan terlihat oleh pemilik jaringan"; /* Coinbase */ "The minimum amount you can send is %@" = "Jumlah minimum yang dapat Anda kirim adalah %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Langkah ekstra ini menunjukkan bahwa Anda benar-benar mencoba melakukan transaksi."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Pedagang ini menjual kartu hadiah dengan harga tetap"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "PIN ini akan diperlukan untuk membuka kunci aplikasi Anda setiap kali saat Anda menggunakannya."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "ke"; +/* DashSpend confirmation */ +"To" = "Ke"; + /* Coinbase */ "to Dash Wallet on this device" = "ke Dash Wallet di perangkat ini"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Untuk membantu mencegah orang lain melihat kepada siapa Anda melakukan pembayaran, disarankan untuk mencampur saldo Anda sebelum Anda membuat nama pengguna."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Untuk memulai staking, buat akun di CrowdNode atau hubungkan ke akun yang sudah ada."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "ke alamat Dash yang ditunjuk untuk akun CrowdNode Anda di Dash Wallet pada perangkat ini"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Hari ini"; /* No comment provided by engineer. */ "Tools" = "Alat"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Isi ulang kredit Anda untuk terus melakukan perubahan pada profil Anda dan menambahkan kontak"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "ID sentuhan terbatas"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Riwayat Transaksi"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Aktifkan kode sandi perangkat"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Mati"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Mengaktifkan fitur ini akan menghasilkan penggunaan baterai yang lebih tinggi"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Tidak dapat mengunggah gambar Anda. Silakan coba lagi."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "buka blokir"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Nama pengguna tersedia"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Nama pengguna tersedia"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Pemungutan suara hanya diperlukan dalam beberapa kasus"; /* No comment provided by engineer. */ "Voting Keys" = "Kunci pemungutan suara"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Kami tidak dapat menarik dana dari akun CrowdNode Anda."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Kami memiliki 2 jenis pedagang"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Kami telah mendeteksi bahwa Dash Wallet macet selama migrasi. Memindai ulang blockchain akan menyelesaikan masalah ini atau Anda dapat mencoba lagi. Pemindaian ulang sebaiknya dilakukan pada wifi dan akan memakan waktu hingga setengah jam. Dana Anda akan tersedia setelah proses sinkronisasi selesai."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Kami meningkatkan"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Ketika transaksi dikonfirmasi, dompet lainnya tidak akan berharga dan tidak boleh digunakan kembali untuk alasan keamanan."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Saat Anda menutup aplikasi atau mengunci layar, proses pencampuran akan berhenti. Proses ini akan dilanjutkan saat Anda membuka kembali aplikasi."; /* No comment provided by engineer. */ "Where to Spend" = "Dimana harus Belanja"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Apakah Anda ingin menerima undangan?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Apakah Anda ingin melakukan deposit untuk pembelian Anda menggunakan rekening bank yang tertaut?"; @@ -2774,7 +2945,7 @@ "Yes" = "Ya"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Kemarin"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Anda menerima permintaan kontak dari %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Anda akan menghapus dompet ini dari perangkat ini. Dana yang terkait dengan dompet ini hanya dapat diambil jika Anda memiliki frasa pemulihan."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Anda selalu dapat menghapus gambar yang diunggah, selama Anda memiliki akses ke dompet ini."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Anda dapat mengubah bagaimana / kapan penghasilan hadiah Anda dibayarkan kepada Anda."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Anda dapat terus menggunakan DashPay untuk pembayaran tetapi Anda tidak dapat memperbarui profil Anda atau menambahkan lebih banyak kontak sampai Anda mengisi saldo kredit Anda"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Anda dapat memasukkan kunci Anda dalam salah satu format berikut: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Anda dapat melihat informasi terperinci tentang setoran, penarikan, dan hadiah penghasilan Anda."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Anda tidak dapat mengklaim undangan ini karena Anda sudah memiliki nama pengguna Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Anda tidak memiliki kontak saat ini"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Anda tidak memiliki dana yang cukup umtuk memyelesaikan pembayaran ini"; + /* Coinbase */ "You don’t have enough balance" = "Anda tidak memiliki cukup saldo"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Anda harus menunggu 5 menit sebelum memulai penarikan lainnya"; /* CrowdNode */ "You only need %@ to join the pool." = "Anda hanya perlu %@ bergabung dengan pool."; +/* DashSpend confirmation */ +"You pay" = "Anda membayar"; + /* Coinbase */ "You receive" = "Anda menerima"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Anda akan menerima pembayaran pecahan secara otomatis dan secara default akan diinvestasikan kembali, namun,mudah juga untuk mengatur penarikan otomatis untuk menerima pembayaran berulang."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Saldo kredit Anda telah terkuras sepenuhnya"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Saldo kredit Anda rendah"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Akun CrowdNode Anda sedang membuat…"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Akun CrowdNode Anda sudah disiapkan dan siap digunakan!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Akun CrowdNode Anda dibuat menggunakan transaksi ini."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Alamat CrowdNode Anda telah dikonfirmasi."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Setoran Anda ke CrowdNode diterima."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Waktu perangkat anda %1$@ dalam %2$d Detik. Anda tidak dapat menggunakan CoinJoin karena perbedaan ini.\n\nPengaturan waktu pada perangkat Anda perlu diubah ke “Atur waktu secara otomatis” untuk menggunakan CoinJoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Waktu perangkat Anda berkurang %d menit. Anda mungkin tidak dapat mengirim atau menerima Dash karena masalah ini.\n\nAnda harus memeriksa dan jika perlu mengoreksi pengaturan tanggal, waktu, dan zona waktu Anda."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Waktu perangkat Anda berbeda lebih dari 5 detik. Anda tidak dapat menggunakan CoinJoin karena perbedaan ini.\n\nPengaturan waktu pada perangkat Anda perlu diubah ke “Atur waktu secara otomatis” sebelum menggunakan CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Email Anda tidak disimpan di dompet DashPay atau di server mana pun. Ini digunakan sekali untuk mendapatkan detail akun Gravatar Anda dan kemudian dibuang."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Email anda hanya digunakan untuk mengirim one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Undangan Anda dari %@ telah diklaim"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Permintaan anda telah dibatalkan"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Transaksi Anda telah dikirim dan jumlahnya akan muncul di dompet Anda dalam beberapa menit."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Nama pengguna anda %@ telah sukses dibuat di jaringan Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/it.lproj/Localizable.strings b/DashWallet/it.lproj/Localizable.strings index 7f9e6b2df..276d23c82 100644 --- a/DashWallet/it.lproj/Localizable.strings +++ b/DashWallet/it.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ non hai dato il permesso al sensore biometrico digitale"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contatti / %3$lu aggiornamenti del profilo"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d i voti verranno espressi poiché nel portafoglio sono memorizzate più chiavi di voto"; /* Voting */ "%ld duplicates" = "%ld duplicati"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accetta"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accetta i termini di utilizzo"; /* CrowdNode */ "Accepting terms of use…" = "Accettazione delle condizioni d'uso..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accetta DASH direttamente"; - /* CrowdNode */ "Account Recovery" = "Recupero dell'account"; @@ -152,7 +155,7 @@ "Advanced" = "Avanzate"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Il livello di privacy avanzato richiede una connessione Internet affidabile"; /* No comment provided by engineer. */ "Advanced Security" = "Sicurezza Avanzata"; @@ -167,7 +170,7 @@ "Agree" = "Acconsento"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "avanti"; /* No comment provided by engineer. */ "All" = "Tutte"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Importo Inviato"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Un'esperienza intuitiva e familiare su tutti i tuoi dispositivi"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "e"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "L'applicazione %@vorrebbe ricevere la tua Chiave Pubblica Principale. Può essere utilizzata per tracciare il tuo portafoglio, ma non può essere usata per spostare i tuoi Dash."; +/* No comment provided by engineer. */ +"Apply" = "Applica"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Sei sicuro di voler annullare questo ordine?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Poiché la maggior parte delle persone non ha esattamente 1000 Dash a portata di mano, CrowdNode ha creato un servizio in cui, mettendo in comune i depositi dei membri, è possibile ottenere i vantaggi di possedere un Masternode."; +/* DashSpend */ +"at" = "a"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "La ricerca di un ATM funziona meglio con i servizi di localizzazione attivati"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "L'autenticazione non è disponibile"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Autorizzato"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "indietro"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Tra %1$ld e %2$ld caratteri\n "; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Tra 3 e 23 caratteri"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Tra Dash Wallet e Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Tra Dash Wallet e il tuo account Coinbase"; /* Voting */ -"Block" = "Block"; +"Block" = "Blocchi"; /* No comment provided by engineer. */ "block #%d of %d" = "blocco #%1$d di %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Acquista una carta regalo "; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Acquista una carta regalo con Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Acquista o scambia Dash con un'altra criptovaluta"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Acquista crediti"; /* No comment provided by engineer. */ "Buy Dash" = "Compra Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Acquista Dash · Nessun account necessario"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Acquista carte regalo con Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "L'annullamento di questa transazione non annulla l'ordine commerciale. A breve riceverai DASH sul tuo account Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN della carta"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Cambiare"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Passare ad Intermedio"; +/* No comment provided by engineer. */ +"Check current balance" = "Controlla il saldo attuale"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Controlla le impostazioni di data e ora"; /* No comment provided by engineer. */ "Check your connection" = "Controlla la connessione"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Scegli il tuo"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Collaterale Input CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin Crea denominazioni"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Miscelazione CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Commissione di miscelazione CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Conferma"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confermare (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Conferma PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contatta il supporto di Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Contatta il supporto CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Richiesta di contatto in sospeso"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Contatti"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continua"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Continua comunque"; /* Coinbase Entry Point */ "Convert Crypto" = "Converti criptovalute"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Crea un Account"; +/* Create DashSpend account */ +"Create account" = "Crea un account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Crea un account CrowdNode online"; /* No comment provided by engineer. */ "Create invitation" = "Crea invito"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Crea un account online"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Crea il tuo nome utente"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Crea il tuo Username, trova amici e familiari con i loro Usernames e aggiungili ai tuoi contatti"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Indirizzo Dash designato per il tuo account CrowdNode nel Dash Wallet su questo dispositivo"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Bilancio Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash su Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Nome utente Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet su questo dispositivo"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Valuta predefinita, scorciatoie, riguardo ..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Impostazione del filtro predefinita"; /* Location Service Status */ "Denied" = "Nega"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Disconnesso"; +/* DashSpend confirmation */ +"Discount" = "Sconto"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Chiudi"; /* No comment provided by engineer. */ "Display Name" = "Nome da visualizzare"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "esempio: johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Ogni invito sarà finanziato con questo importo in modo che il destinatario possa creare rapidamente il proprio Username Nella Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Prima"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Inserisci la Frase di Recupero"; +/* Enter verification code */ +"Enter verification code" = "Inserisci il codice di verifica"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Inserisci il tuo codice 2FA di seguito"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Errore"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Errore durante l'aggiornamento del tuo profilo "; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Errore ·"; /* No comment provided by engineer. */ "Exit" = "Esci"; @@ -842,7 +881,7 @@ "Export all transactions" = "Esporta tutte le transazioni"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Exporta CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Chiavi pubbliche estese"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtro"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filtra Transazioni"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtrato per"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtri"; -/* No comment provided by engineer. */ -"Find a merchant." = "Cerca un commerciante."; - /* No comment provided by engineer. */ "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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Primo deposito minimo"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Importi denominati in maniera fissa"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Importi flessibili"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Trovare potenziali parole mancanti:\n%@"; +/* DashSpend confirmation */ +"From" = "Da"; + /* from CrowdNode */ "from CrowdNode" = "da CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "dal tuo conto Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Completamente miscelato"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Ottieni ricompense dai depositi in Dash Masternodes con un minimo di 0,5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Carta Regalo"; + +/* 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" = "Totale buono regalo"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Tipologie di gift card"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Vai al sito Web CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Ecco un indirizzo Dash designato per il tuo account CrowdNode nel Dash Wallet su questo dispositivo"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Nascondere"; /* adjective, security level */ "High" = "Alto"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Come confermare il tuo indirizzo API Dash"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Come utilizzare una carta regalo"; +"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"; @@ -1058,7 +1124,10 @@ "I Accept" = "Accetto"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Accetto"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Accetto i termini e le condizioni di DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Accetto di perdere le mie monete se non possiedo la frase di recupero"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "Processo in corso..."; +/* No comment provided by engineer. */ +"In store" = "Disponibile"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Fondi insufficenti"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Fondi misti insufficienti. Attendi il completamento del mixaggio di CoinJoin o disabilita questa funzione nelle impostazioni per completare questa transazione."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Saldo del portafoglio insufficiente"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Intermedio"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Il livello di privacy intermedio richiede una connessione Internet affidabile"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Trasferimento Interno"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Importo non valido"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Indirizzo Dash non valido"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code Non Valido"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invito"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invito creato con successo"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Commissione di invito"; /* No comment provided by engineer. */ "Invitation used by" = "Invito utilizzato da"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Potrebbero essere necessari fino a 10 minuti per trasferire Dash da Coinbase a Dash Wallet su questo dispositivo"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Si consiglia di utilizzare una rete Wi-Fi per evitare di incorrere in costi di mixaggio aggiuntivi"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Sarebbe molto difficile per gli utenti avanzati con qualsiasi livello di competenza tecnica determinare la cronologia delle transazioni"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Ultimo aggiornamento del server"; -/* No comment provided by engineer. */ -"Learn More" = "Per saperne di più"; - /* Info Screen */ "Learn More..." = "Per saperne di più..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Bloccato"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Accedi a CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Esegui il Log in al tuo account"; + +/* Log out button */ +"Log Out" = "Esci"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Esci da Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Accedi con Face ID"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Pubblica un post con il testo sopra su un social media o una piattaforma di messaggistica ben nota per verificare di essere il proprietario originale del nome utente richiesto e incolla il collegamento qui sotto"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Gestisci l'autorizzazione GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Massimo 75 caratteri"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "La ricerca commerciante funziona meglio con i servizi di localizzazione attivati."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,22 +1554,22 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Bilancio del miscelato"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Miscelazione"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Il mixaggio è possibile solo con l'app aperta"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Miscelamento in Pausa ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Transazioni miste"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Mixare i tuoi Dash renderà le tue transazioni più private"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Commissione di rete"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Nessun risultato trovato"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Nessun voto rimasto"; /* No comment provided by engineer. */ "Node IP" = "IP Nodo"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Nessuno"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Non è un URL valido"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Non tutti i negozi accettano direttamente DASH, ma puoi acquistare una carta regalo con Dash."; - /* Fiat amount */ "Not available" = "Non disponibile"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Non determinato"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Non iniziato"; /* No comment provided by engineer. */ "Not yet used" = "Non ancora usato"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Dal vecchio al nuovo"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Una volta che %@ accetta la tua richiesta, puoi pagare direttamente al nome utente"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Ti rimane un voto"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Anteprima dell'ordine"; +/* DashSpend */ +"Original purchase" = "Acquisto originale"; + /* No comment provided by engineer. */ "Owner Address" = "Indirizzo del proprietario"; /* No comment provided by engineer. */ "Owner Keys" = "Chiavi proprietario"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Paga con facilità"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Paga con il DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Pagamento in corso"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Pagamento in corso..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Metodo di pagamento"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipo di Pagamento"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Perfavore posiziona il tuo telefono vicino al dispositivo NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Si prega di toccare le parole dalla frase di recupero nel giusto ordine"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Per favore scrivilo di seguito"; +/* No comment provided by engineer. */ +"Powered by" = "Offerto da"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Anteprima dell'invito"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Acquisto"; +/* Alert title */ +"Purchase Failed" = "Acquisto fallito"; + /* No comment provided by engineer. */ "Quick Receive" = "Rapido Ricevi"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "La frase di recupero deve avere 12, 15, 18, 21 o 24 parole"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Riscatta la tua carta regalo online in pochi secondi o alla cassa."; - /* Button title, Register (username) */ "Register" = "Registrati"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Richiedi il tuo nome utente"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Il nome utente richiesto è stato bloccato"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Il nome utente richiesto è stato assegnato a qualcun altro"; /* An action */ "Rescan" = "Riscansiona"; @@ -1956,7 +2082,7 @@ "Restricted" = "Limitato"; /* Usernames */ -"Results" = "Results"; +"Results" = "Risultati"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Conserva la cronologia delle transazioni reciproche"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Ricompensa"; -/* No comment provided by engineer. */ -"Rewards" = "Ricompense"; - /* No comment provided by engineer. */ "Save" = "Salva"; +/* DashSpend */ +"Save %.2f%%" = "Salva %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Salva le modifiche"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Gli screenshot sono visibili ad altri dispositivi e applicazioni. Genera una nuova frase di recupero e tienila segreta."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Cerca"; /* No comment provided by engineer. */ "Search for a contact" = "Cerca un contatto"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Cerca risultati per \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Ricerca del nome utente %@ nel network di Dash"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Seleziona un servizio"; +/* DashSpend denomination selection */ +"Select amount" = "Seleziona l'importo"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Seleziona il block explorer"; /* No comment provided by engineer. */ "Select from Gallery" = "Seleziona dalla Galleria"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Seleziona una coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Pagamento automatico"; + /* Sell */ "Sell" = "Vendi"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Inviato a"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Impostare un nodo affidabile"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostra la frase di recupero"; +/* Alert title */ +"Sign in required" = "È richiesto l'accesso"; + /* CrowdNode */ "Sign the message" = "Firma il messaggio"; @@ -2195,7 +2339,7 @@ "Skip" = "Salta"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Alcuni nomi utente possono essere bloccati"; /* No comment provided by engineer. */ "Something went wrong" = "Qualcosa è andato storto"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Ordina contatti"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Ordinati per distanza"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Ferma Mixing"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Invia"; /* No comment provided by engineer. */ "Swept!" = "Pulito!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sincronizzazione Fallita"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sincronizzazione in corso... I risultati potrebbero non essere completi."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sincronizza Ora"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Categoria fiscale"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "i Dash di Test non hanno alcun valore nel mondo reale ma puoi inviarli e riceverli con altri utenti DashPay Alpha."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash è gratuito e può essere ottenuto da quello che viene chiamato 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "L'immagine che selezioni verrà caricata su Imgur in forma anonima."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Il collegamento inviato sarà visibile solo ai proprietari della rete"; /* Coinbase */ "The minimum amount you can send is %@" = "L'importo minimo che puoi inviare è%@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Questo passaggio aggiuntivo mostra che stai davvero cercando di effettuare una transazione."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Questo commerciante vende carte regalo a prezzi fissi"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Questo PIN ti sarà richiesto per sbloccare l'app ogni volta che la usi."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "a"; +/* DashSpend confirmation */ +"To" = "A"; + /* Coinbase */ "to Dash Wallet on this device" = "a Dash Wallet su questo dispositivo"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Per evitare che altre persone vedano a chi effettui i pagamenti, ti consigliamo di mescolare il tuo saldo prima di creare il tuo nome utente."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Per iniziare a fare staking, crea un account su CrowdNode o connettiti a uno esistente."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "all'indirizzo Dash designato per il tuo account CrowdNode nel Dash Wallet su questo dispositivo"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "In data odierna"; /* No comment provided by engineer. */ "Tools" = "Strumenti"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Ricarica i tuoi crediti per continuare ad apportare modifiche al tuo profilo e ad aggiungere contatti"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limite \"Touch ID\""; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Cronologia delle transazioni"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Attiva codice d'accesso dispositivo"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Spento"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "L'attivazione di questa funzione comporterà un maggiore utilizzo della batteria"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Impossibile caricare la tua foto. Per favore riprova."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Sbloccare"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Username disponibile"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Nome utente disponibile"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "La votazione è necessaria solo in alcuni casi"; /* No comment provided by engineer. */ "Voting Keys" = "Chiavi di Voto"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Non siamo riusciti a prelevare dal tuo account CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Abbiamo 2 tipi di commercianti"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Abbiamo rilevato che Dash Wallet si è arrestato in modo anomalo durante la migrazione. Ricontrollare la blockchain può risolvere questo problema altrimenti prova a rifare la procedura. Il controllo dovrebbe preferibilmente essere eseguito su wifi e può durare fino a mezz'ora. I fondi saranno disponibili una volta completato il processo di sincronizzazione."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Abbiamo aggiornato"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "A transazione confermata, il portafoglio di origine sarà privo di valore e non dovrebbe essere riutilizzato per motivi di sicurezza."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Quando chiudi l'app o blocchi lo schermo, il processo di mixaggio si interrompe. Riprenderà quando riapri l'app."; /* No comment provided by engineer. */ "Where to Spend" = "Dove spendere"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Vuoi accettare l'invito?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Desideri effettuare un deposito per il tuo acquisto utilizzando un conto bancario collegato?"; @@ -2774,7 +2945,7 @@ "Yes" = "Si"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Ieri"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Hai accettato la richiesta di contatto di %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Stai per cancellare il portafoglio da questo dispositivo. Tutti i fondi associati ad esso potranno essere recuperati solo se si dispone della frase di recupero."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Puoi sempre eliminare l'immagine caricata, purché tu abbia accesso a questo Wallet."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Puoi modificare come/quando ti vengono pagati i guadagni del premio."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Puoi continuare a utilizzare DashPay per i pagamenti ma non puoi aggiornare il tuo profilo o aggiungere altri contatti finché non ricarichi il saldo del tuo credito"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Puoi inserire la chiave in uno qualsiasi dei seguenti formati: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Puoi visualizzare informazioni dettagliate sui tuoi depositi, prelievi e guadagni premio."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Non puoi rivendicare questo invito poiché hai già uno Username Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Non hai nessun contatto al momento"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Non hai fondi sufficienti per completare questa transazione"; + /* Coinbase */ "You don’t have enough balance" = "Non hai Saldo sufficiente"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Devi attendere 5 minuti prima di avviare un altro prelievo"; /* CrowdNode */ "You only need %@ to join the pool." = "Hai solo bisogno di %@ per poter entrare nel pool."; +/* DashSpend confirmation */ +"You pay" = "Tu paghi"; + /* Coinbase */ "You receive" = "Ricevi"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Riceverai automaticamente pagamenti frazionari e per impostazione predefinita verranno reinvestiti, tuttavia, è anche facile impostare prelievi automatici per ricevere pagamenti ricorrenti."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Il saldo del tuo credito è stato completamente esaurito"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Il saldo del tuo credito è basso"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Il tuo account CrowdNode sta creando..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Il tuo account CrowdNode è configurato e pronto per l'uso!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Il tuo account CrowdNode è stato creato utilizzando queste transazioni."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Il tuo indirizzo CrowdNode è stato confermato."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Il tuo deposito a CrowdNode è stato ricevuto."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "L'ora del tuo dispositivo è %1$@ da %2$d secondi. Non puoi utilizzare CoinJoin a causa di questa differenza."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Il tempo del tuo dispositivo è scaduto da %d minuti. Probabilmente non puoi inviare o ricevere Dash a causa di questo problema."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "L'orario del tuo dispositivo è sfasato di più di 5 secondi. Non puoi utilizzare CoinJoin a causa di questa differenza.\n\nLe impostazioni dell'ora sul tuo dispositivo devono essere modificate su \"Imposta l'ora automaticamente\" prima di utilizzare CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "La tua Email non è memorizzata nel Wallet DashPay né su alcun server. Viene utilizzato una volta per ottenere i dettagli del tuo account Gravatar e quindi scartato."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "La tua email viene utilizzata solo per inviare una password monouso."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Il tuo invito da %@ è già stato rivendicato"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "La tua richiesta è stata annullata"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "La tua transazione è stata inviata e l'importo dovrebbe essere visualizzato nel tuo portafoglio entro pochi minuti."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Il tuo nome utente %@ è stato creato con successo sulla rete Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/ja.lproj/Localizable.strings b/DashWallet/ja.lproj/Localizable.strings index 0b9fbd38a..f7e16f722 100644 --- a/DashWallet/ja.lproj/Localizable.strings +++ b/DashWallet/ja.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@はTouch IDへのアクセスが許可されていません"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu の連絡先 / %3$lu のプロフィール更新"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "ウォレットに複数の投票キーが保管されているため、%d票の投票が行われます"; /* Voting */ "%ld duplicates" = "%ld件の重複"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "承認"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "利用規約に同意する"; /* CrowdNode */ "Accepting terms of use…" = "利用規約に同意しています"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "DASHを直接承認する"; - /* CrowdNode */ "Account Recovery" = "アカウントの復旧"; @@ -152,7 +155,7 @@ "Advanced" = "高度なもの"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "高度のプライバシーレベルには、安定したインターネット接続が必要です"; /* No comment provided by engineer. */ "Advanced Security" = "高度なセキュリティ"; @@ -167,7 +170,7 @@ "Agree" = "同意する"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "現在のレートへ"; /* No comment provided by engineer. */ "All" = "全て"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "送金総額"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "全てのデバイスで直感的かつ使いやすい使用感"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "および"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = " %@ というアプリがあなたのマスターパブリックキーを要求しています。これはあなたのウォレットの記録を取るために使用されます。あなたのDashが他へ送金されることはありません。"; +/* No comment provided by engineer. */ +"Apply" = "申し込み"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "この注文のキャンセルをしてもよろしいですか。"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "1000Dashを手元に持ち合わせている人はほとんどいないため、Crowdnodeはメンバーからの預金をプールすることでマスターノードを所有するメリットを得ることができるサービスを作りました。"; +/* DashSpend */ +"at" = "で"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "位置情報サービスをオンにすると、ATM検索がより円滑に行えます"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "認証はご利用できません"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "認証済み"; @@ -301,20 +316,20 @@ /* 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のマスターノードに加入します"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "下回る"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "%1$ld~%2$ld文字"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "3〜23文字以内"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "DashウォレットとCoinbase間"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "DashウォレットとCoinbaseアカウント間"; /* Voting */ -"Block" = "Block"; +"Block" = "ブロック"; /* No comment provided by engineer. */ "block #%d of %d" = "ブロック #%1$d / %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "ギフトカードを購入する"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Dashでギフトカードを購入"; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Dashを他の仮想通貨で購入して変換する"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "残高をチャージする"; /* No comment provided by engineer. */ "Buy Dash" = "Dashを買う"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Dashを購入 · アカウント不要"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Dashでギフトカードを購入"; @@ -375,7 +390,7 @@ "Buy/Sell" = "購入/売却"; /* Voting */ -"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "「全てに投票」のボタンをタップすると、最初に投稿されたフィルタリングしたユーザー名(%ld)の全てに自動的に投票されます。"; +"By tapping the \"Vote for All\" button, you will automatically vote for all of the filtered usernames (%ld) that were submitted first" = "「全てに投票」ボタンをタップすると、絞り込んだユーザー名のうち、最初に投稿されたもの(%ld)全てに自動的に投票されます。"; /* No comment provided by engineer. */ "By wiping this device you will no longer have access to funds on this device. This should only be done if you no longer have access to your passphrase and have also forgotten your PIN code." = "この端末を初期化すると、この端末の資金にアクセスできなくなります。 端末の初期化は復元パスフレーズへのアクセス権がなくなり、PINコードも忘れてしまった場合にのみ実施して下さい。"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "この取引をキャンセルしても、トレードの注文はキャンセルされません。CoinbaseのアカウントにまもなくDASHが入金されます。"; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "カードの暗証番号"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "変更する"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "通常のものに変更する"; +/* No comment provided by engineer. */ +"Check current balance" = "現在の残高を確認"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "日時設定を確認する"; /* No comment provided by engineer. */ "Check your connection" = "接続を確認してください"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "あなたのを選択する"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "CoinJoinの担保入力"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoinの通貨単位の作成"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "CoinJoinのミキシング"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "CoinJoinのミキシング料"; /* No comment provided by engineer. */ "Confirm" = "確認する"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "確認する (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "PINを確認する"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Coinbaseサポートに問い合わせる"; +/* DashSpend */ +"Contact CTX Support" = "CTXサポートにお問い合わせする"; + /* No comment provided by engineer. */ "Contact Request Pending" = "連絡先リクエストを保留中"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "連絡先"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "続ける"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "このまま続行する"; /* Coinbase Entry Point */ "Convert Crypto" = "仮想通貨を変換"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "アカウントの作成"; +/* Create DashSpend account */ +"Create account" = "アカウントを作成する"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "CrowdNodeのオンラインアカウントを作成"; /* No comment provided by engineer. */ "Create invitation" = "招待状を作成する"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "オンラインアカウントを作成"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "ユーザー名の作成"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "ユーザー名を作成し、そのユーザー名で友達や家族を探し、連絡先に追加することができます。"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "CrowdNodeの出金限度額"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNodeのアカウント"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNodeからDashWalletへ"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "この端末のDashウォレットでCrowdNodeアカウントに指定されたDashアドレス"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dash残高"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "CoinbaseでのDashの残高"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dashのユーザー名"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dashウォレット"; + /* Buy Dash */ "Dash Wallet on this device" = "この端末のDashウォレット"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "初期設定の通貨、ショートカット、...について"; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "デフォルトのフィルター設定"; /* Location Service Status */ "Denied" = "拒否されました"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "切断されました"; +/* DashSpend confirmation */ +"Discount" = "割引"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "閉じる"; /* No comment provided by engineer. */ "Display Name" = "表示名"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "例:johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "招待状はこの金額で提供され、受取人はDashネットワーク上で速やかにユーザー名を作成できます。"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "以前"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "復元フレーズを入力してください"; +/* Enter verification code */ +"Enter verification code" = "認証コードを入力"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "以下に2FAコードを入力してください"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "エラー"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "プロフィールの更新エラー"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "エラー"; /* No comment provided by engineer. */ "Exit" = "終了する"; @@ -842,7 +881,7 @@ "Export all transactions" = "全てのトランザクションをエクスポートする"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "CSVをエクスポートする"; /* No comment provided by engineer. */ "Extended Public Keys" = "拡張されたパブリックキー"; @@ -850,6 +889,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" = "認証セッションの開始に失敗しました"; @@ -890,7 +932,7 @@ "Filter" = "絞り込む"; /* No comment provided by engineer. */ -"Filter Transactions" = "取引を絞り込む"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "で絞り込む"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "フィルター"; -/* No comment provided by engineer. */ -"Find a merchant." = "加盟店を探す。"; - /* No comment provided by engineer. */ "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 %@" = "初回入金額は、%@以上必要です。"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "初回最低入金額"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "固定した指定通貨の金額"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "フレキシブルアマウント"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "可能性のある不足している語句を発見しました:\n%@"; +/* DashSpend confirmation */ +"From" = "から"; + /* from CrowdNode */ "from CrowdNode" = "CrowdNodeから"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "Coinbaseアカウントから"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "完全にミキシングされました"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "0.5DashからDashのマスターノードに入金して報酬を得ることができます。"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "ギフトカード"; +/* No comment provided by engineer. */ +"Gift card" = "ギフトカード"; + +/* 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" = "ギフトカードの合計"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "ギフトカードの種類"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "CrowdNodeのウェブサイトへ移動"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "こちらが、この端末のDashウォレットでCrowdNodeアカウントに指定されたDashアドレスです。"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "非表示にする"; /* adjective, security level */ "High" = "高"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "APIのDashアドレスの確認方法"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "ギフトカードの使用方法"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "エボリューションのノードIDキー"; @@ -1058,7 +1124,10 @@ "I Accept" = "承認しました"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "承認します"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "私はDashSpendの利用規約に同意します"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "もし復元フレーズを無くしたら、自分のコインが失われることに同意します"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "処理中"; +/* No comment provided by engineer. */ +"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" = "収入"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "資金不足"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "ミキシング資金が不足しています。CoinJoinのミキシングが完了するまで待つか、設定でこの機能を無効にしてこの取引を完了してください。"; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "ウォレットの残高不足"; @@ -1160,7 +1235,7 @@ "Intermediate" = "通常のもの"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "中程度のプライバシーレベルには、安定したインターネット接続が必要です"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "内部の送金"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "無効な金額"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "無効なDashアドレス"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "無効なQRコード"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "招待状"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "招待状の作成に成功しました"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "招待料"; /* No comment provided by engineer. */ "Invitation used by" = "使用された招待状"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "このデバイスでは、CoinbaseからDashウォレットにDashを送金するのに最大10分かかる場合があります。"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "余分なミキシング料金を防ぐため、Wi-Fiネットワークに接続することを推奨します"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "技術的な専門知識を持つ上級ユーザーにとっても、取引履歴を確認することは非常に困難です"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "前回のサーバーアップデート"; -/* No comment provided by engineer. */ -"Learn More" = "詳細はこちら"; - /* Info Screen */ "Learn More..." = "詳細はこちら..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "ロック済み"; +/* Log in */ +"Log in" = "ログイン"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "CrowdNodeにログイン"; +/* DashSpend */ +"Log in to your account" = "アカウントにログインする"; + +/* Log out button */ +"Log Out" = "ログアウトする"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Upholdからログアウトする"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Face IDを使ってログインする"; @@ -1389,10 +1488,10 @@ "Low to high" = "低から高"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "メインネット"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "よく知られたSNSやメッセージング・プラットフォームに上記の文章を投稿し、ご自身が申請されたユーザー名の本来の所有者であることを確認した上で、以下のリンクを貼り付けてください"; /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS許可を管理する"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "最大"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "75文字以内"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "位置情報サービスをオンにすると、加盟店検索がより機能します。"; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "ミキシング残高"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "ミキシング中"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "アプリを開いた状態でのみミキシングが可能です"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "ミキシングを中断しました"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "ミキシングの取引"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Dashコインをミキシングすると、よりプライベートな取引ができるようになります"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "ミキシング"; /* No comment provided by engineer. */ "More" = "追加"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "ネットワーク"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "ネットワーク手数料"; @@ -1554,14 +1662,11 @@ "No Results Found" = "検索結果が見つかりませんでした"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "あと0票"; /* No comment provided by engineer. */ "Node IP" = "ノードIP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "無し"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "無効なURLです"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "全ての店舗でDASHが直接使えるとは限りませんが、Dashでギフトカードが購入できます。"; - /* Fiat amount */ "Not available" = "ご利用できません"; @@ -1587,7 +1689,7 @@ "Not Determined" = "未定"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "まだ開始されていません"; /* No comment provided by engineer. */ "Not yet used" = "まだ使用されていません"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "古い順"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "一度%@があなたのリクエストを承認すると、ユーザー名に直接支払えるようになります。"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "あと1票"; /* Online */ "Online" = "オンライン"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "注文プレビュー"; +/* DashSpend */ +"Original purchase" = "当初の購入額"; + /* No comment provided by engineer. */ "Owner Address" = "所有者の諸々のキー"; /* No comment provided by engineer. */ "Owner Keys" = "所有者の諸々のキー"; +/* DashSpend */ +"Password" = "パスワード"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "簡単支払い"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "DASHウォレットで支払います。"; - /* 1 out of 4 in the Paying Animation */ "Paying" = "支払い中"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "支払い中…"; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "支払い方法"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "支払い方法"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "あなたの携帯電話をNFCデバイスに近づけてください"; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "リカバリーフレーズの言葉を正しい順番にタップしてください"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "紙に書き留めて下さい"; +/* No comment provided by engineer. */ +"Powered by" = "提供元"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "招待状プレビュー"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "購入"; +/* Alert title */ +"Purchase Failed" = "購入に失敗しました"; + /* No comment provided by engineer. */ "Quick Receive" = "クイック入金"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "リカバリーフレーズは12、15、18、21、24単語あります。"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "ギフトカードは、オンラインで数秒以内またはレジでご利用いただけます。"; - /* Button title, Register (username) */ "Register" = "登録する"; @@ -1922,6 +2045,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" = "詳細の申請"; @@ -1929,10 +2055,10 @@ "Request your username" = "お客様のユーザー名を申請"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "リクエストされたユーザー名はブロックされています"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "リクエストしたユーザー名は、すでに他の人が使用しています"; /* An action */ "Rescan" = "再スキャン"; @@ -1956,7 +2082,7 @@ "Restricted" = "制限中"; /* Usernames */ -"Results" = "Results"; +"Results" = "結果"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "双方の取引履歴を保持する"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "報酬"; -/* No comment provided by engineer. */ -"Rewards" = "報酬"; - /* No comment provided by engineer. */ "Save" = "保存"; +/* DashSpend */ +"Save %.2f%%" = "%.2f%%をセーブする"; + /* No comment provided by engineer. */ "Save Changes" = "変更を保存する"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "スクリーンショットは、他のアプリやデバイスで閲覧することができます。新しい復元フレーズを作り大事に守って下さい。"; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "検索"; /* No comment provided by engineer. */ "Search for a contact" = "連絡先を検索"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "「」の結果を検索"; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Dashネットワークで%@というユーザー名を検索"; @@ -2039,6 +2168,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で確認する"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "サービスを選択する"; +/* DashSpend denomination selection */ +"Select amount" = "金額を選択する"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "ブロックエクスプローラーを選択する"; /* No comment provided by engineer. */ "Select from Gallery" = "ギャラリーから選択する"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "通貨を選択する"; +/* No comment provided by engineer. */ +"Self-checkout" = "セルフレジの場合"; + /* Sell */ "Sell" = "売却"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "へ送金済み"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "信頼できるノードを設定する"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "復元フレーズを表示する"; +/* Alert title */ +"Sign in required" = "サインインが必要です"; + /* CrowdNode */ "Sign the message" = "メッセージに署名する"; @@ -2195,7 +2339,7 @@ "Skip" = "スキップする"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "一部のユーザー名をブロックできます"; /* No comment provided by engineer. */ "Something went wrong" = "問題が生じました"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "連絡先を並べ替える"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "距離で並べ替え"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "ミキシングを停止する"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "提出する"; /* No comment provided by engineer. */ "Swept!" = "スイープしました!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "同期に失敗しました"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "同期中... 入力結果が完了していない可能性があります。"; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "すぐに同期する"; @@ -2279,13 +2429,19 @@ "Tax Category" = "税金の区分"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "テストDashは現実世界では何の価値もありませんが、他のDashPayのアルファユーザーと送受金ができます。"; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "テストDashは無料で、一般的にフォーセットから入手できます。"; /* 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を入手できます。"; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "テストネット"; /* No comment provided by engineer. */ "The chain is syncing…" = "チェーンを同期中"; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "選択した画像は、匿名でImgurにアップロードされます。"; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "送信したリンクは、ネットワークの所有者にのみ表示されます"; /* Coinbase */ "The minimum amount you can send is %@" = "送金可能な最小金額は、%@です"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "この追加ステップは、お客様が本当に取引を行おうとしていることを証明するために行われます。"; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "この加盟店はギフトカードを固定価格で販売しています"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "このアプリをアンロックして使用するときは必ずこのPINが必要となります"; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "へ"; +/* DashSpend confirmation */ +"To" = "へ"; + /* Coinbase */ "to Dash Wallet on this device" = "この端末のDashウォレットに"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "他者に送金先を閲覧されないようにするため、残高をミキシングしてからユーザー名を作成することを推奨します。"; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "ステーキングを開始するには、CrowdNodeにアカウントを作成するか、既存のアカウントに接続します。"; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "このデバイスのDashウォレットでCrowdNodeのアカウントに指定したDashアドレスに送金します"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "今日"; /* No comment provided by engineer. */ "Tools" = "ツール"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "プロフィールの変更や連絡先の追加を続けるには、残高をチャージしてください"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch IDの送金可能額"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "取引履歴"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "端末のパスコードを有効に"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "オフ"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "この機能をオンにすると、バッテリーの消費量が増えます"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "写真をアップロードできません。もう一度お試しください。"; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "ブロックを解除"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "ユーザー名は使用可能です"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "ユーザー名は使用可能です"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "復元フレーズを表示する"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "全てに投票"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "投票が必要な場合もあります"; /* No comment provided by engineer. */ "Voting Keys" = "投票のキー"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "お客様のCrowdNodeアカウントから出金できませんでした。"; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "2種類の加盟店があります。"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Dashウォレットの移行中にクラッシュが発生しました。この問題を解決するためには、ブロックチェーンを再スキャンするか、もう一度お試しください。再スキャンは、最大30分ほどかかりますので、Wi-Fiをお使いください。いったん同期プロセスが完了すれば、あなたの残高がご利用可能となります。"; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "アップグレード済み"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "この取引が確定したら、他のウォレットは無価値となり、安全上の理由から再び使用しないようにしてください。"; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "アプリを閉じたり画面をロックすると、ミキシング処理が停止します。アプリを再度開くと、ミキシングが再開します。"; /* No comment provided by engineer. */ "Where to Spend" = "使用できる場所"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "招待状を受け取りますか。"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "リンクされた銀行口座を使用して購入代金を入金しますか。"; @@ -2774,7 +2945,7 @@ "Yes" = "はい"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "昨日"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "%@からの連絡先リクエストを承認しました。"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "これからこのウォレットを本端末から削除します。削除後にこのウォレットに関連付けられた資金を回収するにはあなたの復元フレーズが必要です。"; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "このウォレットにアクセスできる限り、アップロードした画像はいつでも削除できます。"; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "お客様は、報酬の支払い方法や支払い時期を変更できます。"; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "お支払いには引き続きDashPayをご利用いただけますが、残高をチャージしていただけるまでは、プロフィールの更新や連絡先の追加はできません"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "以下のいずれかの形式でキーを入力できます:WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "お客様の入出金や報酬の獲得に関する詳細な情報を確認できます。"; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "すでにDashのユーザー名を持っているため、この招待状を請求できません。"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "現在、連絡先がありません"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "この取引を完了するのに十分な資金がありません"; + /* Coinbase */ "You don’t have enough balance" = "残高が不足しています"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "5分間待ってから次の出金を開始しましょう"; /* CrowdNode */ "You only need %@ to join the pool." = "%@だけでプールに参加できます。"; +/* DashSpend confirmation */ +"You pay" = "お客様の支払額"; + /* Coinbase */ "You receive" = "入金する"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "端数の支払いは自動的に受け取れ、デフォルトでは再投資されますが、定期的な支払いを受け取るための自動出金の設定も簡単に行うことができます。"; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "チャージ残高を全額使い切りました"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Dashの残高が不足しています"; /* CrowdNode */ "Your CrowdNode account is creating…" = "お客様のCrowdNodeアカウントを作成中..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "お客様のCrowdNodeアカウントが設定され、ご利用いただけるようになりました。"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "お客様のCrowdNodeアカウントは、これらの取引を利用して作成されました。"; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "お客様のCrowdNodeアドレスが確認されました。"; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "お客様のCrowdNodeへの入金が完了しました。"; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "お客様のデバイスの時刻は%2$d秒で%1$@の誤差があります。この誤差があるため、CoinJoinはご利用いただけません。\n\nお客様のデバイスの時刻設定を「自動時刻設定」に変更していただいてから、CoinJoinをご利用ください。"; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "お客様のデバイスの時刻が%d分ずれています。この問題により、Dashの送入金ができなくなる可能性があります。\n\n日付、時刻、タイムゾーンの設定を確認し、必要に応じて修正してください。"; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "お客様のデバイスの時刻が5秒以上ずれています。この誤差により、お客様はCoinJoinをご利用いただけません。\n\nCoinJoinをご利用になる前に、お客様のデバイスの時刻設定を「自動時刻設定」に変更する必要があります。"; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "お客様のメールアドレスは、DashPayウォレットにもサーバーにも保存されません。Gravatarアカウントの詳細を取得するために一度だけ使用され、その後は破棄されます。"; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "お客様のメールはワンタイムパスワードを送る時にのみ使用されます。"; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "%@からの招待状はすでに請求済みです"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "申請がキャンセルされました"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "あなたの取引は送られたので、数分内にその金額がウォレットに表示されるでしょう"; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "あなたのユーザー名%@はDashネットワークに無事作成されました。"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/ko.lproj/Localizable.strings b/DashWallet/ko.lproj/Localizable.strings index 4489cf402..19f74b648 100644 --- a/DashWallet/ko.lproj/Localizable.strings +++ b/DashWallet/ko.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@게 터치 ID 접근 권한이 없습니다"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu 연락처 / %3$lu 프로필 업데이트"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "이 지갑에 수 개의 투표 키가 저장되어 있으므로 %d 표가 던져지게 됩니다 "; /* Voting */ "%ld duplicates" = "%Id 복사"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "수락"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "이용약관 수락하기"; /* CrowdNode */ "Accepting terms of use…" = "이용 약관에 동의하는 중..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "직접 DASH 받기"; - /* CrowdNode */ "Account Recovery" = "계정 복구"; @@ -152,7 +155,7 @@ "Advanced" = "고급"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "향상된 프라이버시 레벨은 신뢰할 수 있는 인터넷 연결이 필요합니다"; /* No comment provided by engineer. */ "Advanced Security" = "향상된 보안"; @@ -167,7 +170,7 @@ "Agree" = "동의합니다"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "앞"; /* No comment provided by engineer. */ "All" = "모두"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "보낸 금액"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "당신의 모든 기기에 걸친 직관적이고 친근한 경험"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "또한"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "어플리케이션 %@ 에서 마스터 공개 키를 수신하고자 합니다. 이것은 지갑을 추적하는데 사용할 수 있으며 대시를 이동하는 데 사용할 수 없습니다."; +/* No comment provided by engineer. */ +"Apply" = "적용"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "이 주문을 정말 취소하시겠습니까?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "대부분의 사람들이 당장 1000대시를 지니고 있지 않은 만큼, 크라우드노드는 구성원들의 보증금을 모아 마스터노드 소유의 장점을 누릴 수 있도록 하는 서비스를 개설하였습니다."; +/* DashSpend */ +"at" = "이곳에서"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM 검색은 위치 서비스를 사용할 때 더욱 효과적입니다"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "인증할 수 없습니다"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "공인됨"; @@ -301,20 +316,20 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "은행 송금"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "크라우드노드를 통해 대시 마스터노드의 일원이 되세요"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "뒤"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "%1$ld 와 %2$ld 글자 사이"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "3에서 23글자 사이"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "대시 지갑과 코인베이스 사이"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "대시 지갑과 코인베이스 계정간"; /* Voting */ -"Block" = "Block"; +"Block" = "블록"; /* No comment provided by engineer. */ "block #%d of %d" = "%2$d개중 %1$d번째 블록"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "기프트 카드 구매"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "대시로 기프트 카드를 구매합니다."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "다른 암호화폐로 대시 구매 및 전환하기"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "크레딧 구매"; /* No comment provided by engineer. */ "Buy Dash" = "대시 매수"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "대시 구매하기 · 계정이 필요하지 않습니다"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "대시로 기프트 카드 구매"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "이 거래를 취소하더라도 거래 주문은 취소되지 않습니다. 곧 귀하의 코인베이스 계좌로 DASH를 받게 됩니다."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "카드 PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "변경"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "중급으로 변경하기"; +/* No comment provided by engineer. */ +"Check current balance" = "현재 잔액을 확인하세요"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "날짜 & 시간 설정 확인"; /* No comment provided by engineer. */ "Check your connection" = "연결을 확인하세요"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "다음을 선택하세요"; @@ -453,19 +480,16 @@ "CoinJoin" = "코인조인"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "코인조인 담보 입력"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "코인조인 디노미네이션 생성"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "코인조인 믹싱"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "코인조인 믹싱 수수료"; /* No comment provided by engineer. */ "Confirm" = "승인"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "확인 (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "PIN 확인"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "코인베이스 지원센터에 문의하기"; +/* DashSpend */ +"Contact CTX Support" = "CTX 지원팀에 문의하기"; + /* No comment provided by engineer. */ "Contact Request Pending" = "연락처 요청 대기 중"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "연락처"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "계속"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "그래도 계속하기"; /* Coinbase Entry Point */ "Convert Crypto" = "암호화폐를 환전하세요"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "계정 생성하기"; +/* Create DashSpend account */ +"Create account" = "계정 생성하기"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "온라인 크라우드노드 계정 생성하기"; /* No comment provided by engineer. */ "Create invitation" = "초대 생성하기"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "온라인 계정 생성하기"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "당신의 사용자 이름을 생성하세요"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "사용자 이름을 생성하고, 사용자 이름으로 친구와 가족을 찾아 당신의 연락처에 추가하세요."; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "크라우드노드 출금 한도"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "크라우드노드 · 계정"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "크라우드노드 ➝ 대시지갑"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "이 기기의 대시 지갑 내 크라우드노드 계정에 지정한 대시 주소"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "대시 잔고"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "코인베이스의 대시 잔액"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "대시 사용자 이름"; +/* DashSpend confirmation */ +"Dash Wallet" = "대시 지갑"; + /* Buy Dash */ "Dash Wallet on this device" = "이 기기의 대시 지갑"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "통화 기본값, 단축키, 관련 정보..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "디폴트 필터 설정"; /* Location Service Status */ "Denied" = "거절됨"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "연결 해제"; +/* DashSpend confirmation */ +"Discount" = "할인"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "닫기"; /* No comment provided by engineer. */ "Display Name" = "이름 표시"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "예시 johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "각 초대는 이 금액을 통해 지원되며, 이로써 받는 이가 재빨리 대시 네트워크에 사용자 이름을 생성할 수 있습니다"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "이전"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "복원 문구를 입력하세요"; +/* Enter verification code */ +"Enter verification code" = "인증 코드 입력"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "아래에 귀하의 2FA 코드를 입력하세요"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "오류"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "프로필 업데이트 오류"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "오류 ·"; /* No comment provided by engineer. */ "Exit" = "나가기"; @@ -842,7 +881,7 @@ "Export all transactions" = "모든 거래 내보내기"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "CSV 내보내기"; /* No comment provided by engineer. */ "Extended Public Keys" = "확장된 공개 키"; @@ -850,6 +889,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" = "승인 세션을 시작하는 데 실패하였습니다"; @@ -890,7 +932,7 @@ "Filter" = "필터"; /* No comment provided by engineer. */ -"Filter Transactions" = "거래 필터링 하기"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "다음으로 필터"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "필터"; -/* No comment provided by engineer. */ -"Find a merchant." = "상점을 찾습니다."; - /* No comment provided by engineer. */ "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 %@" = "첫 입금은 %@ 이상이어야 합니다"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "첫 번째 최소 입금"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "고정된 단위 금액"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "유연한 금액"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "잠재적 입력되지 않은 단어가 발견되었습니다:\n%@"; +/* DashSpend confirmation */ +"From" = "다음으로부터"; + /* from CrowdNode */ "from CrowdNode" = "크라우드노드에서"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "당신의 코인베이스 계좌로부터"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "완전히 믹싱됨"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "대시 마스터노드에 최소 보증금 0.5대시로 리워드를 받아보세요."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "기프트 카드"; +/* No comment provided by engineer. */ +"Gift card" = "기프트 카드"; + +/* 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" = "총 기프트 카드"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "기프트 카드 유형"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "크라우드노드 웹사이트 방문하기"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "다음은 이 기기의 대시 지갑 내 크라우드노드 계정에 지정된 대시 주소입니다"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "숨기기"; /* adjective, security level */ "High" = "높음"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "당신의 API 대시 주소를 확인하는 방법"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "기프트 카드 사용 방법"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "에볼루션 노드 ID 키"; @@ -1058,7 +1124,10 @@ "I Accept" = "수락합니다"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "수락합니다"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "DashSpend 이용 약관에 동의합니다."; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "복구 문구를 보유하고 있지 않은 경우 코인을 분실하는 것에 동의합니다."; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "처리중..."; +/* No comment provided by engineer. */ +"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" = "수입"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "잔액 부족"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "믹싱된 잔고가 충분하지 않습니다. 이 거래를 완료하기 위해서는 코인조인 믹싱이 끝날 때까지 기다리거나 설정에서 이 기능을 끄십시오."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "지갑 잔고 부족"; @@ -1160,7 +1235,7 @@ "Intermediate" = "중급"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "중간 프라이버시 레벨은 신뢰할 수 있는 인터넷 연결이 필요합니다"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "내부 송금"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "유효하지 않은 금액"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "유효하지 않은 대시 주소"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "유효하지 않은 QR 코드"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "초대"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "초대가 성공적으로 생성되었습니다"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "초대 수수료"; /* No comment provided by engineer. */ "Invitation used by" = "다음에 사용된 초대"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "코인베이스로부터 이 기기의 대시 지갑으로 대시를 옮기는 데에는 최대 10분이 소요될 수 있습니다."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "추가적인 믹싱 수수료 발생을 방지하기 위하여는 Wi-Fi 네트워크에 접속할 것을 권장합니다"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "어떤 수준의 기술적 전문 지식을 가진 고급 사용자라고 하더라도 자신의 거래 기록을 결정하는 것은 어려울 수 있습니다."; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "마지막 서버 업데이트"; -/* No comment provided by engineer. */ -"Learn More" = "더 알아보기"; - /* Info Screen */ "Learn More..." = "더 알아보기..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "잠김"; +/* Log in */ +"Log in" = "로그인"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "크라우드노드에 로그인"; +/* DashSpend */ +"Log in to your account" = "당신의 계정에 로그인하세요"; + +/* Log out button */ +"Log Out" = "로그아웃"; + /* No comment provided by engineer. */ "Log out from Uphold" = "업홀드에서 로그아웃"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "페이스 ID로 로그인"; @@ -1389,10 +1488,10 @@ "Low to high" = "낮음부터 높음"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "메인넷"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "위의 텍스트를 잘 알려진 소셜 미디어나 메시지 플랫폼상에 포스팅하고, 아래의 링크를 붙여 넣음으로써 당신이 요청된 사용자 이름의 진정한 소유주임을 증명하세요"; /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS 설정 관리하기"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "최대"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "최대 75자"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "상점 검색은 위치 서비스를 켰을 때 보다 잘 작동합니다."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "믹싱된 잔고"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "믹싱"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "믹싱은 어플이 열려있을 때에만 가능합니다"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "믹싱이 멈춰짐 ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "거래 믹싱"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "대시 코인을 믹싱하면 거래 내역이 보다 보호됩니다."; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "믹싱 ·"; /* No comment provided by engineer. */ "More" = "더 알아보기"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "네트워크"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "네트워크 수수료"; @@ -1554,14 +1662,11 @@ "No Results Found" = "결과 없음"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "남은 투표 없음"; /* No comment provided by engineer. */ "Node IP" = "노드 IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "없음"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "유효하지 않은 URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "모든 상점에서 직접 대시를 받는 것은 아니지만, 대시를 통해 기프트 카드를 구매할 수 있습니다."; - /* Fiat amount */ "Not available" = "이용할 수 없음"; @@ -1587,7 +1689,7 @@ "Not Determined" = "결정되지 않음"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "시작되지 않음"; /* No comment provided by engineer. */ "Not yet used" = "아직 사용되지 않음"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "과거부터 현재"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "%@ 님이 당신의 요청을 수락하면 사용자 이름에 직접 지불할 수 있습니다"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "한 번의 투표만 남음"; /* Online */ "Online" = "온라인"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "주문 미리보기"; +/* DashSpend */ +"Original purchase" = "초기 구매"; + /* No comment provided by engineer. */ "Owner Address" = "소유자 주소"; /* No comment provided by engineer. */ "Owner Keys" = "소유자 키"; +/* DashSpend */ +"Password" = "비밀번호"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "쉬운 지불"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "대시 지갑으로 지불하세요."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "지불 중"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "지불 중..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "지불 방법"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "지불 유형"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "휴대 전화를 NFC 기기 가까이에 두십시오."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "올바른 방식으로 당신의 복원 문구의 단어를 탭하십시오"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "적어주세요"; +/* No comment provided by engineer. */ +"Powered by" = "제작"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "초대 미리보기"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "매수하기"; +/* Alert title */ +"Purchase Failed" = "매수에 실패하였습니다"; + /* No comment provided by engineer. */ "Quick Receive" = "빠른 송금 수령"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "복구 문구는 12, 15, 18, 21 및 24 단어를 지녀야 합니다"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "수초만에 온라인으로, 혹은 카운터에서 기프트 카드를 현금화합니다."; - /* Button title, Register (username) */ "Register" = "등록"; @@ -1922,6 +2045,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" = "요청 세부 내용"; @@ -1929,10 +2055,10 @@ "Request your username" = "당신의 사용자 이름을 요청하세요"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "요청된 사용자 이름이 블록되었습니다"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "요청된 사용자 이름이 다른 사람에게 주어졌습니다"; /* An action */ "Rescan" = "재스캔"; @@ -1956,7 +2082,7 @@ "Restricted" = "제한됨"; /* Usernames */ -"Results" = "Results"; +"Results" = "결과"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "상호 거래 내역을 유지합니다"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "리워드"; -/* No comment provided by engineer. */ -"Rewards" = "리워드"; - /* No comment provided by engineer. */ "Save" = "저장"; +/* DashSpend */ +"Save %.2f%%" = "저장하기 %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "변경사항 저장"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "스크린샷은 다른 앱이나 기기에서 볼 수 있습니다. 복원 문구를 새로 만들고 비밀로 간직하세요."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "검색"; /* No comment provided by engineer. */ "Search for a contact" = "연락처 검색"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "\" 검색 결과"; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "대시 네트워크에서 사용자 이름 %@ 검색 중"; @@ -2039,6 +2168,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" = "업홀드에서 확인"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "서비스를 선택하세요"; +/* DashSpend denomination selection */ +"Select amount" = "금액 선택하기"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "블록 탐색기 선택하기"; /* No comment provided by engineer. */ "Select from Gallery" = "갤러리에서 선택"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "코인 선택"; +/* No comment provided by engineer. */ +"Self-checkout" = "셀프 계산"; + /* Sell */ "Sell" = "매도"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "다음에 전송하였습니다"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "신뢰할 수있는 노드 설정"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "복원 문구 확인하기"; +/* Alert title */ +"Sign in required" = "가입이 필요합니다"; + /* CrowdNode */ "Sign the message" = "이 메시지에 서명하기"; @@ -2195,7 +2339,7 @@ "Skip" = "건너뛰기"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "어떤 사용자 이름은 블록될 수 있습니다"; /* No comment provided by engineer. */ "Something went wrong" = "뭔가 잘못되었습니다"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "연락처 분류"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "거리로 정렬"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "믹싱 중지"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "제출"; /* No comment provided by engineer. */ "Swept!" = "잔액이 지갑으로 보내졌습니다!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "동기화에 실패하였습니다"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "동기화 중... 결과가 나타나지 않을 수 있습니다."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "지금 동기화합니다"; @@ -2279,13 +2429,19 @@ "Tax Category" = "세금 카테고리"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "테스트 대시는 실생활에서 어떤 가치도 지니지 않으나 다른 대시페이 알파 사용자들과 주고 받을 수 있습니다."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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지갑의 받기 화면에서 주소를 복사하고 아래 버튼을 클릭하여 대시를 받으세요."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "테스트넷"; /* No comment provided by engineer. */ "The chain is syncing…" = "체인 동기화 중..."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "당신이 선택한 이미지는 Imgur에 익명으로 업로드됩니다."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "당신이 전송한 링크는 대시 네트워크 소유자들만 볼 수 있게 됩니다."; /* Coinbase */ "The minimum amount you can send is %@" = "송금 가능한 최소 금액은 %@ 입니다"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "이 추가적 단계를 통해 거래를 시도하는 것이 본인임을 확인합니다."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "이 판매자는 고정된 가격에 기프트 카드를 판매합니다"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "당신이 어플을 언락하실 때마다 이 PIN이 필요합니다."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "다음으로"; +/* DashSpend confirmation */ +"To" = "다음으로"; + /* Coinbase */ "to Dash Wallet on this device" = "이 기기의 대시 지갑으로"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "당신이 누구에게 송금하는 지를 아무도 알 수 없게 하기 위해서는, 사용자 이름을 만들기 전에 잔고를 믹싱할 것을 권장합니다."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "스테이킹을 시작하려면 크라우드노드에 계정을 만들거나 기존 계정에 연결하세요."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "이 기기의 대시 지갑 내 크라우드노드 계정에 지정한 대시 주소로 송금합니다."; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "오늘"; /* No comment provided by engineer. */ "Tools" = "도구"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "계속해서 프로필을 변경하거나 연락처를 추가하시려면 크레딧을 충전하세요"; /* Dash Portal */ "Topper" = "토퍼"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "터치 ID 제한"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "거래 내역"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "비밀번호 켜기"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "꺼짐"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "이 기능을 켜면 더 많은 배터리를 사용하게 됩니다."; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "사진을 업로드할 수 없습니다. 다시 시도하세요."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "차단 해제"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "사용할 수 없는 사용자 이름"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "사용자이름을 사용할 수 있습니다"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "복구 문구 확인"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "모두 투표하기"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "투표는 일부 경우에만 필요합니다"; /* No comment provided by engineer. */ "Voting Keys" = "투표 키"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "당신의 크라우드노드 계정에서 출금하지 못했습니다."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "두 가지 유형의 상점이 있습니다"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "대시 지갑의 마이그레이션 중 충돌을 감지하였습니다. 블록체인을 재스캔하거나 다시 시도하여 이 문제를 해결할 수 있습니다. 재스캔은 와이파이에서 수행하실 것을 권장하며 30분 가량 소요됩니다. 당신의 자금은 동기화 과정이 완료되게 되면 이용할 수 있습니다."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "다음을 업그레이드 하였습니다"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "거래가 확인되면 다른 지갑은 가치를 가지지 않게 되며, 보안 관련 사유를 위해서는 이를 다시 사용해서는 안됩니다."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "어플을 종료하거나 스크린을 잠그는 경우, 믹싱 과정이 중지됩니다. 어플을 열면 다시 시작됩니다."; /* No comment provided by engineer. */ "Where to Spend" = "사용 장소"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "초대를 수락하시겠습니까?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "연결된 은행 계좌를 이용해 구매를 위한 입금 처리를 완료하시겠습니까?"; @@ -2774,7 +2945,7 @@ "Yes" = "예"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "어제"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "%@ 님으로부터의 연락처 요청을 수락하였습니다"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "당신은 곧 본 기기로부터 이 지갑을 삭제하게 됩니다. 이 지갑과 관련된 자금은 당신이 복원 문구를 가지고 있을 떄에만 복구할 수 있습니다."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "이 지갑에 접근이 가능한 경우 언제든 업로드한 이미지를 삭제할 수 있습니다."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "당신의 리워드 수익을 어떻게 / 언제 받을 것인지 변경할 수 있습니다."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "계속해서 지불을 위해 대시페이를 사용할 수 있지만, 크레딧 잔고를 충전하기 전까지는 프로필을 업데이트하거나 더 많은 연락처를 추가할 수 없습니다"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "다음과 같은 포맷 중 어떤 형태로도 키를 입력할 수 있습니다: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "입금, 출금 및 리워드 수익에 대한 자세한 정보를 확인할 수 있습니다."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "이미 대시 사용자 이름을 가지고 있어 이 초대를 수락할 수 없습니다."; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "현재 연락처에 아무도 없습니다"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "이 거래를 완료하기 위해 필요한 자금이 충분하지 않습니다"; + /* Coinbase */ "You don’t have enough balance" = "잔액이 충분하지 않습니다"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "다음 출금을 요청하시기 전 5분을 대기하여야 합니다"; /* CrowdNode */ "You only need %@ to join the pool." = "%@만 있으면 풀에 가입할 수 있습니다."; +/* DashSpend confirmation */ +"You pay" = "금액"; + /* Coinbase */ "You receive" = "다음을 받습니다"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "당신은 분할된 지불금을 자동적으로 받게 되며, 이 금액은 디폴트로 다시 투자됩니다. 그러나, 쉬운 설정을 통해 지속적으로 이 수익금을 받아 자동 출금할 수도 있습니다."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "당신의 크레딧 잔고가 완전히 고갈되었습니다"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "당신의 크레딧 잔고가 적습니다"; /* CrowdNode */ "Your CrowdNode account is creating…" = "당신의 크라우드노드 계정을 생성하는 중입니다..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "크라우드노드 계정 설정이 완료되어 지금 사용할 수 있습니다!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "당신의 크라우드노드 계정은 이들 거래를 사용해 생성되었습니다."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "당신의 크라우드노드 주소가 확인되었습니다."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "크라우드노드 입금이 완료되었습니다."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "당신의 기기에 설정된 시간이 %2$d 초 차이로 %1$@ 입니다. 이 차이로 인하여 코인조인을 사용할 수 없습니다.\n\n기기의 설정을 \"자동으로 시간 설정\"으로 변경하여 코인조인을 사용하세요."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "당신의 기기에 설정된 시간이 %d 분 차이로 다릅니다. 이 문제로 인하여 대시를 보내거나 받을 수 없을 확률이 높습니다.\n\n이 부분을 확인하시고, 필요한 경우 날짜, 시간 및 시간대 설정을 수정하십시오."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "당신의 기기에 설정된 시간이 5초 이상 잘못되었습니다. 이 차이로 인하여 코인조인을 사용할 수 없습니다.\n\n코인조인을 사용하기 전, 기기의 설정을 \"자동으로 시간 설정\"으로 변경하세요."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "당신의 이메일은 대시페이 지갑 혹은 다른 어떤 서버에도 저장되지 ㅇ낳습니다. 이는 Gravatar 계정 상세 정보에 한 번 사용될 뿐이며, 그 이후로는 폐기됩니다."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "귀하의 이메일은 일회용 비밀번호를 전달하기 위해서만 사용됩니다."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "%@으로부터의 초대장이 이미 사용되었습니다"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "당신의 요청이 취소되었습니다"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "당신의 거래가 완료되었으며 수 분 이내에 당신의 지갑에 잔액이 표시될 예정입니다."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "당신의 사용자 이름인 %@가 대시 네트워크에 성공적으로 생성되었습니다"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "Zenledger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/mk.lproj/Localizable.strings b/DashWallet/mk.lproj/Localizable.strings index 83e85426b..6727f3fc4 100644 --- a/DashWallet/mk.lproj/Localizable.strings +++ b/DashWallet/mk.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Грешка"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "ОК"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Зачувај"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/ms.lproj/Localizable.strings b/DashWallet/ms.lproj/Localizable.strings index 17078679a..438aaa438 100644 --- a/DashWallet/ms.lproj/Localizable.strings +++ b/DashWallet/ms.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Terima"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Save"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/nb.lproj/Localizable.strings b/DashWallet/nb.lproj/Localizable.strings index ae06f2658..014c412fb 100644 --- a/DashWallet/nb.lproj/Localizable.strings +++ b/DashWallet/nb.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Feil"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Nettverksgebyr"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Lagre"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/nl.lproj/Localizable.strings b/DashWallet/nl.lproj/Localizable.strings index 5299d88ea..60f13515d 100644 --- a/DashWallet/nl.lproj/Localizable.strings +++ b/DashWallet/nl.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ heeft geen toegang tot vingeridentificatie"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacten / %3$lu profiel updates"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "Er zullen %d stemmen worden uitgebracht omdat je meerdere stemsleutels in de portemonnee hebt opgeslagen."; /* Voting */ "%ld duplicates" = "%ld duplicaten"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accepteren"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accepteer gebruiksvoorwaarden"; /* CrowdNode */ "Accepting terms of use…" = "Gebruiksvoorwaarden accepteren..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepteert DASH direct"; - /* CrowdNode */ "Account Recovery" = "Accountherstel"; @@ -152,7 +155,7 @@ "Advanced" = "Gevanceerd"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Het privacy niveau 'Geavanceerd' vereist een betrouwbare internetverbinding"; /* No comment provided by engineer. */ "Advanced Security" = "Geavanceerde Beveiliging"; @@ -167,7 +170,7 @@ "Agree" = "Akkoord"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "voor"; /* No comment provided by engineer. */ "All" = "Alles"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Verzonden bedrag"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Een intuïtieve en vertrouwde ervaring op al je apparaten"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = " en "; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "De applicatie %@ wil je openbare hoofdsleutel inzien. Dit kan worden gebruikt om je portemonnee in de gaten te houden; het kan niet worden gebruikt om je Dash te verplaatsen."; +/* No comment provided by engineer. */ +"Apply" = "Pas toe"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Weet je zeker dat je deze bestelling wilt annuleren?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Omdat de meeste mensen geen 1000 Dash bezitten, biedt CrowdNode een service waarbij de stortingen van leden worden gebundeld tot masternodes, om zo de voordelen van het bezitten hiervan te kunnen bereiken."; +/* DashSpend */ +"at" = "ter hoogte van"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Zoeken naar geldautomaten werkt beter met locatiediensten ingeschakeld."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authenticatie is niet beschikbaar"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Geautoriseerd"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "achter"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Tussen %1$ld en %2$ld karakters"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Tussen 3 en 23 tekens"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Tussen de Dash portemonnee en Coinbase"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Koop een geschenkbon"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Koop een geschenkbon met Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Koop en converteer Dash met een andere cryptovaluta"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Koop krediet"; /* No comment provided by engineer. */ "Buy Dash" = "Koop Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Koop Dash · Geen rekening nodig"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Koop geschenkbonnen met je Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Het annuleren van deze transactie annuleert de handelsorder niet. Je ontvangt binnenkort DASH op je Coinbase account."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Pincode kaart"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Wissel"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Wijzig naar gemiddeld"; +/* No comment provided by engineer. */ +"Check current balance" = "Controleer het huidige saldo"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Controleer datum & tijd instellingen"; /* No comment provided by engineer. */ "Check your connection" = "Controleer je verbinding"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Kies je"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "CoinJoin inputs"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "Creëer CoinJoin denominaties"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "CoinJoin mixen"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "CoinJoin mixkosten"; /* No comment provided by engineer. */ "Confirm" = "Bevestig"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Bevestig (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Bevestig pin"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Neem contact op met Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Neem contact op met CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contactaanvraag in behandeling"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Contacten"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Ga door"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Ga toch door"; /* Coinbase Entry Point */ "Convert Crypto" = "Converteer crypto"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Maak account aan"; +/* Create DashSpend account */ +"Create account" = "Maak account aan"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Maak een online CrowdNode account aan"; /* No comment provided by engineer. */ "Create invitation" = "Uitnodiging maken"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Maak online account aan"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Maak je gebruikersnaam aan"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Maak je gebruikersnaam, vind vrienden en familie via hun gebruikersnamen, en voeg ze toe aan je contacten"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Het Dash adres op dit apparaat dat is toegewezen aan je CrowdNode account "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dashsaldo"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash saldo op Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash gebruikersnaam"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash portemonnee"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash portemonnee op dit apparaat"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Standaard valuta, snelkoppelingen, over... "; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Standaard filterinstelling"; /* Location Service Status */ "Denied" = "Geweigerd"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Verbinding verbroken"; +/* DashSpend confirmation */ +"Discount" = "Korting"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Annuleren"; /* No comment provided by engineer. */ "Display Name" = "Weergavenaam"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "bijvoorbeeld jan@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Elke uitnodiging wordt met dit bedrag gefinancierd, zodat de ontvanger snel zijn gebruikersnaam op het Dash Network kan aanmaken"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Eerder"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Voer herstelzin in"; +/* Enter verification code */ +"Enter verification code" = "Voer verificatiecode in"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Voer hieronder je 2FA-code in"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Fout"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Fout bij bijwerken van je profiel"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Fout ·"; /* No comment provided by engineer. */ "Exit" = "Afsluiten"; @@ -842,7 +881,7 @@ "Export all transactions" = "Exporteer alle transacties"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "CSV exporteren"; /* No comment provided by engineer. */ "Extended Public Keys" = "Uitgebreide publieke sleutels"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Transacties filteren"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Gefilterd op"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Vind een acceptant"; - /* No comment provided by engineer. */ "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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Eerste minimale storting"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = " Vastgestelde bedragen"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexibele bedragen"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Mogelijkerwijs ontbrekende woorden zijn gevonden:\n%@"; +/* DashSpend confirmation */ +"From" = "Van"; + /* from CrowdNode */ "from CrowdNode" = "van CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "vanaf je Coinbase account"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Volledig gemixt"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Ontvang beloningen van deposito's in Dash Masternodes vanaf slechts 0,5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Cadeaukaart"; +/* No comment provided by engineer. */ +"Gift card" = "Geschenkbon"; + +/* 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" = "Cadeaukaart totaal"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Soorten cadeaubonnen"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Ga naar de website van CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Dit is het Dash adres op dit apparaat dat is toegewezen aan je CrowdNode account"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Verbergen"; /* adjective, security level */ "High" = "Hoog"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Hoe je het API Dash adres kunt bevestigen"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Hoe een geschenkbon te gebruiken"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID sleutels"; @@ -1058,7 +1124,10 @@ "I Accept" = "Ik accepteer"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Ik accepteer"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Ik accepteer de algemene voorwaarden van DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Ik ga akkoord dat ik mijn munten kwijt raak als ik de herstelzin niet meer bezit"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "Bezig...."; +/* No comment provided by engineer. */ +"In store" = "Aanwezig"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Ontoereikende fondsen"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Onvoldoende gemengd saldo. Wacht tot de CoinJoin mix is voltooid of schakel deze functie uit in de instellingen om deze transactie te voltooien."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Onvoldoende saldo"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Gemiddeld"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Het privacy niveau 'Gemiddeld' vereist een betrouwbare internetverbinding"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Interne transfer"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Ongeldig bedrag"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "ongeldig Dash adres"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Ongeldige QR-code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Uitnodiging"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Uitnodiging succesvol aangemaakt"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Vergoeding uitnodiging"; /* No comment provided by engineer. */ "Invitation used by" = "Uitnodiging gebruikt door"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Het kan tot 10 minuten duren om Dash over te maken van Coinbase naar de Dash portemonnee op dit apparaat."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Het wordt aanbevolen om op een WiFi netwerk verbonden te zijn om extra mix kosten te vermijden."; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Het zou voor gevorderde gebruikers met welke technische expertise dan ook erg moeilijk zijn om je transactiegeschiedenis te achterhalen"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Laatste server update"; -/* No comment provided by engineer. */ -"Learn More" = "Lees verder"; - /* Info Screen */ "Learn More..." = "Kom meer te weten..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Vergrendeld"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in op CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in op je account"; + +/* Log out button */ +"Log Out" = "Log uit"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Bij Uphold uitloggen"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Inloggen met gezichtsherkenning"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Maak een post met de bovenstaande tekst op een bekend sociaal netwerk of berichtenplatform om te verifiëren dat jij de oorspronkelijke eigenaar van de gevraagde gebruikersnaam bent en plak de link hieronder."; /* No comment provided by engineer. */ "Manage GPS Permission" = "Beheer gpsinstellingen"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximaal 75 tekens"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Zoeken naar acceptanten werkt beter met locatiediensten ingeschakeld."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Gemixt saldo"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Aan het mixen"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Mixen is alleen mogelijk als de app open is"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Mixen gepauseerd ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Transacties mixen"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Door Dash te mixen, worden je transacties meer privé"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Mixen ·"; /* No comment provided by engineer. */ "More" = "Meer"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Netwerk"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Netwerkkosten"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Geen resultaten gevonden"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Geen stemmen over"; /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Geen"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Geen geldige URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Niet alle winkels accepteren direct DASH, maar je kan een geschenkbon kopen met je Dash."; - /* Fiat amount */ "Not available" = "Niet beschikbaar"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Niet bepaald"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Niet gestart"; /* No comment provided by engineer. */ "Not yet used" = "Nog niet gebruikt"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "Oké"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Oud naar nieuw"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Zodra%@ jouw verzoek accepteert kunt je direct betalen aan Username"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Eén stem over"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Voorbeeld bestelling"; +/* DashSpend */ +"Original purchase" = "Originele aankoop"; + /* No comment provided by engineer. */ "Owner Address" = "Adres eigenaar"; /* No comment provided by engineer. */ "Owner Keys" = "Eigenaar sleutels"; +/* DashSpend */ +"Password" = "Wachtwoord"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Betaal met gemak"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Betaal met de DASH portemonnee."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Aan het betalen"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Aan het betalen..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Betalingsmethode"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Betalingswijze"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Houd a.u.b. je telefoon bij een NFC-apparaat"; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Tik a.u.b. op de woorden van je herstelzin in de juiste volgorde"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Schrijf het a.u.b. op"; +/* No comment provided by engineer. */ +"Powered by" = "Aangedreven door"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Voorbeeld van de uitnodiging"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Aanschaffen"; +/* Alert title */ +"Purchase Failed" = "Aankoop mislukt"; + /* No comment provided by engineer. */ "Quick Receive" = "Snel Ontvangen"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Herstelzin moet 12, 15, 18, 21 of 24 woorden hebben"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Wissel je geschenkbon online in binnen een paar seconden of bij de kassa. "; - /* Button title, Register (username) */ "Register" = "Registreren"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Vraag je gebruikersnaam aan"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "De aangevraagde gebruikersnaam is geblokkeerd"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "De aangevraagde gebruikersnaam is aan iemand anders gegeven"; /* An action */ "Rescan" = "Scan opnieuw"; @@ -1956,7 +2082,7 @@ "Restricted" = "Beperkt"; /* Usernames */ -"Results" = "Results"; +"Results" = "Resultaten"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Bewaar de geschiedenis van gemeenschappelijke transacties"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Beloning"; -/* No comment provided by engineer. */ -"Rewards" = "Beloningen"; - /* No comment provided by engineer. */ "Save" = "Opslaan"; +/* DashSpend */ +"Save %.2f%%" = "Bespaar %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Wijzigingen opslaan"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Schermafdrukken zijn zichtbaar voor andere apps en apparaten. Genereer een nieuwe herstelzin en houdt deze geheim."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Zoek"; /* No comment provided by engineer. */ "Search for a contact" = "Zoek een contactpersoon"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Zoekresultaten voor \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Zoeken naar gebruikersnaam %@op het Dash netwerk"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Kies een dienst"; +/* DashSpend denomination selection */ +"Select amount" = "selecteer bedrag"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Selecteer block verkenner"; /* No comment provided by engineer. */ "Select from Gallery" = "Kies uit galerij"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Selecteer de munt"; +/* No comment provided by engineer. */ +"Self-checkout" = "Zelf afrekenen"; + /* Sell */ "Sell" = "Verkoop"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Verstuur naar"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "stel een vertrouwde node in"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Toon herstelzin"; +/* Alert title */ +"Sign in required" = "Inloggen vereist"; + /* CrowdNode */ "Sign the message" = "Onderteken het bericht"; @@ -2195,7 +2339,7 @@ "Skip" = "Overslaan"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Sommige gebruikersnamen kunnen worden geblokkeerd."; /* No comment provided by engineer. */ "Something went wrong" = "Er is iets verkeerd gegaan"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sorteer contacten"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Gesorteerd op afstand"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Stop het mixen"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Indienen"; /* No comment provided by engineer. */ "Swept!" = "Geveegd!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync mislukt"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Synchronisatie bezig... Resultaten zijn mogelijk niet compleet."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Nu synchroniseren"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Belastingcategorie"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash heeft geen enkele waarde in de echte wereld, maar je kunt het verzenden en ontvangen met andere DashPay Alpha-gebruikers."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash is gratis en kan worden verkregen via een zogenaamde 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "De afbeelding die je selecteert, wordt anoniem naar Imgur geüpload."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "De link die je stuurt, zal alleen zichtbaar zijn voor de netwerkbeheerders."; /* Coinbase */ "The minimum amount you can send is %@" = "Het minimumbedrag dat je kan verzenden is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Deze extra stap laat zien dat jij het bent die een transactie probeert te doen."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = " Deze winkelier verkoopt cadeaubonnen tegen vaste prijzen"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Deze PIN is vereist om uw app elke keer te ontgrendelen wanneer u deze gebruikt."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "naar"; +/* DashSpend confirmation */ +"To" = "Naar"; + /* Coinbase */ "to Dash Wallet on this device" = "naar Dash portemonnee op dit apparaat"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Om te voorkomen dat anderen kunnen zien aan wie je betalingen doet, raden wij u aan om je saldo te mixen voordat je je gebruikersnaam aanmaakt."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Om te beginnen met staking, maak een account aan op CrowdNode of maak verbinding met een bestaande."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "naar het Dash adres dat is toegewezen aan je CrowdNode account in de Dash portemonnee op dit apparaat"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Vandaag"; /* No comment provided by engineer. */ "Tools" = "Gereedschap"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Laad je krediet saldo op om door te gaan met het aanbrengen van wijzigingen aan je profiel en het toevoegen van contacten"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "touch ID limiet"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transactiegeschiedenis"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Zet apparaat-toegangscode aan"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Uitgeschakeld"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Als je deze functie inschakelt, zal het batterijgebruik toenemen"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Kan je foto niet uploaden. Probeer het opnieuw."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Deblokkeren"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Gebruikersnaam beschikbaar"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Gebruikersnaam is beschikbaar"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Stemmen is alleen in sommige gevallen vereist."; /* No comment provided by engineer. */ "Voting Keys" = "Stem sleutels"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We konden niet opnemen uit je CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We hebben 2 typen acceptanten"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We detecteerden dat de Dash portemonnee tijdens de migratie is gecrasht. Opnieuw scannen van de blockchain zal dit probleem oplossen of uw kan het opnieuw proberen. Opnieuw scannen dient bij voorkeur met wifi te worden gedaan en duurt ongeveer een half uur. Uw saldo zal pas beschikbaar zijn zodra het synchronisatieproces is afgerond."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We hebben een upgrade uitgevoerd"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Wanneer de transactie is bevestigd, is de andere portemonnee waardeloos en mag deze om veiligheidsredenen niet opnieuw worden gebruikt."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Wanneer je de app sluit of het scherm vergrendelt, stopt het mixproces. Het wordt hervat wanneer je de app opnieuw opent."; /* No comment provided by engineer. */ "Where to Spend" = "Waar uit te geven"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Wil je de uitnodiging accepteren?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Wil je de aankoop storten via een gekoppelde bankrekening?"; @@ -2774,7 +2945,7 @@ "Yes" = "Ja"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Gisteren"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "U heeft het contactverzoek van %@ geaccepteerd"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "U staat op het punt deze portemonnee van dit apparaat te wissen. Het saldo dat aan deze portemonnee is gekoppeld, kan alleen worden opgehaald als u uw herstelzin hebt."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Je kan de geüploade afbeelding altijd verwijderen, zolang je toegang hebt tot deze portemonnee."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Je kunt wijzigen hoe en wanneer inkomsten aan worden uitbetaald."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Je kan DashPay blijven gebruiken voor betalingen, maar je kunt je profiel niet bijwerken of meer contacten toevoegen totdat je je krediet saldo opwaardeert"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Je kunt je sleutel in een van de volgende formaten invoeren: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Je kunt gedetailleerde informatie zien over uw stortingen, opnames en inkomsten."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Je kunt deze uitnodiging niet claimen omdat je al een Dash gebruikersnaam hebt"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "je hebt momenteel geen contacten"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Je hebt onvoldoende saldo om deze transactie te voltooien"; + /* Coinbase */ "You don’t have enough balance" = "Je hebt niet genoeg saldo"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Je moet 5 minuten wachten voordat je een nieuwe opname kunt uitvoeren"; /* CrowdNode */ "You only need %@ to join the pool." = "Je hebt maar %@ nodig om deel te nemen aan een pool."; +/* DashSpend confirmation */ +"You pay" = "Je betaalt"; + /* Coinbase */ "You receive" = "Je ontvangt"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "U ontvangt automatisch fractionele betalingen en deze worden standaard opnieuw geïnvesteerd. Het is ook mogelijk om automatische opnames in te stellen om terugkerende uitbetalingen te ontvangen."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Je krediet saldo is leeg"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "je krediet saldo is laag"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Je CrowdNode account wordt aanmaakt..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Je CrowdNode account is ingesteld en klaar voor gebruik!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Je CrowdNode account is gemaakt met behulp van deze transacties."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Je CrowdNode adres is bevestigd."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Je storting op CrowdNode is ontvangen."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "De tijd op dit apparaat loopt %2$d seconden %1$@. Je kan CoinJoin niet gebruiken vanwege dit verschil.\n\nOm CoinJoin te kunnen gebruiken, moeten de tijdinstellingen op dit apparaat worden gewijzigd naar 'Tijd automatisch instellen'."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "De tijd van dit apparaat wijkt %d minuten af. Je kan waarschijnlijk geen Dash verzenden of ontvangen vanwege dit probleem.\n\nControleer en corrigeer indien nodig de instellingen voor datum, tijd en tijdzone."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "De tijd van dit apparaat wijkt meer dan 5 seconden af. Je kan CoinJoin niet gebruiken vanwege dit verschil.\n\nDe tijdinstellingen op dit apparaat moeten worden gewijzigd naar \"Tijd automatisch instellen\" voordat je CoinJoin kan gebruiken."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "je e-mail wordt niet opgeslagen in de DashPay portemonnee, en ook niet op servers. Het wordt één keer gebruikt om je Gravatar accountgegevens te krijgen en wordt vervolgens weggegooid."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Het e-mailadres wordt alleen gebruikt om een ​​eenmalig wachtwoord te verzenden."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Je uitnodiging van %@ is al geclaimd"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Je aanvraag is geannuleerd"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "De transactie is verzonden en het bedrag verschijnt binnen een paar minuten in je de portemonnee."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Uw gebruikersnaam %@ is met succes aangemaakt op het Dash netwerk"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/pl.lproj/Localizable.strings b/DashWallet/pl.lproj/Localizable.strings index c42536c4a..1995bba7e 100644 --- a/DashWallet/pl.lproj/Localizable.strings +++ b/DashWallet/pl.lproj/Localizable.strings @@ -23,16 +23,16 @@ "%@ is not allowed to access Touch ID" = "%@ nie ma zezwolenia na dostęp do Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu kontakty/ %3$lu aktualizacje profilu"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d głosów będzie oddawanych, jeśli masz wiele kluczy do głosowania zapisanych w portfelu"; /* Voting */ "%ld duplicates" = "%ld duplikatów"; /* Voting */ -"%ld requests" = "%ld rządań"; +"%ld requests" = "%ld żądań"; /* 10/20 Characters */ "%ld/%ld Characters" = "%1$ld/%2$ld znaków"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Akceptuj"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Akceputję Warunki Użytkowania"; /* CrowdNode */ "Accepting terms of use…" = "Akceptowanie warunków korzystania...."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Zaakceptuj DASH bezpośrednio"; - /* CrowdNode */ "Account Recovery" = "Odzyskiwanie Konta"; @@ -149,10 +152,10 @@ "Address" = "Adres"; /* CoinJoin */ -"Advanced" = "Zaawansowane"; +"Advanced" = "Zaawansowany"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Zaawansowany poziom prywatności wymaga niezawodnego połączenia internetowego"; /* No comment provided by engineer. */ "Advanced Security" = "Zaawansowane Bezpieczeństwo"; @@ -167,7 +170,7 @@ "Agree" = "Zgadzam się"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "przed"; /* No comment provided by engineer. */ "All" = "Wszystko"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Ilość wysłana"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Intuicyjne i znane doświadczenie na wszystkich urządzeniach"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "i"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Aplikacja %@ chce otrzymaćdostęp do głównego publicznego klucza. Klucz ten pozwoli to na monitorowanie portfela, ale nie da możliwości ruszenia twoich monet."; +/* No comment provided by engineer. */ +"Apply" = "Zastosuj"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Czy na pewno chcesz anulować to zlecenie?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Ponieważ większość ludzi nie ma pod ręką dokładnie 1000 Dash, CrowdNode stworzył usługę, w której wszyscy mogą czerpać korzyści z posiadania Masternode poprzez kumulacje mniejszych kwot od wielu użytkowników. "; +/* DashSpend */ +"at" = "przy"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Wyszukiwanie ATMów działa lepiej, gdy włączone są usługi lokalizacyjne"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Autoryzacja jest niedostępna"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Autoryzowany"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "za"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Pomiędzy %1$ld a %2$ld znaków"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Pomiędzy 3 a 23 znakami"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Pomiędzy portfelem Dash i Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Pomiędzy twoim Portfelem Dash a twoim kontem na Coinbase"; /* Voting */ -"Block" = "Block"; +"Block" = "Blok"; /* No comment provided by engineer. */ "block #%d of %d" = "blok #%1$d z %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Kup Kartę Podarunkową"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Kup kartę podarunkową za pomocą Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Kup i przekonwertuj inną walutę krypto na Dash"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Kup kredyty"; /* No comment provided by engineer. */ "Buy Dash" = "Kup Dashe"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Kup Dash · Konto nie jest potrzebne"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Kup karty podarunkowe za pomocą Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Anulowanie tej transakcji nie anuluje zlecenia. Wkrótce otrzymasz DASH na swoje konto na Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN Karty"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Reszta"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Zmień na Średniozaawansowany"; +/* No comment provided by engineer. */ +"Check current balance" = "Sprawdź aktualne saldo"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Sprawdź ustawienia daty i czasu"; /* No comment provided by engineer. */ "Check your connection" = "Sprawdź swoje połączenie"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Wybierz swój"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Zabezpieczenie dla transakcji wejściowych do CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "Stwórz Denominacje CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Mieszanie CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Opłata za mieszanie funduszy za pomocą CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Potwierdź"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Potwierdź (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Potwierdź kod PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Skontaktuj się z pomocą Coibase"; +/* DashSpend */ +"Contact CTX Support" = "Skontaktuj się z pomocą techniczną CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Zaproszenie do kontaktów czeka na odpowiedź"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Kontakty"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Dalej"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Kontynuuj mimo wszystko"; /* Coinbase Entry Point */ "Convert Crypto" = "Wymień Krypto"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Stwórz Konto"; +/* Create DashSpend account */ +"Create account" = "Stwórz konto"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Stwórz konto CrowdNode online"; /* No comment provided by engineer. */ "Create invitation" = "Stwórz zaproszenie"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Stwórz Konto Online"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Stwórz swoją nazwę użytkownika"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Stwórz swoją nazwę użytkownika, znajdź przyjaciół i rodzinę oraz dodaj ich do swoich kontaktów"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Limit wypłat na CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "Konto CrowdNode"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ Portfel Dash"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Adres Dash wyznaczony dla twojego konta CrowdNode w porfelu Dash na tym urządzeniu. "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Saldo Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash na Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Nazwa Użytkownika Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Portfel Dash"; + /* Buy Dash */ "Dash Wallet on this device" = "Portfel Dash na tym urządzeniu"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Domyślna waluta, skróty, o…"; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Domyślne ustawienie filtra"; /* Location Service Status */ "Denied" = "Zabroniony"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Rozłączony"; +/* DashSpend confirmation */ +"Discount" = "Zniżka"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Odrzuć"; /* No comment provided by engineer. */ "Display Name" = "Pokaż Imię"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Każde zaproszenie będzie opłacone tą sumą, aby odbiorca mógł szybko stworzyć swój własny profil na Sieci Dash"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Wcześniej"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Wpisz Frazy Odzyskiwania"; +/* Enter verification code */ +"Enter verification code" = "Wprowadź kod weryfikacyjny"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Poniżej wpisz swój kod 2FA"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Błąd"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Wystąpił błąd podczas aktualizacji twojego profilu"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Błąd"; /* No comment provided by engineer. */ "Exit" = "Wyjdź"; @@ -842,7 +881,7 @@ "Export all transactions" = "Eksportuj wszystkie transakcje"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Eksportuj CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Wydłużone Publiczne Klucze"; @@ -850,6 +889,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."; @@ -890,7 +932,7 @@ "Filter" = "Filtrowanie"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filtruj Transakcje"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtruj w zależności od"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtry"; -/* No comment provided by engineer. */ -"Find a merchant." = "Znajdź sprzedawcę"; - /* No comment provided by engineer. */ "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ż %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Pierwszy minimalny depozyt"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Stałe kwoty denominowane"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Elastyczne ilości"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Znalazłem potencjalnie brakujące słowa:\n%@"; +/* DashSpend confirmation */ +"From" = "Od"; + /* from CrowdNode */ "from CrowdNode" = "Od CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "z twojego konta na Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Całkowicie wymieszane"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Pozwól aby twoje monety Dash pracowały na siebie jako zabezpieczenie Masternoda. Możesz zacząć z 0.5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Karta podarunkowa"; +/* No comment provided by engineer. */ +"Gift card" = "Karta Podarunkowa"; + +/* 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" = "Wartość karty podarunkowej"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Rodzaje kart pordarunkowych"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Przejdź do strony CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Tutaj jest adres Dash wyznaczony dla tojego konta CrowdNode w Porfelu Dash na tym urządzeniu. "; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Ukryj"; /* adjective, security level */ "High" = "Wysoki"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Jak potwierdzić adres API Dash"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Jak Używać Kart Podarunkowych"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Klucze Evolution Node ID"; @@ -1058,7 +1124,10 @@ "I Accept" = "Akceptuję"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Akceptuję"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Akceptuję regulamin DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Akceptuję to, że stracę wszystkie moje monety jeśli nie będę miał frazy do odzyskiwania porfela"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "W trakcie..."; +/* No comment provided by engineer. */ +"In store" = "W sklepie"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Niewystarczająca ilość funduszy"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Nie posiadasz wystarczająco wymieszanych funduszy. Poczekaj, aż mieszanie Coinjoin zakończy się lub wyłącz tę funkcję w ustawieniach, aby dokonać tej transakcji."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Nie posiadasz wystarczająco środków"; @@ -1157,10 +1232,10 @@ "Interac" = "Oddziaływanie"; /* CoinJoin */ -"Intermediate" = "Pośredni"; +"Intermediate" = "Średni"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Średni poziom prywatności wymaga niezawodnego połączenia internetowego"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Przelew wewnętrzny"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Niewłaściwa ilość"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Nieprawidłowy adres Dash"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Niewłaściwy kod QR"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Zaproszenie"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Zaproszenie zostało stworzone pomyślnie"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Opłata za zaproszenie"; /* No comment provided by engineer. */ "Invitation used by" = "Zaproszenie zostało użyte przez"; @@ -1253,10 +1334,13 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Transfer z Coinbase do Portfela Dash może zająą nawet do 10 minut."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Zalecane jest korzystanie z sieci Wi-Fi, aby uniknąć dodatkowych opłat za mieszanie."; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ -"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Nawet użytkownicy o bardzo zaawansowanej wiedzy technicznej nie będą mogli ustalić definitywnej historię transakcji."; +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Nawet użytkownicy o bardzo zaawansowanej wiedzy technicznej nie będą w stanie ustalić definitywnie historii transakcji."; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Wygląda na to, że próbujesz przywrócić swój portfel za pomocą 12-wyrazowej frazy odzyskiwania, jednak wprowadziłeś tylko 10 słów, czy chcesz automatycznie odzyskać brakujące słowa? Może to zająć około godziny. Zalecamy podłączenie urządzenia do zasilania."; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Ostatni update serwera"; -/* No comment provided by engineer. */ -"Learn More" = "Dowiedz się więcej"; - /* Info Screen */ "Learn More..." = "Dowiedz się więcej..."; @@ -1308,16 +1389,16 @@ "Let me know when it’s done" = "Daj mi znać kiedy się skończy"; /* No comment provided by engineer. */ -"Let your friends and family to join Dash" = "Pozwól twoim przyjaciołom i rodzinie na dołącznie do Dash"; +"Let your friends and family to join Dash" = "Pozwól twoim przyjaciołom i rodzinie na dołączenie do Dash"; /* No comment provided by engineer. */ -"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Pozwól twoim przyjaciołom i rodzinie na dołącznie do sieci Dash. Zaproś ich do świata społecznych finansów."; +"Let your friends and family to join the Dash Network. Invite them to the world of social banking." = "Pozwól twoim przyjaciołom i rodzinie na dołączenie do sieci Dash. Zaproś ich do świata społecznych finansów."; /* Usernames */ "Letter, numbers and hyphens only" = "Letter, numbers and hyphens only"; /* Validation rule */ -"Letters, numbers and hyphens only" = "Tylklko litery, cyfry i myślniki są dozwolone"; +"Letters, numbers and hyphens only" = "Tylko litery, cyfry i myślniki są dozwolone"; /* No comment provided by engineer. */ "Let’s Get Started" = "Zacznijmy"; @@ -1332,7 +1413,7 @@ "Link Existing Account" = "Połącz się z już istniejącym kontem"; /* CrowdNode */ -"Link Existing CrowdNode Account" = "Połącz się z Istniejącym Kontem CrowdNode"; +"Link Existing CrowdNode Account" = "Połącz się z istniejącym kontem CrowdNode"; /* No comment provided by engineer. */ "Link Uphold Account" = "Podlinkuj konto Uphold"; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Zablokowane"; +/* Log in */ +"Log in" = "Zaloguj się"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Zaloguj się do CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Zaloguj się do twojego konta"; + +/* Log out button */ +"Log Out" = "Wyloguj"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Wyloguj z Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Zaloguj sie z Face ID"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Stwórz post z powyższym tekstem na platformie społecznościowej lub komunikatorze, aby potwierdzić, że jesteś oryginalnym właścicielem żądanej nazwy użytkownika i wklej poniższy link"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Ustaw pozwolenia GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maksymalnie 75 znaków"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Szukiwanie sprzedawców działa lepiej z włączonymi usługami lokalizacyjnymi."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Balans zmiksowanych funduszy"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Miksowanie"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Mieszanie jest możliwe tylko kiedy aplikacja jest otwarta"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Mieszanie zatrzymane ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Miksowanie transakcji"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Mieszanie monet Dash sprawi, że Twoje transakcje będą bardziej prywatne"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Mieszanie ·"; /* No comment provided by engineer. */ "More" = "Więcej"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Sieć"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Opłata sieci"; @@ -1527,7 +1635,7 @@ "New to old" = "Od nowego do starego"; /* Coinbase */ -"Newly received Dash will be automatically mixed when the wallet is opened" = "Nowo otrzymany Dash zostanie automatycznie zmieszany po otwarciu portfela"; +"Newly received Dash will be automatically mixed when the wallet is opened" = "Nowo otrzymane monety Dash zostaną automatycznie wymieszane po otwarciu portfela."; /* No comment provided by engineer. */ "NFC device" = "NFC urządzenie"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Nie znaleźliśmy żadnych wyników"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Nie możesz oddać więcej głosów"; /* No comment provided by engineer. */ "Node IP" = "Węzeł IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Żaden"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Nieprawidłowy adres URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nie wszystkie sklepy akceptują Dash bezpośrednio, ale zawsze możesz użyć Dash aby kupić kartę podarunkową."; - /* Fiat amount */ "Not available" = "Niedostępne"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Nieustalony"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Nie zaczęte"; /* No comment provided by engineer. */ "Not yet used" = "Jeszcze nie użyty"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Od starego do nowego"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Kiedy %@ zakceptuje twoje zaproszenie to będziesz mógł dokonywać płatności używając jedynie nazwy użytkownika"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Został ci tylko jeden głos"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Podgląd Zamówienia"; +/* DashSpend */ +"Original purchase" = "Pierwszy zakup"; + /* No comment provided by engineer. */ "Owner Address" = "Adres Właściciela"; /* No comment provided by engineer. */ "Owner Keys" = "Klucze właściciela"; +/* DashSpend */ +"Password" = "Hasło"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Płać z Łatwością"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Płać za pomocą portfela Dash"; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Płacę"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Płacę..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Metoda płatności"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Typ płatności"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Przyłóż telefon do urządzenia NFC "; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Wskaź słowa z frazy odzyskiwania w odpowiedniej kolejności"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Proszę to zapisać"; +/* No comment provided by engineer. */ +"Powered by" = "Obsługiwane przez"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Podgląd zaproszenia"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Kup"; +/* Alert title */ +"Purchase Failed" = "Zakup się nie udał"; + /* No comment provided by engineer. */ "Quick Receive" = "Szybki Odbierz"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Hasła odzyskiwania muszą mieć 12, 15, 18, 21 lub 24 slowa"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Wymień swoją kartę podarunkową w ciągu kilku sekund, online lub bezpośrednio u kasjera."; - /* Button title, Register (username) */ "Register" = "Zarejestruj"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Poproś o nazwę użytkownika dla siebie"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Żądana nazwa użytkownika została zablokowana"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Żądana nazwa użytkownika została przyznana komuś innemu"; /* An action */ "Rescan" = "Ponownie zeskanuj"; @@ -1956,7 +2082,7 @@ "Restricted" = "Zabronione"; /* Usernames */ -"Results" = "Results"; +"Results" = "Wyniki"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Zachowaj Wspólną Historię Transakcji"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Nagroda"; -/* No comment provided by engineer. */ -"Rewards" = "Nagrody"; - /* No comment provided by engineer. */ "Save" = "Zapisz"; +/* DashSpend */ +"Save %.2f%%" = "Zachowaj %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Zapisz Zmiany"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Screeny są widoczne dla innych aplikacji i urządzeń. Wygeneruj nową frazę odzyskiwania danych i zachowaj ją w tajemnicy."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Szukaj"; /* No comment provided by engineer. */ "Search for a contact" = "Szukaj kontaktu"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Wyniki wysukiwania dla \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Szukanie użytkownika o nazwie %@ na Sieci Dash"; @@ -2039,6 +2168,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"; @@ -2051,19 +2183,25 @@ /* Buy Sell Dash */ "Select a service" = "Wybierz usługę"; +/* DashSpend denomination selection */ +"Select amount" = "Wybierz kwotę"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Wybierz Przeglądarkę Bloków"; /* No comment provided by engineer. */ "Select from Gallery" = "Wybierz z Galeri"; /* CoinJoin */ -"Select mixing level" = "Wybierz poziom miksowania"; +"Select mixing level" = "Wybierz poziom mieszania"; /* Coinbase */ "Select the coin" = "Wybierz monetę"; +/* No comment provided by engineer. */ +"Self-checkout" = "Samoobsługowa płatność"; + /* Sell */ "Sell" = "Sprzedawaj"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Wysłane do"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Ustaw zaufany węzeł"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Pokaż Frazy Odzyskiwania Portfela"; +/* Alert title */ +"Sign in required" = "Wymagane jest zalogowanie"; + /* CrowdNode */ "Sign the message" = "Podpisz wiadomość"; @@ -2195,7 +2339,7 @@ "Skip" = "Pomiń"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Niektóre nazwy użytkowników mogą zostać zablokowane"; /* No comment provided by engineer. */ "Something went wrong" = "Coś poszło nie tak"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sortuj kontakty"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sortuj wg dystansu"; @@ -2222,7 +2369,7 @@ "Staking" = "Lokata"; /* CoinJoin */ -"Start Mixing" = "Zacznij Miksowanie"; +"Start Mixing" = "Zacznij Mieszanie"; /* Step 1 */ "Step %ld" = "Krok %Id"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Zatrzymaj Miksowanie"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Wyślij"; /* No comment provided by engineer. */ "Swept!" = "Wymieciony!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Synchronizacja Zawiodła"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Synchronizacja w toku... Wyniki mogą nie być kompletne."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Synchronizuj Teraz"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Kategoria Podatkowa"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash nie ma żadnej wartości w prawdziwym świecie, ale możesz go używać do robienia transakcji z innymi użytkownikami DashPay Alpha."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Możesz otrzymać Testowe monety Dash za darmo z tak zwanego kranu"; /* 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Wybrany obrazek będzie anonimowo wrzucony na Imgur "; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Wysłany przez Ciebie link będzie widoczny tylko dla właścicieli sieci"; /* Coinbase */ "The minimum amount you can send is %@" = "Minimalna kwota jaką możesz wysłać to %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Ten dodatkowy krok potwierdza, że to naprawdę ty dokonujesz tej transakcji. "; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Ten sprzedawca sprzedaje karty podarunkowe po stałych cenach"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Ten kod PIN będzie wymagany do odblokowania Twojej aplikacji za każdym razem, gdy z niej korzystasz."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "Do"; +/* DashSpend confirmation */ +"To" = "Do"; + /* Coinbase */ "to Dash Wallet on this device" = "Do portfela Dash na tym urządzeniu"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Aby uniemożliwić innym osobom śledzenie komu wysyłasz płatności, zaleca się mieszanie salda przed utworzeniem nazwy użytkownika."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Aby otworzyć lokatę, stwórz konto na CrowdNode lub zaloguj się do już istniejącego konta."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "na adres z portfela na tym urządzania, który jest podłączony do twojego konta CrowdNode."; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Dzisiaj"; /* No comment provided by engineer. */ "Tools" = "Narzędzia"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Doładuj swoje kredyty, aby kontynuować wprowadzanie zmian w swoim profilu i dodawanie kontaktów"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Historia Transakcji"; @@ -2452,10 +2623,10 @@ "Turn device passcode on" = "Włącz hasło urządzenia"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Wyłączony"; /* Coinbase */ -"Turning this feature on will result a higher battery usage" = "Włączenie tej funkcji spowoduje większe zużycie baterii"; +"Turning this feature on will result a higher battery usage" = "Włączenie tej funkcji spowoduje większe zużycie baterii."; /* Coinbase */ "Two factor auth required" = "Wymagane jest uwierzytelnianie dwuetapowe."; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Niemożliwe jest wrzucnie twojego obrazka. Spróbuj ponownie."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Odblokuj"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Nazwa jest dostępna"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Nazwa użytkownika jest dostępna"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Głosowanie jest wymagane tylko w niektórych przypadkach"; /* No comment provided by engineer. */ "Voting Keys" = "Klucze głosujące"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Nie mogliśmy wypłacić środków z Twojego konta CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Mamy 2 rodzaje sprzedawców"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Wykryliśmy, że Dash Wallet miał awarię podczas migracji. Ponowne skanowanie blockchain rozwiąże ten problem lub możesz spróbować ponownie dokonać migracji. Zalecane jest aby ponowne reskanowanie przeprowadzić po sieci wifi, może zająć ono około pół godziny. Twoje środki będą dostępne gdy proces synchronizacji zostanie ukończony."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "My zaktualizowaliśmy"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Po potwierdzeniu transakcji, drugi portfel będzie bezwartościowy i nie powinien być ponownie wykorzystywany ze względów bezpieczeństwa."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Po zamknięciu aplikacji lub zamknięciu ekranu proces miksowania kończy się. Wznowi się on po ponownym otwarciu aplikacji."; /* No comment provided by engineer. */ "Where to Spend" = "Gdzie kupować"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Chcesz zaakcptować zaprosznie?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Czy chcesz dokonać depozytu na twój zakup z połączonego konta bankowego?"; @@ -2774,7 +2945,7 @@ "Yes" = "Tak"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Wczoraj"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Zaproszenie do kontaktów od %@ zostało zaakceptowane"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Za chwilę wyczyścisz ten portfel z tego urządzenia. Fundusze powiązane z tym portfelem można odzyskać tylko wtedy, gdy masz frazy odzyskiwania."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Zawsze masz możliwość skasowania zdjęcia jeśli masz dostęp do portfela. "; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Możesz zmienić sposób, w jaki lub kiedy twoje zarobki są wypłacane."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Możesz nadal używać DashPay do płatności, ale nie możesz aktualizować swojego profilu ani dodawać nowych kontaktów, dopóki nie uzupełnisz salda kredytowego"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Możesz wprowadzić klucz w jednym z następujących formatów: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Możesz zobaczyć szczegółowe informacje na temat swoich depozytów, wypłat oraz zarobków."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Nie możesz odebrać tego zaproszenia, ponieważ już masz własną nazwę użytkownika na sieci Dash."; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Jak na razie nie masz żadnych kontaktów. "; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Nie posiadasz wystarczających środków aby dokonać tej transakcji"; + /* Coinbase */ "You don’t have enough balance" = "Nie masz wystarczająco środków"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Musisz odczekać 5 minut przed rozpoczęciem kolejnej wypłaty"; /* CrowdNode */ "You only need %@ to join the pool." = "Potrzebujesz tylko %@ aby dołączyć do puli stakowania."; +/* DashSpend confirmation */ +"You pay" = "Płacisz"; + /* Coinbase */ "You receive" = "Otrzymujesz"; @@ -2897,7 +3083,7 @@ "You will need this recovery phrase to access your funds if this device is lost, damaged or if Dash Wallet is uninstalled from this device." = "Szyk słów do odzysku portfela będzie potrzebny aby mieć dostęp do funduszy w wypadku uszkodzenia, utraty tego urządzenia lub jeśli Dash Wallet zostanie przypadkowo odinstalowany. "; /* Coinbase */ -"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "Gdy ta opcja jest włączona, będziesz mógł wydać zmieszane monety Dash. Możesz to wyłączyć w dowolnym momencie."; +"You will only be able to spend Dash that has been mixed when this is turned on. This can be turned off at any time." = "Gdy ta opcja jest włączona, będziesz mógł wydać wymieszane monety Dash. Możesz ją wyłączyć w dowolnym momencie."; /* Coinbase/Buy Dash/Confirm Order */ "You will receive %@ Dash on your Dash Wallet on this device. Please note that it can take up to 2-3 minutes to complete a transfer." = "Otrzymasz %@ do portfela Dash na tym urządzeniu. Transfer może zająć 2-3 minuty. "; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Będziesz otrzymywać częściowe płatności automatycznie i domyślnie będą one reinwestowane, jednak jęsli chcesz możesz też ustawić automatyczne wypłaty."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Twoje saldo kredytowe zostało w pełni wyczerpane"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Twoje saldo kredytowe jest niskie"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Otwieramy twoje konto CrowNode..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Twoje konto CrowdNode jest skonfigurowane i gotowe do użycia!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Twoje konto CrowdNode zostało utworzone przy użyciu tych transakcji."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Twój adres CrowdNode został potwierdzony."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Otrzymaliśmy twój depozyt."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Czas na twoim urządzeniu jest %1$@ na %2$d sekund. Nie możesz użyć Coinjoin z powodu tej różnicy.\n\nUstawienia czasu na tym urządzeniu muszą zostać zmienione na „Automatycznie ustawiaj czas”, aby użyć Coinjoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Czas na twoim urządzeniu różni się o %d minut. Prawdopodobnie nie możesz wysyłać lub otrzymywać Dash z powodu tej różnicy.\n\nPowinieneś sprawdzić, i skorygować swoje ustawienia daty, godziny i strefy czasowej."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Czas na twoim urządzeniu jest nieprawidłowy o więcej niż 5 sekund. Nie możesz używać CoinJoin z powodu tej różnicy\n\nUstawienia czasu na urządzeniu muszą zostać zmienione na „Automatycznie ustawiaj czas” przed użyciem CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Twój Email nie jest przechowywany w portfelu Dash lub na serwerach sieci. Jest on użyty tylko raz aby pobrać detale twojego konta Gravatar, i później jest kasowany. "; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Twój adres e-mail służy wyłącznie do wysyłania hasła jednorazowego."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Twoje zaproszenie od %@ zostało już odebrane"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Twoja prośba została anulowana"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Twoja transakcja została wysłana a ilość powinna pojawić się na Twoim koncie w kilka minut."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Twoja nazwa użytkownika %@ została stworzona na Sieci Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/pt.lproj/Localizable.strings b/DashWallet/pt.lproj/Localizable.strings index 187b16189..e80c6f75b 100644 --- a/DashWallet/pt.lproj/Localizable.strings +++ b/DashWallet/pt.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ não tem permissão para acessar Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contatos / %3$lu atualizações de perfil"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votos serão contabilizados, pois você possui várias chaves de votação armazenadas na carteira "; /* Voting */ "%ld duplicates" = "%ld duplicados"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Aceitar"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Aceitar termos de uso"; /* CrowdNode */ "Accepting terms of use…" = "Aceitando os termos de uso…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Aceitar DASH diretamente"; - /* CrowdNode */ "Account Recovery" = "Recuperação de Conta"; @@ -152,7 +155,7 @@ "Advanced" = "Avançado"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "O nível de privacidade avançado exige uma conexão de internet confiável"; /* No comment provided by engineer. */ "Advanced Security" = "Segurança Avançada"; @@ -167,7 +170,7 @@ "Agree" = "Aceitar"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "adiante"; /* No comment provided by engineer. */ "All" = "Todos"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Valor Enviado"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Uma experiência familiar e através de todos os seus dispositivos"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "e"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Aplicação %@gostaria de receber sua chave mestra pública. Isso pode ser usado para manter acompanhamento de sua carteira, ela não pode ser usada para mover seu Dash."; +/* No comment provided by engineer. */ +"Apply" = "Aplicar"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Tem certeza de que deseja cancelar este pedido?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Como a maioria das pessoas não possui exatamente 1000 Dash em mãos, o CrowdNode criou um serviço no qual, reunindo os depósitos dos membros, eles podem obter os benefícios de possuir um Masternode."; +/* DashSpend */ +"at" = "em"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "A pesquisa de Caixas Eletrônicos funciona melhor com os Serviços de Localização ativados"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Autenticação indisponível"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Autorizado"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "atrás"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Entre %1$ld e %2$ld caracteres"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Entre 3 e 23 caracteres"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Entre Carteira Dash e Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Entre Carteira Dash e sua conta Coinbase"; /* Voting */ -"Block" = "Block"; +"Block" = "Bloquear"; /* No comment provided by engineer. */ "block #%d of %d" = "bloco #%1$d de %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Comprar um Cartão Presente"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Compre um cartão presente com Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Compre e converta Dash com outra criptomoeda"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Comprar créditos"; /* No comment provided by engineer. */ "Buy Dash" = "Comprar Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Compre Dash · Não é necessário ter uma conta"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Compre cartões presente com seu Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Cancelar esta transação não cancela a ordem de negociação. Você receberá DASH em sua conta Coinbase em breve."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN do cartão"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Alterar"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Mudar para Intermediário"; +/* No comment provided by engineer. */ +"Check current balance" = "Verificar saldo atual"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Verifique as configurações de data e hora"; /* No comment provided by engineer. */ "Check your connection" = "Verifique sua conexão"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Escolha seu"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Entradas de colateral do CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "Criar denominações CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Mesclando CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Taxa de mistura do CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Confirme"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirmar (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirmar PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contato com o Suporte Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Entrar em contato com o Suporte CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Solicitação de Contato Pendente"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Contatos"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continuar"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Continuar mesmo assim"; /* Coinbase Entry Point */ "Convert Crypto" = "Converter Crypto"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Criar Conta"; +/* Create DashSpend account */ +"Create account" = "Criar conta"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Crie uma conta online do CrowdNode"; /* No comment provided by engineer. */ "Create invitation" = "Criar Convite"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Criar conta online"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Criar seu nome de usuário"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Crie seu nome de usuário, encontre amigos e familiares com seus nomes de usuário e adicione-os aos seus contatos"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Limites de retirada do CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "Conta · CrowdNode"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ Carteira Dash"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Endereço Dash designado para sua conta CrowdNode na Carteira Dash neste dispositivo"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Saldo Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Saldo Dash na Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Nome de usuário Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Carteira Dash"; + /* Buy Dash */ "Dash Wallet on this device" = "Carteira Dash neste dispositivo"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Moeda padrão, atalhos, sobre..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Configuração de filtro padrão"; /* Location Service Status */ "Denied" = "Negado"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Desconectado"; +/* DashSpend confirmation */ +"Discount" = "Desconto"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Dispensar"; /* No comment provided by engineer. */ "Display Name" = "Nome de Exibição"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "por exemplo: johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Cada convite será financiado com esse valor para que o destinatário possa criar rapidamente seu nome de usuário na Rede Dash"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Recentes"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Insira Frase de Recuperação"; +/* Enter verification code */ +"Enter verification code" = "Digite o código de verificação"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Digite abaixo seu código de autenticação de dois fatores \"2FA\""; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Erro"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Erro ao atualizar seu perfil"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Erro"; /* No comment provided by engineer. */ "Exit" = "Sair"; @@ -842,7 +881,7 @@ "Export all transactions" = "Exportar todas as transações"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Exportar CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Chave Pública Estendida"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtro"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filtrar Transações"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtrado por:"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtros"; -/* No comment provided by engineer. */ -"Find a merchant." = "Encontre um comércio"; - /* No comment provided by engineer. */ "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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Primeiro depósito mínimo"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Valores fixos denominados"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Valores flexíveis"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Possíveis palavras faltando encontradas:\n%@"; +/* DashSpend confirmation */ +"From" = "De"; + /* from CrowdNode */ "from CrowdNode" = "do CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "da sua conta Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Totalmente misturado"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Ganhe recompensas de depósitos em Dash Masternodes com apenas 0,5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Vale-presente"; +/* No comment provided by engineer. */ +"Gift card" = "Vale-presente"; + +/* 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" = "Total do cartão-presente"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Tipos de cartão-presente"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Acesse o site do CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Aqui está um endereço Dash designado para sua conta CrowdNode na Carteira Dash neste dispositivo"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Ocultar"; /* adjective, security level */ "High" = "Alto"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Como confirmar seu endereço de API Dash"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Como Usar um Cartão Presente"; +"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 "; @@ -1058,7 +1124,10 @@ "I Accept" = "Eu Aceito"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Eu aceito"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Eu aceito os termos e condições do DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Eu aceito que perderei minhas moedas se eu não mais possuir a frase de recuperação"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "Processando..."; +/* No comment provided by engineer. */ +"In store" = "Em estoque"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Fundos insuficientes"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Fundos misturados insuficientes. Aguarde o término da mistura CoinJoin ou desative este recurso nas configurações para concluir esta transação."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Saldo da Carteira Insuficiente"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Intermediário"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "O nível de privacidade intermediário exige uma conexão de internet confiável"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Transferência Interna"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Valor inválido"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Endereço Dash inválido"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code Inválido"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Convite"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Convite Criado com Sucesso"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Taxa de Convite"; /* No comment provided by engineer. */ "Invitation used by" = "Convite utilizado por"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Pode levar até 10 minutos para transferir o Dash da Coinbase para a Carteira Dash neste dispositivo."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "É recomendável estar conectado a uma rede Wi-Fi para evitar cobranças adicionais de taxas de transferência."; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Seria muito difícil para usuários avançados com qualquer nível de conhecimento técnico determinar seu histórico de transações"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Última atualização do servidor"; -/* No comment provided by engineer. */ -"Learn More" = "Saiba mais"; - /* Info Screen */ "Learn More..." = "Saiba mais..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Bloqueado"; +/* Log in */ +"Log in" = "Entrar"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Faça login no CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Entrar na sua conta"; + +/* Log out button */ +"Log Out" = "Sair"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Sair do Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login com Face ID"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Faça uma publicação com o texto acima em uma rede social ou plataforma de mensagens conhecida para verificar que você é o proprietário original do nome de usuário solicitado e cole o link abaixo"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Gerenciar permissão de GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Máx"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Máximo de 75 caracteres"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "A pesquisa de comércios funciona melhor com os Serviços de Localização ativados."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Saldo misturado"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Misturando"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "A mistura só é possível com o aplicativo aberto"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Mistura Pausada ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Misturando Transações"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Misturar suas moedas Dash tornará suas transações mais privadas"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Misturando ·"; /* No comment provided by engineer. */ "More" = "Mais"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Rede"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Taxa de rede"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Nenhum Resultado Encontrado"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Sem votos restantes"; /* No comment provided by engineer. */ "Node IP" = "IP do nó"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Nenhuma"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "URL inválida"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nem todas as lojas aceitam DASH diretamente, mas você pode comprar um cartão presente com seu Dash."; - /* Fiat amount */ "Not available" = "Não disponível"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Não determinado"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Não iniciado"; /* No comment provided by engineer. */ "Not yet used" = "Não utilizado ainda"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Do mais antigo para o mais recente"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Assim que %@ aceitar seu pedido, você poderá Pagar Diretamente ao Nome de Usuário"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Um voto restante"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Visualização do pedido"; +/* DashSpend */ +"Original purchase" = "Compra original"; + /* No comment provided by engineer. */ "Owner Address" = "Endereço do Proprietário"; /* No comment provided by engineer. */ "Owner Keys" = "Chaves do Proprietário"; +/* DashSpend */ +"Password" = "Senha"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pague com Facilidade"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pagar com a carteira DASH."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Pagando"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Pagando..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Método de pagamento"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Tipo de Pagamento"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Por favor coloque seu telefone perto do dispositivo NFC"; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Por favor, toque as palavras da sua frase de recuperação na ordem correta"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Por favor, anote"; +/* No comment provided by engineer. */ +"Powered by" = "Desenvolvido por"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Visualizar Convite"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Comprar"; +/* Alert title */ +"Purchase Failed" = "A compra falhou"; + /* No comment provided by engineer. */ "Quick Receive" = "Receber Rapidamente"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "A frase de recuperação deve ter 12, 15, 18, 21 ou 24 palavras"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Resgate seu cartão presente on-line em segundos ou no caixa."; - /* Button title, Register (username) */ "Register" = "Registrar"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Solicitar seu nome de usuário"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "O nome de usuário solicitado foi bloqueado"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "O nome de usuário solicitado foi dado a outra pessoa"; /* An action */ "Rescan" = "Reescanear"; @@ -1956,7 +2082,7 @@ "Restricted" = "Restrito"; /* Usernames */ -"Results" = "Results"; +"Results" = "Resultados"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Reter Histórico de Transações Mútuas"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Recompensa"; -/* No comment provided by engineer. */ -"Rewards" = "Recompensas"; - /* No comment provided by engineer. */ "Save" = "Salvar"; +/* DashSpend */ +"Save %.2f%%" = "Salvar %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Salvar Alterações"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Capturas de Tela são visíveis para outros dispositivos e aplicativos. Gere uma nova frase de recuperação e a mantenha secreta."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Buscar"; /* No comment provided by engineer. */ "Search for a contact" = "Pesquisar um contato"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Pesquisar resultados para \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Pesquisar pelo usuário %@ na Rede Dash"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Selecione um serviço"; +/* DashSpend denomination selection */ +"Select amount" = "Selecionar valor"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Selecionar explorador de blocos"; /* No comment provided by engineer. */ "Select from Gallery" = "Selecionar da Galeria"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Selecione a moeda"; +/* No comment provided by engineer. */ +"Self-checkout" = "Pagamento automático"; + /* Sell */ "Sell" = "Vender"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Enviado para"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Definir um nó confiável"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Mostrar Frase de Recuperação"; +/* Alert title */ +"Sign in required" = "Autenticação necessária"; + /* CrowdNode */ "Sign the message" = "Assine a mensagem"; @@ -2195,7 +2339,7 @@ "Skip" = "Pular"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Algumas contas de usuário podem ser bloqueadas"; /* No comment provided by engineer. */ "Something went wrong" = "Algo deu errado"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Ordenar Contatos"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Ordenado por distância"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Parar mistura"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Enviar"; /* No comment provided by engineer. */ "Swept!" = "Varrido!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sicronização Falhou"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sincronização em andamento... Os resultados podem não estar completos."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sincronizar Agora"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Categoria fiscal"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "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."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "O Test Dash é gratuito e pode ser obtido no que chamamos de 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "A imagem que você selecionar será carregada no Imgur anonimamente."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "O link que você enviar será visível apenas para os proprietários da rede"; /* Coinbase */ "The minimum amount you can send is %@" = "A quantidade mínima que você pode enviar é %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Esta etapa extra mostra que é realmente você tentando fazer uma transação."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Este comerciante vende cartões presente com preços fixos"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Este PIN será requerido para desbloquear o seu app toda vez que o utilize"; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "para"; +/* DashSpend confirmation */ +"To" = "Para"; + /* Coinbase */ "to Dash Wallet on this device" = "para a Carteira Dash neste dispositivo"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Para ajudar a evitar que outras pessoas vejam para quem você faz pagamentos, é recomendável misturar seu saldo antes de criar seu nome de usuário."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Para iniciar as operações de staking, crie uma conta no CrowdNode ou conecte-se a uma existente."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "para o endereço Dash designado para sua conta CrowdNode na Carteira Dash neste dispositivo"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Hoje"; /* No comment provided by engineer. */ "Tools" = "Ferramentas"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Recarregue seus créditos para continuar fazendo alterações em seu perfil e adicionando contatos"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limite de ID de toque"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Histórico de Transações"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Habilite a senha de dispositivo"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Desligado"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Ativar essa funcionalidade resultará em um maior consumo de bateria."; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Não foi possível enviar sua foto. Por favor, tente novamente."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Desbloquear"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Nome de usuário disponível"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Nome de usuário está disponível"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Votar é obrigatório apenas em alguns casos"; /* No comment provided by engineer. */ "Voting Keys" = "Chaves de Votação"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Não foi possível realizar um saque da sua conta CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Temos 2 tipos de comércios"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Detectamos que Dash Wallet travou durante a migração. Re-scanear a blockchain resolverá este problema ou você pode tentar novamente. Re-scanear deve ser preferencialmente feito por wifi e pode tomar até uma hora. Seus fundos estarão disponíveis assim que o processo de sincronização esteja completo."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Nós Atualizamos"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Quando a transação esteja confirmada, a outra carteira será inutilizada e não deve ser utilizada por razões de segurança."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Quando você fecha o aplicativo ou bloqueia a tela, o processo de mistura é interrompido. Ele será retomado quando você reabrir o aplicativo."; /* No comment provided by engineer. */ "Where to Spend" = "Onde Gastar"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Você gostaria de aceitar o convite?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Você gostaria de fazer um depósito para a sua compra usando uma conta bancária vinculada?"; @@ -2774,7 +2945,7 @@ "Yes" = "Sim"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Ontem"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Você aceitou a solicitação de contato de %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Você está prestes a limpar esta carteira desse dispositivo. Fundos associados a essa carteira poderão ser recuperados apenas se você tiver a sua frase de recuperação."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Você sempre pode excluir a imagem carregada, desde que tenha acesso a esta carteira."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Você pode alterar como / quando seus ganhos de recompensa serão pagos."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Você pode continuar a usar o DashPay para pagamentos, mas não pode atualizar seu perfil ou adicionar mais contatos até recarregar seu saldo de crédito"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Você pode inserir sua chave em qualquer um dos seguintes formatos: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Você pode ver informações detalhadas sobre seus depósitos, saques e ganhos de recompensa."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Você não pode reivindicar este convite porque já tem um nome de usuário Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Você não tem nenhum contato no momento"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Você não tem fundos suficientes para completar esta transação"; + /* Coinbase */ "You don’t have enough balance" = "Você não tem saldo suficiente"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Você precisa aguardar 5 minutos antes de iniciar outro saque"; /* CrowdNode */ "You only need %@ to join the pool." = "Você só precisa de %@ para entrar no pool."; +/* DashSpend confirmation */ +"You pay" = "Você paga"; + /* Coinbase */ "You receive" = "Você recebe"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Você receberá pagamentos fracionados automaticamente e eles serão reinvestidos por padrão, no entanto, também é fácil configurar saques automáticos para receber pagamentos recorrentes."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Seu saldo de crédito foi completamente esgotado"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Seu saldo de crédito está baixo"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Sua conta CrowdNode está sendo criada…"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Sua conta CrowdNode está configurada e pronta para uso!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Sua conta CrowdNode foi criada usando estas transações."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Seu endereço CrowdNode foi confirmado."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Seu depósito no CrowdNode foi recebido."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "A hora do seu dispositivo está %1$@ em %2$d segundos. Você não pode usar o CoinJoin devido a essa diferença.\n\nAs configurações de hora no seu dispositivo precisam ser alteradas para 'Definir hora automaticamente' para usar o CoinJoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "A hora do seu dispositivo está com uma diferença de %d minutos. Você provavelmente não poderá enviar ou receber Dash devido a este problema.\n\nVocê deve verificar e, se necessário, corrigir as configurações de data, hora e fuso horário."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "A hora do seu dispositivo está com mais de 5 segundos de diferença. Você não pode usar o CoinJoin devido a essa diferença.\n\nAs configurações de hora no seu dispositivo precisam ser alteradas para 'Definir hora automaticamente' antes de usar o CoinJoin."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Seu e-mail não é armazenado na carteira DashPay nem em nenhum servidor. Ele é usado uma vez para obter os detalhes da sua conta Gravatar e depois descartado."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Seu email é usado apenas para enviar uma senha única."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Seu convite de %@ já foi reivindicado"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Sua solicitação foi cancelada"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Sua transação foi enviada e o valor aparecerá na sua carteira em alguns minutos. "; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Seu nome de usuário %@ foi criado com sucesso na Rede Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/ro.lproj/Localizable.strings b/DashWallet/ro.lproj/Localizable.strings index 807bb0475..553348fe3 100644 --- a/DashWallet/ro.lproj/Localizable.strings +++ b/DashWallet/ro.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Aplicaţia %@ ar dori să primească Master Public Key. Aceasta poate fi folosită pentru a ține evidența portofelului tau, dar nu poate fi utilizată pentru a muta Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirmă"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Sold Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Renunță"; /* No comment provided by engineer. */ "Display Name" = "Display Name"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Introdu codul tău 2FA mai jos"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Eroare"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtru"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Accept că voi pierde monedele dacă nu mai am fraza de recuperare"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Suma nevalidă"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Blocat"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out din Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Rețea"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Taxă de reţea"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Cheile Proprietarului"; +/* DashSpend */ +"Password" = "Parolă"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Plasează telefonul în apropierea dispozitivului NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Salvează"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Setează un nod de încredere"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "limita pentru Touch ID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Am descoperit că Dash Wallet-ul tău s-a prăbușit în timpul migrației. Reanalizarea blockchain-ului va rezolva această problemă sau poți încerca din nou. Rescanarea ar trebui efectuată, de preferință, pe Wi-Fi și va dura până la o jumătate de oră. Fondurile tale vor fi disponibile după finalizarea procesului de sincronizare."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Tranzacția ta a fost trimisă, iar suma trebuie să apară în portofel în câteva minute."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/ru.lproj/Localizable.strings b/DashWallet/ru.lproj/Localizable.strings index 1296dcf4d..9044d48fb 100644 --- a/DashWallet/ru.lproj/Localizable.strings +++ b/DashWallet/ru.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ запрещен доступ к Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu контактов / %3$lu обновлений профиля"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "В вашем кошельке храниться несколько ключей для голосования, поэтому будет отдано %d голосов."; /* Voting */ "%ld duplicates" = "%ld дубликатов"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Подтвердить"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Принять условия использования"; /* CrowdNode */ "Accepting terms of use…" = "Принимаются условия использования..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Принять DASH напрямую"; - /* CrowdNode */ "Account Recovery" = "Восстановление аккаунта"; @@ -152,7 +155,7 @@ "Advanced" = "Продвинутый"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Для высокого уровня приватности необходимо надёжное подключение к интернету"; /* No comment provided by engineer. */ "Advanced Security" = "Настройки безопасности"; @@ -167,7 +170,7 @@ "Agree" = "Согласиться"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "спешит"; /* No comment provided by engineer. */ "All" = "Все"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Отправлено"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Интуитивный и привычный интерфейс на всех ваших устройствах"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = " и "; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Приложение %@ хочет получить Ваш основной публичный ключ. Это может быть использовано для отслеживания Вашего кошелька, но не для отправки Ваших Dash."; +/* No comment provided by engineer. */ +"Apply" = "Применить"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Вы уверены, что хотите отменить этот ордер?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Часто у людей нет на руках суммы в 1000 Dash, и CrowdNode создал сервис, где можно получить преимущества владения мастернодой за счёт вкладов участников в общий пул."; +/* DashSpend */ +"at" = "в"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Поиск банкоматов работает лучше всего с включенными службами геолокации."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Авторизация недоступна"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Подтверждён"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "отстаёт"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "От %1$ld до %2$ld символов"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "От 3 до 23 символов"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Между Dash Wallet и Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Между Dash Wallet и вашим аккаунтом Coinbase"; /* Voting */ -"Block" = "Block"; +"Block" = "Блок"; /* No comment provided by engineer. */ "block #%d of %d" = "блок №%1$d из %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Купить подарочную карту"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Купите подарочную карту с помощью Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Купить и конвертировать Dash с помощью другой криптовалюты"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Купить кредиты"; /* No comment provided by engineer. */ "Buy Dash" = "Купить Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Купить Dash · Без учётной записи"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Покупайте подарочные карты с помощью Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Отмена транзакции не повлияет на торговый ордер. Вскоре DASH поступит на ваш счёт в Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Пин-код карты"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Изменить"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Сменить на Средний"; +/* No comment provided by engineer. */ +"Check current balance" = "Проверить текущий баланс"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Проверьте настройки даты и времени"; /* No comment provided by engineer. */ "Check your connection" = "Проверьте ваше интернет-соединение"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Выберите ваше"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Залоговое обеспечение CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "Создать деноминации CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Перемешивание CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Комиссия за перемешивание CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Подтвердить"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Подтвердить (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Подтвердите PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Связаться с поддержкой Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Связаться с поддержкой CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Неподтверждённые запросы на добавление в контакты"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Контакты"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Продолжить"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Продолжить"; /* Coinbase Entry Point */ "Convert Crypto" = "Обменять криптовалюту"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Создать аккаунт"; +/* Create DashSpend account */ +"Create account" = "Создать учетную запись"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Создать онлайн-аккаунт CrowdNode"; /* No comment provided by engineer. */ "Create invitation" = "Создать приглашение"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Создать онлайн аккаунт"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Создать имя пользователя"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Создайте имя пользователя, найдите членов семьи и друзей по именам пользователей и добавьте их в список контактов"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Лимит CrowdNode на вывод"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · Аккаунт"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ DashWallet"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash адрес, созданный для вашего аккаунта CrowdNode в Dash Wallet на этом устройстве"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Баланс"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Баланс Dash на Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Имя пользователя Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet на этом устройстве"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Валюта по умолчанию, ссылки, о программе…"; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Настройки фильтра по умолчанию"; /* Location Service Status */ "Denied" = "Запрещено"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Подключение отсутствует"; +/* DashSpend confirmation */ +"Discount" = "Скидка"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Отклонить"; /* No comment provided by engineer. */ "Display Name" = "Отображаемое имя"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "например, johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Каждое приглашение сопровождается этой суммой, чтобы получатель мог тут же создать своё имя пользователя в сети Dash"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Ранее"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Введите фразу восстановления"; +/* Enter verification code */ +"Enter verification code" = "Введите код подтверждения"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Введите код 2FA ниже"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Ошибка"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Ошибка при обновлении профиля"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Ошибка ·"; /* No comment provided by engineer. */ "Exit" = "Выход"; @@ -842,7 +881,7 @@ "Export all transactions" = "Экспортировать все транзакции"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Экспортировать CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Расширенные публичные ключи"; @@ -850,6 +889,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" = "Не удалось запустить сеанс авторизации"; @@ -890,7 +932,7 @@ "Filter" = "Фильтр"; /* No comment provided by engineer. */ -"Filter Transactions" = "Показать транзакции"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Фильтр по"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Фильтры"; -/* No comment provided by engineer. */ -"Find a merchant." = "Найдите продавца."; - /* No comment provided by engineer. */ "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 %@" = "Первый депозит должен быть не менее %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Первый минимальный депозит"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Фиксированная сумма"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Настраиваемая сумма"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Найдены возможно пропущенные слова:\n%@"; +/* DashSpend confirmation */ +"From" = "От кого"; + /* from CrowdNode */ "from CrowdNode" = "из CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "с аккаунта Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Полностью перемешано"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Получайте вознаграждение за инвестирование в мастерноды Dash, начиная с 0.5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Подарочный сертификат"; +/* No comment provided by engineer. */ +"Gift card" = "Подарочная карта"; + +/* 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" = "Всего за подарочную карту"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Типы подарочных карт"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Перейти на сайт CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Это Dash адрес, созданный для вашего аккаунта CrowdNode в Dash Wallet на этом устройстве"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Свернуть"; /* adjective, security level */ "High" = "Высокий"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Как подтвердить свой API Dash адрес"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Как использовать подарочную карту"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Ключи идентификаторов Evolution нод"; @@ -1058,7 +1124,10 @@ "I Accept" = "Принимаю"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Принимаю"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Я принимаю положения и условия DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Я понимаю, что потеряю свои средства, если у меня не будет фразы восстановления"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "В процессе..."; +/* No comment provided by engineer. */ +"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" = "Доходы"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Недостаточно средств"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Средства недостаточно перемешаны. Для завершения этой транзакции дождитесь, пока CoinJoin завершит перемешивание, или отключите эту функцию в настройках. "; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Недостаточно средств на балансе кошелька"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Средний"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Для среднего уровня приватности необходимо надёжное подключение к интернету"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Внутренний перевод"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Некорректная сумма"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Некорректный адрес Dash"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Некорректный QR-код"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Приглашение"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Приглашение успешно создано"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Комиссия за приглашение"; /* No comment provided by engineer. */ "Invitation used by" = "Приглашением воспользовался"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Перевод Dash с Coinbase на Dash Wallet на этом устройстве может занять до 10 минут."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Во избежание увеличения комиссии за перемешивание, рекомендуется пользоваться Wi-Fi сетью"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Продвинутым пользователям с любым уровнем знаний в области технологий будет довольно сложно определить вашу историю транзакций"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Последнее обновление сервера"; -/* No comment provided by engineer. */ -"Learn More" = "Узнать больше"; - /* Info Screen */ "Learn More..." = "Узнать больше"; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Зафиксировано"; +/* Log in */ +"Log in" = "Войти"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Войти в CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Войти в ваш аккаунт"; + +/* Log out button */ +"Log Out" = "Выйти"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Выйти из Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Войти с помощью Face ID"; @@ -1389,10 +1488,10 @@ "Low to high" = "По возрастанию"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "Основная сеть"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Опубликуйте сообщение с таким же текстом, как в примере выше, в известной социальной сети или мессенджере, чтобы подтвердить, что вы действительно являетесь владельцем запрашиваемого имени пользователя. Вставьте ссылку на этот пост в поле ниже."; /* No comment provided by engineer. */ "Manage GPS Permission" = "Изменить разрешения GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Макс"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Максимум 75 символов"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Поиск продавцов работает лучше всего с включенными службами геолокации."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Смешанный баланс"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Перемешивание"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Перемешивание доступно только при открытом приложении"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Перемешивание на паузе ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Перемешивание транзакций"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Перемешивание монет Dash повысит уровень приватности ваших транзакций"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Перемешивание ·"; /* No comment provided by engineer. */ "More" = "Больше"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Сеть"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Комиссия сети"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Результатов не найдено"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Голосов больше нет"; /* No comment provided by engineer. */ "Node IP" = "IP узла"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Отсутствует"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Ссылка недействительна"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Не все магазины принимают DASH напрямую, но вы можете купить подарочную карту с помощью Dash."; - /* Fiat amount */ "Not available" = "Недоступно"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Не определён"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Не начато"; /* No comment provided by engineer. */ "Not yet used" = "Еще не использован"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "ОК"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Сначала старые"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Когда %@ примет ваш запрос, вы сможете оплатить напрямую по Имени пользователя"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Остался один голос"; /* Online */ "Online" = "Онлайн"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Просмотр заказа"; +/* DashSpend */ +"Original purchase" = "Первоначальная покупка"; + /* No comment provided by engineer. */ "Owner Address" = "Адрес владельца"; /* No comment provided by engineer. */ "Owner Keys" = "Ключи владельца"; +/* DashSpend */ +"Password" = "Пароль"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Платите с легкостью"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Оплатить через DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Оплата"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Оплата..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Способ оплаты"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Способ оплаты"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Пожалуйста, поместите Ваш телефон рядом с NFC устройством."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Пожалуйста, нажмите на слова из Вашей фразы восстановления в правильном порядке"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Пожалуйста, запишите её"; +/* No comment provided by engineer. */ +"Powered by" = "Работает с помощью"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Предпросмотр приглашения"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Купить"; +/* Alert title */ +"Purchase Failed" = "Ошибка при заказе"; + /* No comment provided by engineer. */ "Quick Receive" = "Получить быстро"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Фраза восстановления должна состоять из 12, 15, 18, 21 или 24 слов"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Используйте подарочную карту сразу же онлайн или в кассе."; - /* Button title, Register (username) */ "Register" = "Регистрация"; @@ -1922,6 +2045,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" = "Узнать подробности"; @@ -1929,10 +2055,10 @@ "Request your username" = "Отправьте запрос на имя пользователя"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Запрошенное имя пользователя было заблокировано"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Запрошенное имя пользователя было отдано кому-то другому"; /* An action */ "Rescan" = "Синхронизировать снова"; @@ -1956,7 +2082,7 @@ "Restricted" = "Ограничен"; /* Usernames */ -"Results" = "Results"; +"Results" = "Результаты"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Хранить историю взаимных транзакций"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Вознаграждение"; -/* No comment provided by engineer. */ -"Rewards" = "Вознаграждения"; - /* No comment provided by engineer. */ "Save" = "Сохранить"; +/* DashSpend */ +"Save %.2f%%" = "Сохранить %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Сохранить изменения"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Скриншоты видимы другими приложениями и устройствами. Создайте новую фразу восстановления и держите её в секрете."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Поиск"; /* No comment provided by engineer. */ "Search for a contact" = "Поиск контакта"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Результаты поиска по запросу \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Поиск имени пользователя %@ в сети Dash"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Выбрать сервис"; +/* DashSpend denomination selection */ +"Select amount" = "Выбрать сумму"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Выбрать обозреватель блоков"; /* No comment provided by engineer. */ "Select from Gallery" = "Выбрать из галереи"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Выбрать монету"; +/* No comment provided by engineer. */ +"Self-checkout" = "Самообслуживание"; + /* Sell */ "Sell" = "Продать"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Отправлено"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Указать доверенный узел"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Показать фразу восстановления"; +/* Alert title */ +"Sign in required" = "Необходимо войти в аккаунт"; + /* CrowdNode */ "Sign the message" = "Подписать сообщение"; @@ -2195,7 +2339,7 @@ "Skip" = "Пропустить"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Некоторые Имена пользователей могут быть заблокированы"; /* No comment provided by engineer. */ "Something went wrong" = "Что-то пошло не так"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Упорядочить контакты"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Сортировать по расстоянию"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Остановить перемешивание"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Отправить"; /* No comment provided by engineer. */ "Swept!" = "Переведено!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Ошибка синхронизации"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Синхронизация… Результаты могут быть неполными."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Синхронизировать"; @@ -2279,13 +2429,19 @@ "Tax Category" = "Категория"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Тестовый Dash не обладает никакой ценностью в реальном мире, но вы можете обмениваться этими монетами с другими пользователями DashPay Alpha"; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Тестовый Dash распространяется бесплатно, его можно получить через так называемый кран."; /* 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."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "Тестовая сеть"; /* No comment provided by engineer. */ "The chain is syncing…" = "Блокчейн синхронизируется..."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Выбранное изображение будет загружено на Imgur анонимно."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Отправленную ссылку увидят только владельцы сети"; /* Coinbase */ "The minimum amount you can send is %@" = "Минимальная сумма для отправки составляет %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Этот дополнительный шаг подтверждает, что транзакцию совершаете именно вы."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "В этой точке подарочные карты продаются по фиксированным ценам"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Этот PIN нужно будет вводить для разблокировки приложения при каждом его использовании."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "на"; +/* DashSpend confirmation */ +"To" = "Кому"; + /* Coinbase */ "to Dash Wallet on this device" = "на Dash Wallet на этом устройстве"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Чтобы никто не смог узнать, кому вы отправляете платежи, рекомендуется перемешать баланс до создания имени пользователя."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Чтобы приступить к стейкингу, создайте аккаунт на CrowdNode или подключитесь к уже существующему"; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "на адрес Dash, созданный для вашего CrowdNode аккаунта в Dash Wallet на этом устройстве"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Сегодня"; /* No comment provided by engineer. */ "Tools" = "Инструменты"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Пополните баланс кредитов, чтобы вносить изменения в профиль и добавлять контакты"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Лимит Touch ID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "История транзакций"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Включить код-пароль"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Выключено"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Включение этой функции повысит расход батареи"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Не удалось загрузить изображение. Пожалуйста, попробуйте ещё раз."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Разблокировать"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Имя пользователя доступно"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Имя пользователя доступно"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Посмотреть фразу восстановления"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Голосовать за все"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Голосование понадобится только в определённых случаях"; /* No comment provided by engineer. */ "Voting Keys" = "Ключи голосования"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Мы не смогли вывести средства с вашего аккаунта на CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "У нас есть 2 типа продавцов"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Обнаружено, что во время миграции Dash Wallet произошёл сбой. Повторное сканирование блокчейн решит эту проблему, либо попробуйте ещё раз. Повторное сканирование желательно проводить с использованием Wi-Fi и это займет до получаса. Ваши средства будут доступны после завершения процесса синхронизации."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Мы обновились"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = " Когда эта транзакция будет подтверждена, другой кошелёк будет бесполезен и не должен быть повторно использован в целях безопасности."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Перемешивание остановится, если вы закроете приложение или заблокируете экран. Оно возобновится, когда вы снова откроете приложение. "; /* No comment provided by engineer. */ "Where to Spend" = "Где потратить"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Хотите принять приглашение?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Хотите внести депозит за покупку, используя привязанный банковский счет?"; @@ -2774,7 +2945,7 @@ "Yes" = "Да"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Вчера"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Вы приняли запрос на добавление в контакты от %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Вы собираетесь удалить кошелек с этого устройства. Средства на этом кошельке смогут быть доступны, только если у Вас есть фраза восстановления."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Пока у вас есть доступ к этому кошельку, вы всегда можете удалить загруженное изображение."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Вы можете настроить, когда и каким образом получите своё вознаграждение."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Вы можете и дальше пользоваться DashPay для платежей, но вам недоступно обновление профиля или добавление новых контактов до тех пор, пока вы не пополните баланс кредитов"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Вы можете ввести ключ в любом из нижеперечисленных форматов: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Здесь можно найти подробную информацию о внесении и выводе средств, а также о вознаграждениях."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Нельзя откликнуться на это приглашение, потому что у вас уже есть имя пользователя Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Сейчас в вашем списке контактов никого нет"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "У вас недостаточно средств для завершения этой транзакции"; + /* Coinbase */ "You don’t have enough balance" = "Средств на балансе недостаточно"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Вы должны подождать 5 минут, прежде чем вывести средства ещё раз"; /* CrowdNode */ "You only need %@ to join the pool." = "Чтобы присоединиться к пулу, нужно всего лишь %@"; +/* DashSpend confirmation */ +"You pay" = "Вы оплачиваете"; + /* Coinbase */ "You receive" = "Вы получите"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Вы будете автоматически получать свою долю выплат, и они по умолчанию будут реинвестированы. Однако, для повторяющихся выплат можно легко настроить автоматический вывод средств."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Баланс кредитов был полностью исчерпан"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "У вас осталось мало кредитов"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Создаётся аккаунт на CrowdNode..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Ваш аккаунт на CrowdNode настроен и готов к использованию!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Ваш аккаунт на CrowdNode был создан с помощью этих транзакций."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Ваш адрес CrowdNode был подтверждён."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Ваши средства зачислены на CrowdNode."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Время на вашем устройстве %1$@ на %2$d секунды. Поэтому вы не можете использовать CoinJoin.\n\nЧтобы воспользоваться CoinJoin, выставьте в настройках своего устройства \"Задать время автоматически\". "; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Время на Вашем устройстве отличается на %d минут. По этой причине Вы, возможно, не сможете отправлять или получать средства.\n\nПроверьте настройки и при необходимости скорректируйте дату, время и часовой пояс."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Время на вашем устройстве отличается более чем на 5 секунд. Поэтому вы не можете использовать CoinJoin.\n\nЧтобы воспользоваться CoinJoin, выставьте в настройках своего устройства \"Задать время автоматически\". "; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Введёный адрес электронной почты нигде не сохраняется - ни в кошельке DashPay, ни на серверах. Он нужен лишь единожды для получения информации с Gravatar."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "На вашу почту будет отправлен одноразовый пароль."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Приглашение от %@уже подтверждено. "; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Ваш запрос был отклонён"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ваша транзакция была отправлена и её сумма отобразится в вашем кошельке через несколько минут."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Ваше имя пользователя %@ успешно создано в сети Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/sk.lproj/Localizable.strings b/DashWallet/sk.lproj/Localizable.strings index 0d9d6dc4a..389e9798a 100644 --- a/DashWallet/sk.lproj/Localizable.strings +++ b/DashWallet/sk.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ nemá povolený prístup k Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu kontakty / %3$lu aktualizácie profilu"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "Bude odovzdaných %d hlasov, pretože v peňaženke máte uložených viacero hlasovacích kľúčov"; /* Voting */ "%ld duplicates" = "%ld duplikátov"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Prijať"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Prijať podmienky používania"; /* CrowdNode */ "Accepting terms of use…" = "Prijímam podmienky používania…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Prijíma priamo DASH"; - /* CrowdNode */ "Account Recovery" = "Obnovenie účtu"; @@ -152,7 +155,7 @@ "Advanced" = "Pokročilé"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Pokročilá úroveň ochrany osobných údajov vyžaduje spoľahlivé internetové pripojenie"; /* No comment provided by engineer. */ "Advanced Security" = "Pokročilá bezpečnosť"; @@ -167,7 +170,7 @@ "Agree" = "Súhlasím"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "popredu"; /* No comment provided by engineer. */ "All" = "Všetko"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Odoslaná suma"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Intuitívny a známy zážitok vo všetkých vašich zariadeniach"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "a"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Aplikácia %@ by chcela získať váš hlavný verejný kľúč. Môže byť použitý na sledovanie peňaženky, ale nedá sa použiť na presun vašich Dashov."; +/* No comment provided by engineer. */ +"Apply" = "Použiť"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Naozaj chcete zrušiť túto objednávku?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Keďže väčšina ľudí nemá po ruke presne 1000 Dash, Crowdnode vytvoril službu, kde združovaním vkladov od členov môžu dosiahnuť výhody vlastníctva Masternode."; +/* DashSpend */ +"at" = "v"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Vyhľadávanie bankomatov funguje lepšie so zapnutými službami určovania polohy"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Autentifikácia nie je k dispozícii"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Autorizované"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "pozadu"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Medzi %1$ld a %2$ld znakmi"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Medzi 3 a 23 znakmi"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Medzi Dash peňaženkou a Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Medzi Dash peňaženkou a vaším účtom na Coinbase"; /* Voting */ -"Block" = "Block"; +"Block" = "Blok"; /* No comment provided by engineer. */ "block #%d of %d" = "blok #%1$d z %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Kúpiť darčekovú kartu"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Kúpte si darčekovú kartu s Dashom."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Kúpte a preveďte Dash pomocou inej kryptomeny"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Kúpiť kredity"; /* No comment provided by engineer. */ "Buy Dash" = "Kúpiť Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Kúpiť Dash · Nie je potrebný žiadny účet"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Kúpte si darčekové poukážky s Dashom"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Zrušenie tejto transakcie nezruší obchodný príkaz. Čoskoro dostanete DASH na svoj Coinbase účet."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN karty"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Zmeniť"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Zmeniť na stredne pokročilé"; +/* No comment provided by engineer. */ +"Check current balance" = "Skontrolujte aktuálny zostatok"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Kontrola nastavenia času a dátumu"; /* No comment provided by engineer. */ "Check your connection" = "Skontrolujte pripojenie"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Vybrať vaše"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Kolaterálne vstupy Coinjoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "Vytvorené denominácie CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Miešanie CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Poplatok za miešanie CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Potvrdiť"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Potvrďte (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Potvrdiť PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Kontaktujte podporu Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Kontaktovať podporu CTX"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Žiadosť o kontakt čaká na potvrdenie"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Kontakty"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Pokračovať"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Napriek tomu pokračovať"; /* Coinbase Entry Point */ "Convert Crypto" = "Zameniť kryptomeny"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Vytvoriť účet"; +/* Create DashSpend account */ +"Create account" = "Vytvoriť účet"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Vytvorte si online CrowdNode účet"; /* No comment provided by engineer. */ "Create invitation" = "Vytvoriť pozvánku"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Vytvoriť online účet"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Vytvorte si používateľské meno"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Vytvorte si svoje používateľské meno, nájdite priateľov a rodinu s ich používateľskými menami a pridajte ich do svojich kontaktov"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Limity výberu CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · Účet"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ DashWallet"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash adresa určená pre váš CrowdNode účet v Dash Wallet na tomto zariadení"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Bilancia Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Zostatok Dash na Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash používateľské meno"; +/* DashSpend confirmation */ +"Dash Wallet" = "Peňaženka Dash"; + /* Buy Dash */ "Dash Wallet on this device" = "Peňaženka Dash v tomto zariadení"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Predvolená mena, skratky, o programe..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Predvolené nastavenie filtra"; /* Location Service Status */ "Denied" = "Odmietnuté"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Odpojený"; +/* DashSpend confirmation */ +"Discount" = "Zľava"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Zrušiť"; /* No comment provided by engineer. */ "Display Name" = "Zobrazované meno"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "napr. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Každá pozvánka bude financovaná touto sumou, aby si príjemca mohol rýchlo vytvoriť svoje používateľské meno v sieti Dash"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "pred"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Zadať frázu pre obnovenie"; +/* Enter verification code */ +"Enter verification code" = "Zadajte overovací kód"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Nižšie zadajte váš 2FA kód"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Chyba"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Pri aktualizácii vášho profilu sa vyskytla chyba"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Chyba ·"; /* No comment provided by engineer. */ "Exit" = "Zatvoriť"; @@ -842,7 +881,7 @@ "Export all transactions" = "Exportovať všetky transakcie"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Exportovať CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Rozšírené verejné kľúče"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter platieb"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filtrovať transakcie"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtrované podľa"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtre"; -/* No comment provided by engineer. */ -"Find a merchant." = "Nájsť obchodníka."; - /* No comment provided by engineer. */ "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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Prvý minimálny vklad"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixné denominované sumy"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexibilné sumy"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Nájdené potencionálne chýbajúce slová:\n%@"; +/* DashSpend confirmation */ +"From" = "Od"; + /* from CrowdNode */ "from CrowdNode" = "z CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "z vášho Coinbase účtu"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Plne zmiešané"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Získajte odmeny z vkladov v Dash Masternodes už za 0,5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Darčeková karta"; +/* No comment provided by engineer. */ +"Gift card" = "Darčeková karta"; + +/* 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" = "Darčeková karta spolu"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Typy darčekových kariet"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Prejdite na webovú stránku CrowdNode"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "Tu je Dash adresa určená pre váš CrowdNode účet v Dash peňaženke na tomto zariadení."; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "Skryť"; /* adjective, security level */ "High" = "Vysoké"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Ako potvrdiť svoju API Dash adresu "; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Ako používať darčekovú poukážku"; +"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"; @@ -1058,7 +1124,10 @@ "I Accept" = "Súhlasím"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Prijímam"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Prijímam zmluvné podmienky DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Akceptujem, že stratím svoje mince v prípade, že už nedržím frázu pre obnovenie"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "V procese…"; +/* No comment provided by engineer. */ +"In store" = "V obchode"; + +/* 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"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Nedostatok prostriedkov"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Nedostatočné zmiešané prostriedky. Počkajte, kým sa miešanie CoinJoin dokončí, alebo pre dokončenie tejto transakcie túto funkciu zakážte v nastaveniach ."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Nedostatočný zostatok v peňaženke"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Stredne pokročilý"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Stredná úroveň ochrany osobných údajov vyžaduje spoľahlivé internetové pripojenie"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Interný prevod"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Neplatná suma"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Neplatná Dash adresa"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Neplatný QR kód"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Pozvánka"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Pozvánka bola úspešne vytvorená"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Poplatok za pozvanie"; /* No comment provided by engineer. */ "Invitation used by" = "Pozvanie použité používateľom"; @@ -1253,10 +1334,13 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Prenos Dash z Coinbase do Dash peňaženky tohto zariadenia môže trvať až 10 minút."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Aby ste sa vyhli ďalším poplatkom za miešanie, odporúča sa byť v pripojený naWi-Fi"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ -"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Pre pokročilých používateľov s vysokou úrovňou technických znalostí by bolo veľmi ťažké určiť vašu históriu transakcií"; +"It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Pre pokročilých používateľov s vysokou úrovňou technických znalostí, by bolo veľmi ťažké určiť vašu históriu transakcií"; /* No comment provided by engineer. */ "It would seem like you are attempting to restore your wallet a using a 12 word recovery phrase, however you have only entered 10 words, would you like to automatically recover missing words? This might take around an hour. We recommend plugging in your device." = "Zdá sa, že sa pokúšate obnoviť svoju peňaženku pomocou 12-slovnej frázy na obnovenie, avšak zadali ste iba 10 slov. Chcete automaticky obnoviť chýbajúce slová? Môže to trvať asi hodinu. Vaše zariadenie odporúčame pripojiť do siete."; @@ -1277,7 +1361,7 @@ "Joining the pool" = "Pripojenie k členstvu"; /* Usernames */ -"Keep your passphrase safe" = "Udržujte svoju prístupovú frázu v bezpečí"; +"Keep your passphrase safe" = "Udržujte prístupovú frázu v bezpečí"; /* No comment provided by engineer. */ "Key Id" = "Id kľúča"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Posledná synchronizácia servera"; -/* No comment provided by engineer. */ -"Learn More" = "Ďalšie informácie"; - /* Info Screen */ "Learn More..." = "Ďalšie informácie..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Uzamknuté"; +/* Log in */ +"Log in" = "Prihlásiť sa"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Prihláste sa do CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Prihlásiť sa do svojho účtu"; + +/* Log out button */ +"Log Out" = "Odhlásiť"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Odhlásiť s Upholdu"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Prihláste sa pomocou Face ID"; @@ -1389,10 +1488,10 @@ "Low to high" = "Od najmenších"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "Hlavná sieť"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Uverejnite príspevok s vyššie uvedeným textom na dobre známej sociálnej sieti alebo platforme na odosielanie správ, pre overenie, že ste pôvodným vlastníkom požadovaného používateľského mena, a pridajte odkaz nižšie"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Spravovať povolenie GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximálne 75 znakov"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Vyhľadávanie obchodníkov funguje lepšie so zapnutými službami určovania polohy."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Zmiešaný zostatok"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Miešanie"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Miešanie je možné iba s otvorenou aplikáciou"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Miešanie pozastavené ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Miešacie transakcie"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Miešaním vašich Dashov budú vaše transakcie súkromnejšie"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Miešanie ·"; /* No comment provided by engineer. */ "More" = "Viac"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Sieť"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Sieťový poplatok "; @@ -1554,14 +1662,11 @@ "No Results Found" = "Neboli nájdené žiadne výsledky"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Nezostávajú žiadne hlasy"; /* No comment provided by engineer. */ "Node IP" = "IP uzla"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Žiadne"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Neplatná adresa URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Nie všetky obchody akceptujú priamo DASH, ale môžete si kúpiť darčekovú kartu s Dashom."; - /* Fiat amount */ "Not available" = "Nie je k dispozícií"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Neurčené"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Nespustené"; /* No comment provided by engineer. */ "Not yet used" = "Zatiaľ nepoužité"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Od najstarších"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Hneď ako %@ akceptuje vašu žiadosť, môžete platiť priamo na meno používateľa"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Zostáva jeden hlas"; /* Online */ "Online" = "Online"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Ukážka objednávky"; +/* DashSpend */ +"Original purchase" = "Pôvodná kúpa"; + /* No comment provided by engineer. */ "Owner Address" = "Adresa vlastníka"; /* No comment provided by engineer. */ "Owner Keys" = "Kľúče vlastníka"; +/* DashSpend */ +"Password" = "Heslo"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Plaťte jednoducho"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Plaťte pomocou DASH peňaženky."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Platí sa"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Platí sa..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Spôsob platby"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Typ platby"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Umiestnite váš telefón blízko NFC zariadenia."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Klepnite na slová z obnovovacej frázy v správnom poradí"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Prosím, zapíšte si ju"; +/* No comment provided by engineer. */ +"Powered by" = "Používa technológiu"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Ukážka pozvánky"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Nákup"; +/* Alert title */ +"Purchase Failed" = "Nákup zlyhal"; + /* No comment provided by engineer. */ "Quick Receive" = "Rýchlo prijať"; @@ -1869,7 +1995,7 @@ "Receive your share of rewards daily." = "Denne získajte svoj podiel na odmenách."; /* Received transaction */ -"Received" = "Prijté"; +"Received" = "Prijaté"; /* No comment provided by engineer. */ "Received %@ (%@)" = "Prijaté %1$@ (%2$@)"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Fráza pre obnovenie musí mať 12, 15, 18, 21 alebo 24 slov"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Uplatnite svoju darčekovú kartu online v priebehu niekoľkých sekúnd alebo pri pokladni."; - /* Button title, Register (username) */ "Register" = "Registrovať"; @@ -1922,6 +2045,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"; @@ -1929,10 +2055,10 @@ "Request your username" = "Požiadať o používateľské meno"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Požadované používateľské meno bolo zablokované"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Požadované používateľské meno bolo pridelené niekomu inému"; /* An action */ "Rescan" = "Pre-skenovať"; @@ -1956,7 +2082,7 @@ "Restricted" = "Obmedzené"; /* Usernames */ -"Results" = "Results"; +"Results" = "Výsledky"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Zachovať históriu vzájomných transakcií"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Odmena"; -/* No comment provided by engineer. */ -"Rewards" = "Odmeny"; - /* No comment provided by engineer. */ "Save" = "Uložiť"; +/* DashSpend */ +"Save %.2f%%" = "Uložiť %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Uložiť zmeny"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Snímky obrazovky sú viditeľné pre iné aplikácie a zariadenia. Vytvorte novú frázu obnovenia a držte ju v tajnosti."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Hľadať"; /* No comment provided by engineer. */ "Search for a contact" = "Vyhľadať kontakt"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Výsledky vyhľadávania pre \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Hľadá sa používateľské meno %@ v sieti Dash"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Vyberte službu"; +/* DashSpend denomination selection */ +"Select amount" = "Vyberte sumu"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Vyberte prieskumníka blokov"; /* No comment provided by engineer. */ "Select from Gallery" = "Vybrať z galérie"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Vyberte mincu"; +/* No comment provided by engineer. */ +"Self-checkout" = "Samoobslužná pokladňa"; + /* Sell */ "Sell" = "Predať"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Poslané na"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Nastaviť dôveryhodný uzol"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Zobraziť frázu obnovenia"; +/* Alert title */ +"Sign in required" = "Vyžaduje sa prihlásenie"; + /* CrowdNode */ "Sign the message" = "Podpísať správu"; @@ -2195,7 +2339,7 @@ "Skip" = "Preskočiť"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Niektoré používateľské mená môžu byť zablokované"; /* No comment provided by engineer. */ "Something went wrong" = "Niečo sa pokazilo"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Zoradiť kontakty"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Zoradené podľa vzdialenosti"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Zastaviť miešanie"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Odoslať"; /* No comment provided by engineer. */ "Swept!" = "Načítať!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Synchronizácia zlyhala"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Prebieha synchronizácia… Výsledky nemusia byť úplné."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Synchronizovať teraz"; @@ -2279,13 +2429,19 @@ "Tax Category" = "Daňová kategória"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "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."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Testovací Dash je zadarmo a možno ho získať z toho, čo sa nazýva 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."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "Testovacia sieť"; /* No comment provided by engineer. */ "The chain is syncing…" = "Reťazec sa synchronizuje..."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Obrázok, ktorý vyberiete, bude anonymne nahraný na Imgur."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Odkaz, ktorý odošlete, bude viditeľný iba pre vlastníkov siete"; /* Coinbase */ "The minimum amount you can send is %@" = "Minimálna suma, ktorú môžete poslať, je %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Tento dodatočný krok potvrdzuje, že ste to skutočne vy kto sa pokúša uskutočniť transakciu."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "Tento obchodník predáva darčekové karty za fixné ceny"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Tento PIN bude potrebný na odomknutie aplikácie pri každom použití."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "pre"; +/* DashSpend confirmation */ +"To" = "Komu"; + /* Coinbase */ "to Dash Wallet on this device" = "do Dash peňaženky na tomto zariadení"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Ak chcete zabrániť tomu, aby ostatní ľudia videli, komu uskutočňujete platby, odporúča sa pred vytvorením používateľského mena zmiešať zostatok."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Ak chcete začať stávkovať, vytvorte si účet na CrowdNode alebo sa pripojte k existujúcemu účtu."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "na Dash adresu určenú pre váš účet CrowdNode v Dash peňaženke na tomto zariadení"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Dnes"; /* No comment provided by engineer. */ "Tools" = "Nástroje"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Doplňte si kredit, aby ste mohli pokračovať v zmenách vo svojom profile a pridávaní kontaktov"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limit pre Touch ID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "História transakcií"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Zapnúť prístupový kód"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Vypnuté"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Zapnutie tejto funkcie spôsobí vyššiu spotrebu batérie"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Váš obrázok sa nepodarilo nahrať. Prosím skúste znova."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Odblokovať"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Používateľské meno je k dispozícii"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Používateľské meno je k dispozícii"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Hlasovanie je potrebné len v niektorých prípadoch"; /* No comment provided by engineer. */ "Voting Keys" = "Hlasovacie kľúče"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Nepodarilo sa nám vybrať z vášho CrowdNode účtu."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "Máme dva typy obchodníkov"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Zistili sme, že Dash Wallet zlyhal počas migrácie. Opätovné skenovanie reťazca blokov tento problém vyrieši, prípadne môžete skúsiť znova. Opätovné skenovanie by sa malo prednostne vykonávať na wifi a môže trvať zhruba pol hodiny. Vaše prostriedky budú k dispozícii po dokončení procesu synchronizácie."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Aktualizovali sme"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Po potvrdení transakcie bude druhá peňaženka bezcenná a z bezpečnostných dôvodov by sa nemala znovu používať."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Keď zatvoríte aplikáciu alebo uzamknete obrazovku, proces miešania sa zastaví. Obnoví sa po opätovnom otvorení aplikácie."; /* No comment provided by engineer. */ "Where to Spend" = "Kde minúť"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Chcete prijať pozvanie?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Chceli by ste vložiť zálohu za svoj nákup pomocou prepojeného bankového účtu?"; @@ -2774,7 +2945,7 @@ "Yes" = "Áno"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Včera"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Prijali ste kontaktnú žiadosť od %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Chystáte sa vymazať túto peňaženku z tohto zariadenia. Prostriedky spojené s touto peňaženkou je možné získať iba v prípade, že máte frázu pre obnovenie."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Nahraný obrázok môžete kedykoľvek odstrániť, pokiaľ máte prístup k tejto peňaženke."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Môžete zmeniť spôsob alebo kedy sa vám budú vyplácať vaše zárobky."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Na platby môžete naďalej používať DashPay, ale nemôžete aktualizovať svoj profil ani pridať ďalšie kontakty, kým nedobijete svoj kredit"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Váš kľúč môžete zadať v ktoromkoľvek z nasledujúcich formátov: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Môžete vidieť podrobné informácie o svojich vkladoch, výberoch a zárobkoch z odmien."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Túto pozvánku si nemôžete nárokovať, pretože už máte používateľské meno Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Momentálne nemáte žiadne kontakty"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Na dokončenie tejto transakcie nemáte dostatok prostriedkov "; + /* Coinbase */ "You don’t have enough balance" = "Váš zostatok je nedostatočný"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Pred ďalším výberom musíte počkať 5 minút"; /* CrowdNode */ "You only need %@ to join the pool." = "K členstvu potrebujete iba %@."; +/* DashSpend confirmation */ +"You pay" = "Platíte"; + /* Coinbase */ "You receive" = "Dostanete"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Čiastkové platby budete dostávať automaticky a štandardne budú reinvestované, ale je tiež jednoduché nastaviť automatické výbery pre prijímanie opakujúcich sa platieb."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Váš kreditný zostatok je úplne vyčerpaný"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Váš kreditný zostatok je nízky"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Váš CrowdNode účet sa vytvára…"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Váš účet CrowdNode je nastavený a pripravený na použitie!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Váš účet CrowdNode bol vytvorený pomocou týchto transakcií."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Vaša CrowdNode adresa bola potvrdená."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Váš vklad do CrowdNode je prijatý."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Čas vášho zariadenia je %1$@ po %2$d sekundách. Kvôli tomuto rozdielu nemôžete používať CoinJoin.\n\nAby ste mohli používať CoinJoin, nastavenia času na vašom zariadení je potrebné zmeniť na „Nastaviť čas automaticky“."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Čas vášho zariadenia posunutý o %d minút. Kvôli tomuto problému pravdepodobne nemôžete odosielať ani prijímať Dash.\n\nMali by ste skontrolovať a v prípade potreby opraviť nastavenia dátumu, času a časového pásma."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Čas vášho zariadenia je posunutý o viac ako 5 sekúnd. Kvôli tomuto rozdielu nemôžete používať CoinJoin.\n\nPred použitím CoinJoin je potrebné zmeniť nastavenia času na vašom zariadení na „Nastaviť čas automaticky“."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Váš e-mail nie je uložený v peňaženke DashPay ani na žiadnych serveroch. Použije sa jeden krát na získanie podrobností o vašom Gravatar účte a potom sa zahodí."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Váš email slúži len na zaslanie jednorazového hesla."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Vaša pozvánka od používateľa %@ už bola nárokovaná"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Vaša žiadosť bola zrušená"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Vaša transakcia bola odoslaná a čiastka by sa mala objaviť vo vašej peňaženke v priebehu niekoľkých minút."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Vaše používateľské meno %@ bolo úspešne vytvorené v sieti Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/sl.lproj/Localizable.strings b/DashWallet/sl.lproj/Localizable.strings index 3ff2a133e..b4f934338 100644 --- a/DashWallet/sl.lproj/Localizable.strings +++ b/DashWallet/sl.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Napaka"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Omrežna provizija"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Shranite"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/sl_SI.lproj/Localizable.strings b/DashWallet/sl_SI.lproj/Localizable.strings index 72c825f14..e2f2ab284 100644 --- a/DashWallet/sl_SI.lproj/Localizable.strings +++ b/DashWallet/sl_SI.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Save"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/sq.lproj/Localizable.strings b/DashWallet/sq.lproj/Localizable.strings index 660e186c9..2d8911e80 100644 --- a/DashWallet/sq.lproj/Localizable.strings +++ b/DashWallet/sq.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Confirm"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Gabim"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtro"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Tarifa e rrjetit"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Ruaj"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/sr.lproj/Localizable.strings b/DashWallet/sr.lproj/Localizable.strings index ef0a33589..13dc02c71 100644 --- a/DashWallet/sr.lproj/Localizable.strings +++ b/DashWallet/sr.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Aplikacija %@ želi da dobije vaš Glavni Javni Ključ. To se može koristiti za praćenje vašeg novčanika i ne može se koristiti za prebacivanje vašeg Dash-a."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Potvrdi"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Greška"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filtriraj"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Prihvatam činjenicu da ću izgubiti novčiće ukoliko više ne posedujem frazu za obnovu"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Mrežna provizija"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Molimo vas da postavite vaš telefon blizu NFC uređaja."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Sačuvaj"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Limit za Touch ID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/sv.lproj/Localizable.strings b/DashWallet/sv.lproj/Localizable.strings index 44ded61b4..cb2099258 100644 --- a/DashWallet/sv.lproj/Localizable.strings +++ b/DashWallet/sv.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Mängd skickad"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Applikation %@ skulle vilja motta din Master Public Key. Detta kan användas för att hålla reda på din plånbok, detta kan inte användas för att flytta på dina Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Ändra"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Kontrollera din anslutning"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Bekräfta"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Bekräfta PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Fortsätt"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Avsluta"; /* No comment provided by engineer. */ "Display Name" = "Display Name"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Fel"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "I accept that I will lose my coins if I no longer possess the recovery phrase"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Låst"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Logga ut"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Nätverk"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Nätverksavgift"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Please place your phone near NFC device."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Spara"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limit"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/th.lproj/Localizable.strings b/DashWallet/th.lproj/Localizable.strings index a47343218..ece2a8b9e 100644 --- a/DashWallet/th.lproj/Localizable.strings +++ b/DashWallet/th.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "ยอมรับ"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "ยอมรับข้อกำหนดการใช้งาน"; /* CrowdNode */ "Accepting terms of use…" = "ยอมรับข้อกำหนดการใช้งาน ..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "ยอมรับ DASH โดยตรง"; - /* CrowdNode */ "Account Recovery" = "การกู้คืนบัญชี"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "จำนวนเงินที่ส่ง"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "ประสบการณ์ที่ใช้งานง่ายและคุ้นเคย"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "และ"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "แอพพลิเคชั่น %@ ต้องการรับ Master Public Key ของคุณ ซึ่งสามารถใช้ในการติดตามกระเป๋าสตางค์ของคุณได้ แต่ไม่สามารถใช้ในการย้าย Dash ของคุณ"; +/* No comment provided by engineer. */ +"Apply" = "นำมาใช้"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "แน่ใจหรือว่าต้องการยกเลิกคำสั่งซื้อนี้?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "เนื่องจากคนส่วนใหญ่ไม่มี 1000 Dash อยู่ในมืออย่างแน่นอน Crowdnode จึงได้ให้บริการโดยรวบรวมเงินฝากจากสมาชิก พวกเขาสามารถบรรลุผลประโยชน์ของการเป็นเจ้าของ Masternode"; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "การค้นหา ATM ทำงานได้ดีขึ้นเมื่อเปิดใช้บริการสถานที่"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "ไม่สามารตรวจสอบสิทธิ์ได้"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "ได้รับอนุญาต"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "ระหว่าง %1$ld and %2$ld ตัวอักษร"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "ระหว่างกระเป๋าเงิน Dash และบัญชี Coinbase ของคุณ"; /* Voting */ -"Block" = "Block"; +"Block" = "บล็อก"; /* No comment provided by engineer. */ "block #%d of %d" = "กลุ่ม # %1$d of %2$d"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "ซื้อบัตรของขวัญ"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "ซื้อบัตรของขวัญด้วย Dash"; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "ซื้อและแลกเปลี่ยน Dash ด้วยคริปโตอื่น ๆ"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "ซื้อ Dash · ไม่ต้องใช้บัญชี"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "ซื้อบัตรของขวัญด้วย Dash ของคุณ"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "การยกเลิกธุรกรรมนี้ไม่ได้ยกเลิกคำสั่งซื้อขาย คุณจะได้รับ Dash ในบัญชี Coinbase ของคุณในไม่ช้า"; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "เปลี่ยนแปลง"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "เปลี่ยนเป็นระดับกลาง"; +/* No comment provided by engineer. */ +"Check current balance" = "Check current balance"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; /* No comment provided by engineer. */ "Check your connection" = "ตรวจสอบการเชื่อมต่อ"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "เลือกของคุณ"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "ยืนยัน"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "ยืนยัน (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "ยืนยัน PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "ติดต่อฝ่ายสนับสนุน Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "คำขอติดต่อรอดำเนินการ"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "ติดต่อ"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "ดำเนินการต่อ"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "สร้างบัญชี"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "สร้างบัญชี CrowdNode ออนไลน์"; /* No comment provided by engineer. */ "Create invitation" = "สร้างคำเชิญ"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "สร้างบัญชีออนไลน์"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "ที่อยู่ Dash ที่กำหนดไว้สำหรับบัญชี CrowdNode ของคุณในกระเป๋าเงิน Dash บนอุปกรณ์นี้"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "ยอดคงเหลือ Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "ยอดคงเหลือของ Dash บน Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "ชื่อผู้ใช้ Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "กระเป๋าเงิน Dash "; + /* Buy Dash */ "Dash Wallet on this device" = "กระเป๋าเงิน Dash บนอุปกรณ์นี้"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "ตัดการเชื่อมต่อ"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "ยกเลิก"; /* No comment provided by engineer. */ "Display Name" = "ชื่อที่แสดง"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "ตัวอย่างเช่น johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "คำเชิญแต่ละครั้งจะได้รับเงินทุนด้วยจำนวนเงินนี้เพื่อให้ผู้รับสามารถสร้างชื่อผู้ใช้ของพวกเขาได้อย่างรวดเร็วบนเครือข่าย Dash"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "ก่อน"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "ใส่วลีกู้คืน"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "ป้อนรหัส 2FA ของคุณด้านล่าง"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "ผิดพลาด"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "ข้อผิดพลาดในการอัปเดตโปรไฟล์ของคุณ"; @@ -850,6 +889,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" = "ไม่สามารถเริ่มเซสชันการรับรองความถูกต้องได้"; @@ -890,7 +932,7 @@ "Filter" = "กรอง"; /* No comment provided by engineer. */ -"Filter Transactions" = "กรองธุรกรรม"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "กรองโดย"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "ตัวกรอง"; -/* No comment provided by engineer. */ -"Find a merchant." = "ค้นหาร้านค้า"; - /* No comment provided by engineer. */ "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 %@" = "เงินฝากครั้งแรกควรมากกว่า %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "ฝากขั้นต่ำครั้งแรก"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "พบคำที่หายไปที่อาจเกิดขึ้น:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "จาก CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "บัตรของขวัญ"; +/* No comment provided by engineer. */ +"Gift card" = "บัตรของขวัญ"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "ไปที่เว็บไซต์ CrowdNode"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "วิธียืนยันที่อยู่ API Dash ของคุณ"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "การใช้บัตรของขวัญ"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "วิวัฒนาการรหัส Node ID"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "ฉันยอมรับที่ฉันจะสูญเสียเหรียญของฉันถ้าฉันไม่มีวลีกู้คืน"; @@ -1135,6 +1204,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" = "รายได้"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "จำนวนเงินไม่ถูกต้อง"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "ที่อยู่ Dash ไม่ถูกต้อง"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "QR Code ไม่ถูกต้อง"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "คำเชิญ"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "คำเชิญที่สร้างขึ้นสำเร็จ"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "ค่าธรรมเนียมการเชิญ"; /* No comment provided by engineer. */ "Invitation used by" = "คำเชิญใช้โดย"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "เป็นเรื่องยากมากสำหรับผู้ใช้ระดับสูงที่มีความเชี่ยวชาญทางเทคนิคทุกระดับในการพิจารณาประวัติการทำธุรกรรมของคุณ"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "อัปเดตเซิร์ฟเวอร์ล่าสุด"; -/* No comment provided by engineer. */ -"Learn More" = "เรียนรู้เพิ่มเติม"; - /* Info Screen */ "Learn More..." = "เรียนรู้เพิ่มเติม..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "ล็อค"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "ลงชื่อเข้าใช้ CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "ออกจากระบบ"; + /* No comment provided by engineer. */ "Log out from Uphold" = "ออกจากระบบ Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "เข้าสู่ระบบด้วย Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "สูงสุด"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "การค้นหาร้านค้าทำงานได้ดีขึ้นเมื่อเปิดการใช้งานบริการสถานที่"; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "เครือข่าย"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "ค่าธรรมเนียมเครือข่าย"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "โหนด IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "ไม่มี"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "ไม่ใช่ร้านค้าทั้งหมดที่ยอมรับ Dash โดยตรง แต่คุณสามารถซื้อบัตรของขวัญด้วย Dash ของคุณ"; - /* Fiat amount */ "Not available" = "ไม่สามารถใช้ได้"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "ตกลง"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "เก่าไปใหม่"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "คำสั่งซื้อตัวอย่าง"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "ที่อยู่เจ้าของ"; /* No comment provided by engineer. */ "Owner Keys" = "เจ้าของกุญแจ"; +/* DashSpend */ +"Password" = "รหัสผ่าน"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "ชำระเงินได้อย่างง่ายดาย"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "จ่ายด้วยกระเป๋าเงิน DASH "; - /* 1 out of 4 in the Paying Animation */ "Paying" = "กำลังชำระเงิน"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "กำลังชำระเงิน"; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "วิธีการชำระเงิน"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "ประเภทการชำระเงิน"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "โปรดวางมือถือของคุณใกล้กับอุปกรณ์ NFC"; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "โปรดแตะที่คำจากวลีการกู้คืนของคุณในลำดับที่ถูกต้อง"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "คำเชิญดูตัวอย่าง"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "ซื้อ"; +/* Alert title */ +"Purchase Failed" = "การซื้อไม่สำเร็จ"; + /* No comment provided by engineer. */ "Quick Receive" = "ได้รับอย่างรวดเร็ว"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "วลีการกู้คืนต้องมี 12, 15, 18, 21 หรือ 24 ค"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "แลกบัตรของขวัญของคุณทางออนไลน์ภายในไม่กี่วินาทีหรือที่แคชเชียร์"; - /* Button title, Register (username) */ "Register" = "ลงทะเบียน"; @@ -1922,6 +2045,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" = "ขอรายละเอียด"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "รางวัล"; -/* No comment provided by engineer. */ -"Rewards" = "รางวัล"; - /* No comment provided by engineer. */ "Save" = "บันทึก"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "บันทึกการเปลี่ยนแปลง"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "การบันทึกภาพจะปรากฏแก่แอพพลิเคชันและอุปกรณ์อื่น ๆ สร้างวลีกู้คืนใหม่และเก็บไว้เป็นความลับ"; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "ค้นหา"; /* No comment provided by engineer. */ "Search for a contact" = "ค้นหารายชื่อผู้ติดต่อ"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "ผลการค้นหาสำหรับ \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "กำลังหาชื่อผู้ใช้ %@ บนเครือข่าย Dash"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "เลือกบริการ"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "เลือกเหรียญ"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "ขาย"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "ส่งไปยัง"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "ติดตั้ง node ที่เชื่อถือได้"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "แสดงวลีกู้คืน"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "ลงชื่อเข้าใช้ข้อความ"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "เรียงลำดับที่ผู้ติดต่อ"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "จัดเรียงตามระยะทาง"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "ซิงค์ล้มเหลว"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "กำลังซิงค์... ผลลัพธ์อาจไม่สมบูรณ์"; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "ซิงค์ตอนนี้"; @@ -2279,7 +2429,13 @@ "Tax Category" = "หมวดภาษี"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash ไม่มีค่าใดๆ ในโลกแห่งความเป็นจริง แต่คุณสามารถส่งและรับกับผู้ใช้ DashPay Alpha คนอื่นๆ ได้"; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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 ของคุณ"; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "รูปภาพที่คุณเลือกจะถูกอัปโหลดไปยัง Imgur โดยไม่ระบุชื่อ"; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "จำนวนเงินขั้นต่ำที่คุณสามารถส่งได้คือ %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "ขั้นตอนพิเศษนี้แสดงให้เห็นว่าคุณพยายามทำธุรกรรม"; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "ต้องใช้ PIN นี้เพื่อปลดล็อคแอพของคุณทุกครั้งที่ใช้"; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "ถึง"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "เพื่อกระเป๋า Dash บนอุปกรณ์นี้"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "ในการเริ่มการ stakingให้สร้างบัญชีบน CrowdNode หรือเชื่อมต่อกับบัญชีที่มีอยู่"; @@ -2396,7 +2564,7 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "ไปยังที่อยู่ Dash ที่กำหนดไว้สำหรับบัญชี CrowdNode ของคุณในกระเป๋าเงิน Dash บนอุปกรณ์นี้"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "วันนี้"; /* No comment provided by engineer. */ "Tools" = "เครื่องมือ"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "ขีดจำกัด Touch ID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "ประวัติการทำรายการ"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "ดูวลีกู้คืน"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "โหวตให้ทุกคน"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "เราไม่สามารถถอนตัวจากบัญชี CrowdNode ของคุณได้"; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "เรามีร้านค้า 2 ประเภท"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "ตรวจพบว่า Dashwallet เกิดข้อผิดพลาดระหว่างการย้ายข้อมูล การสแกน Blockchain ใหม่อีกครั้งจะช่วยแก้ปัญหานี้หรือคุณอาจจะต้องลองอีกครั้ง ควรทำการสแกนซ้ำโดยใช้ wifi โดยจะใช้เวลาประมาณครึ่งชั่วโมง เงินของคุณจะสามารถใช้ได้เมื่อกระบวนการซิงค์เสร็จสมบูรณ์"; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "อัพเกรด"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "คุณต้องการยอมรับคำเชิญหรือไม่?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "คุณต้องการฝากเงินสำหรับการซื้อของคุณโดยใช้บัญชีธนาคารที่เชื่อมโยงหรือไม่?"; @@ -2774,7 +2945,7 @@ "Yes" = "ใช่"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "เมื่อวาน"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "คุณได้รับการยอมรับคำขอการติดต่อจาก %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "คุณกำลังจะล้างวอลเล็ทนี้จากอุปกรณ์นี้ เงินทุนที่เกี่ยวข้องกับกระเป๋าเงินนี้สามารถเรียกคืนได้หากคุณมีวลีกู้คืนของคุณ"; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "คุณสามารถลบภาพที่อัปโหลดได้เสมอตราบใดที่คุณสามารถเข้าถึงกระเป๋าเงินนี้ได้"; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "คุณสามารถป้อนคีย์ของคุณในรูปแบบใดๆ ต่อไปนี้: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "คุณสามารถดูข้อมูลโดยละเอียดเกี่ยวกับเงินฝากการถอนและรางวัลของคุณ"; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "คุณไม่สามารถเรียกร้องคำเชิญนี้ได้เนื่องจากคุณมีชื่อผู้ใช้ DASH อยู่แล้ว"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "คุณไม่มีผู้ติดต่อใด ๆ ในขณะนี้"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "คุณมีเงินทุนไม่เพียงพอที่จะดำเนินการทางธุรกรรมได้สำเร็จ"; + /* Coinbase */ "You don’t have enough balance" = "คุณมียอดคงเหลือไม่เพียงพอ"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "คุณต้องใช้เพียงแค่ %@ เพื่อเข้าร่วมใน pool"; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "คุณได้รับ"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "บัญชี CrowdNode ของคุณถูกตั้งค่าและพร้อมใช้งาน!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "บัญชี CrowdNode ของคุณถูกสร้างขึ้นโดยใช้ธุรกรรมเหล่านี้"; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "ที่อยู่ CrowdNode ของคุณได้รับการยืนยันแล้ว"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "อีเมลของคุณไม่ได้ถูกเก็บไว้ในกระเป๋าเงิน DashpPay หรือบนเซิร์ฟเวอร์ใด ๆ มันถูกใช้หนึ่งครั้งเพื่อรับรายละเอียดบัญชี Gravatar ของคุณแล้วทิ้ง"; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "คำเชิญของคุณจาก %@ ได้รับการเคลมแล้ว "; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "ธุรกรรมของคุณถูกส่งแล้วและจำนวนเงินจะปรากฏใน wallet ของคุณในอีกไม่กี่นาที"; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "ชื่อผู้ใช้ของคุณ %@ ได้รับการสร้างที่ประสบความสำเร็จบนเครือข่าย Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/tr.lproj/Localizable.strings b/DashWallet/tr.lproj/Localizable.strings index fc1d3f442..b741c96cf 100644 --- a/DashWallet/tr.lproj/Localizable.strings +++ b/DashWallet/tr.lproj/Localizable.strings @@ -26,7 +26,7 @@ "%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "Cüzdanınızda birden fazla oylama anahtarı saklandığı için %d oy kullanılacak"; /* Voting */ "%ld duplicates" = "%ld kopyalar"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Kabul et"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Kullanım Koşullarını Kabul Et"; /* CrowdNode */ "Accepting terms of use…" = "Kullanım şartlarını kabul etmek…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Doğrudan DASH kabul eder"; - /* CrowdNode */ "Account Recovery" = "Hesap Kurtarma"; @@ -152,7 +155,7 @@ "Advanced" = "Gelişmiş"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Gelişmiş gizlilik düzeyi güvenilir bir internet bağlantısı gerektirir"; /* No comment provided by engineer. */ "Advanced Security" = "Gelişmiş Güvenlik"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Gönderilen Tutar"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Tüm cihazlarınızda tanıdık sezgisel bir deneyim"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "ve"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "%@ uygulaması size ait Ana Herkese Açık Anahtarı istiyor. Bunun sayesinde cüzdanınız takip edilebilir ama Dashlerinizi başka bir yere aktarmakta kullanılamaz."; +/* No comment provided by engineer. */ +"Apply" = "Uygula"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Bu siparişi iptal etmek istediğinizden emin misiniz?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Çoğu insanın elinde 1000 Dash bulunmadığından Crowdnode üyelerinden gelen yatırma işlemlerini bir havuzda toplayarak ana düğüm sahibi olmanın avantajlarından yararlanabilecekleri bir hizmet sunmuştur."; +/* DashSpend */ +"at" = "de"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Konum Servisleri açıkken ATM araması daha iyi çalışır"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Kimlik doğrulaması yapılamıyor"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Yetkili"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "%1$ld ile %2$ld karakter arasında"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "3 ile 23 karakter arasında"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Coinbase ve Dash Cüzdanı arasında"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Dash Cüzdanı ile Coinbase hesabınız arasında"; /* Voting */ -"Block" = "Block"; +"Block" = "Blok"; /* No comment provided by engineer. */ "block #%d of %d" = "%2$d'in %1$d'ini engelle"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Hediye Kartı Satın Alın"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Dash ile bir hediye kartı satın alın."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Başka bir kripto para kullanarak Dash satın alın"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Dash Satın Al · Hesap gerekmez"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Dash'iniz ile hediye kartları satın alın"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Bu işlemin iptal edilmesi işlem emrini iptal etmez. Kısa bir süre sonra Coinbase hesabınızda DASH alacaksınız."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Kart PIN'i"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Değiştir"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Orta Seviyeye Değiştir"; +/* No comment provided by engineer. */ +"Check current balance" = "Mevcut bakiyeyi kontrol edin"; + /* TimeSkew */ "Check date & time settings" = "Check date & time settings"; /* No comment provided by engineer. */ "Check your connection" = "Bağlantınızı kontrol edin"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Seçin"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Onayla"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Onay (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "PİN'i Onayla"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Coinbase Destek Ekibii ile İletişime Geçin"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Bekleyen İletişim Talebi"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Kişiler"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Devam"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Her şeye rağmen devam et"; /* Coinbase Entry Point */ "Convert Crypto" = "Kriptoyu Dönüştür"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Hesab Oluştur"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Çevrimiçi bir CrowdNode hesabı oluşturun"; /* No comment provided by engineer. */ "Create invitation" = "Davetiye oluştur"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Çevrimiçi Hesap Oluştur"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Kullanıcı adınızı oluşturun"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Kullanıcı adınızı oluşturun, kullanıcı adlarıyla arkadaşlarınızı ve ailenizi bulup kişilerinize ekleyin"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Bu cihazdaki Dash Cüzdanında CrowdNode hesabınız için belirlenen Dash adresi"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dash bakiyesi"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Coinbase'deki Dash bakiyesi"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash kullanıcı adı"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Cüzdanı"; + /* Buy Dash */ "Dash Wallet on this device" = "Bu cihazdaki Dash Cüzdanı"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Bağlantı kesildi"; +/* DashSpend confirmation */ +"Discount" = "İndirim"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Son Ver"; /* No comment provided by engineer. */ "Display Name" = "Ekran adı"; @@ -752,10 +785,10 @@ "Due to CrowdNode’s terms of service users can withdraw no more than:" = "CrowdNode'un hizmet koşulları nedeniyle, kullanıcılar aşağıdakilerden daha fazlasını çekemez:"; /* Geoblock */ -"Due to regulatory constraints, we need to verify that you are not in the UK. We only check your location when you enter the Coinbase features." = "Due to regulatory constraints, we need to verify that you are not in the UK. We only check your location when you enter the Coinbase features."; +"Due to regulatory constraints, we need to verify that you are not in the UK. We only check your location when you enter the Coinbase features." = "Yasal kısıtlamalar nedeniyle Birleşik Krallık'ta olmadığınızı doğrulamamız gerekiyor. Konumunuzu yalnızca Coinbase özelliklerine girdiğinizde kontrol ederiz."; /* Geoblock */ -"Due to regulatory constraints, you cannot use the Coinbase features while you are in the UK" = "Due to regulatory constraints, you cannot use the Coinbase features while you are in the UK"; +"Due to regulatory constraints, you cannot use the Coinbase features while you are in the UK" = "Yasal kısıtlamalar nedeniyle Birleşik Krallık'tayken Coinbase özelliklerini kullanamazsınız."; /* Usernames */ "Due to the voting process, the Dash Network has decided to assign the username '%@' to someone else. Please try again by requesting another username." = "Due to the voting process, the Dash Network has decided to assign the username '%@' to someone else. Please try again by requesting another username."; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "Örneğin. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Her davetiye, alıcının Dash Ağında kullanıcı adını hızlı bir şekilde oluşturabilmesi için bu tutarla finanse edilecektir."; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Önceki"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Kurtarma sözcük grubunu gir"; +/* Enter verification code */ +"Enter verification code" = "dogrulama kodunu giriniz"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "2FA kodunu aşağıya girin"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Hata"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Profiliniz güncellenirken hata oluştu"; @@ -850,6 +889,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ı"; @@ -881,7 +923,7 @@ "Fetching Info" = "Bilgi Alınıyor"; /* Balance */ -"Fetching rates…" = "Fetching rates…"; +"Fetching rates…" = "Fiyatlar getiriliyor…"; /* Coinbase/Payment Methods */ "Fiat Account" = "Fiat Hesabı"; @@ -890,7 +932,7 @@ "Filter" = "Filtre"; /* No comment provided by engineer. */ -"Filter Transactions" = "İşlemleri Filtrele"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Şuna göre filtrelendi:"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filtreler"; -/* No comment provided by engineer. */ -"Find a merchant." = "Bir tüccar bulun."; - /* No comment provided by engineer. */ "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"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "İlk minimum depozito"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Olası eksik kelimeler bulundu:\n%@"; +/* DashSpend confirmation */ +"From" = "Gönderen"; + /* from CrowdNode */ "from CrowdNode" = "CrowdNode'dan"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Hediye Kartı"; +/* No comment provided by engineer. */ +"Gift card" = "Hediye Kartı"; + +/* 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" = "Hediye kartı toplamı"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "CrowdNode web sitesine gidin"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "API Dash adresinizi nasıl onaylarsınız?"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Hediye Kartı Nasıl Kullanılır"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node Kimlik Anahtarları"; @@ -1058,7 +1124,10 @@ "I Accept" = "Kabul ediyorum"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Kabul ediyorum"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "DashSpend şartlar ve koşullarını kabul ediyorum"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Eğer kurtarma metnime sahip olmazsam paralarımı kaybedeceğimi kabul ediyorum"; @@ -1085,7 +1154,7 @@ "If somebody else requests the same username as you, we will let the network decide whom to give this username" = "Başka biri sizinle aynı kullanıcı adını isterse, bu kullanıcı adını kime vereceğine ağın karar vermesine izin vereceğiz"; /* Geoblock */ -"If you choose to grant permissions at a later time and you are not in the UK, you can use Coinbase" = "If you choose to grant permissions at a later time and you are not in the UK, you can use Coinbase"; +"If you choose to grant permissions at a later time and you are not in the UK, you can use Coinbase" = "Daha sonra izin vermeyi seçerseniz ve Birleşik Krallık'ta değilseniz Coinbase'i kullanabilirsiniz."; /* CrowdNode */ "If you ever lose your passphrase, you can verify yourself by other means to regain access to your CrowdNode funds." = "Parolanızı kaybederseniz, CrowdNode fonlarınıza yeniden erişim kazanmak için kimliğinizi çeşitli yollarla doğrulayabilirsiniz."; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "İşlemde…"; +/* No comment provided by engineer. */ +"In store" = "Mağazada"; + +/* 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"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Orta seviye"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Orta düzey gizlilik için güvenilir bir internet bağlantısı gerekir"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Dahili Transfer"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Geçersiz tutar"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Geçersiz Dash adresi"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Geçersiz QR Kodu"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Davetiye"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Davetiye Başarıyla Oluşturuldu"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Davet Ücreti"; /* No comment provided by engineer. */ "Invitation used by" = "Davetiyeyi kullanan kişi"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Herhangi bir düzeyde teknik uzmanlığa sahip ileri düzey kullanıcıların işlem geçmişinizi belirlemesi çok zor olacaktır."; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Son sunucu güncellemesi"; -/* No comment provided by engineer. */ -"Learn More" = "Daha fazla bilgi edin"; - /* Info Screen */ "Learn More..." = "Daha fazla bilgi edin..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Kilitlendi"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "CrowdNode'da oturum açın"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Çıkış Yap"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Uphold'dan çıkış yap"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Yüz Kimliği ile Oturum Aç"; @@ -1389,10 +1488,10 @@ "Low to high" = "Alçaktan yükseğe"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "Ananet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "İstenen kullanıcı adının orijinal sahibi olduğunuzu doğrulamak için yukarıdaki metni bilinen bir sosyal medya platformunda paylaşın ve aşağıdaki bağlantıyı yapıştırın"; /* No comment provided by engineer. */ "Manage GPS Permission" = "GPS İznini Yönet"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Maksimum"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maksimum 75 karakter"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Tüccar araması, Konum Servisleri açıkken daha iyi çalışır."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1452,7 +1557,7 @@ "Mixed balance" = "Mixed balance"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Karıştırma"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; @@ -1464,7 +1569,7 @@ "Mixing Paused ·" = "Mixing Paused ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Karıştırma İşlemleri"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Dash’inizi karıştırmak işlemlerinizi daha özel hale getirir"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Ağ"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Ağ ücreti"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Düğüm IP'si"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Hiçbiri"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Geçerli bir URL değil"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Tüm mağazalar DASH'i doğrudan kabul etmez, ancak Dash'inizle bir hediye kartı satın alabilirsiniz."; - /* Fiat amount */ "Not available" = "Mevcut değil"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "Tamam"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Eskiden yeniye"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Sipariş Önizleme"; +/* DashSpend */ +"Original purchase" = "Orijinal satın alma"; + /* No comment provided by engineer. */ "Owner Address" = "Sahip Adresi"; /* No comment provided by engineer. */ "Owner Keys" = "Sahip Anahtarları"; +/* DashSpend */ +"Password" = "Şifre"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Kolaylıkla öde"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "DASH Cüzdanı ile ödeme yapın."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Ödeniyor"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Ödeniyor..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Ödeme şekli"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Ödeme türü"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Lütfen telefonunuzu bir NFC cihazının yakınına yerleştirin."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Lütfen kurtarma sözcük grubunuzu doğru şekilde sıralayın"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Lütfen bir yere yazın"; +/* No comment provided by engineer. */ +"Powered by" = "Tarafından desteklenmektedir"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Önizleme Davetiyesi"; @@ -1797,13 +1920,13 @@ "Previously used at: " = "Daha önce şurada kullanıldı:"; /* Stale rates */ -"Prices are at least 30 minutes old. Fiat values may be incorrect." = "Prices are at least 30 minutes old. Fiat values may be incorrect."; +"Prices are at least 30 minutes old. Fiat values may be incorrect." = "Fiyatlar en az 30 dakikalıktır. Fiat değerleri yanlış olabilir."; /* Stale rates */ -"Prices have fluctuated more than 50% since the last update." = "Prices have fluctuated more than 50% since the last update."; +"Prices have fluctuated more than 50% since the last update." = "Fiyatlar son güncellemeden bu yana %50'den fazla dalgalandı."; /* Stale rates */ -"Prices weren't retrieved. Fiat values may be incorrect." = "Prices weren't retrieved. Fiat values may be incorrect."; +"Prices weren't retrieved. Fiat values may be incorrect." = "Fiyatlar alınamadı. Fiat değerleri yanlış olabilir."; /* CrowdNode */ "Primary Dash address" = "Birincil Dash adresi"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Satın alma"; +/* Alert title */ +"Purchase Failed" = "Satın Alma Başarısız"; + /* No comment provided by engineer. */ "Quick Receive" = "Hızlı Al"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Kurtarma ifadesi 12, 15, 18, 21 veya 24 sözcükten oluşmalıdır"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Hediye kartınızı saniyeler içinde çevrimiçi olarak veya kasiyerde kullanın."; - /* Button title, Register (username) */ "Register" = "Kayıt ol"; @@ -1922,6 +2045,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ı"; @@ -1956,7 +2082,7 @@ "Restricted" = "Sınırlı"; /* Usernames */ -"Results" = "Results"; +"Results" = "Sonuçlar"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Karşılıklı İşlem Geçmişini Saklayın"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Ödül"; -/* No comment provided by engineer. */ -"Rewards" = "Ödüller"; - /* No comment provided by engineer. */ "Save" = "Kaydet"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Değişiklikleri Kaydet"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Ekran görüntüleri diğer uygulamalar ve cihazlar tarafından görülebilir. Yeni bir kurtarma metni oluşturun ve gizli tutun."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Ara"; /* No comment provided by engineer. */ "Search for a contact" = "Kişi arayın"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "\" için arama sonuçları"; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Dash ağında %@ kullanıcı adı aranıyor"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Bir servis seç"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Koin seçin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Otomatik ödeme"; + /* Sell */ "Sell" = "Sat"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Gönderildi"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Güvenilir bir düğüm belirle"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Kurtarma Sözcük Grubunu Göster"; +/* Alert title */ +"Sign in required" = "Giriş gerekli"; + /* CrowdNode */ "Sign the message" = "Mesajı imzala"; @@ -2195,7 +2339,7 @@ "Skip" = "Atla"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Bazı kullanıcı adları engellenebilir"; /* No comment provided by engineer. */ "Something went wrong" = "Bir şeyler ters gitti"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Kişileri Sırala"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Mesafeye göre sıralanmış"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Senkronizasyon Başarısız"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Senkronizasyon devam ediyor... Sonuçlar tamamlanmayabilir."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Şimdi Senkronize Et"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Vergi Kategorisi"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash'in gerçek dünyada hiçbir değeri yoktur ancak onu diğer DashPay Alpha kullanıcılarıyla gönderip alabilirsiniz."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Seçtiğiniz resim anonim olarak Imgur'a yüklenecektir."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Gönderdiğiniz bağlantı yalnızca ağ sahipleri tarafından görülebilecektir"; /* Coinbase */ "The minimum amount you can send is %@" = "Gönderebileceğiniz minimum miktar %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Bu ekstra adım, gerçekten bir işlem yapmaya çalıştığınızı gösterir."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Bu PİN uygulamanın açılması için her zaman gerekecektir."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "giden"; +/* DashSpend confirmation */ +"To" = "Alıcı"; + /* Coinbase */ "to Dash Wallet on this device" = "bu cihazdaki Dash Cüzdan'ına"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Stake etmeye başlamak için CrowdNode'da bir hesap oluşturun veya mevcut bir hesaba bağlanın."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "bu cihazdaki Dash Cüzdanından CrowdNode hesabınız için belirlenen Dash adresine"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Bugün"; /* No comment provided by engineer. */ "Tools" = "Araçlar"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Profilinizde değişiklik yapmaya ve kişi eklemeye devam etmek için kredilerinizi doldurun"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID limiti"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "İşlem Geçmişi"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Cihaz parolasını aç"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Kapalı"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Bu özelliğin açılması daha yüksek pil kullanımına neden olur"; @@ -2572,7 +2743,7 @@ "Username available" = "Kullanıcı adı uygun"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Kullanıcı adı mevcut"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,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"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Oylama sadece bazı durumlarda gereklidir"; /* No comment provided by engineer. */ "Voting Keys" = "Oy Verme Anahtarları"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "CrowdNode hesabınızdan para çekemedik."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "2 tip tüccarımız var"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Dash Wallet'ın taşıma işlemi sırasında çöktüğünü tespit ettik. Blok zincirini tekrar tararsanız sorun çözülecektir veya tekrar deneyebilirsiniz. Tekrar taramanın kablosuz ağ üzerinde yapılması tercih edilir ve bu işlem yarım saat kadar sürer. Eşleşme süreci tamamlanınca bakiyenizi kullanabilirsiniz."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Yeni sürüme geçtik"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Daveti kabul etmek ister misiniz?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Bağlı bir banka hesabını kullanarak satın alma işleminiz için para yatırmak ister misiniz?"; @@ -2774,7 +2945,7 @@ "Yes" = "Evet"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Dün"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "%@'den gelen kişi talebini kabul ettiniz."; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Bu cüzdanı bu cihazdan silmek üzeresiniz. Bu cüzdanla ilişkili fonlar yalnızca kurtarma sözcük grubunuz varsa geri alınabilir."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Bu cüzdana erişiminiz olduğu sürece, yüklenen görseli her zaman silebilirsiniz."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Ödüllerinizin nasıl ve ne zaman ödeneceğini değiştirebilirsiniz."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Ödemeler için DashPay'i kullanmaya devam edebilirsiniz ancak kredi bakiyenizi doldurana kadar profilinizi güncelleyemez veya daha fazla kişi ekleyemezsiniz"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Anahtarınızı aşağıdaki formatlardan herhangi birinde girebilirsiniz: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Para yatırma, çekme ve ödüllerinizin detaylı bilgileri görebilirsiniz."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Zaten bir Dash kullanıcı adınız olduğundan bu daveti talep edemezsiniz"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "Şu anda herhangi bir kişiniz yok"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Bu işlemi gerçekleştirmek için yeterli bakiyeniz yoktur"; + /* Coinbase */ "You don’t have enough balance" = "Yeterli bakiyeniz yok"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Başka bir para çekme işlemine başlamadan önce 5 dakika beklemeniz gerekir"; /* CrowdNode */ "You only need %@ to join the pool." = "Havuza katılmak için yalnızca %@'a ihtiyacınız var."; +/* DashSpend confirmation */ +"You pay" = "Ödeyeceğiniz"; + /* Coinbase */ "You receive" = "Aldığınız"; @@ -2909,7 +3095,7 @@ "Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Kredi bakiyeniz düşük"; /* CrowdNode */ "Your CrowdNode account is creating…" = "CrowdNode hesabınız oluşturuyor…"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "CrowdNode hesabınız kuruldu ve kullanıma hazır!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "CrowdNode hesabınız bu işlemler kullanılarak oluşturulmuştur."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "CrowdNode adresiniz onaylandı."; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "E-postanız DashPay cüzdanında veya herhangi bir sunucuda saklanmaz. Gravatar hesap ayrıntılarınızı almak için bir kez kullanılır ve ardından yok edilir."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "E-postanız yalnızca tek kullanımlık şifre göndermek için kullanılır."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "%@ tarafından gönderilen davetiniz zaten talep edildi"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "İsteğiniz iptal edildi"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "İşleminiz yapıldı ve birkaç dakika içinde tutar cüzdanınızda görülecek."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Kullanıcı adınız %@ Dash Ağında başarıyla oluşturuldu"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/uk.lproj/Localizable.strings b/DashWallet/uk.lproj/Localizable.strings index 58bbcc277..e509a33a0 100644 --- a/DashWallet/uk.lproj/Localizable.strings +++ b/DashWallet/uk.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ не має доступу до Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu контактів / %3$lu оновлень профілю"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d голоси будуть віддані, оскільки у вас є кілька ключів для голосування, які зберігаються в гаманці"; /* Voting */ "%ld duplicates" = "%Ід дублікатів"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Прийняти"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Прийняття умов використання"; /* CrowdNode */ "Accepting terms of use…" = "Прийняття умов використання…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Приймає DASH безпосередньо"; - /* CrowdNode */ "Account Recovery" = "Відновлення Акаунта"; @@ -152,7 +155,7 @@ "Advanced" = "Продвинуті"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "Розширений рівень конфіденційності вимагає надійного підключення до Інтернету"; /* No comment provided by engineer. */ "Advanced Security" = "Розширений захист"; @@ -167,7 +170,7 @@ "Agree" = "Погоджуюсь"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "попереду"; /* No comment provided by engineer. */ "All" = "Все"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Відправлена сума"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Інтуїтивний та звичний інтерфейс на всіх ваших пристроях"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "і"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Додаток %@ хоче отримати ваш основний публічний ключ. Це може бути використане для відстеження вашого гаманця, але не для відправлення ваших Dash."; +/* No comment provided by engineer. */ +"Apply" = "Застосувати"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Ви впевнені, що хочете скасувати замовлення?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "Оскільки більшість людей не мають під рукою точно 1000 Dash, CrowdNode створив послугу, за допомогою якої вони, об’єднуючи депозити від учасників, можуть отримати переваги володіння Masternode."; +/* DashSpend */ +"at" = "в"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "Пошук банкоматів працює краще, якщо ввімкнено служби визначення місцезнаходження."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Автентифікація недоступна"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Авторизований"; @@ -301,20 +316,20 @@ /* 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"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "позаду"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Між %1$ld і %2$ld символів"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "Від 3 до 23 символів"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "Між Dash Wallet і Coinbase"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Між Dash Wallet і вашим Coinbase акаунтом"; /* Voting */ -"Block" = "Block"; +"Block" = "Блок"; /* No comment provided by engineer. */ "block #%d of %d" = "блок #%1$d з %2$d"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Купити подарункову карту"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Купити подарункову картку за допомогою Dash"; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Купуйте та конвертуйте Dash за допомогою іншої криптовалюти"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "Купити кредити"; /* No comment provided by engineer. */ "Buy Dash" = "Купити Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Купити Dash · Обліковий запис не потрібен"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Купуйте подарункові картки за допомогою Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Скасування цієї операції не скасовує трейд. Незабаром ви отримаєте DASH на свій обліковий запис Coinbase."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "PIN-код картки"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Змінити"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "Зміна на проміжний"; +/* No comment provided by engineer. */ +"Check current balance" = "Перевірити поточний баланс"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "Перевірте налаштування дати та часу"; /* No comment provided by engineer. */ "Check your connection" = "Перевірте з'єднання"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Виберіть свій"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "Заставні дані CoinJoin"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin Створення номіналів"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "Змішування CoinJoin"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "Комісія за змішування CoinJoin"; /* No comment provided by engineer. */ "Confirm" = "Підтверджую"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Підтвердження (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Підтвердіть PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Звернутися до служби підтримки Coinbase"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Непідтверджені запити на додавання до контактів"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "Контакти"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Продовжити"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "Все одно продовжити"; /* Coinbase Entry Point */ "Convert Crypto" = "Конвертувати криптовалюту"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "Створити обліковий запис"; +/* Create DashSpend account */ +"Create account" = "Створити аккаунт"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Створити обліковий запис CrowdNode онлайн"; /* No comment provided by engineer. */ "Create invitation" = "Створити запрошення"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Створити Онлайн Акаунт"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "Створити ім'я користувача"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "Створіть своє ім’я користувача, знайдіть друзів і родину з їхніми іменами користувачів і додайте їх до своїх контактів"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "Ліміти виведення з CrowdNode"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "Акаунт CrowdNode"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ DashWallet"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Адреса Dash, призначена для вашого облікового запису CrowdNode у Dash Wallet на цьому пристрої"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Баланс Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Баланс Dash на Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Ім'я користувача Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet на цьому пристрої"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "Валюта за замовчуванням, ярлики, про програму."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "Налаштування фільтра за замовчуванням"; /* Location Service Status */ "Denied" = "Заборонено"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Знижка"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Відхилити"; /* No comment provided by engineer. */ "Display Name" = "Відображуване ім'я"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Кожне запрошення фінансуватиметься цією сумою, щоб одержувач міг швидко створити своє ім’я користувача в Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Раніше"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Введіть фразу відновлення"; +/* Enter verification code */ +"Enter verification code" = "Введіть код підтвердження"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Введіть код 2FA нижче"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "Помилка"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Помилка оновлення профіля"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "Помилка"; /* No comment provided by engineer. */ "Exit" = "Вихід"; @@ -842,7 +881,7 @@ "Export all transactions" = "Експорт усіх транзакцій"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "Експорт CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "Розширені відкриті ключі"; @@ -850,6 +889,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" = "Не вдалося розпочати сеанс авторизації"; @@ -890,7 +932,7 @@ "Filter" = "Фільтр"; /* No comment provided by engineer. */ -"Filter Transactions" = "Фільтрувати транзакції"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Відфільтровано за:"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Фільтри"; -/* No comment provided by engineer. */ -"Find a merchant." = "Знайти продавця."; - /* No comment provided by engineer. */ "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 %@" = "Перший депозит має бути більшим ніж %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "Перший мінімальний депозит"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Знайдено можливо пропущені слова:\n%@"; +/* DashSpend confirmation */ +"From" = "З"; + /* from CrowdNode */ "from CrowdNode" = "з CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "з вашого акаунта Coinbase"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "Повністю змішано"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "Отримуйте нагороди від депозитів у Dash Мастерноди лише за 0,5 Dash."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Подарункова карта"; +/* No comment provided by engineer. */ +"Gift card" = "Подарункова карта"; + +/* 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" = "Загальна сума подарункової картки"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Перейти на веб-сайт CrowdNode"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "Як підтвердити свою API Dash адресу"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "Як використовувати подарункову карту"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Ключі ідентифікатора вузла Evolution"; @@ -1058,7 +1124,10 @@ "I Accept" = "Я приймаю"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "Я приймаю"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "Я приймаю правила та умови використання DashSpend"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Я погоджуюся з тим, що втрачу свої монети, якщо більше не матиму фрази відновлення"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "В процесі..."; +/* No comment provided by engineer. */ +"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" = "Дохід"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "Недостатньо коштів"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Недостатньо змішаних фондів. Зачекайте, поки змішування CoinJoin завершиться, або вимкніть цю функцію в налаштуваннях, щоб завершити цю транзакцію."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "Недостатній баланс гаманця"; @@ -1160,7 +1235,7 @@ "Intermediate" = "Проміжний"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "Середній рівень конфіденційності вимагає надійного підключення до Інтернету"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "Внутрішній переказ"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Неправильна сума"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Неправильна Dash адреса"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Неправильний QR код"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Запрошення"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Запрошення успішно створено"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Комісія за запрошення"; /* No comment provided by engineer. */ "Invitation used by" = "Запрошення використовував"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "Перенесення Dash із Coinbase у Dash Wallet цього пристрою може зайняти до 10 хвилин."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "Рекомендується бути підключеним до мережі Wi-Fi, щоб уникнути втрати коштів"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "Досвідченим користувачам із будь-яким рівнем технічних знань буде дуже важко визначити вашу історію транзакцій"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Останнє оновлення сервера"; -/* No comment provided by engineer. */ -"Learn More" = "Дізнатися більше"; - /* Info Screen */ "Learn More..." = "Дізнатися більше..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Заблоковано"; +/* Log in */ +"Log in" = "Вхід"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Ввійти в CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Увійти в свій аккаунт"; + +/* Log out button */ +"Log Out" = "Вийти"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Вийти з Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Увійти за допомогою Face ID"; @@ -1392,7 +1491,7 @@ "Mainnet" = "Mainnet"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Опублікуйте публікацію з наведеним вище текстом у відомих соціальних мережах або на платформі обміну повідомленнями, щоб підтвердити, що ви є оригінальним власником потрібного імені користувача, і вставте посилання нижче"; /* No comment provided by engineer. */ "Manage GPS Permission" = "Керувати дозволом GPS"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Макс"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Максимум 75 символів"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Пошук продавців працює краще, якщо ввімкнено служби локації."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "Змішаний баланс"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "Змішування"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "Змішування можливе лише у відкритому додатку"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "Змішування на паузі"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "Змішування транзакцій"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "Змішування монет Dash зробить ваші транзакції більш конфіденційними"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "Змішування"; /* No comment provided by engineer. */ "More" = "Більше"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Мережа"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Комісія мережі"; @@ -1554,14 +1662,11 @@ "No Results Found" = "Нічого не знайдено"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "Голосів немає"; /* No comment provided by engineer. */ "Node IP" = "IP вузла"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Відсутній"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Недійсний URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Не всі магазини приймають DASH напряму, але ви можете купити подарункову картку за допомогою Dash."; - /* Fiat amount */ "Not available" = "Недоступний"; @@ -1587,7 +1689,7 @@ "Not Determined" = "Не визначено"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "Не розпачато"; /* No comment provided by engineer. */ "Not yet used" = "Ще не використовувався"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Від старого до нового"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "Щойно %@ прийме ваш запит, ви зможете здійснити оплату безпосередньо на ім’я користувача"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "Залишився один голос"; /* Online */ "Online" = "Інтернет-магазин"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Попередній перегляд замовлення"; +/* DashSpend */ +"Original purchase" = "Початкова покупка"; + /* No comment provided by engineer. */ "Owner Address" = "Адреса власника"; /* No comment provided by engineer. */ "Owner Keys" = "Ключі власника"; +/* DashSpend */ +"Password" = "Пароль"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Платіть з легкістю"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Платіть через DASH гаманець."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Оплата"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Оплата..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Спосіб оплати"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Типа платежу"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Розташуйте телефон біля пристрою NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Будь ласка, торкніться слів з вашої фрази відновлення в правильному порядку"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "Будь ласка, запишіть її"; +/* No comment provided by engineer. */ +"Powered by" = "На базі"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "Попередній перегляд запрошення"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Покупка"; +/* Alert title */ +"Purchase Failed" = "Покупка не вдалася"; + /* No comment provided by engineer. */ "Quick Receive" = "Швидке отримання"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Фраза для відновлення повинна містити 12, 15, 18, 21 або 24 слова"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Отримайте свою подарункову картку онлайн за лічені секунди або в касі."; - /* Button title, Register (username) */ "Register" = "Реєстрація"; @@ -1922,6 +2045,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" = "Запросити деталі"; @@ -1929,10 +2055,10 @@ "Request your username" = "Запит на ваше ім'я користувача"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "Запитане ім'я користувача заблоковано"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "Запитане ім’я користувача надано комусь іншому"; /* An action */ "Rescan" = "Повторне сканування"; @@ -1956,7 +2082,7 @@ "Restricted" = "Обмежено"; /* Usernames */ -"Results" = "Results"; +"Results" = "Результати"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "Зберігати взаємну історію транзакцій"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Нагорода"; -/* No comment provided by engineer. */ -"Rewards" = "Нагороди"; - /* No comment provided by engineer. */ "Save" = "Зберегти"; +/* DashSpend */ +"Save %.2f%%" = "Зберегти %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Зберегти зміни"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "Знімки екрана доступні для інших програм і пристроїв. Створіть нову фразу відновлення та збережіть її в секреті."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "Пошук"; /* No comment provided by engineer. */ "Search for a contact" = "Пошук контакта"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Результати пошуку по \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Пошук по імені користувача %@ в Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "Виберіть послугу"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "Виберіть оглядач блоків"; /* No comment provided by engineer. */ "Select from Gallery" = "Вибрати із галереї"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Виберіть монету"; +/* No comment provided by engineer. */ +"Self-checkout" = "Самообслуговування"; + /* Sell */ "Sell" = "Продати"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Відправити"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Встановити довірений вузол"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Показати фразу відновлення"; +/* Alert title */ +"Sign in required" = "Необхідно ввійти"; + /* CrowdNode */ "Sign the message" = "Підпишіть повідомлення"; @@ -2195,7 +2339,7 @@ "Skip" = "Пропустити"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "Деякі імена користувачів можуть бути заблоковані"; /* No comment provided by engineer. */ "Something went wrong" = "Щось пішло не так"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Сортувати контакти"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Відсортовано за відстанню"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "Зупинити змішування"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "Надіслати"; /* No comment provided by engineer. */ "Swept!" = "Переведено!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Помилка синхронізації"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Триває синхронізація... Результати можуть бути неповними."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Синхронізувати зараз"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Податкова категорія"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Tестові Dash не мають жодної цінності в реальному світі, але ви можете надсилати й отримувати їх разом з іншими користувачами DashPay Alpha."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "Test Dash є безкоштовним і його можна отримати з так званого крана."; /* 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."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "Вибране вами зображення буде анонімно завантажено в Imgur."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "Посилання, яке ви надішлете, буде видно лише власникам мережі"; /* Coinbase */ "The minimum amount you can send is %@" = "Мінімальна сума, яку ви можете надіслати, становить %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "Цей додатковий крок показує, що справді ви намагаєтеся здійснити транзакцію."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Цей PIN-код необхідний, щоб розблокувати вашу програму кожного разу, коли ви її використовуєте."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "до"; +/* DashSpend confirmation */ +"To" = "До"; + /* Coinbase */ "to Dash Wallet on this device" = "На Dash Wallet на цьому пристрої"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "Щоб запобігти тому, щоб інші люди бачили, кому ви здійснюєте платежі, рекомендуємо змішати ваш баланс перед створенням імені користувача."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "Щоб почати стейкінг, створіть обліковий запис на CrowdNode або підключіться до існуючого."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "на адресу Dash, призначену для вашого облікового запису CrowdNode у Dash Wallet на цьому пристрої"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "Сьогодні"; /* No comment provided by engineer. */ "Tools" = "Інструменти"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "Поповнюйте свої кредити, щоб продовжувати вносити зміни у свій профіль і додавати контакти"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Touch ID ліміт"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Історія Транзакцій"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "Увімкніть пароль"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "Вимкнено"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "Увімкнення цієї функції призведе до більшого використання акумулятора"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "Не вдалося завантажити ваше зображення. Будь ласка спробуйте ще раз."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "Розблокувати"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "Доступне ім'я користувача"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "Доступне ім'я користувача"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "Переглянути фразу відновлення"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "Голосувати за всіх"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "Голосування потрібне лише в деяких випадках"; /* No comment provided by engineer. */ "Voting Keys" = "Ключі голосування"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "Не вдалося зняти кошти з вашого облікового запису CrowdNode."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "У нас є 2 види продавців"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Виявлено, що під час міграції Dash Wallet стався збій. Повторне сканування блокчейну вирішить цю проблему або спробуйте ще раз. Повторне сканування бажано проводити з використанням Wi-Fi, і це займе до півгодини. Ваші кошти будуть доступні після завершення процесу синхронізації."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Ми оновились"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "Коли ця транзакція буде підтверджена, гаманець буде непотрібним і не зможе бути повторно використаний з метою безпеки."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "Коли ви закриваєте програму або блокуєте екран, процес змішування припиняється. Він відновиться, коли ви знову відкриєте програму"; /* No comment provided by engineer. */ "Where to Spend" = "Де витратити"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Хочете прийняти запрошення?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Бажаєте внести депозит за свою покупку за допомогою прив’язаного банківського рахунку?"; @@ -2774,7 +2945,7 @@ "Yes" = "Так"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "Вчора"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "Ви прийняли запит на додавання в контакти від %@"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Ви збираєтеся стерти цей гаманець із цього пристрою. Кошти, пов’язані з цим гаманцем, можна отримати, лише якщо у вас є фраза для відновлення."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "Ви завжди можете видалити завантажене зображення, якщо у вас є доступ до цього гаманця."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "Ви можете налаштувати, коли та яким чином отримаєте свою винагороду."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "Ви можете продовжувати використовувати DashPay для платежів, але ви не можете оновити свій профіль або додати більше контактів, доки не поповните кредитний баланс"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "Ви можете ввести свій ключ у будь-якому з таких форматів: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "Ви можете переглянути детальну інформацію про свої депозити, зняття коштів і доходи."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "Ви не можете отримати це запрошення, оскільки у вас уже є ім’я користувача Dash"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "На даний момент у вас немає контактів"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "У вас недостатньо коштів для завершення цієї операції"; + /* Coinbase */ "You don’t have enough balance" = "Ваш баланс недостатній"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "Вам потрібно зачекати 5 хвилин, перш ніж почати наступне виведення"; /* CrowdNode */ "You only need %@ to join the pool." = "Щоб приєднатися до пулу вам потрібно %@"; +/* DashSpend confirmation */ +"You pay" = "Ви платите"; + /* Coinbase */ "You receive" = "Ви отримуєте"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "Ви отримуватимете дробові виплати автоматично, і за замовчуванням вони будуть реінвестовані, однак також легко налаштувати автоматичне зняття коштів для отримання регулярних виплат."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "Ваш кредитний баланс повністю вичерпано"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "Ваш кредитний баланс низький"; /* CrowdNode */ "Your CrowdNode account is creating…" = "Ваш обліковий запис CrowdNode створюється…"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "Ваш CrowdNode акаунт налаштований і готовий до використання"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "Ваш обліковий запис CrowdNode було створено за допомогою цих транзакцій."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "Вашу адресу CrowdNode підтверджено."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "Ваш депозит на CrowdNode отримано."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Час вашого пристрою %1$@ в секундах %2$d. Ви не можете використовувати CoinJoin через цю різницю.\n\nЩоб використовувати CoinJoin, налаштування часу на вашому пристрої потрібно змінити на «Установити час автоматично»."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Час на Вашому пристрої відрізняється на %d хвилин. З цієї причини Ви, можливо, не зможете надсилати або отримувати кошти.\n\nПеревірте налаштування та за потреби скоригуйте дату, час та часовий пояс."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Час вашого пристрою вимкнено більш ніж на 5 секунд. Ви не можете використовувати CoinJoin через цю різницю.\n\nПерш ніж використовувати CoinJoin, налаштування часу на вашому пристрої потрібно змінити на «Установити час автоматично»."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Ваша електронна пошта не зберігається ні в гаманці DashPay, ні на будь-яких серверах. Він використовується один раз, щоб отримати дані вашого облікового запису Gravatar, а потім відкидається."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Ваша електронна адреса використовується лише для надсилання одноразового пароля."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Ваше запрошення від %@ уже отримано"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Ваш запит скасовано"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Ваша транзакція була відправлена ​​і її сума відобразиться у вашому гаманці за кілька хвилин."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Ваше ім’я користувача %@ було успішно створено в Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/vi.lproj/Localizable.strings b/DashWallet/vi.lproj/Localizable.strings index b4b6e8fde..c675d5153 100644 --- a/DashWallet/vi.lproj/Localizable.strings +++ b/DashWallet/vi.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Chấp nhận"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Số tiền đã gửi"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "Một giao diện trực quan và quen thuộc trên tất cả các thiết bị của bạn"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "Ứng dụng %@ có thể nhận Master Public Key của bạn. Nó có thể được dùng để theo dõi ví của bạn, nhưng nó không thể dùng để chuyển Dash."; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Xác thực không sẵn sàng"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "Between Dash Wallet and your Coinbase account"; /* Voting */ -"Block" = "Block"; +"Block" = "Khối"; /* No comment provided by engineer. */ "block #%d of %d" = "khối #%1$d của %2$d"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Thay đổi"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Kiểm tra kết nối của bạn"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Chọn của bạn"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "Xác thực"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Xác nhận mã PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Yêu cầu liên hệ đang chờ"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Các liên hệ"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Tiếp tục"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "Dash address designated for your CrowdNode account in the Dash Wallet on this device "; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Số dư Dash"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Dash balance on Coinbase"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Tên người dùng Dash"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "Bỏ qua"; /* No comment provided by engineer. */ "Display Name" = "Display Name"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Trước đó"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Nhập cụm từ phục hồi"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Hãy nhập mà xác thực 2 lớp vào dưới đây"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Lỗi"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Lọc"; /* No comment provided by engineer. */ -"Filter Transactions" = "Lọc các giao dịch"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Tìm một người dùng trên mạng lưới Dash"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "Tôi chấp nhận rằng tôi sẽ mất các coin của mình nếu không còn sở hữu cụm từ phục hồi"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Số tiền không hợp lệ"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Mã QR không hợp lệ"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Đã khoá"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Đăng xuất"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Đăng xuất khỏi Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Đăng nhập với Face ID"; @@ -1389,7 +1488,7 @@ "Low to high" = "Low to high"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "Mạng chính"; /* Usernames */ "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Tối đa"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Mạng"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Phí giao dịch"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Địa chỉ IP của nút"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "Không có"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Không sẵn sàng"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "OK"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Địa chỉ của chủ sở hữu"; /* No comment provided by engineer. */ "Owner Keys" = "Khoá của chủ sở hữu"; +/* DashSpend */ +"Password" = "Mật khẩu"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Giao dịch một cách đơn giản"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Đang gửi"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Đang gửi..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "Hãy đặt điện thoại của bạn cạnh thiết bị NFC."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Hãy bấm vào những từ trong cụm từ phục hồi của bạn theo một thứ tự đúng"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Nhận nhanh"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Đăng ký"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Phần thưởng"; -/* No comment provided by engineer. */ -"Rewards" = "Phần thưởng"; - /* No comment provided by engineer. */ "Save" = "Lưu"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Kết quả tìm kiếm cho \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Tìm kiếm tên người dùng %@ trên mạng lưới Dash"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Gửi đến"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Thiết lập một nút tin cậy"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Hiển thị câu phục hồi"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sắp xếp các liên lạc"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Đồng bộ không thành công"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Đồng bộ luôn"; @@ -2279,13 +2429,19 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "Mạng thử nghiệm"; /* No comment provided by engineer. */ "The chain is syncing…" = "The chain is syncing…"; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "Mã PIN này sẽ được hỏi để mở ứng dụng của bạn mỗi khi bạn sử dụng nó."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "Giới hạn Touch ID"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "Chúng tôi phát hiện thấy ví Dash bị lỗi trong quá trình nhập dữ liệu. Quét lại blockchain sẽ giải quyết được vấn đề hoặc bạn có thể thử lại. Việc quét lại nên được thực hiện với kết nối wifi và nó sẽ mất khoảng nửa giờ đồng hồ. Số tiền của bạn sẽ được sẵn sàng cho chi tiêu một khi việc đồng bộ hoàn tất."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "Chúng tôi đã Nâng cấp"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "Bạn đang sắp xoá sạch ví này từ thiết bị này. Khoản tiền liên quan đến ví này chỉ có thể lấy lại được nếu bạn có cụm từ phục hồi."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "Bạn không có đủ kinh phí để hoàn tất giao dịch này"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Giao dịch của bạn đã được gửi và số tiền sẽ xuất hiện trong ví của bạn trong vài phút."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Tên người dùng của bạn %@ đã được tạo lập thành công trên mạng lưới Dash"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/zh-Hans.lproj/Localizable.strings b/DashWallet/zh-Hans.lproj/Localizable.strings index 6698798bb..970e844bf 100644 --- a/DashWallet/zh-Hans.lproj/Localizable.strings +++ b/DashWallet/zh-Hans.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "应用程序 %@ 想要获取你的公钥。它可以被用作查看你的钱包记录,但无法用来移动你钱包中的达世币。"; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "确认"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "我同意如果我丢失恢复密语,我会丢失我的达世币"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "请将你的手机靠近NFC设备."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Save"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "触控ID限制"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/zh-Hant-TW.lproj/Localizable.strings b/DashWallet/zh-Hant-TW.lproj/Localizable.strings index bfb474c71..cef7f7872 100644 --- a/DashWallet/zh-Hant-TW.lproj/Localizable.strings +++ b/DashWallet/zh-Hant-TW.lproj/Localizable.strings @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "Accept"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "Accept Terms Of Use"; /* CrowdNode */ "Accepting terms of use…" = "Accepting terms of use…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "Accepts DASH directly"; - /* CrowdNode */ "Account Recovery" = "Account Recovery"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "Amount Sent"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "An intuitive and familiar experience across all your devices"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "and"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "應用程式 %@ 想要取得您的主公鑰。 這可以用來追踪你的錢包結餘,但並不能動用你的達世幣。"; +/* No comment provided by engineer. */ +"Apply" = "Apply"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "Are you sure you want to cancel this order?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode."; +/* DashSpend */ +"at" = "at"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM search works better with Location Services turned on."; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "Authentication is unvailable"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "Authorized"; @@ -301,15 +316,15 @@ /* 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"; /* TimeSkew */ "behind" = "behind"; -/* No comment provided by engineer. */ -"Beta" = "Beta"; - /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "Between %1$ld and %2$ld characters"; @@ -347,9 +362,6 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "Buy a Gift Card"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "Buy a gift card with Dash."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "Buy and convert Dash with another crypto"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "Buy Dash · No account needed"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "Buy gift cards with your Dash"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "Card PIN"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "Change"; @@ -410,12 +431,18 @@ /* 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"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "Choose your"; @@ -464,21 +491,12 @@ /* CoinJoin */ "CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; -/* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; - /* No comment provided by engineer. */ "Confirm" = "確認:"; /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "Confirm (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "Confirm PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "Contact Coinbase Support"; +/* DashSpend */ +"Contact CTX Support" = "Contact CTX Support"; + /* No comment provided by engineer. */ "Contact Request Pending" = "Contact Request Pending"; @@ -520,9 +541,6 @@ /* No comment provided by engineer. */ "Contacts" = "Contacts"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "Continue"; @@ -583,12 +601,21 @@ /* CrowdNode */ "Create Account" = "Create Account"; +/* Create DashSpend account */ +"Create account" = "Create account"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "Create an online CrowdNode account"; /* No comment provided by engineer. */ "Create invitation" = "Create invitation"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "Create Online Account"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash username"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash Wallet"; + /* Buy Dash */ "Dash Wallet on this device" = "Dash Wallet on this device"; @@ -727,6 +757,9 @@ Coinbase Entry Point */ "Disconnected" = "Disconnected"; +/* DashSpend confirmation */ +"Discount" = "Discount"; + /* No comment provided by engineer. */ "Dismiss" = "Dismiss"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "e.g. johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "Earlier"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "Enter Recovery Phrase"; +/* Enter verification code */ +"Enter verification code" = "Enter verification code"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "Enter your 2FA code below"; @@ -820,6 +856,9 @@ /* No comment provided by engineer. */ "Error" = "Error"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "Error updating your profile"; @@ -850,6 +889,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"; @@ -890,7 +932,7 @@ "Filter" = "Filter"; /* No comment provided by engineer. */ -"Filter Transactions" = "Filter Transactions"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "Filtered by"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "Filters"; -/* No comment provided by engineer. */ -"Find a merchant." = "Find a merchant."; - /* No comment provided by engineer. */ "Find a user on the Dash Network" = "Find a user on the Dash Network"; /* No comment provided by engineer. */ -"Find merchants that accept DASH" = "Find merchants that accept DASH"; +"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 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "First minimum deposit"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "Fixed denominated amounts"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "Flexible amounts"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "Found potential missing words:\n%@"; +/* DashSpend confirmation */ +"From" = "From"; + /* from CrowdNode */ "from CrowdNode" = "from CrowdNode"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "Gift Card"; +/* No comment provided by engineer. */ +"Gift card" = "Gift card"; + +/* 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"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "Gift card types"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "Go to CrowdNode website"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "How to confirm your API Dash address"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "How to Use a Gift Card"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution Node ID Keys"; @@ -1060,6 +1126,9 @@ /* No comment provided by engineer. */ "I accept" = "I accept"; +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "I accept DashSpend terms and conditions"; + /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "我同意如果我丟失恢復密語,我會丟失我的達世幣"; @@ -1135,6 +1204,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"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "Invalid amount"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "Invalid Dash address"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "Invalid QR Code"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "Invitation"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "Invitation Created Successfully"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "Invitation Fee"; /* No comment provided by engineer. */ "Invitation used by" = "Invitation used by"; @@ -1255,6 +1336,9 @@ /* CoinJoin */ "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; + /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "Last server update"; -/* No comment provided by engineer. */ -"Learn More" = "Learn More"; - /* Info Screen */ "Learn More..." = "Learn More..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "Locked"; +/* Log in */ +"Log in" = "Log in"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "Log in to CrowdNode"; +/* DashSpend */ +"Log in to your account" = "Log in to your account"; + +/* Log out button */ +"Log Out" = "Log Out"; + /* No comment provided by engineer. */ "Log out from Uphold" = "Log out from Uphold"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "Login with Face ID"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "Max"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "Maximum 75 characters"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "Merchant search works better with Location Services turned on."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "Network"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "Network fee"; @@ -1559,9 +1667,6 @@ /* No comment provided by engineer. */ "Node IP" = "Node IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "None"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "Not a valid URL"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "Not all of the stores accept DASH directly, but you can buy a gift card with your Dash."; - /* Fiat amount */ "Not available" = "Not available"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "Old to new"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "Order Preview"; +/* DashSpend */ +"Original purchase" = "Original purchase"; + /* No comment provided by engineer. */ "Owner Address" = "Owner Address"; /* No comment provided by engineer. */ "Owner Keys" = "Owner Keys"; +/* DashSpend */ +"Password" = "Password"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "Pay with Ease"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "Pay with the DASH Wallet."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "Paying"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "Paying..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "Payment method"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "Payment Type"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "請將手機放在NFC設備附近。"; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "Please tap on the words from your recovery phrase in the right order"; @@ -1790,6 +1907,12 @@ /* 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"; + /* No comment provided by engineer. */ "Preview Invitation" = "Preview Invitation"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "Purchase"; +/* Alert title */ +"Purchase Failed" = "Purchase Failed"; + /* No comment provided by engineer. */ "Quick Receive" = "Quick Receive"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "Recovery phrase must have 12, 15, 18, 21 or 24 words"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "Redeem your gift card online within seconds or at the cashier."; - /* Button title, Register (username) */ "Register" = "Register"; @@ -1922,6 +2045,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"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "Reward"; -/* No comment provided by engineer. */ -"Rewards" = "Rewards"; - /* No comment provided by engineer. */ "Save" = "Save"; +/* DashSpend */ +"Save %.2f%%" = "Save %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "Save Changes"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "Search results for \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "Searching for username %@ on the Dash Network"; @@ -2039,6 +2168,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"; @@ -2051,6 +2183,9 @@ /* Buy Sell Dash */ "Select a service" = "Select a service"; +/* DashSpend denomination selection */ +"Select amount" = "Select amount"; + /* Block explorer picker Block explorer selection title */ "Select block explorer" = "Select block explorer"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "Select the coin"; +/* No comment provided by engineer. */ +"Self-checkout" = "Self-checkout"; + /* Sell */ "Sell" = "Sell"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "Sent to"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "Set a trusted node"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "Show Recovery Phrase"; +/* Alert title */ +"Sign in required" = "Sign in required"; + /* CrowdNode */ "Sign the message" = "Sign the message"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "Sort Contacts"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "Sorted by distance"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "Sync Failed"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "Sync in progress… Results may not be complete."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "Sync Now"; @@ -2279,7 +2429,13 @@ "Tax Category" = "Tax Category"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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."; @@ -2308,6 +2464,9 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "The image you select will be uploaded to Imgur anonymously."; @@ -2317,11 +2476,8 @@ /* Coinbase */ "The minimum amount you can send is %@" = "The minimum amount you can send is %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "This extra step shows it’s really you trying to make a transaction."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "This merchant sells gift cards at fixed prices"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "This PIN will be required to unlock your app every time when you use it."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "to"; +/* DashSpend confirmation */ +"To" = "To"; + /* Coinbase */ "to Dash Wallet on this device" = "to Dash Wallet on this device"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "To start staking, create an account on CrowdNode or connect to an existing one."; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "指紋辨識解鎖的限制"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "Transaction History"; @@ -2637,6 +2808,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"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "We couldn’t withdraw from your CrowdNode account."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "We have 2 types of merchants"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "We Upgraded"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "Would you like to accept the invitation?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "Would you like to make a deposit for your purchase using a linked bank account?"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "You can always delete the image uploaded, as long as you have access to this wallet."; @@ -2803,6 +2977,9 @@ /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "You can enter your key in any of the following formats: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "You can see detailed information about your deposits, withdrawals and reward earnings."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "You cannot claim this invite since you already have a Dash username"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "You do not have any contacts at the moment"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "You do not have sufficient funds to complete this transaction"; + /* Coinbase */ "You don’t have enough balance" = "You don’t have enough balance"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "You need to wait 5 minutes before initiating another withdrawal"; /* CrowdNode */ "You only need %@ to join the pool." = "You only need %@ to join the pool."; +/* DashSpend confirmation */ +"You pay" = "You pay"; + /* Coinbase */ "You receive" = "You receive"; @@ -2944,6 +3130,9 @@ /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "Your email is only used to send a one-time password."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "Your invitation from %@ has been already claimed"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "Your request was cancelled"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "Your transaction was sent and the amount should appear in your wallet in a few minutes."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "Your username %@ has been successfully created on the Dash Network"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/zh.lproj/Localizable.strings b/DashWallet/zh.lproj/Localizable.strings index a86d3bc89..98768d536 100644 --- a/DashWallet/zh.lproj/Localizable.strings +++ b/DashWallet/zh.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ 不被允许访问指纹识别"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu 联系人/ %3$lu 个人资料更新"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "由于您的钱包存储了多个投票私钥, 您可以进行多次 %d 投票"; /* Voting */ "%ld duplicates" = "%ld 重复项"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "同意"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "接受使用条款"; /* CrowdNode */ "Accepting terms of use…" = "接受使用条款..."; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "直接接受DASH"; - /* CrowdNode */ "Account Recovery" = "账号恢复"; @@ -152,7 +155,7 @@ "Advanced" = "进阶"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "高等隐私级别需要稳定的网络连接"; /* No comment provided by engineer. */ "Advanced Security" = "高级安全"; @@ -167,7 +170,7 @@ "Agree" = "同意"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "前面"; /* No comment provided by engineer. */ "All" = "所有"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "发送数额"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "所有设备上的直观熟悉体验"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "和"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "应用程序 %@ 想要获取您的公钥. 它可以被用作查看您的钱包记录, 但无法用来移动您钱包中的Dash."; +/* No comment provided by engineer. */ +"Apply" = "应用"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "您确定要取消此订单吗?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "由于大多数人手中没有 1000个 Dash, CrowdNode提供了一项服务, 他们通过汇集成员的存款来帮助成员获得主节点的收益."; +/* DashSpend */ +"at" = "在"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "开启位置服务能获得更好的ATM搜索效果"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "身份验证不可用"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "已授权"; @@ -301,20 +316,20 @@ /* 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主节点的一部分"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "后面"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "在 %1$ld 和 %2$ld 个字符之间"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "3-23个字符之间"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "在 Dash钱包与 Coinbase之间"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "在Dash钱包和您的Coinbase账户之间"; /* Voting */ -"Block" = "Block"; +"Block" = "区块"; /* No comment provided by engineer. */ "block #%d of %d" = "%2$d中#%1$d的区块"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "购买礼品卡"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "使用Dash购买礼品卡."; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "购买并以其他加密货币兑换Dash"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "购买积分"; /* No comment provided by engineer. */ "Buy Dash" = "购买Dash"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "购买Dash · 无需账户"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "使用Dash购买礼品卡"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "取消此交易无法撤销这笔交易订单. 您的Coinbase账户不久会将收到Dash."; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "卡密码"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "更改"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "改变到常规"; +/* No comment provided by engineer. */ +"Check current balance" = "查看当前余额"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "检查日期和时间设定"; /* No comment provided by engineer. */ "Check your connection" = "检查您的连接"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "选择您的"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "CoinJoin 抵押输入"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin 创建面额"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "CoinJoin 混币"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "CoinJoin 混币费用"; /* No comment provided by engineer. */ "Confirm" = "确认"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "确认 (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "确认PIN"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "联系 Coinbase客服"; +/* DashSpend */ +"Contact CTX Support" = "联系CTX客服"; + /* No comment provided by engineer. */ "Contact Request Pending" = "朋友申请等待中"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "通讯录"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "继续"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "仍然继续"; /* Coinbase Entry Point */ "Convert Crypto" = "兑换加密货币"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "创建账户"; +/* Create DashSpend account */ +"Create account" = "创建账户"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "创建一个线上CrowdNode账户"; /* No comment provided by engineer. */ "Create invitation" = "创建邀请"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "创建线上账户"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "创建您的用户名"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "创建您的用户名, 搜索朋友和家人的用户名并添加到您的通讯录中"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "CrowdNode 提款限额"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · 账户"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ Dash钱包"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "此设备上Dash钱包中为您的CrowdNode账户指定Dash地址"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "Dash余额"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Coinbase上的Dash余额"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "Dash用户名"; +/* DashSpend confirmation */ +"Dash Wallet" = "Dash 钱包"; + /* Buy Dash */ "Dash Wallet on this device" = "此设备的 Dash钱包"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "默认货币, 快捷方式, 关于..."; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "默认过滤器设置"; /* Location Service Status */ "Denied" = "拒绝"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "连接断开"; +/* DashSpend confirmation */ +"Discount" = "折扣"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "忽略"; /* No comment provided by engineer. */ "Display Name" = "显示名称"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "例 johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "每个邀请都将获得该金额的资助, 以便收款人可以在Dash网络上快速创建他们的用户名"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "先前的"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "输入助记词"; +/* Enter verification code */ +"Enter verification code" = "输入验证码"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "下方输入您的2次验证码"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "错误"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "更新您个人资料时出错"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "错误 ·"; /* No comment provided by engineer. */ "Exit" = "退出"; @@ -842,7 +881,7 @@ "Export all transactions" = "导出所有交易"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "导出 CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "扩展公钥"; @@ -850,6 +889,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" = "无法启动身份验证会话"; @@ -890,7 +932,7 @@ "Filter" = "过滤"; /* No comment provided by engineer. */ -"Filter Transactions" = "过滤交易"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "筛选条件"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "过滤器"; -/* No comment provided by engineer. */ -"Find a merchant." = "查找商户."; - /* No comment provided by engineer. */ "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 %@" = "首次存款应超过 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "首次最低存款"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "固定面额"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "可调面额"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "发现潜在的缺失词:\n%@"; +/* DashSpend confirmation */ +"From" = "来自"; + /* from CrowdNode */ "from CrowdNode" = "来自CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "从您的 Coinbase 账户"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "充分混币"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "仅需 0.5 Dash的存款即可从Dash主节点中获得奖励."; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "礼品卡"; +/* No comment provided by engineer. */ +"Gift card" = "礼品卡"; + +/* 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" = "礼品卡总计"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "礼品卡类型"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "访问CrowdNode网站"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "这是在此设备上的 Dash钱包中为您的 CrowdNode账户指定的 Dash地址"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "隐藏"; /* adjective, security level */ "High" = "高"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "如何确认您的API Dash地址"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "如何使用礼品卡"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution 节点 ID 私钥"; @@ -1058,7 +1124,10 @@ "I Accept" = "我同意"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "我同意"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "我接受 DashSpend 条款和条件"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "我同意如果我丢失助记词, 我会丢失我的Dash"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "正在进行..."; +/* No comment provided by engineer. */ +"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" = "收入"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "资金不足"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "混币资金不足. 等待CoinJoin混币完成或在设定中停用此功能来完成此交易."; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "钱包余额不足"; @@ -1160,7 +1235,7 @@ "Intermediate" = "常规"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "中等隐私级别需要稳定的网络连接"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "内部转账"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "无效数额"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "无效的Dash地址"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "无效二维码"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "邀请"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "成功创建邀请"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "邀请费用"; /* No comment provided by engineer. */ "Invitation used by" = "邀请已用于"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "将 Dash从 Coinbase转账到此设备的 Dash钱包最多可能需要10分钟."; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "推荐使用Wi-Fi网络, 以避免产生额外的混币费用"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "具有任何水平技术专长的进阶用户都很难决定您的交易历史记录"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "最后一次服务器更新"; -/* No comment provided by engineer. */ -"Learn More" = "了解更多"; - /* Info Screen */ "Learn More..." = "了解更多..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "已锁定"; +/* Log in */ +"Log in" = "登录"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "登录到CrowdNode"; +/* DashSpend */ +"Log in to your account" = "登录您的账户"; + +/* Log out button */ +"Log Out" = "退出"; + /* No comment provided by engineer. */ "Log out from Uphold" = "从Uphold退出"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "以脸部识别登入"; @@ -1389,10 +1488,10 @@ "Low to high" = "低到高"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "主网"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "在知名社交媒体或信息平台使用上述文本发布一个帖子以证明您是所申请用户名的原始持有者, 并将链接粘贴在下方"; /* No comment provided by engineer. */ "Manage GPS Permission" = "管理 GPS 权限"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "最大"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "最大 75 个字符"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "开启位置服务能获得更好的商户搜索效果."; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "已混币资金余额"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "混币"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "仅可在应用程序打开的情况下进行混币"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "混币暂停 ·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "混币交易"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "通过混合您的Dash将使您的交易更具隐私性"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "混币中 ·"; /* No comment provided by engineer. */ "More" = "更多"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "网络"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "网络手续费"; @@ -1554,14 +1662,11 @@ "No Results Found" = "未找到结果"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "没有剩余投票"; /* No comment provided by engineer. */ "Node IP" = "节点 IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "无"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "不是一个有效链接"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "并非所有商店都直接接受Dash支付, 但您可以使用Dash购买礼品卡."; - /* Fiat amount */ "Not available" = "不可用"; @@ -1587,7 +1689,7 @@ "Not Determined" = "尚未确定"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "尚未开始"; /* No comment provided by engineer. */ "Not yet used" = "尚未使用"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "旧到新"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "一旦 %@ 通过了您的朋友申请, 您就可以使用用户名直接付款"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "还剩一票"; /* Online */ "Online" = "线上"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "订单预览"; +/* DashSpend */ +"Original purchase" = "原始购买"; + /* No comment provided by engineer. */ "Owner Address" = "所有者地址"; /* No comment provided by engineer. */ "Owner Keys" = "所有者私钥"; +/* DashSpend */ +"Password" = "密码"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "轻松付款"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "使用Dash钱包付款."; - /* 1 out of 4 in the Paying Animation */ "Paying" = "付款中"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "付款中..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "付款方式"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "付款类型"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "请将您的手机靠近NFC设备."; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "请以正确顺序输入您的助记词"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "请将其写下来"; +/* No comment provided by engineer. */ +"Powered by" = "提供方"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "预览链接"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "购买"; +/* Alert title */ +"Purchase Failed" = "购买失败"; + /* No comment provided by engineer. */ "Quick Receive" = "快速接收"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "助记词必须包括 12, 15, 18, 21 或24个词"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "在线上或收银台几秒内兑换您的礼品卡."; - /* Button title, Register (username) */ "Register" = "注册"; @@ -1922,6 +2045,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" = "申请的细节"; @@ -1929,10 +2055,10 @@ "Request your username" = "申请您的用户名"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "请求的用户名已经被屏蔽"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "请求的用户名已给与其他人"; /* An action */ "Rescan" = "重新扫描"; @@ -1956,7 +2082,7 @@ "Restricted" = "受限的"; /* Usernames */ -"Results" = "Results"; +"Results" = "结果"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "保留相互交易记录"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "奖励"; -/* No comment provided by engineer. */ -"Rewards" = "奖励"; - /* No comment provided by engineer. */ "Save" = "保存"; +/* DashSpend */ +"Save %.2f%%" = "保存 %.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "保存更改"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "屏幕截图可以被其他程序或者设备获得. 请生成一个新的助记词并妥善保管."; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "搜索"; /* No comment provided by engineer. */ "Search for a contact" = "搜索朋友"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "搜索结果为 \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "正在Dash网络上搜索用户名 %@"; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "选择服务"; +/* DashSpend denomination selection */ +"Select amount" = "选择面额"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "选择区块浏览器"; /* No comment provided by engineer. */ "Select from Gallery" = "从图库中选择"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "选择币种"; +/* No comment provided by engineer. */ +"Self-checkout" = "自助结账"; + /* Sell */ "Sell" = "出售"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "发送至"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "设置可信节点"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "显示助记词"; +/* Alert title */ +"Sign in required" = "需要登录"; + /* CrowdNode */ "Sign the message" = "签名信息"; @@ -2195,7 +2339,7 @@ "Skip" = "跳过"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "一些用户名会被禁止"; /* No comment provided by engineer. */ "Something went wrong" = "发生了一些问题"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "排序联系人"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "以距离排序"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "停止混币"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "提交"; /* No comment provided by engineer. */ "Swept!" = "已清除!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "同步失败"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "同步中… 结果可能不完整."; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "立刻同步"; @@ -2279,13 +2429,19 @@ "Tax Category" = "税务种类"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "Test Dash没有任何实际价值, 但您可以与其他 DashPay 测试用户进行收发."; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash is free and can be obtained from what is called a faucet." = "测试用的 Dash 是免费的, 可以通过所谓的「水龙头」获得."; /* 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."; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "测试网"; /* No comment provided by engineer. */ "The chain is syncing…" = "区块链正在同步..."; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "您选择的图片将匿名上传到 Imgur."; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "您发送的链接将仅对网络所有者可见"; /* Coinbase */ "The minimum amount you can send is %@" = "您可以发送的最小额度是%@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "此额外步骤用来证明真的是您在尝试进行交易."; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "此商户以固定价格出售礼品卡"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "每次使用时都需要输入PIN以解锁您的app."; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "到"; +/* DashSpend confirmation */ +"To" = "到"; + /* Coinbase */ "to Dash Wallet on this device" = "到此设备的Dash钱包"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "为了防止其他人看到您的付款对象, 建议您在创建用户名之前对您的 Dash 进行混币."; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "开始质押前, 需要创建一个CrowdNode账户或连接到现有账户."; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "在此设备上的Dash钱包上为您CrowdNode账户指定的Dash地址"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "今天"; /* No comment provided by engineer. */ "Tools" = "工具"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "充值您的积分余额, 以继续更改个人资料和添加联系人"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "触控ID限制"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "交易记录"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "打开设备密码"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "已关闭"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "打开这项功能将导致更高的电池使用率"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "无法上传您的图片. 请再试一次."; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "解禁"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "用户名可用"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "用户名可用"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "查看助记词"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "投给所有"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "仅在一些情况下需要投票"; /* No comment provided by engineer. */ "Voting Keys" = "投票者密钥"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "我们无法从您的CrowdNode提款."; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "我们有2种类型的商户"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "我们检测到Dash钱包在转移过程中崩溃了. 重新扫描区块链将解决此问题, 或者您可以再试一次. 重新扫描最好在wifi环境下, 并需要半小时左右. 当同步完成后, 您的资金便可使用."; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "我们升级了"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "当交易被确认后, 另一个钱包将会分文不值, 并且出于安全原因不应当再被使用."; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "当您关闭应用程序或锁定屏幕时, 混币过程将停止. 当您重新打开应用程序时, 它将恢复."; /* No comment provided by engineer. */ "Where to Spend" = "在哪里消费"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "您愿意接受这个邀请吗?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "您是否想使用关联的银行账户进行存款已完成您的购买?"; @@ -2774,7 +2945,7 @@ "Yes" = "是的"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "昨天"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "您通过了来自 %@ 的朋友申请"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "您即将从此设备清除本钱包. 本钱包相关联的资金只能通过该钱包对应的助记词找回."; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "只要您有权访问此钱包, 您就可以随时删除上传的图片."; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "您可以更改向您支付奖励收入的方式 / 时间."; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "您可以继续使用 DashPay 进行支付, 但在充值积分余额之前您无法更新个人资料或添加更多联系人"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "您可以以下面任何格式来输入您的密钥: WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "您可以查看有关您的存款, 提款和奖励收入的详细信息."; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "由于您已经有了 Dash用户名, 因此无法认领此邀请"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "您目前没有任何联系人"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "您没有足够的资金来完成此次交易"; + /* Coinbase */ "You don’t have enough balance" = "您没有足够的余额"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "您需要等待5分钟才能再次发起提现"; /* CrowdNode */ "You only need %@ to join the pool." = "您至少需要%@来加入资金池."; +/* DashSpend confirmation */ +"You pay" = "您支付"; + /* Coinbase */ "You receive" = "您收到"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "您将自动收到小额付款, 默认下它们将被再次投资, 但是设置自动提款以接收定期付款也很容易."; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "您的积分余额已完全耗尽"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "您的积分余额不足"; /* CrowdNode */ "Your CrowdNode account is creating…" = "正在创建您的CrowdNode账户..."; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "您的CrowdNode账户已设置好并可以使用了!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "您的CrowdNode账户是以这些交易创建的."; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "您的CrowdNode地址已确认."; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "您向CrowdNode的存款已收到."; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "您的设备时间为 %1$@ %2$d 秒. 由于此差异, 您无法使用 CoinJoin.\n\n您设备上的时间设置需要变更为“自动设定时间”才能使用CoinJoin."; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "您的设备时间延迟了 %d 分钟. 由于此问题, 您可能无法发送或接收Dash.\n您应该检查并在必要时更正您的日期, 时间和时区设定."; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "您的设备时间偏差超过 5 秒. 由于此差异, 您无法使用CoinJoin.\n\n使用 CoinJoin 之前, 需要将设备上的时间设定更改为“自动设定时间”."; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "您的电子邮箱不会存储在 DashPay钱包或任何服务器上. 它用于获取您的 Gravatar账户详细信息, 之后会被丢弃."; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "您的电子邮箱仅用于发送一次性密码."; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "您来自%@的邀请已被认领"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "您的申请已被取消"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "您的交易已被发送, 金额将几分钟内出现在您的钱包."; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "您的用户名 %@ 已经在Dash网络上成功创建"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/DashWallet/zh_TW.lproj/Localizable.strings b/DashWallet/zh_TW.lproj/Localizable.strings index 9a5d44cea..fe40ae8a6 100644 --- a/DashWallet/zh_TW.lproj/Localizable.strings +++ b/DashWallet/zh_TW.lproj/Localizable.strings @@ -23,10 +23,10 @@ "%@ is not allowed to access Touch ID" = "%@ 不允許訪問Touch ID"; /* Credits */ -"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu contacts / %3$lu profile updates"; +"%@ ~ %lu contacts / %lu profile updates" = "%1$@ ~ %2$lu 聯絡人/ %3$lu 個人資料更新"; /* Voting - multiple keys warning */ -"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d votes will be cast as you have multiple voting keys stored in the wallet"; +"%d votes will be cast as you have multiple voting keys stored in the wallet" = "%d 由於您的錢包中儲存了多個投票密鑰,因此將進行投票"; /* Voting */ "%ld duplicates" = "%ld 重複項目"; @@ -115,15 +115,18 @@ /* No comment provided by engineer. */ "Accept" = "接受"; +/* Explore */ +"Accept Dash directly" = "Accept Dash directly"; + +/* DashSpend */ +"Accept terms and\nconditions" = "Accept terms and\nconditions"; + /* CrowdNode */ "Accept Terms Of Use" = "接受使用條款"; /* CrowdNode */ "Accepting terms of use…" = "接受使用條款…"; -/* No comment provided by engineer. */ -"Accepts DASH directly" = "直接接受達世幣"; - /* CrowdNode */ "Account Recovery" = "恢復帳戶"; @@ -152,7 +155,7 @@ "Advanced" = "進階"; /* CoinJoin */ -"Advanced privacy level requires a reliable internet connection" = "Advanced privacy level requires a reliable internet connection"; +"Advanced privacy level requires a reliable internet connection" = "高級隱私等級需要可靠的網路連接"; /* No comment provided by engineer. */ "Advanced Security" = "進階的安全性"; @@ -167,7 +170,7 @@ "Agree" = "同意"; /* TimeSkew */ -"ahead" = "ahead"; +"ahead" = "前面"; /* No comment provided by engineer. */ "All" = "所有"; @@ -202,11 +205,14 @@ /* No comment provided by engineer. */ "Amount Sent" = "發送金額"; +/* An error occurred */ +"An error occurred" = "An error occurred"; + /* No comment provided by engineer. */ "An intuitive and familiar experience across all your devices" = "跨所有設備的直觀熟悉的體驗"; -/* Invites */ -"an invitation" = "an invitation"; +/* CTXSpend error */ +"An unknown error occurred. Please try again later." = "An unknown error occurred. Please try again later."; /* CrowdNode */ "and" = "和"; @@ -229,6 +235,9 @@ /* No comment provided by engineer. */ "Application %@ would like to receive your Master Public Key. This can be used to keep track of your wallet, this can not be used to move your Dash." = "應用程式 %@ 想要取得您的主公鑰。 這可以用來追踪你的錢包結餘,但並不能動用你的達世幣。"; +/* No comment provided by engineer. */ +"Apply" = "應用"; + /* Coinbase/Buy Dash/Cancel Order */ "Are you sure you want to cancel this order?" = "您確定要取消此訂單嗎?"; @@ -250,6 +259,9 @@ /* CrowdNode */ "As most people do not have exactly 1000 Dash at hand, Crowdnode has made a service where, by pooling deposits from members, they can achieve the benefits of owning a Masternode." = "由於大多數人手頭上沒有 1000 個達世幣,Crowdnode 提供了一項服務,透過匯集會員的存款,他們可以獲得擁有主節點的好處。"; +/* DashSpend */ +"at" = "在"; + /* No comment provided by engineer. */ "ATM search works better with Location Services turned on." = "ATM 搜索在打開定位服務的情況下效果更好"; @@ -259,6 +271,9 @@ /* No comment provided by engineer. */ "Authentication is unvailable" = "身份驗證不可用"; +/* Authorization error message */ +"Authorization error. Please try logging in again." = "Authorization error. Please try logging in again."; + /* Location Service Status */ "Authorized" = "已獲授權"; @@ -301,20 +316,20 @@ /* Coinbase/Payment Methods */ "Bank Wire" = "電匯"; +/* No comment provided by engineer. */ +"Barcode placeholder" = "Barcode placeholder"; + /* CrowdNode */ "Become part of a Dash Masternode with CrowdNode" = "通過 CrowdNode 成為達世幣主節點的一部分"; /* TimeSkew */ -"behind" = "behind"; - -/* No comment provided by engineer. */ -"Beta" = "Beta"; +"behind" = "在後面\nZài hòumiàn"; /* Validation rule: Between 3 and 24 characters */ "Between %ld and %ld characters" = "在 %1$ld 和 %2$ld 個字符之間"; /* Usernames */ -"Between 3 and 23 characters" = "Between 3 and 23 characters"; +"Between 3 and 23 characters" = "名稱介乎3 到 23 個字元之間"; /* Coinbase Entry Point */ "Between Dash Wallet and Coinbase" = "在達世幣錢包和 Coinbase 之間。"; @@ -323,7 +338,7 @@ "Between Dash Wallet and your Coinbase account" = "在達世幣錢包和您的 Coinbase 帳戶之間"; /* Voting */ -"Block" = "Block"; +"Block" = "區塊"; /* No comment provided by engineer. */ "block #%d of %d" = "%2$d 中 #%1$d 的區塊"; @@ -347,14 +362,11 @@ /* Buy a Gift Card */ "Buy a Gift Card" = "購買禮品卡"; -/* No comment provided by engineer. */ -"Buy a gift card with Dash." = "使用達世幣購買禮品卡。"; - /* Dash Service Overview */ "Buy and convert Dash with another crypto" = "用另一種加密貨幣購買和兌換達世幣"; /* No comment provided by engineer. */ -"Buy credits" = "Buy credits"; +"Buy credits" = "購買積分"; /* No comment provided by engineer. */ "Buy Dash" = "購買達世幣"; @@ -365,6 +377,9 @@ /* Dash Portal */ "Buy Dash · No account needed" = "購買達世幣 · 無需賬戶"; +/* DashSpend */ +"Buy gift card" = "Buy gift card"; + /* No comment provided by engineer. */ "Buy gift cards with your Dash" = "使用達世幣購買禮品卡"; @@ -395,6 +410,12 @@ /* Coinbase/Buy Dash/Cancel Order */ "Canceling this transaction does not cancel the trade order. You will receive DASH on your Coinbase account shortly." = "取消此交易不會取消交易訂單。您很快就會在您的 Coinbase 帳戶中收到 DASH。"; +/* DashSpend */ +"Card number" = "Card number"; + +/* No comment provided by engineer. */ +"Card PIN" = "卡密碼"; + /* A verb. Action button title for an alert 'Change payment amount?' */ "Change" = "變更"; @@ -410,12 +431,18 @@ /* CoinJoin */ "Change to Intermediate" = "更改為中階"; +/* No comment provided by engineer. */ +"Check current balance" = "檢查當前餘額"; + /* TimeSkew */ -"Check date & time settings" = "Check date & time settings"; +"Check date & time settings" = "檢查日期和時間設定"; /* No comment provided by engineer. */ "Check your connection" = "Check your connection"; +/* DashSpend */ +"Check your email and enter the verification code." = "Check your email and enter the verification code."; + /* Choose your Dash username */ "Choose your" = "選擇你的"; @@ -453,19 +480,16 @@ "CoinJoin" = "CoinJoin"; /* CoinJoin */ -"CoinJoin Collateral Inputs" = "CoinJoin Collateral Inputs"; - -/* CoinJoin */ -"CoinJoin Create Denominations" = "CoinJoin Create Denominations"; +"CoinJoin Collateral Inputs" = "CoinJoin 抵押品輸入"; /* CoinJoin */ -"CoinJoin Mixing" = "CoinJoin Mixing"; +"CoinJoin Create Denominations" = "CoinJoin 建立面額"; /* CoinJoin */ -"CoinJoin Mixing Fee" = "CoinJoin Mixing Fee"; +"CoinJoin Mixing" = "CoinJoin 混合"; /* CoinJoin */ -"CoinJoin Send" = "CoinJoin Send"; +"CoinJoin Mixing Fee" = "CoinJoin 混合費用"; /* No comment provided by engineer. */ "Confirm" = "確認:"; @@ -473,12 +497,6 @@ /* Coinbase/Buy Dash/Confirm Order */ "Confirm (%d%@)" = "確認 (%1$d%2$@)"; -/* Invites */ -"Confirm and pay" = "Confirm and pay"; - -/* Invites */ -"Confirm invitation" = "Confirm invitation"; - /* No comment provided by engineer. */ "Confirm PIN" = "確認密碼"; @@ -508,6 +526,9 @@ Coinbase Two Factor Auth */ "Contact Coinbase Support" = "聯繫 Coinbase 支援服務"; +/* DashSpend */ +"Contact CTX Support" = "聯繫CTX客戶服務"; + /* No comment provided by engineer. */ "Contact Request Pending" = "有聯繫請求等待批准"; @@ -520,14 +541,11 @@ /* No comment provided by engineer. */ "Contacts" = "通訊錄"; -/* Usernames */ -"Contested" = "Contested"; - /* No comment provided by engineer. */ "Continue" = "繼續"; /* No comment provided by engineer. */ -"Continue Anyway" = "Continue Anyway"; +"Continue Anyway" = "無論如何都要繼續"; /* Coinbase Entry Point */ "Convert Crypto" = "兌換加密貨幣"; @@ -583,18 +601,27 @@ /* CrowdNode */ "Create Account" = "創建帳號"; +/* Create DashSpend account */ +"Create account" = "創建賬戶"; + +/* DashSpend account title */ +"Create an account or log into an existing one" = "Create an account or log into an existing one"; + /* CrowdNode */ "Create an online CrowdNode account" = "創建一個在線 CrowdNode 帳戶"; /* No comment provided by engineer. */ "Create invitation" = "創建邀請"; +/* Create new account */ +"Create new account" = "Create new account"; + /* CrowdNode CrowdNode Portal */ "Create Online Account" = "創建在線帳戶"; /* Usernames */ -"Create your username" = "Create your username"; +"Create your username" = "建立您的用戶名"; /* No comment provided by engineer. */ "Create your Username, find friends & family with their usernames and add them to your contacts" = "創建您的用戶名,使用朋友和家人的用戶名來搜索並將他們添加到您的聯絡人列表中"; @@ -615,7 +642,7 @@ "CrowdNode withdrawal limits" = "CrowdNode 提款限額"; /* No comment provided by engineer. */ -"CrowdNode · Account" = "CrowdNode · Account"; +"CrowdNode · Account" = "CrowdNode · 帳戶"; /* CrowdNode Portal */ "CrowdNode ➝ DashWallet" = "CrowdNode ➝ 達世幣錢包"; @@ -648,7 +675,7 @@ "Dash address designated for your CrowdNode account in the Dash Wallet on this device " = "此設備上達世幣錢包中為您的 CrowdNode 帳戶指定的達世幣位址"; /* No comment provided by engineer. */ -"Dash balance" = "Dash balance"; +"Dash balance" = "達世幣結餘"; /* Coinbase Entry Point */ "Dash balance on Coinbase" = "Coinbase 上的達世幣結餘"; @@ -662,6 +689,9 @@ /* No comment provided by engineer. */ "Dash username" = "達世幣用戶名"; +/* DashSpend confirmation */ +"Dash Wallet" = "達世幣錢包"; + /* Buy Dash */ "Dash Wallet on this device" = "此設備上的達世幣錢包"; @@ -687,7 +717,7 @@ "Default currency, shortcuts, about…" = "預設貨幣,捷徑,關於…"; /* Voting */ -"Default filter setting" = "Default filter setting"; +"Default filter setting" = "預設過濾器設定"; /* Location Service Status */ "Denied" = "拒絕"; @@ -727,8 +757,11 @@ Coinbase Entry Point */ "Disconnected" = "斷開連接"; +/* DashSpend confirmation */ +"Discount" = "折扣"; + /* No comment provided by engineer. */ -"Dismiss" = "Dismiss"; +"Dismiss" = "取消"; /* No comment provided by engineer. */ "Display Name" = "顯示名稱"; @@ -763,8 +796,8 @@ /* CrowdNode */ "e.g. johndoe@mail.com" = "例如 johndoe@mail.com"; -/* Invites */ -"Each invitation will be funded so that the receiver can quickly create their username on the Dash Network." = "Each invitation will be funded so that the receiver can quickly create their username on the Dash Network."; +/* No comment provided by engineer. */ +"Each invitation will be funded with this amount so that the receiver can quickly create their username on the Dash Network" = "每個邀請都將獲得該金額的資助,以便接收者可以在達世幣網絡上快速創建他們的用戶名"; /* (List of notifications happened) Earlier (some time ago) */ "Earlier" = "之前"; @@ -808,6 +841,9 @@ /* No comment provided by engineer. */ "Enter Recovery Phrase" = "輸入恢復詞組"; +/* Enter verification code */ +"Enter verification code" = "輸入驗證碼"; + /* No comment provided by engineer. */ "Enter your 2FA code below" = "在下面輸入您的 2FA 代碼"; @@ -820,11 +856,14 @@ /* No comment provided by engineer. */ "Error" = "錯誤"; +/* CTXSpend error */ +"Error processing server response. Please try again later." = "Error processing server response. Please try again later."; + /* No comment provided by engineer. */ "Error updating your profile" = "更新您的個人資料時出錯"; /* CoinJoin */ -"Error ·" = "Error ·"; +"Error ·" = "錯誤 ·"; /* No comment provided by engineer. */ "Exit" = "退出"; @@ -842,7 +881,7 @@ "Export all transactions" = "匯出所有交易"; /* No comment provided by engineer. */ -"Export CSV" = "Export CSV"; +"Export CSV" = "匯出 CSV"; /* No comment provided by engineer. */ "Extended Public Keys" = "擴展公鑰"; @@ -850,6 +889,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" = "無法啟動身份驗證會話"; @@ -890,7 +932,7 @@ "Filter" = "篩選"; /* No comment provided by engineer. */ -"Filter Transactions" = "過濾交易"; +"Filter transactions" = "Filter transactions"; /* No comment provided by engineer. */ "Filtered by" = "過濾條件"; @@ -901,23 +943,20 @@ /* Explore Dash */ "Filters" = "過濾器"; -/* No comment provided by engineer. */ -"Find a merchant." = "尋找商家。"; - /* No comment provided by engineer. */ "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 %@" = "首次存款應超過 %@"; @@ -925,6 +964,12 @@ /* CrowdNode */ "First minimum deposit" = "首次最低存款"; +/* Explore Dash: Filters */ +"Fixed denominated amounts" = "固定金額"; + +/* Explore Dash: Filters */ +"Flexible amounts" = "彈性的金額"; + /* Usernames */ "For some reason, the request for the username '%@' has failed." = "For some reason, the request for the username '%@' has failed."; @@ -946,6 +991,9 @@ /* No comment provided by engineer. */ "Found potential missing words:\n%@" = "找到潛在的遺漏單詞:\n%@"; +/* DashSpend confirmation */ +"From" = "由"; + /* from CrowdNode */ "from CrowdNode" = "來自 CrowdNode"; @@ -962,7 +1010,7 @@ "from your Coinbase account" = "從你的 Coinbase 帳戶"; /* CoinJoin */ -"Fully mixed" = "Fully mixed"; +"Fully mixed" = "充分混合"; /* CrowdNode */ "Gain rewards from deposits in Dash Masternodes with as little as 0.5 Dash." = "只需 0.5 Dash,即可從達世幣主節點中的存款中獲得獎勵。"; @@ -997,6 +1045,24 @@ /* Explore Dash: Filters */ "Gift Card" = "禮物卡"; +/* No comment provided by engineer. */ +"Gift card" = "禮物卡"; + +/* 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" = "禮品卡總計"; + +/* Explore Dash/Merchants/Filters */ +"Gift card types" = "禮品卡類型"; + +/* DashSpend */ +"Gift card · %@" = "Gift card · %@"; + /* No comment provided by engineer. */ "Go to CrowdNode website" = "訪問 CrowdNode 網站"; @@ -1028,7 +1094,7 @@ "Here is a Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "這是在此設備上的達世幣錢包中為您的 CrowdNode 帳戶指定的達世幣位址。"; /* No comment provided by engineer. */ -"Hide" = "Hide"; +"Hide" = "隱藏"; /* adjective, security level */ "High" = "高"; @@ -1049,7 +1115,7 @@ "How to confirm your API Dash address" = "如何確認您的 API 達世幣位址"; /* No comment provided by engineer. */ -"How to Use a Gift Card" = "如何使用禮品卡"; +"How to use your gift card" = "How to use your gift card"; /* No comment provided by engineer. */ "HPMN Operator Keys" = "Evolution 節點 ID 金鑰"; @@ -1058,7 +1124,10 @@ "I Accept" = "我接受"; /* No comment provided by engineer. */ -"I accept" = "I accept"; +"I accept" = "我接受"; + +/* Accept terms checkbox */ +"I accept DashSpend terms and conditions" = "我接受 DashSpend 條款和條件"; /* No comment provided by engineer. */ "I accept that I will lose my coins if I no longer possess the recovery phrase" = "我同意如果我丟失恢復密語,我會丟失我的達世幣"; @@ -1135,6 +1204,12 @@ /* CrowdNode Portal */ "In process…" = "進行中…"; +/* No comment provided by engineer. */ +"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" = "收入"; @@ -1148,7 +1223,7 @@ "Insufficient funds" = "餘額不足"; /* Send screen */ -"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction."; +"Insufficient mixed funds. Wait for CoinJoin mixing to finish or disable this feature in the settings to complete this transaction." = "混合資金不足。等待CoinJoin混合完成或在設定中停用此功能來完成此交易。"; /* No comment provided by engineer. */ "Insufficient Wallet Balance" = "錢包餘額不足"; @@ -1160,7 +1235,7 @@ "Intermediate" = "中間的"; /* CoinJoin */ -"Intermediate privacy level requires a reliable internet connection" = "Intermediate privacy level requires a reliable internet connection"; +"Intermediate privacy level requires a reliable internet connection" = "中級隱私等級需要可靠的網路連接"; /* Transaction within the wallet, transfer of own funds */ "Internal Transfer" = "內部轉移"; @@ -1177,6 +1252,9 @@ /* Balance */ "Invalid amount" = "金額無效"; +/* CTXSpend error */ +"Invalid amount. Please check merchant limits." = "Invalid amount. Please check merchant limits."; + /* No comment provided by engineer. */ "Invalid Dash address" = "無效的達世幣位址"; @@ -1195,6 +1273,9 @@ /* No comment provided by engineer. */ "Invalid QR Code" = "無效的二維碼"; +/* CTXSpend error */ +"Invalid verification code. Please try again." = "Invalid verification code. Please try again."; + /* No comment provided by engineer. */ "Invitation" = "邀請"; @@ -1207,8 +1288,8 @@ /* No comment provided by engineer. */ "Invitation Created Successfully" = "創建邀請成功"; -/* Invites */ -"Invitation fee" = "Invitation fee"; +/* No comment provided by engineer. */ +"Invitation Fee" = "邀請費"; /* No comment provided by engineer. */ "Invitation used by" = "邀請己被使用"; @@ -1253,7 +1334,10 @@ "It could take up to 10 minutes to transfer Dash from Coinbase to Dash Wallet on this device" = "將達世幣從 Coinbase 轉帳到此設備上的達世幣錢包最多可能需要 10 分鐘"; /* CoinJoin */ -"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees"; +"It is recommended to be on a Wi-Fi network to avoid incurring additional mixing fees" = "建議使用 Wi-Fi 網路以避免產生額外的混合費用"; + +/* DashSpend */ +"It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash." = "It looks like you haven’t used DashSpend in a while. For security reasons, you’ve been logged out.\n\nPlease sign in again to continue exploring where to spend your Dash."; /* Coinbase */ "It would be very difficult for advanced users with any level of technical expertise to determine your transaction history" = "即使對於具有任何技術專業水平的高級用戶來說,要確定您的交易歷史記錄都是非常困難的"; @@ -1295,9 +1379,6 @@ /* Explore Dash */ "Last server update" = "上一次服務器更新"; -/* No comment provided by engineer. */ -"Learn More" = "了解更多"; - /* Info Screen */ "Learn More..." = "了解更多..."; @@ -1361,12 +1442,30 @@ /* No comment provided by engineer. */ "Locked" = "己鎖定"; +/* Log in */ +"Log in" = "登入"; + /* CrowdNode WebView */ "Log in to CrowdNode" = "登入到 CrowdNode"; +/* DashSpend */ +"Log in to your account" = "登錄到您的帳戶"; + +/* Log out button */ +"Log Out" = "登出"; + /* No comment provided by engineer. */ "Log out from Uphold" = "從Uphold登出"; +/* Logged in status */ +"Logged in" = "Logged in"; + +/* DashSpend */ +"Logged in as %@" = "Logged in as %@"; + +/* DashSpend */ +"Logged in to DashSpend account" = "Logged in to DashSpend account"; + /* No comment provided by engineer. */ "Login with Face ID" = "使用Face ID登錄"; @@ -1389,10 +1488,10 @@ "Low to high" = "從低到高"; /* No comment provided by engineer. */ -"Mainnet" = "Mainnet"; +"Mainnet" = "主網"; /* Usernames */ -"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow"; +"Make a post with the text above on a well known social media or messaging platform to verify that you are the original owner of the requested username and paste the link bellow" = "在知名社交媒體或訊息平台上發布包含上述文字的帖子,以驗證您是所請求用戶名的原始所有者,並貼上下面的鏈接"; /* No comment provided by engineer. */ "Manage GPS Permission" = "管理 GPS 權限"; @@ -1427,6 +1526,9 @@ /* Contracted variant of 'Maximum' word */ "Max" = "最大值"; +/* DashSpend */ +"Max: %@" = "Max: %@"; + /* Usernames */ "Maximum 75 characters" = "最多 75 個字符"; @@ -1442,6 +1544,9 @@ /* No comment provided by engineer. */ "Merchant search works better with Location Services turned on." = "開啟位置服務後,商家搜索效果會更好。"; +/* DashSpend */ +"Min: %@" = "Min: %@"; + /* CoinJoin */ "Mix coins" = "Mix coins"; @@ -1449,28 +1554,28 @@ "Mix your Dash Coins" = "Mix your Dash Coins"; /* No comment provided by engineer. */ -"Mixed balance" = "Mixed balance"; +"Mixed balance" = "已混合資金結餘"; /* CoinJoin */ -"Mixing" = "Mixing"; +"Mixing" = "混合"; /* CoinJoin */ "Mixing Finishing…" = "Mixing Finishing…"; /* CoinJoin */ -"Mixing is only possible with the app open" = "Mixing is only possible with the app open"; +"Mixing is only possible with the app open" = "僅可在應用程式開啟的情況下進行混合"; /* CoinJoin */ -"Mixing Paused ·" = "Mixing Paused ·"; +"Mixing Paused ·" = "混合暫停·"; /* CoinJoin */ -"Mixing Transactions" = "Mixing Transactions"; +"Mixing Transactions" = "混合交易"; /* CoinJoin */ "Mixing your Dash coins will make your transactions more private" = "混合您的達世幣將使您交易的私隱度更高"; /* CoinJoin */ -"Mixing ·" = "Mixing ·"; +"Mixing ·" = "混合·"; /* No comment provided by engineer. */ "More" = "更多"; @@ -1511,6 +1616,9 @@ /* No comment provided by engineer. */ "Network" = "網絡"; +/* CTXSpend error */ +"Network error. Please check your connection and try again." = "Network error. Please check your connection and try again."; + /* No comment provided by engineer. */ "Network fee" = "網絡費用"; @@ -1554,14 +1662,11 @@ "No Results Found" = "未找到結果"; /* Voting */ -"No votes left" = "No votes left"; +"No votes left" = "沒有剩餘選票"; /* No comment provided by engineer. */ "Node IP" = "節點IP"; -/* Usernames */ -"Non-contested" = "Non-contested"; - /* adjective, security level */ "None" = "沒有"; @@ -1577,9 +1682,6 @@ /* Usernames */ "Not a valid URL" = "不是有效的網址"; -/* No comment provided by engineer. */ -"Not all of the stores accept DASH directly, but you can buy a gift card with your Dash." = "並非所有商店都直接接受達世幣,但您可以使用達世幣購買禮品卡。"; - /* Fiat amount */ "Not available" = "無法使用"; @@ -1587,7 +1689,7 @@ "Not Determined" = "尚未決定"; /* CoinJoin */ -"Not started" = "Not started"; +"Not started" = "未開始"; /* No comment provided by engineer. */ "Not yet used" = "尚未使用"; @@ -1601,6 +1703,9 @@ /* No comment provided by engineer. */ "OK" = "好"; +/* No comment provided by engineer. */ +"Ok" = "Ok"; + /* Voting */ "Old to new" = "從舊到新"; @@ -1608,7 +1713,7 @@ "Once %@ accepts your request you can Pay Directly to Username" = "當 %@ 接受您的請求後,您就可以直接向用戶名付款"; /* Voting */ -"One vote left" = "One vote left"; +"One vote left" = "還剩一票"; /* Online */ "Online" = "在線的"; @@ -1637,12 +1742,18 @@ /* Coinbase/Buy Dash/Confirm Order */ "Order Preview" = "訂單預覽"; +/* DashSpend */ +"Original purchase" = "原先購買"; + /* No comment provided by engineer. */ "Owner Address" = "所有者位址"; /* No comment provided by engineer. */ "Owner Keys" = "擁有者公鑰"; +/* DashSpend */ +"Password" = "密碼"; + /* Usernames */ "Past link here" = "Past link here"; @@ -1673,9 +1784,6 @@ /* No comment provided by engineer. */ "Pay with Ease" = "輕鬆付款"; -/* No comment provided by engineer. */ -"Pay with the DASH Wallet." = "使用達世幣錢包付款。"; - /* 1 out of 4 in the Paying Animation */ "Paying" = "付款中"; @@ -1688,9 +1796,15 @@ /* 4 out of 4 in the Paying Animation */ "Paying..." = "付款中..."; +/* No comment provided by engineer. */ +"Payment failed" = "Payment failed"; + /* Coinbase/Buy Dash */ "Payment method" = "付款方式"; +/* CTXSpend error */ +"Payment processing error: %@" = "Payment processing error: %@"; + /* Explore Dash/Merchants/Filters */ "Payment Type" = "支付方式"; @@ -1763,6 +1877,9 @@ /* No comment provided by engineer. */ "Please place your phone near NFC device." = "請將手機放在NFC設備附近。"; +/* CTXSpend error */ +"Please sign in to your DashSpend account." = "Please sign in to your DashSpend account."; + /* No comment provided by engineer. */ "Please tap on the words from your recovery phrase in the right order" = "請以正確的順序點按您的恢復詞組中的單詞"; @@ -1790,6 +1907,12 @@ /* No comment provided by engineer. */ "Please write it down" = "請寫下來"; +/* No comment provided by engineer. */ +"Powered by" = "提供方"; + +/* No comment provided by engineer. */ +"Preview" = "Preview"; + /* No comment provided by engineer. */ "Preview Invitation" = "預覽邀請"; @@ -1838,6 +1961,9 @@ /* Coinbase/Buy Dash */ "Purchase" = "購買"; +/* Alert title */ +"Purchase Failed" = "購買失敗"; + /* No comment provided by engineer. */ "Quick Receive" = "快速接收"; @@ -1901,9 +2027,6 @@ /* No comment provided by engineer. */ "Recovery phrase must have 12, 15, 18, 21 or 24 words" = "恢復詞組必須包含 12, 15, 18, 21 或24 個字"; -/* No comment provided by engineer. */ -"Redeem your gift card online within seconds or at the cashier." = "在幾秒鐘內在線或在收銀台兌換您的禮品卡。"; - /* Button title, Register (username) */ "Register" = "注冊"; @@ -1922,6 +2045,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" = "索取詳情"; @@ -1929,10 +2055,10 @@ "Request your username" = "申请您的用戶名"; /* Usernames */ -"Requested username has been blocked" = "Requested username has been blocked"; +"Requested username has been blocked" = "請求的使用者名稱已被阻止"; /* Usernames */ -"Requested username has been given to someone else" = "Requested username has been given to someone else"; +"Requested username has been given to someone else" = "請求的用戶名已提供給其他人"; /* An action */ "Rescan" = "重新掃瞄"; @@ -1956,7 +2082,7 @@ "Restricted" = "受限制的"; /* Usernames */ -"Results" = "Results"; +"Results" = "結果"; /* emphasized text in: Add as your contact to Pay Directly to Username and Retain Mutual Transaction History */ "Retain Mutual Transaction History" = "保留相互交易記錄"; @@ -1973,12 +2099,12 @@ /* No comment provided by engineer. */ "Reward" = "報酬"; -/* No comment provided by engineer. */ -"Rewards" = "報酬"; - /* No comment provided by engineer. */ "Save" = "儲存"; +/* DashSpend */ +"Save %.2f%%" = "保存%.2f%%"; + /* No comment provided by engineer. */ "Save Changes" = "保存變更"; @@ -2010,7 +2136,7 @@ "Screenshots are visible to other apps and devices. Generate a new recovery phrase and keep it secret." = "屏幕截圖可以被其他程序或者設備獲得。請生成一個新的恢復詞組並妥善保管。"; /* No comment provided by engineer. */ -"Search" = "Search"; +"Search" = "搜索"; /* No comment provided by engineer. */ "Search for a contact" = "搜尋聯絡人"; @@ -2027,6 +2153,9 @@ /* Search results for \"John Doe\" */ "Search results for \"" = "搜尋結果 \""; +/* No comment provided by engineer. */ +"Search territories" = "Search territories"; + /* No comment provided by engineer. */ "Searching for username %@ on the Dash Network" = "在達世幣網絡中搜尋用戶名 %@ "; @@ -2039,6 +2168,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"; @@ -2051,9 +2183,12 @@ /* Buy Sell Dash */ "Select a service" = "選擇一項服務"; +/* DashSpend denomination selection */ +"Select amount" = "選擇金額"; + /* Block explorer picker Block explorer selection title */ -"Select block explorer" = "Select block explorer"; +"Select block explorer" = "選擇區塊瀏覽器"; /* No comment provided by engineer. */ "Select from Gallery" = "從圖庫中選擇"; @@ -2064,6 +2199,9 @@ /* Coinbase */ "Select the coin" = "選擇幣種"; +/* No comment provided by engineer. */ +"Self-checkout" = "自助結帳"; + /* Sell */ "Sell" = "出售"; @@ -2143,6 +2281,9 @@ /* No comment provided by engineer. */ "Sent to" = "發給"; +/* DashSpend */ +"Server error occurred. Please try again later." = "Server error occurred. Please try again later."; + /* No comment provided by engineer. */ "Set a trusted node" = "設置一個可信的節點"; @@ -2176,6 +2317,9 @@ /* No comment provided by engineer. */ "Show Recovery Phrase" = "顯示恢復詞組"; +/* Alert title */ +"Sign in required" = "需要登入"; + /* CrowdNode */ "Sign the message" = "簽署訊息"; @@ -2195,7 +2339,7 @@ "Skip" = "略過"; /* Usernames */ -"Some usernames can be blocked" = "Some usernames can be blocked"; +"Some usernames can be blocked" = "某些使用者名稱可能會被阻止"; /* No comment provided by engineer. */ "Something went wrong" = "出了些問題"; @@ -2206,6 +2350,9 @@ /* No comment provided by engineer. */ "Sort Contacts" = "聯繫人排序"; +/* Explore Dash/Filters */ +"Sorted by discount" = "Sorted by discount"; + /* Explore Dash/Filters */ "Sorted by distance" = "按距離排序"; @@ -2231,7 +2378,7 @@ "Stop Mixing" = "停止混合"; /* Voting */ -"Submit" = "Submit"; +"Submit" = "提交"; /* No comment provided by engineer. */ "Swept!" = "掃一掃!"; @@ -2245,6 +2392,9 @@ /* No comment provided by engineer. */ "Sync Failed" = "同步失敗"; +/* Explore Dash */ +"Sync in progress… Results may not be complete." = "同步中... 結果可能不完整。"; + /* Translate it as short as possible! (24 symbols max) */ "Sync Now" = "立即同步"; @@ -2279,13 +2429,19 @@ "Tax Category" = "稅種"; /* No comment provided by engineer. */ -"Test Dash doesn’t have any value in the real world but you can send and receive it with other DashPay Alpha users." = "測試用的達世幣在現實世界中沒有任何價值,但您可以與其他 DashPay Alpha 用戶一起發送和接收它。"; +"Tell the cashier that you'd like to pay with a gift card and share the card number and pin." = "Tell the cashier that you'd like to pay with a gift card and share the card number and pin."; + +/* Terms & conditions */ +"Terms & conditions" = "Terms & conditions"; + +/* No comment provided by engineer. */ +"Test Dash 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從錢包的接收畫面複製位址,然後點擊下面的按鈕以獲取您的達世幣。"; /* No comment provided by engineer. */ -"Testnet" = "Testnet"; +"Testnet" = "測試網"; /* No comment provided by engineer. */ "The chain is syncing…" = "區塊鏈正在同步…"; @@ -2308,20 +2464,20 @@ /* Voting */ "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter." = "The default filter shows only duplicate usernames that you have NOT voted on, but you can see and vote on any contested username by changing the filter."; +/* Explore */ +"The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps." = "The first one accepts Dash directly. The other ones accept gift cards that you can buy with Dash for the exact amount of your purchase in two taps."; + /* Don't translate 'Imgur' */ "The image you select will be uploaded to Imgur anonymously." = "您選擇的圖像將匿名上傳到 Imgur。"; /* Usernames */ -"The link you send will be visible only to the network owners" = "The link you send will be visible only to the network owners"; +"The link you send will be visible only to the network owners" = "您發送的連結僅對網路所有者可見"; /* Coinbase */ "The minimum amount you can send is %@" = "您可以發送的最小金額是 %@"; -/* Invites */ -"The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen" = "The person that you send this invitation to can request a username that has a number 2-9, is more than 20 characters or that has a hyphen"; - -/* Invites */ -"The person that you send this invitation to can request any username they want and the network will vote to approve it" = "The person that you send this invitation to can request any username they want and the network will vote to approve it"; +/* DashSpend */ +"The purchase limits for this merchant have changed. Please contact CTX Support for more information." = "The purchase limits for this merchant have changed. Please contact CTX Support for more information."; /* Usernames */ "The username '%@' was blocked by the Dash Network. Please try again by requesting another username." = "The username '%@' was blocked by the Dash Network. Please try again by requesting another username."; @@ -2359,6 +2515,15 @@ /* Coinbase Two Factor Auth */ "This extra step shows it’s really you trying to make a transaction." = "這個額外的步驟用來證明真的是你在嘗試進行交易。"; +/* CTXSpend error */ +"This merchant is currently unavailable." = "This merchant is currently unavailable."; + +/* DashSpend */ +"This merchant is currently unavailable. Please try again later or choose a different merchant." = "This merchant is currently unavailable. Please try again later or choose a different merchant."; + +/* DashSpend */ +"This merchant sells gift cards at fixed prices" = "這個商戶以固定價格出售禮品卡"; + /* No comment provided by engineer. */ "This PIN will be required to unlock your app every time when you use it." = "每次使用時,都需要使用此密碼來解鎖您的應用程式。"; @@ -2383,11 +2548,14 @@ /* Send Screen: to address */ "to" = "至"; +/* DashSpend confirmation */ +"To" = "到"; + /* Coinbase */ "to Dash Wallet on this device" = "到此設備上的 達世幣錢包"; /* CoinJoin */ -"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@." = "To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create %@."; +"To help prevent other people from seeing who you make payments to, it is recommended to mix your balance before you create your username." = "為了防止其他人看到您的付款對象,建議您在建立使用者名稱之前混合您的餘額。"; /* CrowdNode */ "To start staking, create an account on CrowdNode or connect to an existing one." = "要開始質押,請在 CrowdNode 上創建一個帳戶或連接到現有帳戶。"; @@ -2396,13 +2564,13 @@ "to the Dash address designated for your CrowdNode account in the Dash Wallet on this device" = "到此設備上達世幣錢包中為您的 CrowdNode 帳戶指定的達世幣位址"; /* No comment provided by engineer. */ -"Today" = "Today"; +"Today" = "今天"; /* No comment provided by engineer. */ "Tools" = "工具"; /* No comment provided by engineer. */ -"Top-up your credits to continue making changes to your profile and adding contacts" = "Top-up your credits to continue making changes to your profile and adding contacts"; +"Top-up your credits to continue making changes to your profile and adding contacts" = "充值您的積分以繼續更改您的個人資料並添加聯絡人"; /* Dash Portal */ "Topper" = "Topper"; @@ -2413,6 +2581,9 @@ /* No comment provided by engineer. */ "Touch ID limit" = "指紋辨識解鎖的限制"; +/* No comment provided by engineer. */ +"Transaction cancelled" = "Transaction cancelled"; + /* CrowdNode */ "Transaction History" = "交易記錄"; @@ -2452,7 +2623,7 @@ "Turn device passcode on" = "在設備上開啟驗證碼"; /* CoinJoin */ -"Turned off" = "Turned off"; +"Turned off" = "已關閉"; /* Coinbase */ "Turning this feature on will result a higher battery usage" = "打開此功能將導致更高的電池使用率"; @@ -2491,7 +2662,7 @@ "Unable to upload your picture. Please try again." = "無法上傳您的圖片。請再試一次。"; /* Voting */ -"Unblock" = "Unblock"; +"Unblock" = "解禁"; /* Voting */ "Unblocked '%@' username" = "Unblocked '%@' username"; @@ -2572,7 +2743,7 @@ "Username available" = "用戶名可用"; /* Usernames */ -"Username is available" = "Username is available"; +"Username is available" = "使用者名稱可用"; /* Usernames */ "Username request failed" = "Username request failed"; @@ -2637,6 +2808,9 @@ /* No comment provided by engineer. */ "View Recovery Phrase" = "查看恢復詞組"; +/* No comment provided by engineer. */ +"View transaction details" = "View transaction details"; + /* Voting */ "Vote for All" = "給所有人投票"; @@ -2656,7 +2830,7 @@ "Voting ends in %dd" = "Voting ends in %dd"; /* Usernames */ -"Voting is only required in some cases" = "Voting is only required in some cases"; +"Voting is only required in some cases" = "僅在某些情況下才需要投票"; /* No comment provided by engineer. */ "Voting Keys" = "投票公鑰"; @@ -2691,12 +2865,12 @@ /* CrowdNode */ "We couldn’t withdraw from your CrowdNode account." = "我們無法從您的 CrowdNode 帳戶中提款。"; -/* No comment provided by engineer. */ -"We have 2 types of merchants" = "我們有2種類型的商家"; - /* No comment provided by engineer. */ "We have detected that Dash Wallet crashed during migration. Rescanning the blockchain will solve this issue or you may try again. Rescanning should preferably be performed on wifi and will take up to half an hour. Your funds will be available once the sync process is complete." = "我們發現達世幣錢包在遷移過程中崩潰了。 重新掃描區塊鏈將解決此問題,您也可以再試一次。 重新掃描最好應在wifi上進行,最多需要半小時。 同步過程完成後,您的資金將可使用。"; +/* Explore */ +"We have two types of merchants" = "We have two types of merchants"; + /* No comment provided by engineer. */ "We Upgraded" = "我們升級了"; @@ -2719,7 +2893,7 @@ "When the transaction is confirmed, the other wallet will be worthless and should not be re-used for safety reasons." = "當交易確認後,另一個錢包的結餘將會消失,並且出於安全原因不應重複使用該錢包。"; /* CoinJoin */ -"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app."; +"When you close the app or lock the screen, the mixing process stops. It will resume when you reopen the app." = "當您關閉應用程式或鎖定螢幕時,混合過程將停止。當您重新開啟應用程式時,它將恢復。"; /* No comment provided by engineer. */ "Where to Spend" = "在哪裡消費"; @@ -2761,9 +2935,6 @@ /* No comment provided by engineer. */ "Would you like to accept the invitation?" = "你願意接受這個邀請嗎?"; -/* Invites */ -"Would you like to create this invitation?" = "Would you like to create this invitation?"; - /* Coinbase */ "Would you like to make a deposit for your purchase using a linked bank account?" = "您想在關聯的銀行帳戶所存入一筆資金並使用它來為您的購買埋單嗎?"; @@ -2774,7 +2945,7 @@ "Yes" = "是的"; /* No comment provided by engineer. */ -"Yesterday" = "Yesterday"; +"Yesterday" = "昨天"; /* No comment provided by engineer. */ "You accepted the contact request from %@" = "您接受了來自 %@ 的聯繫請求"; @@ -2785,6 +2956,9 @@ /* No comment provided by engineer. */ "You are about to wipe this wallet from this device. Funds associated with this wallet can only be retrieved if you have your recovery phrase." = "您將要從此設備上清除此錢包。 僅當您有恢復詞組時,才能取回與此錢包相關的資金。"; +/* DashSpend */ +"You are buying a %@ gift card for %@ (%d%% discount)" = "You are buying a %1$@ gift card for %2$@ (%3$d%% discount)"; + /* No comment provided by engineer. */ "You can always delete the image uploaded, as long as you have access to this wallet." = "只要您有權訪問此錢包,您就可以隨時刪除上傳的圖片。"; @@ -2798,11 +2972,14 @@ "You can change how / when your reward earnings are paid to you." = "您可以更改向您支付獎勵收入的方式/時間。"; /* No comment provided by engineer. */ -"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance"; +"You can continue to use DashPay for payments but you cannot update your profile or add more contacts until you top up your credit balance" = "您可以繼續使用 DashPay 進行付款,但在充值積分之前,您無法更新您的個人資料或添加更多聯絡人"; /* Voting */ "You can enter your key in any of the following formats: WIF/base58/base64/hex" = "您可以採用以下任一格式輸入金鑰 : WIF/base58/base64/hex"; +/* Explore */ +"You can pay with Dash at the cashier." = "You can pay with Dash at the cashier."; + /* CrowdNode */ "You can see detailed information about your deposits, withdrawals and reward earnings." = "您可以查看有關您的存款、提款和獎勵收入的詳細信息。"; @@ -2813,7 +2990,7 @@ "You cannot claim this invite since you already have a Dash username" = "由於您已經有達世幣用戶名,因此您無法認領此邀請"; /* Usernames */ -"You chose \"%@\" as your username." = "You chose \"%@\" as your username."; +"You chose “%@” as your username." = "You chose “%@” as your username."; /* CoinJoin */ "You Dash was mixed using these transactions." = "You Dash was mixed using these transactions."; @@ -2821,6 +2998,9 @@ /* No comment provided by engineer. */ "You do not have any contacts at the moment" = "您目前沒有任何聯絡人"; +/* DashSpend */ +"You do not have sufficient funds to complete this transaction" = "您沒有足夠的資金來完成此交易"; + /* Coinbase */ "You don’t have enough balance" = "你沒有足夠的餘額"; @@ -2866,12 +3046,18 @@ /* Usernames */ "You need to have more than %@ Dash to create a username" = "You need to have more than %@ Dash to create a username"; +/* DashSpend */ +"You need to sign in to DashSpend to purchase gift cards." = "You need to sign in to DashSpend to purchase gift cards."; + /* CrowdNode */ "You need to wait 5 minutes before initiating another withdrawal" = "您需要等待5分鐘才能再次發起提款"; /* CrowdNode */ "You only need %@ to join the pool." = "您至少需要 %@ 的金額來參與資金池。"; +/* DashSpend confirmation */ +"You pay" = "你支付"; + /* Coinbase */ "You receive" = "你收到"; @@ -2906,10 +3092,10 @@ "You will receive fractional payments automatically and they will by default be reinvested, however, it is also easy to set up automatic withdrawals to receive recurring payouts." = "您將自動收到小額付款,預設情況下它們將被再投資,但是,設置自動提款以接收定期付款也很容易。"; /* No comment provided by engineer. */ -"Your credit balance has been fully depleted" = "Your credit balance has been fully depleted"; +"Your credit balance has been fully depleted" = "您的積分餘額已完全耗盡"; /* No comment provided by engineer. */ -"Your credit balance is low" = "Your credit balance is low"; +"Your credit balance is low" = "您的信用餘額偏低"; /* CrowdNode */ "Your CrowdNode account is creating…" = "正在創建您的 CrowdNode 帳戶…"; @@ -2918,7 +3104,7 @@ "Your CrowdNode account is set up and ready to use!" = "您的 CrowdNode 帳戶已設置好並可以使用!"; /* Crowdnode */ -"Your CrowdNode account was created using these transactions." = "Your CrowdNode account was created using these transactions."; +"Your CrowdNode account was created using these transactions." = "您的 CrowdNode 帳戶是使用這些交易創建的。"; /* CrowdNode */ "Your CrowdNode address has been confirmed." = "您的 CrowdNode 位址已確認。"; @@ -2933,17 +3119,20 @@ "Your deposit to CrowdNode is received." = "您對 CrowdNode 的存款已收到了。"; /* TimeSkew */ -"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "Your device time is %1$@ by %2$d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin."; +"Your device time is %@ by %d seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” to use CoinJoin." = "您的設備時間為 %1$@ %2$d 秒。由於這個差異, 您無法使用 CoinJoin。\n\n您裝置上的時間設定需要變更為「自動設定時間」才能使用 CoinJoin。"; /* TimeSkew */ -"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings."; +"Your device time is off by %d minutes. You probably cannot send or receive Dash due to this problem.\n\nYou should check and if necessary correct your date, time and timezone settings." = "您的設備時間延遲了 %d 分鐘。由於此問題,您可能無法發送或接收達世幣。\n\n您應該檢查並在必要時更正您的日期、時間和時區設定。"; /* TimeSkew */ -"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin."; +"Your device time is off by more than 5 seconds. You cannot use CoinJoin due to this difference.\n\nThe time settings on your device needs to be changed to “Set time automatically” before using CoinJoin." = "您的設備時間偏差超過 5 秒。由於這種差異,您無法使用 CoinJoin。\n\n使用 CoinJoin 之前,需要將裝置上的時間設定變更為「自動設定時間」。"; /* No comment provided by engineer. */ "Your Email is not stored in the DashPay wallet nor on any servers. It is used once to get your Gravatar account details and then discarded." = "您的電子郵件不會存儲在 DashPay 錢包或任何服務器上。它用於獲取您的 Gravatar 帳戶詳細信息,然後被丟棄。"; +/* Email is only used for OTP */ +"Your email is only used to send a one-time password." = "您的電子郵件僅用於發送一次性密碼。"; + /* No comment provided by engineer. */ "Your invitation from %@ has been already claimed" = "您來自 %@ 的邀請已被認領"; @@ -2962,12 +3151,15 @@ /* Usernames */ "Your request was cancelled" = "您的申请已取消"; +/* DashSpend */ +"Your session expired" = "Your session expired"; + +/* DashSpend */ +"Your transaction was rejected. Please try again or contact support if the problem persists." = "Your transaction was rejected. Please try again or contact support if the problem persists."; + /* No comment provided by engineer. */ "Your transaction was sent and the amount should appear in your wallet in a few minutes." = "您的交易已發送,金額應在幾分鐘內顯示在您的錢包中。"; -/* Usernames */ -"your username" = "your username"; - /* No comment provided by engineer. */ "Your username %@ has been successfully created on the Dash Network" = "您的用戶名 %@ 已在達世幣網絡上成功創建"; @@ -2988,3 +3180,6 @@ /* No comment provided by engineer. */ "ZenLedger" = "ZenLedger"; + +/* Savings percentage */ +"~%.0f%%" = "~%.0f%%"; diff --git a/Podfile b/Podfile index 9919a2b48..cb95cdb43 100644 --- a/Podfile +++ b/Podfile @@ -15,7 +15,8 @@ target 'dashwallet' do pod 'MBProgressHUD', '1.1.0' pod 'MMSegmentSlider', :git => 'https://github.com/podkovyrin/MMSegmentSlider', :commit => '2d91366' pod 'CocoaImageHashing', :git => 'https://github.com/ameingast/cocoaimagehashing.git', :commit => 'ad01eee' - pod 'SDWebImage', '5.13.2' + pod 'SDWebImage', '5.21.0', :modular_headers => true + pod 'SDWebImageSwiftUI', '3.1.3', :modular_headers => true pod 'Moya', '~> 15.0' pod 'SwiftJWT', '3.6.200' # Debugging purposes @@ -38,7 +39,8 @@ target 'dashpay' do pod 'MBProgressHUD', '1.1.0' pod 'MMSegmentSlider', :git => 'https://github.com/podkovyrin/MMSegmentSlider', :commit => '2d91366' pod 'CocoaImageHashing', :git => 'https://github.com/ameingast/cocoaimagehashing.git', :commit => 'ad01eee' - pod 'SDWebImage', '5.13.2' + pod 'SDWebImage', '5.21.0', :modular_headers => true + pod 'SDWebImageSwiftUI', '3.1.3', :modular_headers => true pod 'Moya', '~> 15.0' pod 'SwiftJWT', '3.6.200' pod 'TOCropViewController', '2.6.1' diff --git a/Podfile.lock b/Podfile.lock index 919d15a97..17fd31237 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -711,9 +711,11 @@ PODS: - nanopb/encode (2.30908.0) - PromisesObjC (2.4.0) - Protobuf (3.29.4) - - SDWebImage (5.13.2): - - SDWebImage/Core (= 5.13.2) - - SDWebImage/Core (5.13.2) + - SDWebImage (5.21.0): + - SDWebImage/Core (= 5.21.0) + - SDWebImage/Core (5.21.0) + - SDWebImageSwiftUI (3.1.3): + - SDWebImage (~> 5.10) - SQLite.swift (0.15.3): - SQLite.swift/standard (= 0.15.3) - SQLite.swift/standard (0.15.3) @@ -745,7 +747,8 @@ DEPENDENCIES: - MBProgressHUD (= 1.1.0) - MMSegmentSlider (from `https://github.com/podkovyrin/MMSegmentSlider`, commit `2d91366`) - Moya (~> 15.0) - - SDWebImage (= 5.13.2) + - SDWebImage (= 5.21.0) + - SDWebImageSwiftUI (= 3.1.3) - SQLite.swift (~> 0.15.3) - SQLiteMigrationManager.swift (= 0.8.3) - SSZipArchive @@ -791,6 +794,7 @@ SPEC REPOS: - PromisesObjC - Protobuf - SDWebImage + - SDWebImageSwiftUI - SQLite.swift - SQLiteMigrationManager.swift - SSZipArchive @@ -857,7 +861,8 @@ SPEC CHECKSUMS: nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 Protobuf: 2e6de032ba12b9efb390ae550d1a243a5b19ddfc - SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866 + SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 + SDWebImageSwiftUI: a6d7129fb68fc18c8b930b869ddcfce314e49ded SQLite.swift: 8d054987f02728cc912b0eb5a9659650573a65a2 SQLiteMigrationManager.swift: b63bb5eaf834f8e8cc78b37fdf2ce064e35914cd SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef @@ -867,6 +872,6 @@ SPEC CHECKSUMS: TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 UIViewController-KeyboardAdditions: a691dc7e63a49854d341455a778ee8497dfc4662 -PODFILE CHECKSUM: a5ef71862394897c78a0cc247502754372e88c07 +PODFILE CHECKSUM: 0de5c53042a507abba409fff574e1de4efce4a2b COCOAPODS: 1.15.2 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 + } +}