From df5545bb5b73b1367617f6b55ff2ff7c5747ec36 Mon Sep 17 00:00:00 2001 From: kcw-grunt Date: Fri, 18 Feb 2022 21:05:04 -0800 Subject: [PATCH 1/3] WIP: UD testing --- Podfile | 2 +- Podfile.lock | 19 ++++----- loafwallet/UnstoppableDomainViewModel.swift | 44 ++++++++++++++++++--- 3 files changed, 46 insertions(+), 19 deletions(-) diff --git a/Podfile b/Podfile index 8e737ce26..bf7186807 100644 --- a/Podfile +++ b/Podfile @@ -6,7 +6,7 @@ platform :ios, '13.0' #Shared Cocoapods def shared_pods - pod 'UnstoppableDomainsResolution', '~> 0.3.6' + pod 'UnstoppableDomainsResolution', '~> 4.0.0' pod 'KeychainAccess', '~> 4.2' pod 'Firebase/Analytics' pod 'Firebase/Crashlytics' diff --git a/Podfile.lock b/Podfile.lock index 948ea468b..a264f1636 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,8 +1,6 @@ PODS: - BigInt (5.2.0) - - CryptoSwift (1.4.0) - - EthereumAddress (1.3.0): - - CryptoSwift (~> 1.0) + - CryptoSwift (1.4.3) - Firebase/Analytics (6.34.0): - Firebase/Core - Firebase/Core (6.34.0): @@ -76,22 +74,20 @@ PODS: - nanopb/decode (1.30906.0) - nanopb/encode (1.30906.0) - PromisesObjC (1.2.12) - - UnstoppableDomainsResolution (0.3.7): + - UnstoppableDomainsResolution (4.0.0): - BigInt - - CryptoSwift (~> 1.0) - - EthereumAddress (~> 1.3) + - CryptoSwift DEPENDENCIES: - Firebase/Analytics - Firebase/Crashlytics - KeychainAccess (~> 4.2) - - UnstoppableDomainsResolution (~> 0.3.6) + - UnstoppableDomainsResolution (~> 4.0.0) SPEC REPOS: https://github.com/CocoaPods/Specs.git: - BigInt - CryptoSwift - - EthereumAddress - Firebase - FirebaseAnalytics - FirebaseCore @@ -108,8 +104,7 @@ SPEC REPOS: SPEC CHECKSUMS: BigInt: f668a80089607f521586bbe29513d708491ef2f7 - CryptoSwift: 7cc902df1784de3b389a387756c7d710f197730c - EthereumAddress: 39fe8e11cf04e4e9902b55ae653dbc4e0aee5f30 + CryptoSwift: a0799ee936271bd2253a006f1e4523df21845000 Firebase: c23a36d9e4cdf7877dfcba8dd0c58add66358999 FirebaseAnalytics: 3bb096873ee0d7fa4b6c70f5e9166b6da413cc7f FirebaseCore: d3a978a3cfa3240bf7e4ba7d137fdf5b22b628ec @@ -122,8 +117,8 @@ SPEC CHECKSUMS: KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51 nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97 - UnstoppableDomainsResolution: 1724f30c0dfa4ba672e4b74242e9fc0df240e3a6 + UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841 -PODFILE CHECKSUM: 82e7dcdf6c90affbcb4bb592eaf9122a3fcbcda7 +PODFILE CHECKSUM: cb5fb9baf866887c0e8fd058304fe223b0154d12 COCOAPODS: 1.10.1 diff --git a/loafwallet/UnstoppableDomainViewModel.swift b/loafwallet/UnstoppableDomainViewModel.swift index b4db70e7d..c33cb334f 100644 --- a/loafwallet/UnstoppableDomainViewModel.swift +++ b/loafwallet/UnstoppableDomainViewModel.swift @@ -67,16 +67,48 @@ class UnstoppableDomainViewModel: ObservableObject { let group = DispatchGroup() let keyPath = Partner.partnerKeyPath(name: .infura) + // print("::: \(keyPath)") - guard let resolution = try? Resolution(configs: Configurations( - cns: NamingServiceConfig( - providerUrl: keyPath, - network: "mainnet") +// guard let resolution = try? Resolution(configs: Configurations( +// uns: NamingServiceConfig( +// providerUrl: keyPath, +// network: "mainnet") +// ) +// ) else { +// print ("Error: Resolution library not initialized") +// return +// }; + + guard let resolution = try? Resolution( + configs: Configurations( + uns: UnsLocations( + layer1: NamingServiceConfig( + providerUrl: "https://rinkeby.infura.io/v3/" + keyPath, + network: "rinkeby"), + layer2: NamingServiceConfig( + providerUrl: "https://polygon-mumbai.infura.io/v3/" + keyPath, + network: "polygon-mumbai") + ), + zns: NamingServiceConfig( + providerUrl: "https://dev-api.zilliqa.com", + network: "testnet") ) ) else { - print ("Error: Resolution library not initialized") + print ("Init of Resolution instance with custom parameters failed...") return - }; + } + + + +// guard let resolution = try? Resolution(configs: Configurations( +// cns: NamingServiceConfig( +// providerUrl: keyPath, +// network: "mainnet") +// ) +// ) else { +// print ("Error: Resolution library not initialized") +// return +// }; group.enter() From 1aa46e2e537e60451e09fc2bf79f07bb4bf660c4 Mon Sep 17 00:00:00 2001 From: kcw-grunt Date: Mon, 28 Feb 2022 13:06:51 +0000 Subject: [PATCH 2/3] =?UTF-8?q?Adding=20=D1=83=D0=BA=D1=80=D0=B0=D1=97?= =?UTF-8?q?=D0=BD=D1=81=D1=8C=D0=BA=D0=B8=D0=B9=20and=20added=20new=20UD?= =?UTF-8?q?=20extensions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New UD key works - Update the language support - Added Ukrainian - Removed Swedish, Danish, Dutch - Relayout the UD Cell - Added Ukrainian - Enter a .crypto, .wallet, .zil, .nft, .blockchain, .bitcoin, .coin, .888, .dao, or .x domain. - UD Placeholder - SwiftUI ViewRepresentable from a UITextView -Added український 🥳 --- TodayExtension/uk.lproj/MainInterface.strings | 14 + loafwallet.xcodeproj/project.pbxproj | 34 +- loafwallet/PartnerData.swift | 66 +- loafwallet/TextView+Extension.swift | 58 + loafwallet/UnstoppableDomainView.swift | 57 +- loafwallet/UnstoppableDomainViewModel.swift | 75 +- loafwallet/src/Constants/Strings.swift | 2 +- .../Strings/Base.lproj/Localizable.strings | 2 +- .../src/Strings/de.lproj/Localizable.strings | 2 +- .../src/Strings/en.lproj/Localizable.strings | 2 +- .../src/Strings/es.lproj/Localizable.strings | 2 +- .../src/Strings/fr.lproj/Localizable.strings | 2 +- .../src/Strings/id.lproj/Localizable.strings | 2 +- .../src/Strings/it.lproj/Localizable.strings | 2 +- .../src/Strings/ja.lproj/Localizable.strings | 2 +- .../src/Strings/ko.lproj/Localizable.strings | 2 +- .../src/Strings/pt.lproj/Localizable.strings | 2 +- .../src/Strings/ru.lproj/Localizable.strings | 2 +- .../src/Strings/tr.lproj/Localizable.strings | 2 +- .../src/Strings/uk.lproj/Localizable.strings | 1439 ++++++++++++ .../Strings/zh-Hans.lproj/Localizable.strings | 2 +- .../Strings/zh-Hant.lproj/Localizable.strings | 2 +- .../RootModals/ModalViewController.swift | 2 +- .../RootModals/SendViewController.swift | 3 +- .../src/Views/SendViewCells/SendCell.swift | 2 +- loafwallet/uk.lproj/BIP39Words.plist | 2054 +++++++++++++++++ loafwallet/uk.lproj/LaunchScreen.strings | 1 + 27 files changed, 3713 insertions(+), 122 deletions(-) create mode 100644 TodayExtension/uk.lproj/MainInterface.strings create mode 100644 loafwallet/TextView+Extension.swift create mode 100644 loafwallet/src/Strings/uk.lproj/Localizable.strings create mode 100644 loafwallet/uk.lproj/BIP39Words.plist create mode 100644 loafwallet/uk.lproj/LaunchScreen.strings diff --git a/TodayExtension/uk.lproj/MainInterface.strings b/TodayExtension/uk.lproj/MainInterface.strings new file mode 100644 index 000000000..7456566de --- /dev/null +++ b/TodayExtension/uk.lproj/MainInterface.strings @@ -0,0 +1,14 @@ +/* Class = "UIButton"; normalTitle = "setup wallet"; ObjectID = "fgE-Q8-uG8"; */ +"fgE-Q8-uG8.normalTitle" = "setup wallet"; + +/* Class = "UILabel"; text = "Label"; ObjectID = "gQm-B2-ZXE"; */ +"gQm-B2-ZXE.text" = "Label"; + +/* Class = "UILabel"; text = "scan QR code"; ObjectID = "JgG-Ah-UZk"; */ +"JgG-Ah-UZk.text" = "scan QR code"; + +/* Class = "UILabel"; text = "receive"; ObjectID = "KJN-zr-IQB"; */ +"KJN-zr-IQB.text" = "receive"; + +/* Class = "UILabel"; text = "send"; ObjectID = "QMM-JV-cTG"; */ +"QMM-JV-cTG.text" = "send"; diff --git a/loafwallet.xcodeproj/project.pbxproj b/loafwallet.xcodeproj/project.pbxproj index 896ead54a..bbcee51e7 100644 --- a/loafwallet.xcodeproj/project.pbxproj +++ b/loafwallet.xcodeproj/project.pbxproj @@ -290,6 +290,7 @@ C345D81525A8D52600657E30 /* LoginViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C345D81425A8D52600657E30 /* LoginViewModelTests.swift */; }; C345D82525A8D54200657E30 /* RegistrationViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C345D82425A8D54200657E30 /* RegistrationViewModelTests.swift */; }; C345D83725A8D57E00657E30 /* AnimatedCardViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C345D83625A8D57E00657E30 /* AnimatedCardViewModelTests.swift */; }; + C350788C27DCB10700A50819 /* TextView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C350788B27DCB10700A50819 /* TextView+Extension.swift */; }; C3543A27264AFE490005D17A /* LocaleChangeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3543A26264AFE490005D17A /* LocaleChangeView.swift */; }; C3543A29264AFE720005D17A /* LocaleChangeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3543A28264AFE720005D17A /* LocaleChangeViewModel.swift */; }; C354C45A258FA9C000675E0E /* MainTabBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C354C459258FA9C000675E0E /* MainTabBarViewModel.swift */; }; @@ -781,13 +782,10 @@ 24313C9823824F5800A83F69 /* Buy.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Buy.storyboard; sourceTree = ""; }; 24313C9923824F5800A83F69 /* Card.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Card.storyboard; sourceTree = ""; }; 24313CA823824F9800A83F69 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; - 2437530C238AE08100E1B2AE /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = nl; path = nl.lproj/BIP39Words.plist; sourceTree = ""; }; - 2437530D238AE08200E1B2AE /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = da; path = da.lproj/BIP39Words.plist; sourceTree = ""; }; 2437530E238AE08A00E1B2AE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = de; path = de.lproj/BIP39Words.plist; sourceTree = ""; }; 24375311238AE09100E1B2AE /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = id; path = id.lproj/BIP39Words.plist; sourceTree = ""; }; 24375314238AE09700E1B2AE /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = pt; path = pt.lproj/BIP39Words.plist; sourceTree = ""; }; 24375315238AE09900E1B2AE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = ru; path = ru.lproj/BIP39Words.plist; sourceTree = ""; }; - 24375316238AE09D00E1B2AE /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = sv; path = sv.lproj/BIP39Words.plist; sourceTree = ""; }; 24393B5B23C259400075218D /* Phrase.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Phrase.storyboard; sourceTree = ""; }; 24470E2023A5DA9700ADDA27 /* APIManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIManagerTests.swift; sourceTree = ""; }; 24470E2223A5DB7D00ADDA27 /* WalletManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletManagerTests.swift; sourceTree = ""; }; @@ -1445,10 +1443,7 @@ 75A2A83A1DA59B3C00A983D8 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MainInterface.strings; sourceTree = ""; }; 75A2A83F1DA59B4500A983D8 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainInterface.strings; sourceTree = ""; }; 75A2A8441DA59B4B00A983D8 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/MainInterface.strings; sourceTree = ""; }; - 75A2A8491DA59B5100A983D8 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/MainInterface.strings; sourceTree = ""; }; 75A2A84E1DA59B5700A983D8 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/MainInterface.strings; sourceTree = ""; }; - 75A2A8581DA59B6A00A983D8 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/MainInterface.strings; sourceTree = ""; }; - 75A2A8621DA59BF500A983D8 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/MainInterface.strings; sourceTree = ""; }; 75A2A8671DA59BFB00A983D8 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MainInterface.strings; sourceTree = ""; }; 75A2A87C1DA59E4E00A983D8 /* loafwallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = loafwallet.entitlements; sourceTree = ""; }; 75C735AF1DAA1C9F00251ECF /* libnettle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libnettle.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1482,6 +1477,11 @@ C345D81425A8D52600657E30 /* LoginViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewModelTests.swift; sourceTree = ""; }; C345D82425A8D54200657E30 /* RegistrationViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegistrationViewModelTests.swift; sourceTree = ""; }; C345D83625A8D57E00657E30 /* AnimatedCardViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedCardViewModelTests.swift; sourceTree = ""; }; + C350788727DCAAA000A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/LaunchScreen.strings; sourceTree = ""; }; + C350788827DCAAA000A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/MainInterface.strings; sourceTree = ""; }; + C350788927DCAAA000A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; + C350788A27DCAAA100A50819 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = uk; path = uk.lproj/BIP39Words.plist; sourceTree = ""; }; + C350788B27DCB10700A50819 /* TextView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TextView+Extension.swift"; sourceTree = ""; }; C3543A26264AFE490005D17A /* LocaleChangeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocaleChangeView.swift; sourceTree = ""; }; C3543A28264AFE720005D17A /* LocaleChangeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocaleChangeViewModel.swift; sourceTree = ""; }; C354C459258FA9C000675E0E /* MainTabBarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarViewModel.swift; sourceTree = ""; }; @@ -1536,7 +1536,6 @@ CE03EC731EF256AC0038E3A8 /* SimpleUTXO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SimpleUTXO.swift; path = src/Models/SimpleUTXO.swift; sourceTree = ""; }; CE0CD1581DBFBCF5004023DA /* ModalPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; name = ModalPresenter.swift; path = src/ModalPresenter.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; CE0FC0F81F72417200E7C626 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; - CE0FC0F91F72417500E7C626 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; CE124CF71E67A8E500DFA146 /* TransactionDirection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TransactionDirection.swift; path = src/ViewModels/TransactionDirection.swift; sourceTree = ""; }; CE124CFB1E68932C00DFA146 /* FeeManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FeeManager.swift; path = src/FeeManager.swift; sourceTree = ""; }; CE124CFD1E68F57700DFA146 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Async.swift; path = src/Extensions/Async.swift; sourceTree = ""; }; @@ -1566,9 +1565,7 @@ CE29901B1EFD6DE50093A0F2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; CE29901F1EFD6E060093A0F2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; CE2990201EFD6F3E0093A0F2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - CE2990211EFD6F4B0093A0F2 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; CE2990221EFD6F500093A0F2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - CE2990231EFD6F5D0093A0F2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; CE36454B1E7B42850079D0CF /* PinPadCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PinPadCells.swift; path = src/Views/PinPadCells/PinPadCells.swift; sourceTree = ""; }; CE3D4C561EF5D5740016B1C8 /* ReachabilityMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ReachabilityMonitor.swift; path = src/ReachabilityMonitor.swift; sourceTree = ""; }; CE3D4C581EF743EF0016B1C8 /* Functions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Functions.swift; path = src/Constants/Functions.swift; sourceTree = ""; }; @@ -3200,6 +3197,7 @@ C3EFA9A2265080FF005C59B5 /* LockScreenHeaderViewModel.swift */, C377519826B09A3400E1FB12 /* TransferringView.swift */, C3D8781D26CE602E009EF8CA /* CardTwoFactor.swift */, + C350788B27DCB10700A50819 /* TextView+Extension.swift */, ); name = "SwiftUI+UIKit"; sourceTree = ""; @@ -3891,17 +3889,15 @@ ja, "zh-Hans", de, - da, ru, - nl, it, pt, ko, "zh-Hant", - sv, id, Base, tr, + uk, ); mainGroup = 75A2A7871DA5934300A983D8; packageReferences = ( @@ -4378,6 +4374,7 @@ C377519B26B0A3D900E1FB12 /* TransferringViewModel.swift in Sources */, CE27F9591E2C8EA300F7F7F2 /* Amount.swift in Sources */, CE1280F61EEA855C00D27649 /* Date+Additions.swift in Sources */, + C350788C27DCB10700A50819 /* TextView+Extension.swift in Sources */, CEEC708E1E954AAB00EF788E /* AboutCell.swift in Sources */, 22A9A9461DF61945000F0016 /* BRAPIClient.swift in Sources */, 24313C7E23820C1900A83F69 /* TransactionsViewController.swift in Sources */, @@ -4629,14 +4626,12 @@ 2464B6DD238A543D00B2A2CB /* ko */, 2464B6DF238A586600B2A2CB /* es */, 2464B6E0238A60F200B2A2CB /* it */, - 2437530C238AE08100E1B2AE /* nl */, - 2437530D238AE08200E1B2AE /* da */, 2437530E238AE08A00E1B2AE /* de */, 24375311238AE09100E1B2AE /* id */, 24375314238AE09700E1B2AE /* pt */, 24375315238AE09900E1B2AE /* ru */, - 24375316238AE09D00E1B2AE /* sv */, C3BDB42626CC028F004DAE77 /* tr */, + C350788A27DCAAA100A50819 /* uk */, ); name = BIP39Words.plist; sourceTree = ""; @@ -4645,6 +4640,7 @@ isa = PBXVariantGroup; children = ( 75A2A79D1DA5934300A983D8 /* Base */, + C350788727DCAAA000A50819 /* uk */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -4659,16 +4655,14 @@ 75A2A83A1DA59B3C00A983D8 /* ja */, 75A2A83F1DA59B4500A983D8 /* es */, 75A2A8441DA59B4B00A983D8 /* it */, - 75A2A8491DA59B5100A983D8 /* nl */, 75A2A84E1DA59B5700A983D8 /* ko */, - 75A2A8581DA59B6A00A983D8 /* da */, - 75A2A8621DA59BF500A983D8 /* sv */, 75A2A8671DA59BFB00A983D8 /* ru */, 249F9770236F862C0045087A /* id */, 24B9621723BA66CC00ECD938 /* pt */, 24B9621923BA66CE00ECD938 /* zh-Hant */, 24B9621B23BA66CF00ECD938 /* en */, C3BDB42726CC028F004DAE77 /* tr */, + C350788827DCAAA000A50819 /* uk */, ); name = MainInterface.storyboard; sourceTree = ""; @@ -4679,9 +4673,7 @@ CE29901B1EFD6DE50093A0F2 /* Base */, CE29901F1EFD6E060093A0F2 /* de */, CE2990201EFD6F3E0093A0F2 /* ja */, - CE2990211EFD6F4B0093A0F2 /* da */, CE2990221EFD6F500093A0F2 /* ru */, - CE2990231EFD6F5D0093A0F2 /* nl */, CE27074B1F016B6B00431BBC /* fr */, CE27074C1F016B6D00431BBC /* es */, CE27074D1F016B7000431BBC /* it */, @@ -4689,10 +4681,10 @@ CEE659ED1F68AAB5001FF29D /* zh-Hant */, CEE659EE1F68AAB9001FF29D /* zh-Hans */, CE0FC0F81F72417200E7C626 /* ko */, - CE0FC0F91F72417500E7C626 /* sv */, 24306799238F479500EBEA99 /* id */, 2430679B238F5A2900EBEA99 /* en */, C3BDB42826CC0338004DAE77 /* tr */, + C350788927DCAAA000A50819 /* uk */, ); name = Localizable.strings; path = src/Strings; diff --git a/loafwallet/PartnerData.swift b/loafwallet/PartnerData.swift index e6fc2a423..5355313e6 100644 --- a/loafwallet/PartnerData.swift +++ b/loafwallet/PartnerData.swift @@ -10,7 +10,7 @@ import Foundation import UIKit enum PartnerName { - case infura + case unstop case changeNow } @@ -28,10 +28,10 @@ struct Partner { return [moonpay, simplex] } - /// Returns Partner Key + /// Returns Partner Key + URL /// - Parameter name: Enum for the different partners - /// - Returns: Key string - static func partnerKeyPath(name: PartnerName) -> String { + /// - Returns: Key string url + static func partnerKeyPathURL(name: PartnerName) -> String { /// Switch the config file based on the environment var filePath: String @@ -58,7 +58,7 @@ struct Partner { switch name { - case .infura: + case .unstop: if let dictionary = NSDictionary(contentsOfFile: filePath) as? Dictionary, let key = dictionary["infura-api"] as? String { @@ -85,6 +85,62 @@ struct Partner { } + /// Returns Partner Key + /// - Parameter name: Enum for the different partners + /// - Returns: Key string + static func partnerKey(name: PartnerName) -> String { + + /// Switch the config file based on the environment + var filePath: String +#if Release + + // Loads the release Partner Keys config file. + guard let releasePath = Bundle.main.path(forResource: "partner-keys", + ofType: "plist") else { + return "ERROR: FILE-NOT-FOUND" + } + filePath = releasePath + +#else + + // Loads the debug Partner Keys config file. + guard let debugPath = Bundle.main.path(forResource: "debug-partner-keys", + ofType: "plist") else { + return "ERROR: FILE-NOT-FOUND" + } + + filePath = debugPath + +#endif + + switch name { + + case .unstop: + + if let dictionary = NSDictionary(contentsOfFile: filePath) as? Dictionary, + let key = dictionary["infura-api"] as? String { + return key + } else { + + let errorDescription = "ERROR-INFURA_KEY" + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: ["error": errorDescription]) + return errorDescription + } + + case .changeNow: + + if let dictionary = NSDictionary(contentsOfFile: filePath) as? Dictionary, + let key = dictionary["change-now-api"] as? String { + return key + } else { + + let errorDescription = "ERROR-CHANGENOW_KEY" + LWAnalytics.logEventWithParameters(itemName: ._20200112_ERR, properties: ["error": errorDescription]) + return errorDescription + } + } + } + //TODO: Uncomment as integration progresses, kcw-grunt // let bitrefillDictionary = // ["title":S.BuyCenter.Cells.bitrefillTitle as AnyObject, diff --git a/loafwallet/TextView+Extension.swift b/loafwallet/TextView+Extension.swift new file mode 100644 index 000000000..2f6dbf32a --- /dev/null +++ b/loafwallet/TextView+Extension.swift @@ -0,0 +1,58 @@ +// +// TextView+Extension.swift +// loafwallet +// +// Created by Kerry Washington on 3/12/22. +// Copyright © 2022 Litecoin Foundation. All rights reserved. +// + +import Foundation +import UIKit +import SwiftUI + +//https://stackoverflow.com/questions/65297333/adding-placeholder-to-uitextview-in-swiftui-uiviewrepresentable + +struct TextView: UIViewRepresentable { + + @Binding var text: String + @Binding var didStartEditing: Bool + private var placeholder: String + + init(text: Binding, + didStartEditing: Binding, + placeholderString: String) { + + self._text = text + self._didStartEditing = didStartEditing + self.placeholder = placeholderString + } + let udModel = UnstoppableDomainViewModel() + func makeUIView(context: Context) -> UITextView { + let textView = UITextView() + textView.autocapitalizationType = .sentences + textView.isSelectable = true + textView.isUserInteractionEnabled = true + textView.font = .customBody(size: 6.0) + + return textView + } + + + func updateUIView(_ uiView: UITextView, context: Context) { + + if didStartEditing { + + uiView.textColor = UIColor.black + uiView.text = text + + } + else { + uiView.text = self.placeholder + uiView.textColor = UIColor.lightGray + uiView.font = .customBody(size: 6.0) + } + + uiView.font = UIFont.preferredFont(forTextStyle: .body) + + } +} diff --git a/loafwallet/UnstoppableDomainView.swift b/loafwallet/UnstoppableDomainView.swift index 7d636b0ed..50aa8d560 100644 --- a/loafwallet/UnstoppableDomainView.swift +++ b/loafwallet/UnstoppableDomainView.swift @@ -20,6 +20,9 @@ struct UnstoppableDomainView: View { @State private var shouldDisableLookupButton: Bool = true + @State + private var didStartEditing: Bool = false + init(viewModel: UnstoppableDomainViewModel) { self.viewModel = viewModel } @@ -43,14 +46,37 @@ struct UnstoppableDomainView: View { .padding(.trailing, 20) } } else { - - TextField(viewModel.placeholderString, text: $viewModel.searchString) + + + VStack { + ZStack{ + + Text(viewModel.placeholderString) .font(Font(UIFont.customBody(size: 16.0))) - .keyboardType(.URL) - .autocapitalization(.none) - .disableAutocorrection(true) - .padding(.leading, 18) - .padding(.trailing, 5) + .multilineTextAlignment(.leading) + .lineLimit(nil) + .minimumScaleFactor(0.5) + .frame(minWidth: 0, maxWidth: 245) + .frame(height: 55.0, alignment: .leading) + .foregroundColor(.gray) + .opacity(didStartEditing ? 0 : 1) + + TextField(".", text: $viewModel.searchString) + .onTapGesture { + didStartEditing = true + } + .font(Font(UIFont.customBody(size: 14.0))) + .keyboardType(.URL) + .autocapitalization(.none) + .disableAutocorrection(true) + .frame(height: 45.0, alignment: .leading) + } + } + .padding(.leading, 10) + .padding(.trailing, 5) + + + } Spacer() @@ -76,30 +102,23 @@ struct UnstoppableDomainView: View { .padding(.trailing, 18) } } - }.onReceive(viewModel.$searchString, perform: { currentString in - - // Description: the minmum domain length is 4 e.g.; 'a.zil' - // Enabling the button when the domain string is at least 4 chars long - - shouldDisableLookupButton = currentString.count < 4 - - }) - .disabled(shouldDisableLookupButton) + } } Spacer() Rectangle() .fill(Color(UIColor.secondaryBorder)) .frame(height: 1.0) - } + }.padding(.leading, 20) HStack { Text(S.Fragments.or) - .frame(width: 70, height: 12, alignment: .center) + .frame(width: 70, height: 20, alignment: .center) .font(Font(UIFont.customBody(size: 15.0))) .foregroundColor(Color(UIColor.grayTextTint)) .background(Color.white) - .padding(.top, -35) + .frame(width: 160, height: 20.0, alignment: .center) + .padding(.top, -50) .padding(.leading, 60) Spacer() } diff --git a/loafwallet/UnstoppableDomainViewModel.swift b/loafwallet/UnstoppableDomainViewModel.swift index c33cb334f..9c3590634 100644 --- a/loafwallet/UnstoppableDomainViewModel.swift +++ b/loafwallet/UnstoppableDomainViewModel.swift @@ -18,7 +18,7 @@ class UnstoppableDomainViewModel: ObservableObject { var searchString: String = "" @Published - var placeholderString: String = S.Send.UnstoppableDomains.placeholder + var placeholderString: String = S.Send.UnstoppableDomains.placeholder @Published var isDomainResolving: Bool = false @@ -61,99 +61,58 @@ class UnstoppableDomainViewModel: ObservableObject { } private func resolveUDAddress(domainName: String) { - + // This group is created to allow the threads to complete. - // Otherwise, we may never get in the callback relative to UDR v0.1.6 + // Otherwise, we may never get in the callback relative to UDR v4.0.0 let group = DispatchGroup() - let keyPath = Partner.partnerKeyPath(name: .infura) - // print("::: \(keyPath)") - -// guard let resolution = try? Resolution(configs: Configurations( -// uns: NamingServiceConfig( -// providerUrl: keyPath, -// network: "mainnet") -// ) -// ) else { -// print ("Error: Resolution library not initialized") -// return -// }; - - guard let resolution = try? Resolution( - configs: Configurations( - uns: UnsLocations( - layer1: NamingServiceConfig( - providerUrl: "https://rinkeby.infura.io/v3/" + keyPath, - network: "rinkeby"), - layer2: NamingServiceConfig( - providerUrl: "https://polygon-mumbai.infura.io/v3/" + keyPath, - network: "polygon-mumbai") - ), - zns: NamingServiceConfig( - providerUrl: "https://dev-api.zilliqa.com", - network: "testnet") - ) - ) else { - print ("Init of Resolution instance with custom parameters failed...") + guard let resolution = try? Resolution() else { + print ("Init of Resolution instance with default parameters failed...") return } - - - -// guard let resolution = try? Resolution(configs: Configurations( -// cns: NamingServiceConfig( -// providerUrl: keyPath, -// network: "mainnet") -// ) -// ) else { -// print ("Error: Resolution library not initialized") -// return -// }; - + group.enter() - + resolution.addr(domain: domainName, ticker: "ltc") { result in - + switch result { case .success(let returnValue): - + let timestamp: String = self.dateFormatter?.string(from: Date()) ?? "" - + LWAnalytics.logEventWithParameters(itemName: CustomEvent._20201121_DRIA, properties: ["success_time": timestamp]) - + ///Quicker resolution: When the resolution is done, the activity indicatior stops and the address is updated DispatchQueue.main.async { self.ltcAddress = returnValue self.didResolveUDAddress?(self.ltcAddress) self.isDomainResolving = false } - + case .failure(let error): - print(error) let errorMessage = DomainResolutionFailure().messageWith(error: error) let timestamp: String = self.dateFormatter?.string(from: Date()) ?? "" - + LWAnalytics.logEventWithParameters(itemName: CustomEvent._20201121_FRIA, properties: ["failure_time": timestamp, "error_message":errorMessage, "error":error.localizedDescription]) - - ///Quicker resolution: When the resolution is done, the activity indicatior stops and the address is updated + DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: { - + self.didFailToResolve?(error.localizedDescription) self.didFailToResolve?(errorMessage) self.isDomainResolving = false - + }) } - group.leave() + group.leave() } group.wait() } diff --git a/loafwallet/src/Constants/Strings.swift b/loafwallet/src/Constants/Strings.swift index 86c045864..679640c1f 100644 --- a/loafwallet/src/Constants/Strings.swift +++ b/loafwallet/src/Constants/Strings.swift @@ -99,7 +99,7 @@ enum S { static let barItemTitle = NSLocalizedString("Send.barItemTitle", value: "**Send**", comment: "Send Bar Item Title") enum UnstoppableDomains { - static let placeholder = NSLocalizedString("Send.UnstoppableDomains.placeholder", value: "**Enter a .crypto or .zil domain**", comment: "Enter a .crypto or .zil domain") + static let placeholder = NSLocalizedString("Send.UnstoppableDomains.placeholder", value: "**Enter a .crypto or .zil domain**", comment: "Enter a .crypto,.zil domain") static let lookup = NSLocalizedString("Send.UnstoppableDomains.lookup", value: "**Lookup**", comment: "Lookup") static let lookupFailureHeader = NSLocalizedString("Send.UnstoppableDomains.lookupFailureHeader", value: "**LookupFailureHeader**", comment: "lookupFailureHeader") static let lookupDomainError = NSLocalizedString("Send.UnstoppableDomains.lookupDomainError", value: "**LookupDomainError**", comment: "LookupDomainError") diff --git a/loafwallet/src/Strings/Base.lproj/Localizable.strings b/loafwallet/src/Strings/Base.lproj/Localizable.strings index 5eb8239f5..d84f65e4b 100644 --- a/loafwallet/src/Strings/Base.lproj/Localizable.strings +++ b/loafwallet/src/Strings/Base.lproj/Localizable.strings @@ -1220,7 +1220,7 @@ "MenuButton.customer.support" = "Customer support"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Enter a .crypto or .zil domain"; +"Send.UnstoppableDomains.placeholder" = "Enter a .crypto, .wallet, .zil, .nft, .blockchain,\n.bitcoin, .coin, .888, .dao, or .x domain."; /* Or */ "Fragment.or" = "or"; diff --git a/loafwallet/src/Strings/de.lproj/Localizable.strings b/loafwallet/src/Strings/de.lproj/Localizable.strings index e1757f705..8b262432a 100755 --- a/loafwallet/src/Strings/de.lproj/Localizable.strings +++ b/loafwallet/src/Strings/de.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Lookup failed"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Geben Sie eine .crypto- oder .zil-Domain ein"; +"Send.UnstoppableDomains.placeholder" = "Geben Sie eine .crypto-, .wallet-, .zil-, .nft-, .blockchain-, .bitcoin-, .coin-, .888-, .dao- oder .x-Domäne ein."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "System-Lookup-Problem. [Error: %2$d]"; diff --git a/loafwallet/src/Strings/en.lproj/Localizable.strings b/loafwallet/src/Strings/en.lproj/Localizable.strings index 165396276..b22c157df 100644 --- a/loafwallet/src/Strings/en.lproj/Localizable.strings +++ b/loafwallet/src/Strings/en.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Lookup failed"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Enter a .crypto or .zil domain"; +"Send.UnstoppableDomains.placeholder" = "Enter a .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao, or .x domain."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "System lookup problem. [Error:%2$d]"; diff --git a/loafwallet/src/Strings/es.lproj/Localizable.strings b/loafwallet/src/Strings/es.lproj/Localizable.strings index 105743630..72fc305e2 100755 --- a/loafwallet/src/Strings/es.lproj/Localizable.strings +++ b/loafwallet/src/Strings/es.lproj/Localizable.strings @@ -964,7 +964,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Búsqueda fallida"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Ingrese un dominio .crypto o .zil"; +"Send.UnstoppableDomains.placeholder" = "Ingrese un dominio .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao o .x."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "Problema de búsqueda del sistema. [Error: %2$d]"; diff --git a/loafwallet/src/Strings/fr.lproj/Localizable.strings b/loafwallet/src/Strings/fr.lproj/Localizable.strings index 2f0a9748f..66b7ab23d 100755 --- a/loafwallet/src/Strings/fr.lproj/Localizable.strings +++ b/loafwallet/src/Strings/fr.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "La recherche a échoué"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Entrez un domaine .crypto ou .zil"; +"Send.UnstoppableDomains.placeholder" = "Saisissez un domaine .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao ou .x."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "Problème de recherche système. [Erreur: %2$d]"; diff --git a/loafwallet/src/Strings/id.lproj/Localizable.strings b/loafwallet/src/Strings/id.lproj/Localizable.strings index d1ba00c6a..c7c7e0b9b 100644 --- a/loafwallet/src/Strings/id.lproj/Localizable.strings +++ b/loafwallet/src/Strings/id.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Pencarian gagal"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Masukkan domain .crypto atau .zil"; +"Send.UnstoppableDomains.placeholder" = "Masukkan domain .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao, atau .x."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "Masalah pencarian sistem. [Kesalahan: %2$d]"; diff --git a/loafwallet/src/Strings/it.lproj/Localizable.strings b/loafwallet/src/Strings/it.lproj/Localizable.strings index 32bf90521..a685f4360 100755 --- a/loafwallet/src/Strings/it.lproj/Localizable.strings +++ b/loafwallet/src/Strings/it.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Ricerca non riuscita"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Inserisci un dominio .crypto o .zil"; +"Send.UnstoppableDomains.placeholder" = "Inserisci un dominio .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao o .x."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "Problema di ricerca nel sistema. [Errore: %2$d]"; diff --git a/loafwallet/src/Strings/ja.lproj/Localizable.strings b/loafwallet/src/Strings/ja.lproj/Localizable.strings index d67fa29b7..72cb9b8fe 100755 --- a/loafwallet/src/Strings/ja.lproj/Localizable.strings +++ b/loafwallet/src/Strings/ja.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "ルックアップに失敗しました"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = ".cryptoまたは.zilドメインを入力してください"; +"Send.UnstoppableDomains.placeholder" = ".crypto、.wallet、.zil、.nft、.blockchain、.bitcoin、.coin、.888、.dao、または.xドメインを入力します。"; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "システムルックアップの問題。 [エラー: %2$d]"; diff --git a/loafwallet/src/Strings/ko.lproj/Localizable.strings b/loafwallet/src/Strings/ko.lproj/Localizable.strings index f061e8d26..9422c2517 100755 --- a/loafwallet/src/Strings/ko.lproj/Localizable.strings +++ b/loafwallet/src/Strings/ko.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "조회 실패"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = ".crypto 또는 .zil 도메인을 입력하세요."; +"Send.UnstoppableDomains.placeholder" = ".crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao 또는 .x 도메인을 입력하세요."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "시스템 조회 문제입니다. [오류 : %2$d]"; diff --git a/loafwallet/src/Strings/pt.lproj/Localizable.strings b/loafwallet/src/Strings/pt.lproj/Localizable.strings index dd1678395..58742254b 100755 --- a/loafwallet/src/Strings/pt.lproj/Localizable.strings +++ b/loafwallet/src/Strings/pt.lproj/Localizable.strings @@ -963,7 +963,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Pesquisa falhou"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Insira um domínio .crypto ou .zil"; +"Send.UnstoppableDomains.placeholder" = "Insira um domínio .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao ou .x."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "Problema de pesquisa do sistema. [Erro: %2$d]"; diff --git a/loafwallet/src/Strings/ru.lproj/Localizable.strings b/loafwallet/src/Strings/ru.lproj/Localizable.strings index 7c6c24649..c601da385 100755 --- a/loafwallet/src/Strings/ru.lproj/Localizable.strings +++ b/loafwallet/src/Strings/ru.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Ошибка поиска"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Введите домен .crypto или .zil"; +"Send.UnstoppableDomains.placeholder" = "Введите домен .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao или .x."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "Проблема с поиском в системе. [Ошибка: %2$d]"; diff --git a/loafwallet/src/Strings/tr.lproj/Localizable.strings b/loafwallet/src/Strings/tr.lproj/Localizable.strings index fc07aabc2..a694cc84f 100644 --- a/loafwallet/src/Strings/tr.lproj/Localizable.strings +++ b/loafwallet/src/Strings/tr.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "Arama başarısız oldu"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "Bir .crypto veya .zil alanı girin"; +"Send.UnstoppableDomains.placeholder" = "Bir .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao veya .x alan adı girin."; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "Sistem arama sorunu. [Hata:%2$d]"; diff --git a/loafwallet/src/Strings/uk.lproj/Localizable.strings b/loafwallet/src/Strings/uk.lproj/Localizable.strings new file mode 100644 index 000000000..66f4df7ed --- /dev/null +++ b/loafwallet/src/Strings/uk.lproj/Localizable.strings @@ -0,0 +1,1439 @@ +/* About screen website label */ +"About.blog" = "веб-сайт"; + +/* About screen footer */ +"About.footer" = "Зроблено командою LiteWallet\of\Litecoin Foundation\n%1$@"; + +/* Privay Policy button label */ +"About.privacy" = "Політика конфіденційності"; + +/* About screen reddit label */ +"About.reddit" = "Reddit"; + +/* About screen title */ +"About.title" = "Про"; + +/* About screen twitter label */ +"About.twitter" = "Twitter"; + +/* Close modal button accessibility label */ +"AccessibilityLabels.close" = "Закрити"; + +/* Support center accessibiliy label */ +"AccessibilityLabels.faq" = "Центр підтримки"; + +/* Loading Wallet Message */ +"Account.loadingMessage" = "Завантаження гаманця"; + +/* Default wallet name */ +"AccountHeader.defaultWalletName" = "Мій Litewallet"; + +/* Manage wallet button title */ +"AccountHeader.manageButtonName" = "КЕРУВАТИ"; + +/* Corruption Error alert title */ +"Alert.corruptionError" = "Локальна корупційна помилка"; + +/* Corruption Error alert title */ +"Alert.corruptionMessage" = "Ваша локальна база даних пошкоджена. Щоб оновити, перейдіть до Налаштування > Блокчейн: Налаштування > Видалити базу даних"; + +/* Error alert title */ +"Alert.error" = "Помилка"; + +/* No internet alert message */ +"Alert.noInternet" = "Не знайдено підключення до Інтернету. Перевірте підключення та спробуйте ще раз."; + +/* Warning alert title */ +"Alert.warning" = "Увага"; + +/* 'the addresses were copied'' Alert title */ +"Alerts.copiedAddressesHeader" = "Адреси скопійовано"; + +/* Addresses Copied Alert sub header */ +"Alerts.copiedAddressesSubheader" = "Усі адреси гаманців успішно скопійовано."; + +/* Alert Header Label (the paper key was set) */ +"Alerts.paperKeySet" = "Набір паперових ключів"; + +/* Alert Subheader label (playfully positive) */ +"Alerts.paperKeySetSubheader" = "Чудово!"; + +/* Alert Header label (the PIN was set) */ +"Alerts.pinSet" = "PIN набір"; + +/* Resolved Success */ +"Alerts.resolvedSuccess" = "Роздільна здатність домену"; + +/* No comment provided by engineer. */ +"Alerts.resolvedSuccessSubheader" = "Адреса вирішена!"; + +/* Send failure alert header label (the send failed to happen) */ +"Alerts.sendFailure" = "Не вдалося надіслати"; + +/* Send success alert header label (confirmation that the send happened) */ +"Alerts.sendSuccess" = "Надіслати підтвердження"; + +/* Send success alert subheader label (e.g. the money was sent) */ +"Alerts.sendSuccessSubheader" = "Гроші надіслані!"; + +/* JSON Serialization error message */ +"ApiClient.jsonError" = "JПомилка серіалізації JSON"; + +/* Wallet not ready error message */ +"ApiClient.notReady" = "Гаманець не готовий"; + +/* API Token error message */ +"ApiClient.tokenError" = "Не вдається отримати маркер API"; + +/* buy button */ +"Button.buy" = "купити"; + +/* Cancel button label */ +"Button.cancel" = "Скасувати"; + +/* Ignore button label */ +"Button.ignore" = "Ігнорувати"; + +/* menu button */ +"Button.menu" = "меню"; + +/* No button */ +"Button.no" = "Ні"; + +/* OK button label */ +"Button.ok" = "гаразд"; + +/* receive button */ +"Button.receive" = "отримувати"; + +/* resetFields */ +"Button.resetFields" = "Скинути поля"; + +/* send button */ +"Button.send" = "відправити"; + +/* Settings button label */ +"Button.settings" = "Налаштування"; + +/* Settings button label */ +"Button.submit" = "Подати"; + +/* Yes button */ +"Button.yes" = "Так"; + +/* Buy Bar Item Title */ +"BuyCenter.barItemTitle" = "КУПИТИ"; + +/* Bitrefill buy financial details */ +"BuyCenter.bitrefillFinancialDetails" = "• Купуйте подарункові карти\n• Поповніть передплачені телефони\n• Steam, Amazon, Hotels.comПрацює в 170 країнах"; + +/* Bitrefill Title */ +"BuyCenter.BitrefillTitle" = "Bitrefill"; + +/* Changelly buy financial details */ +"BuyCenter.changellyFinancialDetails" = "• Змініть Litecoin на інші криптовалюти\n• Ідентифікатор не потрібен\n• Купуйте за допомогою кредитної картки\n• Глобальне покриття"; + +/* Changelly Title */ +"BuyCenter.changellyTitle" = "Changelly"; + +/* Buy Modal Title */ +"BuyCenter.ModalTitle" = "Купуйте Łitecoin"; + +/* Moonpay buy financial details */ +"BuyCenter.moonpayFinancialDetails" = "• Купуйте LTC за допомогою багатьох фіатних пар\n• Сплачуйте кількома способами\n• Глобальний постачальник платежів"; + +/* Moonpay Title */ +"BuyCenter.moonpayTitle" = "Moonpay"; + +/* Simplex buy financial details */ +"BuyCenter.simplexFinancialDetails" = "• Отримайте Litecoin за 5 хвилин!\n• Купуйте Litecoin за допомогою кредитної картки\n• Паспорт або посвідчення особи штату"; + +/* Simplex Title */ +"BuyCenter.simplexTitle" = "Simplex"; + +/* Buy Center Title */ +"BuyCenter.title" = "Купуйте Litecoin"; + +/* Camera plugin instruction */ +"CameraPlugin.centerInstruction" = "Центруйте свій ідентифікатор у полі"; + +/* $53.09/L + 1.07% */ +"Confirmation.amountDetailLabel" = "Деталі обміну:"; + +/* Amount to Send: ($1.00) */ +"Confirmation.amountLabel" = "Сума для відправки:"; + +/* Amount to Donate: ($1.00) */ +"Confirmation.donateLabel" = "Сума для пожертвування:"; + +/* Network Fee: ($1.00) */ +"Confirmation.feeLabel" = "Плата за мережу:"; + +/* eg. Processing with Donation time: This transaction will take 10-30 minutes to process. */ +"Confirmation.processingAndDonationTime" = "Час обробки: обробка цих трансакцій займе %1$@ хвилин."; + +/* eg. Processing time: This transaction will take 10-30 minutes to process. */ +"Confirmation.processingTime" = "Час обробки: обробка цієї транзакції займе %1$@ хвилин."; + +/* Send: (amount) */ +"Confirmation.send" = "Надіслати"; + +/* Short Network Fee: ($1.00) */ +"Confirmation.shortFeeLabel" = "ЗБОР:"; + +/* Address label */ +"Confirmation.staticAddressLabel" = "АДРЕСА:"; + +/* Confirmation Screen title */ +"Confirmation.title" = "Підтвердження"; + +/* To: (address) */ +"Confirmation.to" = "До"; + +/* Total Cost: ($5.00) */ +"Confirmation.totalLabel" = "Загальна вартість:"; + +/* Confirm paper phrase error message */ +"ConfirmPaperPhrase.error" = "Введені слова не відповідають вашому паперовому ключу. Будь ласка спробуйте ще раз."; + +/* Confirm paper phrase view label. */ +"ConfirmPaperPhrase.label" = "Щоб переконатися, що все було записано правильно, будь ласка, введіть наступні слова з паперового ключа."; + +/* Word label eg. Word #1, Word #2 */ +"ConfirmPaperPhrase.word" = "слово #%1$@"; + +/* as of a time or date */ +"Conjunction.asOf" = "щодо"; + +/* No comment provided by engineer. */ +"Copy" = "Копія"; + +/* Litecoin denomination picker label */ +"DefaultCurrency.bitcoinLabel" = "Litecoin Блок дисплея"; + +/* Label to pick fiat */ +"DefaultCurrency.chooseFiatLabel" = "Виберіть:"; + +/* Exchange rate label */ +"DefaultCurrency.rateLabel" = "Курс валюти"; + +/* Email unavailable alert title */ +"ErrorMessages.emailUnavailableMessage" = "Цей пристрій не налаштовано на надсилання електронної пошти за допомогою поштової програми iOS."; + +/* Email unavailable alert title */ +"ErrorMessages.emailUnavailableTitle" = "Електронна пошта недоступна"; + +/* Messaging unavailable alert title */ +"ErrorMessages.messagingUnavailableMessage" = "Цей пристрій не налаштовано на надсилання повідомлень."; + +/* Messaging unavailable alert title */ +"ErrorMessages.messagingUnavailableTitle" = "Повідомлення недоступні"; + +/* You can customize your Face ID Spending Limit from the [TouchIdSettings.linkText gets added here as a button] */ +"FaceIDSettings.customizeText" = "Ви можете налаштувати ліміт витрат на Face ID за допомогою %1$@."; + +/* Face ID screen label */ +"FaceIDSettings.label" = "Використовуйте своє обличчя, щоб розблокувати свій Litewallet і надсилати гроші до встановленого ліміту."; + +/* Link Text (see TouchIdSettings.customizeText) */ +"FaceIDSettings.linkText" = "Екран ліміту витрат Face ID"; + +/* Face id switch label. */ +"FaceIDSettings.switchLabel" = "Увімкнути Face ID для Litewallet"; + +/* Face ID settings view title */ +"FaceIDSettings.title" = "Face ID"; + +/* Face ID unavailable alert message */ +"FaceIDSettings.unavailableAlertMessage" = "Ви не налаштували Face ID на цьому пристрої. Перейдіть у Налаштування->Face ID і пароль, щоб налаштувати його зараз."; + +/* Face ID unavailable alert title */ +"FaceIDSettings.unavailableAlertTitle" = "Face ID не налаштовано"; + +/* Face Id spending limit screen title */ +"FaceIDSpendingLimit.title" = "Ліміт витрат на Face ID"; + +/* Economy fee */ +"FeeSelector.economy" = "Економіка"; + +/* Fee Selector economy fee description */ +"FeeSelector.economyLabel" = "Орієнтовна доставка: більше 10 хвилин"; + +/* Warning message for economy fee */ +"FeeSelector.economyWarning" = "Цей параметр не рекомендується для чутливих до часу транзакцій."; + +/* Luxury fee */ +"FeeSelector.luxury" = "Розкіш"; + +/* Fee Selector economy fee description */ +"FeeSelector.luxuryLabel" = "Орієнтовна доставка: 2,5 - 5+ хвилин"; + +/* Message for luxury fee */ +"FeeSelector.luxuryMessage" = "Ця опція практично гарантує прийняття вашої транзакції, хоча ви платите премію."; + +/* Regular fee */ +"FeeSelector.regular" = "Звичайний"; + +/* Fee Selector regular fee description */ +"FeeSelector.regularLabel" = "Орієнтовна доставка: 2,5 - 5+ хвилин"; + +/* Fee Selector title */ +"FeeSelector.title" = "Швидкість обробки"; + +/* Confirm */ +"Fragment.confirm" = "підтвердити"; + +/* Or */ +"Fragment.or" = "або"; + +/* sorry */ +"Fragment.sorry" = "вибачте"; + +/* to */ +"Fragment.to" = "до"; + +/* History Bar Item Title */ +"History.barItemTitle" = "ІСТОРІЯ"; + +/* History Current Litecoin Value */ +"History.currentLitecoinValue" = "Поточне значення LTC в"; + +/* Checking private key balance progress view text */ +"Import.checking" = "Перевірка балансу приватного ключа..."; + +/* Sweep private key confirmation message */ +"Import.confirm" = "Надіслати %1$@ з цього приватного ключа у свій гаманець? Мережа Litecoin отримає комісію в розмірі %2$@."; + +/* Duplicate key error message */ +"Import.Error.duplicate" = "Цей приватний ключ уже є у вашому гаманці."; + +/* empty private key error message */ +"Import.Error.empty" = "Цей закритий ключ порожній."; + +/* High fees error message */ +"Import.Error.highFees" = "Комісія за транзакцію буде коштувати більше, ніж кошти, доступні на цьому приватному ключі."; + +/* Not a valid private key error message */ +"Import.Error.notValid" = "Недійсний закритий ключ"; + +/* Import signing error message */ +"Import.Error.signing" = "Помилка підписання транзакції"; + +/* Import button label */ +"Import.importButton" = "Імпорт"; + +/* Importing wallet progress view label */ +"Import.importing" = "Імпорт гаманця"; + +/* Caption for graphics */ +"Import.leftCaption" = "Гаманець для імпорту"; + +/* Import wallet intro screen message */ +"Import.message" = "Імпорт гаманця передає всі гроші з вашого іншого гаманця у ваш гаманець Litewallet за допомогою однієї транзакції."; + +/* Enter password alert view title */ +"Import.password" = "Цей закритий ключ захищений паролем."; + +/* password textfield placeholder */ +"Import.passwordPlaceholder" = "пароль"; + +/* Caption for graphics */ +"Import.rightCaption" = "Ваш гаманець Litewallet"; + +/* Scan Private key button label */ +"Import.scan" = "Сканувати приватний ключ"; + +/* Import wallet success alert title */ +"Import.success" = "Успіх"; + +/* Successfully imported wallet message body */ +"Import.SuccessBody" = "Гаманець успішно імпортовано."; + +/* Import Wallet screen title */ +"Import.title" = "Імпорт гаманця"; + +/* Unlocking Private key activity view message. */ +"Import.unlockingActivity" = "Ключ розблокування"; + +/* Import wallet intro warning message */ +"Import.warning" = "Імпорт гаманця не включає історію транзакцій чи інші деталі."; + +/* Wrong password alert message */ +"Import.wrongPassword" = "Неправильний пароль, спробуйте ще раз."; + +/* Close app button */ +"JailbreakWarnings.close" = "Закрити"; + +/* Ignore jailbreak warning button */ +"JailbreakWarnings.ignore" = "Ігнорувати"; + +/* Jailbreak warning message */ +"JailbreakWarnings.messageWithBalance" = "БЕЗПЕКА ПРИСТРОЮ ПОГРУЗАНА\n Будь-який додаток для втечі з в’язниці може отримати доступ до даних брелока Litewallet і вкрасти ваш Litecoin! Негайно зітріть цей гаманець і відновіть його на захищеному пристрої."; + +/* Jailbreak warning message */ +"JailbreakWarnings.messageWithoutBalance" = "БЕЗПЕКА ПРИСТРОЮ ПОГІДРЕНО\n Будь-який додаток для втечі з в’язниці може отримати доступ до даних брелока Litewallet і вкрасти ваш Litecoin. Будь ласка, використовуйте Litewallet лише на пристрої без джейлбрейка."; + +/* Jailbreak warning title */ +"JailbreakWarnings.title" = "УВАГА"; + +/* Wipe wallet button */ +"JailbreakWarnings.wipe" = "Витерти"; + +/* Card Bar Item Title */ +"LitecoinCard.barItemTitle" = "Картка"; + +/* Card balance */ +"LitecoinCard.cardBalance" = "Баланс картки"; + +/* Message when 2FA is off and user is viewing the Card Balance */ +"LitecoinCard.cardBalanceOnlyDescription" = "Вийдіть із системи та ввімкніть 2FA, щоб дозволити перекази"; + +/* Features and limitations */ +"LitecoinCard.Disclaimer.bullets" = "- Реєстрація та вхід\n- Доступний баланс картки\n- Скидання пароля\n- Немає переказу на Litewallet\n- Лише в США"; + +/* Description of the status */ +"LitecoinCard.Disclaimer.description" = "Наразі Litecoin Card має обмежену функціональність у Litewallet."; + +/* Referral to the website */ +"LitecoinCard.Disclaimer.referral" = "Відвідайте litecoin.getblockcard.com для повного доступу"; + +/* Beta Testing Litecoin Card */ +"LitecoinCard.Disclaimer.title" = "Бета-версія картки Litecoin"; + +/* Enter code */ +"LitecoinCard.enterCode" = "Введіть код"; + +/* Enter code details */ +"LitecoinCard.enterCode.detail" = "Введіть код, який нещодавно був надісланий на електронну адресу вашого облікового запису Litecoin Card."; + +/* Failed Login */ +"LitecoinCard.failed.login" = "Помилка логіну"; + +/* Forgot password? */ +"LitecoinCard.forgotPassword" = "Забули пароль?"; + +/* Login */ +"LitecoinCard.login" = "Увійти"; + +/* Logout */ +"LitecoinCard.logout" = "Вийти"; + +/* Card Bar Item Title */ +"LitecoinCard.name" = "Картка Litecoin"; + +/* Register */ +"LitecoinCard.registerCard" = "Реєстрація"; + +/* Litecoin card */ +"LitecoinCard.registerCardPhrase" = "Зареєструйтеся на карту Litecoin"; + +/* Registering user... */ +"LitecoinCard.registering.user" = "Реєстрація користувача..."; + +/* address */ +"LitecoinCard.Registration.address" = "Адреса"; + +/* city */ +"LitecoinCard.Registration.city" = "Місто"; + +/* confirm password */ +"LitecoinCard.Registration.confirmPassword" = "Підтвердьте пароль"; + +/* country */ +"LitecoinCard.Registration.country" = "Країна"; + +/* First name */ +"LitecoinCard.Registration.firstName" = "Ім'я"; + +/* identification */ +"LitecoinCard.Registration.identification" = "Ідентифікація"; + +/* kycIDNumber */ +"LitecoinCard.Registration.kycIDNumber" = "Номер документа"; + +/* kycIDType */ +"LitecoinCard.Registration.kycIDType" = "Тип ідентифікатора"; + +/* SSN */ +"LitecoinCard.Registration.kycSSN" = "SSN"; + +/* Last name */ +"LitecoinCard.Registration.lastName" = "Прізвище"; + +/* mobile number */ +"LitecoinCard.Registration.mobileNumber" = "Номер мобільного"; + +/* password */ +"LitecoinCard.Registration.password" = "Пароль"; + +/* state province */ +"LitecoinCard.Registration.stateProvince" = "штат / провінція"; + +/* registraition username / email */ +"LitecoinCard.Registration.usernameEmail" = "Електронна пошта (ім'я користувача)"; + +/* must not be empty */ +"LitecoinCard.Registration.ValidationError.empty" = "Не має бути порожнім"; + +/* Invalid email address */ +"LitecoinCard.Registration.ValidationError.invalidEmail" = "Невірна адреса електронної пошти"; + +/* Mobile number 10 digits required */ +"LitecoinCard.Registration.ValidationError.numberDigitsRequired" = "Номер мобільного телефону має містити не менше 10 цифр"; + +/* Mobile number required */ +"LitecoinCard.Registration.ValidationError.numberRequired" = "Необхідний номер мобільного телефону"; + +/* 6 Password characters required */ +"LitecoinCard.Registration.ValidationError.passwordCharacters" = "Пароль має містити не менше 6 символів"; + +/* Captial and numeric password characters required */ +"LitecoinCard.Registration.ValidationError.passwordComposition" = "Пароль має містити більше 6 символів, принаймні один символ і один символ цифри"; + +/* Password required */ +"LitecoinCard.Registration.ValidationError.passwordRequired" = "Пароль обов'язковий"; + +/* Required field */ +"LitecoinCard.Registration.ValidationError.requiredField" = "Обов'язкове поле"; + +/* zip post Code */ +"LitecoinCard.Registration.zipPostCode" = "Поштовий індекс"; + +/* Registration failure */ +"LitecoinCard.registrationFailure" = "Виникла проблема з вашою реєстрацією. \nПеревірте свої дані та повторіть спробу."; + +/* Registration success */ +"LitecoinCard.registrationSuccess" = "Ви зареєструвалися!\nПеревірте та підтвердьте свою електронну пошту. Потім поверніться до входу."; + +/* Reset Litecoin card password */ +"LitecoinCard.resetPassword" = "Скинути пароль"; + +/* Reset password detail */ +"LitecoinCard.resetPasswordDetail" = "Введіть адресу електронної пошти, пов’язану з вашим обліковим записом картки Litecoin, і знайдіть лист із інструкціями для скидання."; + +/* Transfer to card label */ +"LitecoinCard.Transfer.amountToCard" = "Переказ на картку"; + +/* Transfer to Litewallet label */ +"LitecoinCard.Transfer.amountToLitewallet" = "Перевести на Litewallet"; + +/* Description of action */ +"LitecoinCard.Transfer.description" = "Виберіть гаманець для передачі:"; + +/* Destination address label */ +"LitecoinCard.Transfer.destinationAddress" = "Адреса"; + +/* Litewallet balance label */ +"LitecoinCard.Transfer.litewalletBalance" = "спрощений баланс гаманця"; + +/* Set transfer amount label */ +"LitecoinCard.Transfer.setAmount" = "Проведіть пальцем, щоб встановити суму переказу"; + +/* Start transfer label */ +"LitecoinCard.Transfer.startTransfer" = "Почати передачу"; + +/* Transfer title */ +"LitecoinCard.Transfer.title" = "Передача"; + +/* 2FA Error message */ +"LitecoinCard.twoFAErrorMessage" = "Це була помилка. Увімкніть 2FA на *Enabled*, введіть код, надісланий електронною поштою, і повторіть спробу."; + +/* Message when 2FA is off */ +"LitecoinCard.twoFAOff" = "2FA не ввімкнено"; + +/* Message when 2FA is on */ +"LitecoinCard.twoFAOn" = "2FA увімкнено"; + +/* Litecoin card visit */ +"LitecoinCard.visit.toReset" = "Відвідати https://litecoin.dashboard.getblockcard.com/password/forgot\nщоб скинути пароль."; + +/* Litewallet name */ +"Litewallet.name" = "Litewallet"; + +/* Location services disabled error */ +"LocationPlugin.disabled" = "Служби локації вимкнені."; + +/* No permissions for location services */ +"LocationPlugin.notAuthorized" = "Litewallet не має дозволу на доступ до служб локації."; + +/* No comment provided by engineer. */ +"Malformed URI" = "Неправильний URI"; + +/* Balance */ +"ManageWallet.balance" = "Баланс"; + +/* Wallet creation date prefix */ +"ManageWallet.creationDatePrefix" = "Ви створили свій гаманець на %1$@"; + +/* Manage wallet description text */ +"ManageWallet.description" = "Ім’я вашого гаманця з’являється лише в історії транзакцій вашого облікового запису і нікому не доступне."; + +/* Change Wallet name textfield label */ +"ManageWallet.textFeildLabel" = "Назва гаманця"; + +/* Manage wallet modal title */ +"ManageWallet.title" = "Керування гаманцем"; + +/* Buy Litecoin title */ +"MenuButton.buy" = "Купуйте Litecoin"; + +/* Menu button title */ +"MenuButton.customer.support" = "Підтримка клієнтів"; + +/* Menu button title */ +"MenuButton.lock" = "Блокування гаманця"; + +/* Menu button title */ +"MenuButton.security" = "Центр безпеки"; + +/* Menu button title */ +"MenuButton.settings" = "Налаштування"; + +/* Menu button title */ +"MenuButton.support" = "Підтримка"; + +/* button label */ +"MenuViewController.createButton" = "Створити новий гаманець"; + +/* Menu modal title */ +"MenuViewController.modalTitle" = "Меню"; + +/* button label */ +"MenuViewController.recoverButton" = "Відновити гаманець"; + +/* No wallet. */ +"No wallet" = "Немає гаманця"; + +/* Switch to automatic mode button label */ +"NodeSelector.automaticButton" = "Перейдіть в автоматичний режим"; + +/* Node is connected label */ +"NodeSelector.connected" = "Підключено"; + +/* Enter node ip address view body */ +"NodeSelector.enterBody" = "Введіть IP-адресу та порт вузла (необов’язково)"; + +/* Enter Node ip address view title */ +"NodeSelector.enterTitle" = "Введіть Node"; + +/* Switch to manual mode button label */ +"NodeSelector.manualButton" = "Перейти в ручний режим"; + +/* Node address label */ +"NodeSelector.nodeLabel" = "Поточний первинний вузол"; + +/* Node is not connected label */ +"NodeSelector.notConnected" = "Не під'єднано"; + +/* Node status label */ +"NodeSelector.statusLabel" = "Стан підключення вузла"; + +/* Node Selector view title */ +"NodeSelector.title" = "Вузли Litecoin"; + +/* Bad Payment request alert title */ +"PaymentProtocol.Errors.badPaymentRequest" = "Поганий запит на оплату"; + +/* Error opening payment protocol file message */ +"PaymentProtocol.Errors.corruptedDocument" = "Непідтримуваний або пошкоджений документ"; + +/* Missing certificate payment protocol error message */ +"PaymentProtocol.Errors.missingCertificate" = "відсутній сертифікат"; + +/* Request expired payment protocol error message */ +"PaymentProtocol.Errors.requestExpired" = "термін дії запиту закінчився"; + +/* Payment too small alert title */ +"PaymentProtocol.Errors.smallOutputError" = "Не вдалося здійснити платіж"; + +/* Amount too small error message */ +"PaymentProtocol.Errors.smallPayment" = "Платежі Litecoin не можуть бути меншими %1$@."; + +/* Output too small error message. */ +"PaymentProtocol.Errors.smallTransaction" = "Вихід транзакцій Litecoin не може бути меншим $@."; + +/* Unsupported signature type payment protocol error message */ +"PaymentProtocol.Errors.unsupportedSignatureType" = "непідтримуваний тип підпису"; + +/* Untrusted certificate payment protocol error message */ +"PaymentProtocol.Errors.untrustedCertificate" = "ненадійний сертифікат"; + +/* Dismiss button. */ +"Prompts.dismiss" = "ВІДХІДИТИ"; + +/* Enable face ID prompt body */ +"Prompts.FaceId.body" = "Торкніться тут, щоб увімкнути Face ID"; + +/* Enable face ID prompt title */ +"Prompts.FaceId.title" = "Увімкніть Face ID"; + +/* No passcode set warning body */ +"Prompts.NoPasscode.body" = "Для захисту вашого гаманця потрібен пароль пристрою."; + +/* No Passcode set warning title */ +"Prompts.NoPasscode.title" = "Увімкніть пароль пристрою"; + +/* Affirm button title. */ +"Prompts.PaperKey.affirm" = "Продовжуйте"; + +/* Warning about paper key. */ +"Prompts.PaperKey.body" = "Ваш паперовий ключ необхідно зберігати в безпечному місці. Це єдиний спосіб змінити або відновити свій гаманець Luno або передати біткойн. Будь ласка, запишіть це."; + +/* Cancel button. */ +"Prompts.PaperKey.cancel" = "Скасувати"; + +/* Enable button. */ +"Prompts.PaperKey.enable" = "Увімкнути"; + +/* An action is required (You must do this action). */ +"Prompts.PaperKey.title" = "Потрібна дія"; + +/* Transaction rejected prompt body */ +"Prompts.RecommendRescan.body" = "Можливо, ваш гаманець не синхронізований. Часто це можна виправити шляхом повторного сканування блокчейну."; + +/* Transaction rejected prompt title */ +"Prompts.RecommendRescan.title" = "Транзакція відхилена"; + +/* Upgrade PIN prompt body. */ +"Prompts.SetPin.body" = "Для Litewallet потрібен 6-значний PIN-код. Будь ласка, встановіть та зберігайте свій PIN-код у безпечному місці."; + +/* Upgrade PIN prompt title. */ +"Prompts.SetPin.title" = "Встановити PIN-код"; + +/* Share data prompt body */ +"Prompts.ShareData.body" = "Допоможіть покращити Litewallet, поділившись з нами своїми анонімними даними"; + +/* Share data prompt title */ +"Prompts.ShareData.title" = "Поділіться анонімними даними"; + +/* Enable touch ID prompt body */ +"Prompts.TouchId.body" = "Торкніться тут, щоб увімкнути Touch ID"; + +/* Enable touch ID prompt title */ +"Prompts.TouchId.title" = "Увімкнути Touch ID"; + +/* Push notifications settings view body */ +"PushNotifications.body" = "Увімкніть сповіщення, щоб у майбутньому отримувати спеціальні повідомлення від Litewallet."; + +/* Push notifications toggle switch label */ +"PushNotifications.label" = "Push-повідомлення"; + +/* Push notifications are off label */ +"PushNotifications.off" = "Вимкнено"; + +/* Push notifications are on label */ +"PushNotifications.on" = "Увімкнено"; + +/* Push notifications settings view title label */ +"PushNotifications.title" = "Сповіщення"; + +/* Receive Bar Item Title */ +"Receive.barItemTitle" = "ОТРИМАТИ"; + +/* Address copied message. */ +"Receive.copied" = "Скопійовано в буфер обміну."; + +/* Share via email button label */ +"Receive.emailButton" = "Електронна пошта"; + +/* Request button label */ +"Receive.request" = "Запит на суму"; + +/* Share button label */ +"Receive.share" = "Поділіться"; + +/* Share via text message (SMS) */ +"Receive.textButton" = "Текстове повідомлення"; + +/* Receive modal title */ +"Receive.title" = "Отримати"; + +/* Done button text */ +"RecoverWallet.done" = "Готово"; + +/* Recover wallet header */ +"RecoverWallet.header" = "Відновити гаманець"; + +/* Reset PIN with paper key: header */ +"RecoverWallet.header_reset_pin" = "Скинути PIN-код"; + +/* Enter paper key instruction */ +"RecoverWallet.instruction" = "Введіть ключ паперу"; + +/* Recover wallet intro */ +"RecoverWallet.intro" = "Відновіть свій Litewallet за допомогою паперового ключа."; + +/* Invalid paper key message */ +"RecoverWallet.invalid" = "Паперовий ключ, який ви ввели, недійсний. Перевірте кожне слово і повторіть спробу."; + +/* Previous button accessibility label */ +"RecoverWallet.leftArrow" = "Стрілка вліво"; + +/* Next button label */ +"RecoverWallet.next" = "Далі"; + +/* Reset PIN with paper key: more information button. */ +"RecoverWallet.reset_pin_more_info" = "Торкніться тут для отримання додаткової інформації."; + +/* Next button accessibility label */ +"RecoverWallet.rightArrow" = "Стрілка вправо"; + +/* Recover wallet sub-header */ +"RecoverWallet.subheader" = "Введіть паперовий ключ для гаманця, який потрібно відновити."; + +/* Reset PIN with paper key: sub-header */ +"RecoverWallet.subheader_reset_pin" = "Щоб скинути PIN-код, введіть слова з паперового ключа в поля нижче."; + +/* No amount entered error message. */ +"RequestAnAmount.noAmount" = "Спочатку введіть суму."; + +/* Request a specific amount of Litecoin */ +"RequestAnAmount.title" = "Запит на суму"; + +/* Alert action button label */ +"ReScan.alertAction" = "Синхронізувати"; + +/* Alert message body */ +"ReScan.alertMessage" = "Ви не зможете надсилати гроші під час синхронізації."; + +/* Alert message title */ +"ReScan.alertTitle" = "Синхронізація з Blockchain?"; + +/* extimated time */ +"ReScan.body1" = "20-45 хвилин"; + +/* Syncing explanation */ +"ReScan.body2" = "Якщо транзакція відображається як завершена в мережі Litecoin, але не у вашому Litewallet."; + +/* Syncing explanation */ +"ReScan.body3" = "Ви неодноразово отримуєте повідомлення про помилку, що ваша транзакція відхилена."; + +/* Start Sync button label */ +"ReScan.buttonTitle" = "Запустити синхронізацію"; + +/* Sync blockchain view footer */ +"ReScan.footer" = "Ви не зможете надсилати гроші під час синхронізації з блокчейном."; + +/* Sync Blockchain view header */ +"ReScan.header" = "Синхронізувати блокчейн"; + +/* Subheader label */ +"ReScan.subheader1" = "Розрахунковий час"; + +/* Subheader label */ +"ReScan.subheader2" = "Коли синхронізувати?"; + +/* Reset walet button title */ +"resetButton" = "Так, скинути гаманець"; + +/* Warning Empty Wipe title */ +"resetTitle" = "Видалити мій Litewallet"; + +/* Scan Litecoin address camera flash toggle */ +"Scanner.flashButtonLabel" = "Спалах камери"; + +/* Complete filter label */ +"Search.complete" = "завершено"; + +/* Pending filter label */ +"Search.pending" = "на розгляді"; + +/* Received filter label */ +"Search.received" = "отримано"; + +/* Sent filter label */ +"Search.sent" = "надісланий"; + +/* Face ID button title */ +"SecurityCenter.faceIdTitle" = "Face ID"; + +/* Security Center Info */ +"SecurityCenter.info" = "Увімкніть усі функції безпеки для максимального захисту."; + +/* Paper Key button description */ +"SecurityCenter.paperKeyDescription" = "Єдиний спосіб отримати доступ до свого Litecoin, якщо ви втратите або оновите свій телефон."; + +/* Paper Key button title */ +"SecurityCenter.paperKeyTitle" = "Паперовий ключ"; + +/* PIN button description */ +"SecurityCenter.pinDescription" = "Захищає ваш Litewallet від неавторизованих користувачів."; + +/* PIN button title */ +"SecurityCenter.pinTitle" = "6-значний PIN-код"; + +/* Security Center Title */ +"SecurityCenter.title" = "Центр безпеки"; + +/* Touch ID/FaceID button description */ +"SecurityCenter.touchIdDescription" = "Зручно розблокуйте свій Litewallet і надсилайте гроші до встановленого ліміту."; + +/* Touch ID button title */ +"SecurityCenter.touchIdTitle" = "Touch ID"; + +/* Send money amount label */ +"Send.amountLabel" = "Сума"; + +/* Balance: $4.00 */ +"Send.balance" = "Баланс: %1$@"; + +/* Send Bar Item Title */ +"Send.barItemTitle" = "НАДІСЛАТИ"; + +/* Camera not allowed message */ +"Send.cameraunavailableMessage" = "Перейдіть до Налаштувань, щоб дозволити доступ до камери."; + +/* Camera not allowed alert title */ +"Send.cameraUnavailableTitle" = "Litewallet не має доступу до камери"; + +/* Warning when sending to self. */ +"Send.containsAddress" = "Пунктом призначення є ваша власна адреса. Ви не можете відправити собі."; + +/* Could not create transaction alert title */ +"Send.creatTransactionError" = "Не вдалося створити транзакцію."; + +/* Description for sending money label */ +"Send.descriptionLabel" = "Пам'ятка"; + +/* Empty pasteboard error message */ +"Send.emptyPasteboard" = "Картонний картон порожній"; + +/* Enter LTC Address */ +"Send.enterLTCAddress" = "Введіть адресу Litecoin"; + +/* Network Fee: $0.01 */ +"Send.fee" = "Плата за мережу: %1$@"; + +/* Payee identity not certified alert title. */ +"Send.identityNotCertified" = "Особа одержувача не підтверджена."; + +/* Insufficient funds error */ +"Send.insufficientFunds" = "Недостатньо коштів"; + +/* Invalid address alert message */ +"Send.invalidAddressMessage" = "Адреса призначення не є дійсною адресою Litecoin."; + +/* Invalid address on pasteboard message */ +"Send.invalidAddressOnPasteboard" = "Pasteboard не містить дійсної адреси Litecoin."; + +/* Invalid address alert title */ +"Send.invalidAddressTitle" = "Недійсна адреса"; + +/* Is rescanning error message */ +"Send.isRescanning" = "Під час повного повторного сканування надсилання вимкнено."; + +/* Loading request activity view message */ +"Send.loadingRequest" = "Запит на завантаження"; + +/* Empty address alert message */ +"Send.noAddress" = "Будь ласка, введіть адресу одержувача."; + +/* Emtpy amount alert message */ +"Send.noAmount" = "Будь ласка, введіть суму для відправки."; + +/* Paste button label */ +"Send.pasteLabel" = "Вставити"; + +/* Could not publish transaction alert title */ +"Send.publishTransactionError" = "Не вдалося опублікувати транзакцію."; + +/* Could not load remote request error message */ +"Send.remoteRequestError" = "Не вдалося завантажити платіжний запит"; + +/* Scan button label */ +"Send.scanLabel" = "Сканувати"; + +/* Send button label */ +"Send.sendLabel" = "Надіслати"; + +/* Send modal title */ +"Send.title" = "Надіслати"; + +/* Send money to label */ +"Send.toLabel" = "До"; + +/* Lookup */ +"Send.UnstoppableDomains.lookup" = "Пошук"; + +/* LookupDomainError */ +"Send.UnstoppableDomains.lookupDomainError" = "На жаль, домен не знайдено. [Помилка: %2$d]"; + +/* lookupFailureHeader */ +"Send.UnstoppableDomains.lookupFailureHeader" = "Помилка пошуку"; + +/* Enter to match domain name to LTC Address */ +"Send.UnstoppableDomains.placeholder" = "Введіть домен .crypto, .wallet, .zil, .nft, .blockchain, \n.bitcoin, .coin, .888, .dao або .x."; + +/* UDSystemError */ +"Send.UnstoppableDomains.udSystemError" = "Проблема пошуку системи. [Помилка: %2$d]"; + +/* Adress already used alert message - first part */ +"Send.UsedAddress.firstLine" = "Адреси Litecoin призначені лише для одноразового використання."; + +/* Adress already used alert message - second part */ +"Send.UsedAddress.secondLIne" = "Повторне використання знижує конфіденційність як для вас, так і для одержувача і може призвести до втрати, якщо одержувач безпосередньо не контролює адресу."; + +/* Adress already used alert title */ +"Send.UsedAddress.title" = "Адреса вже використана"; + +/* About label */ +"Settings.about" = "Про"; + +/* Advanced Settings title */ +"Settings.advancedTitle" = "Розширені налаштування"; + +/* Blockchain settings section header */ +"Settings.blockchain" = "Блокчейн"; + +/* Default currency label */ +"Settings.currency" = "Відображення валюти"; + +/* Current Locale */ +"Settings.currentLocale" = "Поточна мова:"; + +/* Join Early access label */ +"Settings.earlyAccess" = "Приєднуйтесь до раннього доступу"; + +/* Are you enjoying Litewallet alert message body */ +"Settings.enjoying" = "Вам подобається Litewallet?"; + +/* Face ID spending limit label */ +"Settings.faceIdLimit" = "Ліміт витрат на Face ID"; + +/* Import wallet label */ +"Settings.importTitle" = "Імпорт гаманця"; + +/* Languages label */ +"Settings.languages" = "Мови"; + +/* Litewallet environment */ +"Settings.litewallet.environment" = "Середовище:"; + +/* Litewallet Partners */ +"Settings.litewallet.partners" = "Партнери Litewallet"; + +/* Litewallet version */ +"Settings.litewallet.version" = "Версія Litewallet:"; + +/* Manage settings section header */ +"Settings.manage" = "Керувати"; + +/* Notifications label */ +"Settings.notifications" = "Сповіщення"; + +/* Leave review button label */ +"Settings.review" = "Залиште нам відгук"; + +/* Share anonymous data label */ +"Settings.shareData" = "Поділіться анонімними даними"; + +/* Litewallet Social links */ +"Settings.socialLinks" = "Соціальний"; + +/* Support settings section header */ +"Settings.support" = "Підтримка"; + +/* Sync blockchain label */ +"Settings.sync" = "Синхронізувати блокчейн"; + +/* Settings title */ +"Settings.title" = "Налаштування"; + +/* Touch ID spending limit label */ +"Settings.touchIdLimit" = "Ліміт витрат Touch ID"; + +/* Wallet Settings section header */ +"Settings.wallet" = "Wallet"; + +/* Start or recover another wallet menu label. */ +"Settings.wipe" = "Запустити/Відновити інший гаманець"; + +/* Share data view body */ +"ShareData.body" = "Допоможіть покращити Litewallet, поділившись з нами своїми анонімними даними. Це не включає фінансову інформацію. Ми поважаємо вашу фінансову конфіденційність."; + +/* Share data header */ +"ShareData.header" = "Поділитися даними?"; + +/* Share data switch label. */ +"ShareData.toggleLabel" = "Поділитися анонімними даними?"; + +/* Current spending limit: */ +"SpendingLimit.title" = "Поточний ліміт витрат: "; + +/* button label */ +"StartPaperPhrase.againButtonTitle" = "Знову запишіть паперовий ключ"; + +/* Paper key explanation text. */ +"StartPaperPhrase.body" = "Ваш паперовий ключ – це єдиний спосіб відновити Litewallet, якщо ваш телефон втрачено, вкрадено, зламано чи оновлено.\n\nМи покажемо вам список слів, які потрібно записати на аркуші паперу та зберегти в безпеці."; + +/* button label */ +"StartPaperPhrase.buttonTitle" = "Запишіть ключ на папері"; + +/* Argument is date */ +"StartPaperPhrase.date" = "Ви востаннє записали свій паперовий ключ %1$@"; + +/* Start view message */ +"StartViewController.message" = "Найбезпечніший і найбезпечніший спосіб використання Litecoin."; + +/* Support the Litecoin Foundation */ +"SupportTheFoundation.title" = "Підтримайте Litecoin Foundation"; + +/* Syncing view connection state header text */ +"SyncingHeader.connecting" = "Підключення..."; + +/* Rescanning header success state header text */ +"SyncingHeader.rescan" = "Повторне сканування..."; + +/* Syncing header success state header text */ +"SyncingHeader.success" = "Успіх!"; + +/* Syncing view syncing state header text */ +"SyncingHeader.syncing" = "Синхронізація..."; + +/* Syncing view connectiong state header text */ +"SyncingView.connecting" = "Підключення"; + +/* Syncing view syncing state header text */ +"SyncingView.syncing" = "Синхронізація"; + +/* 6 d (6 days) */ +"TimeSince.days" = "%1$@ d"; + +/* 6 h (6 hours) */ +"TimeSince.hours" = "%1$@ h"; + +/* 6 m (6 minutes) */ +"TimeSince.minutes" = "%1$@ m"; + +/* 6 s (6 seconds) */ +"TimeSince.seconds" = "%1$@ s"; + +/* You can customize your Touch ID Spending Limit from the [TouchIdSettings.linkText gets added here as a button] */ +"TouchIdSettings.customizeText" = "Ви можете налаштувати свій ліміт витрат Touch ID з %1$@."; + +/* Touch Id screen label */ +"TouchIdSettings.label" = "Використовуйте відбиток пальця, щоб розблокувати свій Litewallet і надсилати гроші до встановленого ліміту."; + +/* ł100,000 ($100) */ +"TouchIdSettings.limitValue" = "%1$@ (%2$@)"; + +/* Link Text (see TouchIdSettings.customizeText) */ +"TouchIdSettings.linkText" = "Екран ліміту витрат Touch ID"; + +/* Spending Limit: b100,000 ($100) */ +"TouchIdSettings.spendingLimit" = "Ліміт витрат: %1$@ (%2$@)"; + +/* Touch id switch label. */ +"TouchIdSettings.switchLabel" = "Увімкнути Touch ID для Litewallet"; + +/* Touch ID settings view title */ +"TouchIdSettings.title" = "Touch ID"; + +/* Touch ID unavailable alert message */ +"TouchIdSettings.unavailableAlertMessage" = "Ви не налаштували Touch ID на цьому пристрої. Перейдіть у Налаштування->Touch ID і пароль, щоб налаштувати його зараз."; + +/* Touch ID unavailable alert title */ +"TouchIdSettings.unavailableAlertTitle" = "Touch ID не налаштовано"; + +/* Always require passcode option */ +"TouchIdSpendingLimit" = "Завжди вимагайте пароль"; + +/* Touch ID spending limit screen body */ +"TouchIdSpendingLimit.body" = "Вам буде запропоновано ввести свій 6-значний PIN-код, щоб надіслати будь-яку транзакцію, яка перевищує ліміт витрат, і кожні 48 годин з моменту останнього введення 6-значного PIN-коду."; + +/* Touch Id spending limit screen title */ +"TouchIdSpendingLimit.title" = "Ліміт витрат Touch ID"; + +/* Static amount Label */ +"Transaction.amountDetailLabel" = "Інформація про суму:"; + +/* Availability status text */ +"Transaction.available" = "Доступні для витрат"; + +/* Static blockHeight Label */ +"Transaction.blockHeightLabel" = "Блокувати:"; + +/* Static comment Label */ +"Transaction.commentLabel" = "Пам'ятка:"; + +/* Transaction complete label */ +"Transaction.complete" = "Завершено"; + +/* Static end amount Label */ +"Transaction.endAmountDetailLabel" = "Інформація про кінцеву суму транзакції"; + +/* eg. Ending balance: $50.00 */ +"Transaction.ending" = "Кінцевий баланс: %1$@"; + +/* Exchange rate on date header */ +"Transaction.exchangeOnDayReceived" = "Курс обміну при отриманні:"; + +/* Exchange rate on date header */ +"Transaction.exchangeOnDaySent" = "Курс обміну при відправці:"; + +/* (b600 fee) */ +"Transaction.fee" = "(%1$@ плата)"; + +/* Invalid transaction */ +"Transaction.invalid" = "НЕДІЙСНИЙ"; + +/* Timestamp label for event that just happened */ +"Transaction.justNow" = "just now"; + +/* Receive status text: 'In progress: 20%' */ +"Transaction.receivedStatus" = "прямо зараз: %1$@"; + +/* Send status text: 'In progress: 20%' */ +"Transaction.sendingStatus" = "прямо зараз: %1$@"; + +/* eg. Starting balance: $50.00 */ +"Transaction.starting" = "Початковий баланс: %1$@"; + +/* Static starting amount Label */ +"Transaction.startingAmountDetailLabel" = "Інформація про початкову суму транзакції"; + +/* Static TX iD Label */ +"Transaction.txIDLabel" = "Tx ID:"; + +/* Waiting to be confirmed string */ +"Transaction.waiting" = "Очікування підтвердження. Деякі продавці вимагають підтвердження для завершення транзакції. Орієнтовний час: 1-2 години."; + +/* e.g. I received money from an account. */ +"TransactionDetails.account" = "рахунок"; + +/* Amount section header */ +"TransactionDetails.amountHeader" = "Сума"; + +/* Block height label */ +"TransactionDetails.blockHeightLabel" = "Підтверджено в блоку"; + +/* Memo section header */ +"TransactionDetails.commentsHeader" = "Пам'ятка"; + +/* Copied */ +"TransactionDetails.copiedAll" = "Скопійовано"; + +/* Copy all details */ +"TransactionDetails.copyAllDetails" = "Скопіюйте всі деталі"; + +/* Empty transaction list message. */ +"TransactionDetails.emptyMessage" = "Тут з’являться ваші транзакції."; + +/* [received] at
(received title 2/2) */ +"TransactionDetails.from" = "на %1$@"; + +/* Less button title */ +"TransactionDetails.less" = "Менше..."; + +/* Moved $5.00 */ +"TransactionDetails.moved" = "Переміщено %1$@"; + +/* Moved $5.00 */ +"TransactionDetails.movedAmountDescription" = "Переміщено %1@"; + +/* eg. Confirmed in Block: Not Confirmed */ +"TransactionDetails.notConfirmedBlockHeightLabel" = "Не підтверджено"; + +/* Prefix for price */ +"TransactionDetails.priceTimeStampPrefix" = "щодо"; + +/* Received $5.00 (received title 1/2) */ +"TransactionDetails.received" = "Отримано %1$@"; + +/* Received $5.00 */ +"TransactionDetails.receivedAmountDescription" = "Отримано %1@"; + +/* RECEIVE LTCTitle */ +"TransactionDetails.receivedModalTitle" = "ОТРИМАТИ АДРЕСУ"; + +/* Sent $5.00 (sent title 1/2) */ +"TransactionDetails.sent" = "Надісланий %1$@"; + +/* Sent $5.00 */ +"TransactionDetails.sentAmountDescription" = "Надісланий %1@"; + +/* Label for TXID */ +"TransactionDetails.staticTXLabel" = "TXID:"; + +/* Status section header */ +"TransactionDetails.statusHeader" = "Статус"; + +/* Transaction Details Title */ +"TransactionDetails.title" = "Transaction Details"; + +/* [sent] to
(sent title 2/2) */ +"TransactionDetails.to" = "до %1$@"; + +/* Transaction ID header */ +"TransactionDetails.txHashHeader" = "Ідентифікатор транзакції Litecoin"; + +/* (this transaction was) Received at this address: */ +"TransactionDirection.address" = "Отримано за цією адресою"; + +/* (this transaction was) Sent to this address: */ +"TransactionDirection.to" = "Надіслано на цю адресу"; + +/* Disabled until date */ +"UnlockScreen.disabled" = "Вимкнено до: %1$@"; + +/* Unlock Screen sub-header */ +"UnlockScreen.enterPin" = "Enter PIN"; + +/* Unlock with FaceID accessibility label */ +"UnlockScreen.faceIdText" = "Розблокування за допомогою FaceID"; + +/* My Address button title */ +"UnlockScreen.myAddress" = "Моя адреса"; + +/* Reset PIN with Paper Key button label. */ +"UnlockScreen.resetPin" = "Скинути PIN-код"; + +/* Scan button title */ +"UnlockScreen.scan" = "Сканувати"; + +/* TouchID/FaceID prompt text */ +"UnlockScreen.touchIdPrompt" = "Розблокуйте свій Litewallet."; + +/* Unlock with TouchID accessibility label */ +"UnlockScreen.touchIdText" = "Розблокування за допомогою TouchID"; + +/* Wallet unlocked message */ +"UnlockScreen.unlocked" = "Гаманець розблоковано"; + +/* Update PIN caption text */ +"UpdatePin.caption" = "Запам’ятайте цей PIN-код. Якщо ви забудете його, ви не зможете отримати доступ до свого Litecoin."; + +/* PIN creation info. */ +"UpdatePin.createInstruction" = "Ваш PIN-код буде використано для розблокування вашого Litewallet та надсилання грошей."; + +/* Update PIN title */ +"UpdatePin.createTitle" = "Встановити PIN-код"; + +/* Update PIN title */ +"UpdatePin.createTitleConfirm" = "Повторно введіть PIN-код"; + +/* Enter current PIN instruction */ +"UpdatePin.enterCurrent" = "Введіть свій поточний PIN-код."; + +/* Enter new PIN instruction */ +"UpdatePin.enterNew" = "Введіть новий PIN-код."; + +/* Re-Enter new PIN instruction */ +"UpdatePin.reEnterNew" = "Повторно введіть новий PIN-код."; + +/* Update PIN failure error message. */ +"UpdatePin.setPinError" = "На жаль, не вдалося оновити PIN-код."; + +/* Update PIN failure alert view title */ +"UpdatePin.setPinErrorTitle" = "Помилка оновлення PIN-коду"; + +/* Update PIN title */ +"UpdatePin.updateTitle" = "Оновіть PIN-код"; + +/* Authorize to copy wallet addresses alert message */ +"URLHandling.addressaddressListAlertMessage" = "Скопіювати адреси гаманців у буфер обміну?"; + +/* Authorize to copy wallet address PIN view prompt. */ +"URLHandling.addressList" = "Дозволити копіювати адресу гаманця в буфер обміну"; + +/* Authorize to copy wallet address alert title */ +"URLHandling.addressListAlertTitle" = "Копіювати адреси гаманця"; + +/* Copy wallet addresses alert button label */ +"URLHandling.copy" = "Копія"; + +/* Verify PIN for transaction view body */ +"VerifyPin.authorize" = "Будь ласка, введіть свій PIN-код, щоб авторизувати цю транзакцію."; + +/* Verify PIN view body */ +"VerifyPin.continueBody" = "Введіть свій PIN-код, щоб продовжити."; + +/* Verify PIN view title */ +"VerifyPin.title" = "Потрібний PIN-код"; + +/* Authorize transaction with touch id message */ +"VerifyPin.touchIdMessage" = "Авторизуйте цю трансакцію"; + +/* 'No wallet' warning for watch app */ +"Watch.noWalletWarning" = "Відкрийте додаток Litewallet для iPhone, щоб налаштувати гаманець."; + +/* Dismiss button label */ +"Webview.dismiss" = "Звільнити"; + +/* Webview loading error message */ +"Webview.errorMessage" = "Під час завантаження вмісту сталася помилка. Будь ласка спробуйте ще раз."; + +/* Updating webview message */ +"Webview.updating" = "Оновлення..."; + +/* Welcome view body text */ +"Welcome.body" = "Тепер Litewallet має абсолютно новий вигляд і деякі нові функції.\n\nУсі монети відображаються в lites (ł). 1 Litecoin (Ł) = 1000 lites (ł)."; + +/* Welcome view title */ +"Welcome.title" = "Ласкаво просимо до Litewallet!"; + +/* Delete database title */ +"WipeWallet.alertDeleteTitle" = "Видалити базу даних"; + +/* Wipe wallet alert message */ +"WipeWallet.alertMessage" = "Ви впевнені, що хочете видалити цей гаманець?"; + +/* Wipe wallet alert title */ +"WipeWallet.alertTitle" = "Витерти гаманець?"; + +/* Delete db */ +"WipeWallet.deleteDatabase" = "Видалити базу даних"; + +/* Delete database message */ +"WipeWallet.deleteMessageTitle" = "Це видаляє базу даних, але зберігає PIN-код і фразу. Підтвердьте свій наявний PIN-код, запустіть і дочекайтеся завершення синхронізації з новою базою даних"; + +/* Delete and sync */ +"WipeWallet.deleteSync" = "Видалити та синхронізувати"; + +/* Warning if user lost phrase */ +"WipeWallet.emptyWallet" = "Забули початкову фразу або PIN-код?"; + +/* Failed wipe wallet alert message */ +"WipeWallet.failedMessage" = "Не вдалося стерти гаманець."; + +/* Failed wipe wallet alert title */ +"WipeWallet.failedTitle" = "Не вдалося"; + +/* Enter key to wipe wallet instruction. */ +"WipeWallet.instruction" = "Щоб запустити новий гаманець або відновити наявний гаманець, спочатку потрібно стерти гаманець, який зараз встановлено. Щоб продовжити, введіть паперовий ключ поточного гаманця."; + +/* Start wipe wallet view message */ +"WipeWallet.startMessage" = "Запуск або відновлення іншого гаманця дає змогу отримати доступ до іншого гаманця Litewallet і керувати ним на цьому пристрої."; + +/* Start wipe wallet view warning */ +"WipeWallet.startWarning" = "Ваш поточний гаманець буде видалено з цього пристрою. Якщо ви хочете відновити його в майбутньому, вам потрібно буде ввести свій паперовий ключ."; + +/* Wipe wallet navigation item title. */ +"WipeWallet.title" = "Запустіть або відновіть інший гаманець"; + +/* Warning Alert */ +"WipeWallet.warningAlert" = "Ця дія видалить ваш Litewallet!"; + +/* Warning description */ +"WipeWallet.warningDescription" = "Видалення гаманця означає, що приватний ключ і стирання даних програми не буде. Ви можете втратити свій Litecoin назавжди! \n\n\nНіхто з команди Litewallet не може отримати це початкове значення для вас. Ми не несемо відповідальності, якщо ви не зважите на це попередження."; + +/* Warning title */ +"WipeWallet.warningTitle" = "БУДЬ ЛАСКА, ПРОЧИТАЙТЕ!"; + +/* Wipe wallet button title */ +"WipeWallet.wipe" = "Витерти"; + +/* Wiping activity message */ +"WipeWallet.wiping" = "Витирання..."; + +/* Paper key instructions. */ +"WritePaperPhrase.instruction" = "Запишіть кожне слово по порядку і зберігайте його в надійному місці."; + +/* button label */ +"WritePaperPhrase.next" = "Далі"; + +/* button label */ +"WritePaperPhrase.previous" = "Попередній"; + +/* 1 of 3 */ +"WritePaperPhrase.step" = "%1$d з %2$d"; diff --git a/loafwallet/src/Strings/zh-Hans.lproj/Localizable.strings b/loafwallet/src/Strings/zh-Hans.lproj/Localizable.strings index 8b6124ed1..c8f86bbbf 100755 --- a/loafwallet/src/Strings/zh-Hans.lproj/Localizable.strings +++ b/loafwallet/src/Strings/zh-Hans.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "查找失败"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "输入.crypto或.zil域"; +"Send.UnstoppableDomains.placeholder" = "输入 .crypto、.wallet、.zil、.nft、.blockchain、.bitcoin、.coin、.888、.dao 或 .x 域。"; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "系统查找问题。 [错误: %2$d]"; diff --git a/loafwallet/src/Strings/zh-Hant.lproj/Localizable.strings b/loafwallet/src/Strings/zh-Hant.lproj/Localizable.strings index a038cdb01..a2a655ba1 100755 --- a/loafwallet/src/Strings/zh-Hant.lproj/Localizable.strings +++ b/loafwallet/src/Strings/zh-Hant.lproj/Localizable.strings @@ -962,7 +962,7 @@ "Send.UnstoppableDomains.lookupFailureHeader" = "查找失敗"; /* Enter to match domain name to LTC Address */ -"Send.UnstoppableDomains.placeholder" = "輸入.crypto或.zil域"; +"Send.UnstoppableDomains.placeholder" = "輸入 .crypto、.wallet、.zil、.nft、.blockchain、.bitcoin、.coin、.888、.dao 或 .x 域。"; /* UDSystemError */ "Send.UnstoppableDomains.udSystemError" = "系統查找問題。 [錯誤: %2$d]"; diff --git a/loafwallet/src/ViewControllers/RootModals/ModalViewController.swift b/loafwallet/src/ViewControllers/RootModals/ModalViewController.swift index 43f0c4f4d..2a805c4f1 100644 --- a/loafwallet/src/ViewControllers/RootModals/ModalViewController.swift +++ b/loafwallet/src/ViewControllers/RootModals/ModalViewController.swift @@ -73,7 +73,7 @@ class ModalViewController : UIViewController, Subscriber { //of the content at initial layout view.layoutIfNeeded() - let height = scrollViewContent.bounds.size.height + let height = scrollViewContent.bounds.size.height + 60.0 let minHeight = scrollView.heightAnchor.constraint(greaterThanOrEqualToConstant: height) let midHeight = scrollView.heightAnchor.constraint(equalTo: scrollViewContent.heightAnchor) let maxHeight = scrollView.heightAnchor.constraint(lessThanOrEqualTo: view.heightAnchor, constant: -headerHeight) diff --git a/loafwallet/src/ViewControllers/RootModals/SendViewController.swift b/loafwallet/src/ViewControllers/RootModals/SendViewController.swift index 800a436ea..71e07c362 100644 --- a/loafwallet/src/ViewControllers/RootModals/SendViewController.swift +++ b/loafwallet/src/ViewControllers/RootModals/SendViewController.swift @@ -91,7 +91,6 @@ class SendViewController : UIViewController, Subscriber, ModalPresentable, Track addressCell.constrainTopCorners(height: SendCell.defaultHeight) - addChildViewController(amountView, layout: { amountView.view.constrain([ amountView.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), @@ -101,7 +100,7 @@ class SendViewController : UIViewController, Subscriber, ModalPresentable, Track unstoppableCell.view.constrain([ unstoppableCell.view.topAnchor.constraint(equalTo: addressCell.bottomAnchor), unstoppableCell.view.widthAnchor.constraint(equalTo: amountView.view.widthAnchor), - unstoppableCell.view.leadingAnchor.constraint(equalTo: amountView.view.leadingAnchor), + unstoppableCell.view.leadingAnchor.constraint(equalTo: amountView.view.leadingAnchor, constant: -5.0), unstoppableCell.view.heightAnchor.constraint(equalToConstant: SendCell.defaultHeight) ]) descriptionCell.constrain([ diff --git a/loafwallet/src/Views/SendViewCells/SendCell.swift b/loafwallet/src/Views/SendViewCells/SendCell.swift index 9d04c8f61..83c92973b 100644 --- a/loafwallet/src/Views/SendViewCells/SendCell.swift +++ b/loafwallet/src/Views/SendViewCells/SendCell.swift @@ -10,7 +10,7 @@ import UIKit class SendCell : UIView { - static let defaultHeight: CGFloat = 60.0 + static let defaultHeight: CGFloat = 75.0 init() { super.init(frame: .zero) diff --git a/loafwallet/uk.lproj/BIP39Words.plist b/loafwallet/uk.lproj/BIP39Words.plist new file mode 100644 index 000000000..01e69ff4c --- /dev/null +++ b/loafwallet/uk.lproj/BIP39Words.plist @@ -0,0 +1,2054 @@ + + + + + abandon + ability + able + about + above + absent + absorb + abstract + absurd + abuse + access + accident + account + accuse + achieve + acid + acoustic + acquire + across + act + action + actor + actress + actual + adapt + add + addict + address + adjust + admit + adult + advance + advice + aerobic + affair + afford + afraid + again + age + agent + agree + ahead + aim + air + airport + aisle + alarm + album + alcohol + alert + alien + all + alley + allow + almost + alone + alpha + already + also + alter + always + amateur + amazing + among + amount + amused + analyst + anchor + ancient + anger + angle + angry + animal + ankle + announce + annual + another + answer + antenna + antique + anxiety + any + apart + apology + appear + apple + approve + april + arch + arctic + area + arena + argue + arm + armed + armor + army + around + arrange + arrest + arrive + arrow + art + artefact + artist + artwork + ask + aspect + assault + asset + assist + assume + asthma + athlete + atom + attack + attend + attitude + attract + auction + audit + august + aunt + author + auto + autumn + average + avocado + avoid + awake + aware + away + awesome + awful + awkward + axis + baby + bachelor + bacon + badge + bag + balance + balcony + ball + bamboo + banana + banner + bar + barely + bargain + barrel + base + basic + basket + battle + beach + bean + beauty + because + become + beef + before + begin + behave + behind + believe + below + belt + bench + benefit + best + betray + better + between + beyond + bicycle + bid + bike + bind + biology + bird + birth + bitter + black + blade + blame + blanket + blast + bleak + bless + blind + blood + blossom + blouse + blue + blur + blush + board + boat + body + boil + bomb + bone + bonus + book + boost + border + boring + borrow + boss + bottom + bounce + box + boy + bracket + brain + brand + brass + brave + bread + breeze + brick + bridge + brief + bright + bring + brisk + broccoli + broken + bronze + broom + brother + brown + brush + bubble + buddy + budget + buffalo + build + bulb + bulk + bullet + bundle + bunker + burden + burger + burst + bus + business + busy + butter + buyer + buzz + cabbage + cabin + cable + cactus + cage + cake + call + calm + camera + camp + can + canal + cancel + candy + cannon + canoe + canvas + canyon + capable + capital + captain + car + carbon + card + cargo + carpet + carry + cart + case + cash + casino + castle + casual + cat + catalog + catch + category + cattle + caught + cause + caution + cave + ceiling + celery + cement + census + century + cereal + certain + chair + chalk + champion + change + chaos + chapter + charge + chase + chat + cheap + check + cheese + chef + cherry + chest + chicken + chief + child + chimney + choice + choose + chronic + chuckle + chunk + churn + cigar + cinnamon + circle + citizen + city + civil + claim + clap + clarify + claw + clay + clean + clerk + clever + click + client + cliff + climb + clinic + clip + clock + clog + close + cloth + cloud + clown + club + clump + cluster + clutch + coach + coast + coconut + code + coffee + coil + coin + collect + color + column + combine + come + comfort + comic + common + company + concert + conduct + confirm + congress + connect + consider + control + convince + cook + cool + copper + copy + coral + core + corn + correct + cost + cotton + couch + country + couple + course + cousin + cover + coyote + crack + cradle + craft + cram + crane + crash + crater + crawl + crazy + cream + credit + creek + crew + cricket + crime + crisp + critic + crop + cross + crouch + crowd + crucial + cruel + cruise + crumble + crunch + crush + cry + crystal + cube + culture + cup + cupboard + curious + current + curtain + curve + cushion + custom + cute + cycle + dad + damage + damp + dance + danger + daring + dash + daughter + dawn + day + deal + debate + debris + decade + december + decide + decline + decorate + decrease + deer + defense + define + defy + degree + delay + deliver + demand + demise + denial + dentist + deny + depart + depend + deposit + depth + deputy + derive + describe + desert + design + desk + despair + destroy + detail + detect + develop + device + devote + diagram + dial + diamond + diary + dice + diesel + diet + differ + digital + dignity + dilemma + dinner + dinosaur + direct + dirt + disagree + discover + disease + dish + dismiss + disorder + display + distance + divert + divide + divorce + dizzy + doctor + document + dog + doll + dolphin + domain + donate + donkey + donor + door + dose + double + dove + draft + dragon + drama + drastic + draw + dream + dress + drift + drill + drink + drip + drive + drop + drum + dry + duck + dumb + dune + during + dust + dutch + duty + dwarf + dynamic + eager + eagle + early + earn + earth + easily + east + easy + echo + ecology + economy + edge + edit + educate + effort + egg + eight + either + elbow + elder + electric + elegant + element + elephant + elevator + elite + else + embark + embody + embrace + emerge + emotion + employ + empower + empty + enable + enact + end + endless + endorse + enemy + energy + enforce + engage + engine + enhance + enjoy + enlist + enough + enrich + enroll + ensure + enter + entire + entry + envelope + episode + equal + equip + era + erase + erode + erosion + error + erupt + escape + essay + essence + estate + eternal + ethics + evidence + evil + evoke + evolve + exact + example + excess + exchange + excite + exclude + excuse + execute + exercise + exhaust + exhibit + exile + exist + exit + exotic + expand + expect + expire + explain + expose + express + extend + extra + eye + eyebrow + fabric + face + faculty + fade + faint + faith + fall + false + fame + family + famous + fan + fancy + fantasy + farm + fashion + fat + fatal + father + fatigue + fault + favorite + feature + february + federal + fee + feed + feel + female + fence + festival + fetch + fever + few + fiber + fiction + field + figure + file + film + filter + final + find + fine + finger + finish + fire + firm + first + fiscal + fish + fit + fitness + fix + flag + flame + flash + flat + flavor + flee + flight + flip + float + flock + floor + flower + fluid + flush + fly + foam + focus + fog + foil + fold + follow + food + foot + force + forest + forget + fork + fortune + forum + forward + fossil + foster + found + fox + fragile + frame + frequent + fresh + friend + fringe + frog + front + frost + frown + frozen + fruit + fuel + fun + funny + furnace + fury + future + gadget + gain + galaxy + gallery + game + gap + garage + garbage + garden + garlic + garment + gas + gasp + gate + gather + gauge + gaze + general + genius + genre + gentle + genuine + gesture + ghost + giant + gift + giggle + ginger + giraffe + girl + give + glad + glance + glare + glass + glide + glimpse + globe + gloom + glory + glove + glow + glue + goat + goddess + gold + good + goose + gorilla + gospel + gossip + govern + gown + grab + grace + grain + grant + grape + grass + gravity + great + green + grid + grief + grit + grocery + group + grow + grunt + guard + guess + guide + guilt + guitar + gun + gym + habit + hair + half + hammer + hamster + hand + happy + harbor + hard + harsh + harvest + hat + have + hawk + hazard + head + health + heart + heavy + hedgehog + height + hello + helmet + help + hen + hero + hidden + high + hill + hint + hip + hire + history + hobby + hockey + hold + hole + holiday + hollow + home + honey + hood + hope + horn + horror + horse + hospital + host + hotel + hour + hover + hub + huge + human + humble + humor + hundred + hungry + hunt + hurdle + hurry + hurt + husband + hybrid + ice + icon + idea + identify + idle + ignore + ill + illegal + illness + image + imitate + immense + immune + impact + impose + improve + impulse + inch + include + income + increase + index + indicate + indoor + industry + infant + inflict + inform + inhale + inherit + initial + inject + injury + inmate + inner + innocent + input + inquiry + insane + insect + inside + inspire + install + intact + interest + into + invest + invite + involve + iron + island + isolate + issue + item + ivory + jacket + jaguar + jar + jazz + jealous + jeans + jelly + jewel + job + join + joke + journey + joy + judge + juice + jump + jungle + junior + junk + just + kangaroo + keen + keep + ketchup + key + kick + kid + kidney + kind + kingdom + kiss + kit + kitchen + kite + kitten + kiwi + knee + knife + knock + know + lab + label + labor + ladder + lady + lake + lamp + language + laptop + large + later + latin + laugh + laundry + lava + law + lawn + lawsuit + layer + lazy + leader + leaf + learn + leave + lecture + left + leg + legal + legend + leisure + lemon + lend + length + lens + leopard + lesson + letter + level + liar + liberty + library + license + life + lift + light + like + limb + limit + link + lion + liquid + list + little + live + lizard + load + loan + lobster + local + lock + logic + lonely + long + loop + lottery + loud + lounge + love + loyal + lucky + luggage + lumber + lunar + lunch + luxury + lyrics + machine + mad + magic + magnet + maid + mail + main + major + make + mammal + man + manage + mandate + mango + mansion + manual + maple + marble + march + margin + marine + market + marriage + mask + mass + master + match + material + math + matrix + matter + maximum + maze + meadow + mean + measure + meat + mechanic + medal + media + melody + melt + member + memory + mention + menu + mercy + merge + merit + merry + mesh + message + metal + method + middle + midnight + milk + million + mimic + mind + minimum + minor + minute + miracle + mirror + misery + miss + mistake + mix + mixed + mixture + mobile + model + modify + mom + moment + monitor + monkey + monster + month + moon + moral + more + morning + mosquito + mother + motion + motor + mountain + mouse + move + movie + much + muffin + mule + multiply + muscle + museum + mushroom + music + must + mutual + myself + mystery + myth + naive + name + napkin + narrow + nasty + nation + nature + near + neck + need + negative + neglect + neither + nephew + nerve + nest + net + network + neutral + never + news + next + nice + night + noble + noise + nominee + noodle + normal + north + nose + notable + note + nothing + notice + novel + now + nuclear + number + nurse + nut + oak + obey + object + oblige + obscure + observe + obtain + obvious + occur + ocean + october + odor + off + offer + office + often + oil + okay + old + olive + olympic + omit + once + one + onion + online + only + open + opera + opinion + oppose + option + orange + orbit + orchard + order + ordinary + organ + orient + original + orphan + ostrich + other + outdoor + outer + output + outside + oval + oven + over + own + owner + oxygen + oyster + ozone + pact + paddle + page + pair + palace + palm + panda + panel + panic + panther + paper + parade + parent + park + parrot + party + pass + patch + path + patient + patrol + pattern + pause + pave + payment + peace + peanut + pear + peasant + pelican + pen + penalty + pencil + people + pepper + perfect + permit + person + pet + phone + photo + phrase + physical + piano + picnic + picture + piece + pig + pigeon + pill + pilot + pink + pioneer + pipe + pistol + pitch + pizza + place + planet + plastic + plate + play + please + pledge + pluck + plug + plunge + poem + poet + point + polar + pole + police + pond + pony + pool + popular + portion + position + possible + post + potato + pottery + poverty + powder + power + practice + praise + predict + prefer + prepare + present + pretty + prevent + price + pride + primary + print + priority + prison + private + prize + problem + process + produce + profit + program + project + promote + proof + property + prosper + protect + proud + provide + public + pudding + pull + pulp + pulse + pumpkin + punch + pupil + puppy + purchase + purity + purpose + purse + push + put + puzzle + pyramid + quality + quantum + quarter + question + quick + quit + quiz + quote + rabbit + raccoon + race + rack + radar + radio + rail + rain + raise + rally + ramp + ranch + random + range + rapid + rare + rate + rather + raven + raw + razor + ready + real + reason + rebel + rebuild + recall + receive + recipe + record + recycle + reduce + reflect + reform + refuse + region + regret + regular + reject + relax + release + relief + rely + remain + remember + remind + remove + render + renew + rent + reopen + repair + repeat + replace + report + require + rescue + resemble + resist + resource + response + result + retire + retreat + return + reunion + reveal + review + reward + rhythm + rib + ribbon + rice + rich + ride + ridge + rifle + right + rigid + ring + riot + ripple + risk + ritual + rival + river + road + roast + robot + robust + rocket + romance + roof + rookie + room + rose + rotate + rough + round + route + royal + rubber + rude + rug + rule + run + runway + rural + sad + saddle + sadness + safe + sail + salad + salmon + salon + salt + salute + same + sample + sand + satisfy + satoshi + sauce + sausage + save + say + scale + scan + scare + scatter + scene + scheme + school + science + scissors + scorpion + scout + scrap + screen + script + scrub + sea + search + season + seat + second + secret + section + security + seed + seek + segment + select + sell + seminar + senior + sense + sentence + series + service + session + settle + setup + seven + shadow + shaft + shallow + share + shed + shell + sheriff + shield + shift + shine + ship + shiver + shock + shoe + shoot + shop + short + shoulder + shove + shrimp + shrug + shuffle + shy + sibling + sick + side + siege + sight + sign + silent + silk + silly + silver + similar + simple + since + sing + siren + sister + situate + six + size + skate + sketch + ski + skill + skin + skirt + skull + slab + slam + sleep + slender + slice + slide + slight + slim + slogan + slot + slow + slush + small + smart + smile + smoke + smooth + snack + snake + snap + sniff + snow + soap + soccer + social + sock + soda + soft + solar + soldier + solid + solution + solve + someone + song + soon + sorry + sort + soul + sound + soup + source + south + space + spare + spatial + spawn + speak + special + speed + spell + spend + sphere + spice + spider + spike + spin + spirit + split + spoil + sponsor + spoon + sport + spot + spray + spread + spring + spy + square + squeeze + squirrel + stable + stadium + staff + stage + stairs + stamp + stand + start + state + stay + steak + steel + stem + step + stereo + stick + still + sting + stock + stomach + stone + stool + story + stove + strategy + street + strike + strong + struggle + student + stuff + stumble + style + subject + submit + subway + success + such + sudden + suffer + sugar + suggest + suit + summer + sun + sunny + sunset + super + supply + supreme + sure + surface + surge + surprise + surround + survey + suspect + sustain + swallow + swamp + swap + swarm + swear + sweet + swift + swim + swing + switch + sword + symbol + symptom + syrup + system + table + tackle + tag + tail + talent + talk + tank + tape + target + task + taste + tattoo + taxi + teach + team + tell + ten + tenant + tennis + tent + term + test + text + thank + that + theme + then + theory + there + they + thing + this + thought + three + thrive + throw + thumb + thunder + ticket + tide + tiger + tilt + timber + time + tiny + tip + tired + tissue + title + toast + tobacco + today + toddler + toe + together + toilet + token + tomato + tomorrow + tone + tongue + tonight + tool + tooth + top + topic + topple + torch + tornado + tortoise + toss + total + tourist + toward + tower + town + toy + track + trade + traffic + tragic + train + transfer + trap + trash + travel + tray + treat + tree + trend + trial + tribe + trick + trigger + trim + trip + trophy + trouble + truck + true + truly + trumpet + trust + truth + try + tube + tuition + tumble + tuna + tunnel + turkey + turn + turtle + twelve + twenty + twice + twin + twist + two + type + typical + ugly + umbrella + unable + unaware + uncle + uncover + under + undo + unfair + unfold + unhappy + uniform + unique + unit + universe + unknown + unlock + until + unusual + unveil + update + upgrade + uphold + upon + upper + upset + urban + urge + usage + use + used + useful + useless + usual + utility + vacant + vacuum + vague + valid + valley + valve + van + vanish + vapor + various + vast + vault + vehicle + velvet + vendor + venture + venue + verb + verify + version + very + vessel + veteran + viable + vibrant + vicious + victory + video + view + village + vintage + violin + virtual + virus + visa + visit + visual + vital + vivid + vocal + voice + void + volcano + volume + vote + voyage + wage + wagon + wait + walk + wall + walnut + want + warfare + warm + warrior + wash + wasp + waste + water + wave + way + wealth + weapon + wear + weasel + weather + web + wedding + weekend + weird + welcome + west + wet + whale + what + wheat + wheel + when + where + whip + whisper + wide + width + wife + wild + will + win + window + wine + wing + wink + winner + winter + wire + wisdom + wise + wish + witness + wolf + woman + wonder + wood + wool + word + work + world + worry + worth + wrap + wreck + wrestle + wrist + write + wrong + yard + year + yellow + you + young + youth + zebra + zero + zone + zoo + + diff --git a/loafwallet/uk.lproj/LaunchScreen.strings b/loafwallet/uk.lproj/LaunchScreen.strings new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/loafwallet/uk.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + From 8b5e95df4b1d3904356f32bb1384fd319cc3bec0 Mon Sep 17 00:00:00 2001 From: kcw-grunt Date: Sun, 13 Mar 2022 01:18:13 +0000 Subject: [PATCH 3/3] version bump --- loafwallet.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/loafwallet.xcodeproj/project.pbxproj b/loafwallet.xcodeproj/project.pbxproj index bbcee51e7..32844eec5 100644 --- a/loafwallet.xcodeproj/project.pbxproj +++ b/loafwallet.xcodeproj/project.pbxproj @@ -4794,7 +4794,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = loafwallet/loafwallet.entitlements; - CURRENT_PROJECT_VERSION = 25; + CURRENT_PROJECT_VERSION = 150; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ZV7987N2ZC; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; @@ -4809,7 +4809,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.7.0; + MARKETING_VERSION = 3.7.1; OTHER_SWIFT_FLAGS = "-DDebug $(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet; PRODUCT_MODULE_NAME = loafwallet; @@ -5213,7 +5213,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = loafwallet/loafwallet.entitlements; - CURRENT_PROJECT_VERSION = 25; + CURRENT_PROJECT_VERSION = 150; DEVELOPMENT_TEAM = ZV7987N2ZC; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; FRAMEWORK_SEARCH_PATHS = ( @@ -5227,7 +5227,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.7.0; + MARKETING_VERSION = 3.7.1; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet; PRODUCT_MODULE_NAME = loafwallet; @@ -5344,7 +5344,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = loafwallet/loafwallet.entitlements; - CURRENT_PROJECT_VERSION = 25; + CURRENT_PROJECT_VERSION = 150; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ZV7987N2ZC; FRAMEWORK_SEARCH_PATHS = ( @@ -5358,7 +5358,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.7.0; + MARKETING_VERSION = 3.7.1; OTHER_SWIFT_FLAGS = "-DDebug -DTestnet $(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = com.litecoin.loafwallet; PRODUCT_MODULE_NAME = loafwallet;