diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ac6c796c..d0c2cb1d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,12 +4,11 @@ ## Platform - [ ] Android - [ ] iOS -- [ ] Games-Unity -- [ ] DevOps (AWS) -- [ ] C/Golang +- [ ] Games-Unity ## 🎯 Type of Change +- [ ] 🚀 Release - [ ] 🐛 Bug fix - [ ] ✨ New feature - [ ] 🔧 Refactoring (code change that neither fixes a bug nor adds a feature) @@ -18,12 +17,7 @@ - [ ] ⚡ Performance improvement - [ ] 🧪 Test addition or improvement -## 📋 Changes - -- -- - -### 🔗 Related Issues +## 📋 Changes / Issues - Fixes # - Related to # diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/swiftpm/Package.resolved b/BrainwalletHybrid.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9f3e651a..7cbae041 100644 --- a/BrainwalletHybrid.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -24,8 +24,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/AppsFlyerSDK/AppsFlyerFramework", "state" : { - "revision" : "6cc9a9400a9d15e26d1ccf83ed9924c1dfbe8b75", - "version" : "6.17.8" + "revision" : "d23b242b28c663618bce5fe9e2f3adb85b32bfb3", + "version" : "6.17.9" } }, { @@ -87,8 +87,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/gtm-session-fetcher.git", "state" : { - "revision" : "fb7f2740b1570d2f7599c6bb9531bf4fad6974b7", - "version" : "5.0.0" + "revision" : "a883ddb9fd464216133a5ab441f1ae8995978573", + "version" : "5.1.0" } }, { @@ -141,8 +141,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-protobuf.git", "state" : { - "revision" : "c169a5744230951031770e27e475ff6eefe51f9d", - "version" : "1.33.3" + "revision" : "a008af1a102ff3dd6cc3764bb69bf63226d0f5f6", + "version" : "1.36.1" } } ], diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Arabic.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Arabic.xcscheme new file mode 100644 index 00000000..3c5554ad --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Arabic.xcscheme @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Chinese-simplified.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Chinese-simplified.xcscheme new file mode 100644 index 00000000..28f66624 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Chinese-simplified.xcscheme @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Deutsche.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Deutsche.xcscheme new file mode 100644 index 00000000..117082b0 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Deutsche.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Fran\303\247ais.xcscheme" "b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Fran\303\247ais.xcscheme" new file mode 100644 index 00000000..0ba0cb88 --- /dev/null +++ "b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Fran\303\247ais.xcscheme" @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Hindi.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Hindi.xcscheme new file mode 100644 index 00000000..c3064766 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Hindi.xcscheme @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Punjabi.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Punjabi.xcscheme new file mode 100644 index 00000000..7654ef95 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Punjabi.xcscheme @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Russia.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Russia.xcscheme new file mode 100644 index 00000000..3744c6ac --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-Russia.xcscheme @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-polish.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-polish.xcscheme new file mode 100644 index 00000000..4aac4a23 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet-polish.xcscheme @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet.xcscheme new file mode 100644 index 00000000..dfc1b880 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwallet.xcscheme @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletAllTests.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletAllTests.xcscheme new file mode 100644 index 00000000..7a096eb8 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletAllTests.xcscheme @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletUITests.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletUITests.xcscheme new file mode 100644 index 00000000..c2301171 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletUITests.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletUnitTests.xcscheme b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletUnitTests.xcscheme new file mode 100644 index 00000000..f0b6c520 --- /dev/null +++ b/BrainwalletHybrid.xcworkspace/xcshareddata/xcschemes/brainwalletUnitTests.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BrainwalletUnitTests/Emoji View Tests/EmojiViewModelTests.swift b/BrainwalletUnitTests/Emoji View Tests/EmojiViewModelTests.swift new file mode 100644 index 00000000..ce3b3460 --- /dev/null +++ b/BrainwalletUnitTests/Emoji View Tests/EmojiViewModelTests.swift @@ -0,0 +1,254 @@ +// +// EmojiViewTests.swift +// BrainwalletUnitTests +// +// Created by Kerry Washington on 22/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// + +import XCTest +import Combine +@testable import brainwallet + +final class EmojiViewModelTests: XCTestCase { + + var sut: EmojiViewModel! + var cancellables: Set! + + override func setUp() { + super.setUp() + sut = EmojiViewModel() + cancellables = [] + } + + override func tearDown() { + sut = nil + cancellables = nil + super.tearDown() + } + + // MARK: - Initial State + + func test_initialState_currentEmojiTriplet_isFirst() { + XCTAssertEqual(sut.currentEmojiTriplet, .first) + } + + func test_initialState_didSelectTriplet_isFalse() { + XCTAssertFalse(sut.didSelectTriplet) + } + + func test_initialState_canSelect_isFalse() { + XCTAssertFalse(sut.canSelect) + } + + // MARK: - EmojiTriplet Index + + func test_emojiTriplet_first_hasCorrectIndex() { + XCTAssertEqual(EmojiTriplet.first.index, 1) + } + + func test_emojiTriplet_second_hasCorrectIndex() { + XCTAssertEqual(EmojiTriplet.second.index, 2) + } + + func test_emojiTriplet_third_hasCorrectIndex() { + XCTAssertEqual(EmojiTriplet.third.index, 3) + } + + func test_emojiTriplet_fourth_hasCorrectIndex() { + XCTAssertEqual(EmojiTriplet.fourth.index, 4) + } + + // MARK: - EmojiTriplet Box Numbers + + func test_emojiTriplet_first_hasCorrectBoxNumbers() { + XCTAssertEqual(EmojiTriplet.first.boxNumbers, [1, 2, 3]) + } + + func test_emojiTriplet_second_hasCorrectBoxNumbers() { + XCTAssertEqual(EmojiTriplet.second.boxNumbers, [4, 5, 6]) + } + + func test_emojiTriplet_third_hasCorrectBoxNumbers() { + XCTAssertEqual(EmojiTriplet.third.boxNumbers, [7, 8, 9]) + } + + func test_emojiTriplet_fourth_hasCorrectBoxNumbers() { + XCTAssertEqual(EmojiTriplet.fourth.boxNumbers, [10, 11, 12]) + } + + func test_emojiTriplet_allBoxNumbers_containsTwelveUniqueNumbers() { + let allBoxNumbers = EmojiTriplet.allCases.flatMap { $0.boxNumbers } + XCTAssertEqual(allBoxNumbers.count, 12) + XCTAssertEqual(Set(allBoxNumbers).count, 12, "Box numbers should all be unique across triplets") + } + + func test_emojiTriplet_boxNumbers_eachHasThreeEntries() { + EmojiTriplet.allCases.forEach { triplet in + XCTAssertEqual(triplet.boxNumbers.count, 3, "\(triplet.rawValue) should have exactly 3 box numbers") + } + } + + // MARK: - EmojiTriplet Guide Strings + + func test_emojiTriplet_allCases_haveMeaningfulGuideTitles() { + EmojiTriplet.allCases.forEach { triplet in + XCTAssertFalse(triplet.guideTitle.isEmpty, "\(triplet.rawValue) guideTitle should not be empty") + } + } + + func test_emojiTriplet_allCases_haveMeaningfulGuideDetails() { + EmojiTriplet.allCases.forEach { triplet in + XCTAssertFalse(triplet.guideDetail.isEmpty, "\(triplet.rawValue) guideDetail should not be empty") + XCTAssertFalse(triplet.guideDetail2.isEmpty, "\(triplet.rawValue) guideDetail2 should not be empty") + } + } + + func test_emojiTriplet_guideTitles_areAllUnique() { + let titles = EmojiTriplet.allCases.map { $0.guideTitle } + XCTAssertEqual(Set(titles).count, titles.count, "Each triplet should have a unique guideTitle") + } + + // MARK: - EmojiTriplet CaseIterable + + func test_emojiTriplet_hasExactlyFourCases() { + XCTAssertEqual(EmojiTriplet.allCases.count, 4) + } + + func test_emojiTriplet_rawValues_areCorrect() { + XCTAssertEqual(EmojiTriplet.first.rawValue, "first") + XCTAssertEqual(EmojiTriplet.second.rawValue, "second") + XCTAssertEqual(EmojiTriplet.third.rawValue, "third") + XCTAssertEqual(EmojiTriplet.fourth.rawValue, "fourth") + } + + // MARK: - @Published Observation + + func test_currentEmojiTriplet_publishesChange_toSecond() { + let expectation = expectation(description: "currentEmojiTriplet publishes .second") + + sut.$currentEmojiTriplet + .dropFirst() + .sink { value in + XCTAssertEqual(value, .second) + expectation.fulfill() + } + .store(in: &cancellables) + + sut.currentEmojiTriplet = .second + + waitForExpectations(timeout: 1) + } + + func test_currentEmojiTriplet_publishesAllTransitions() { + var published: [EmojiTriplet] = [] + let expectation = expectation(description: "all triplet transitions published") + expectation.expectedFulfillmentCount = 3 // .second, .third, .fourth + + sut.$currentEmojiTriplet + .dropFirst() + .sink { value in + published.append(value) + expectation.fulfill() + } + .store(in: &cancellables) + + sut.currentEmojiTriplet = .second + sut.currentEmojiTriplet = .third + sut.currentEmojiTriplet = .fourth + + waitForExpectations(timeout: 1) + XCTAssertEqual(published, [.second, .third, .fourth]) + } + + func test_didSelectTriplet_publishesChange_toTrue() { + let expectation = expectation(description: "didSelectTriplet publishes true") + + sut.$didSelectTriplet + .dropFirst() + .sink { value in + XCTAssertTrue(value) + expectation.fulfill() + } + .store(in: &cancellables) + + sut.didSelectTriplet = true + + waitForExpectations(timeout: 1) + } + + func test_canSelect_publishesChange_toTrue() { + let expectation = expectation(description: "canSelect publishes true") + + sut.$canSelect + .dropFirst() + .sink { value in + XCTAssertTrue(value) + expectation.fulfill() + } + .store(in: &cancellables) + + sut.canSelect = true + + waitForExpectations(timeout: 1) + } + + func test_canSelect_publishesChange_backToFalse() { + sut.canSelect = true + + let expectation = expectation(description: "canSelect publishes false") + + sut.$canSelect + .dropFirst() + .sink { value in + XCTAssertFalse(value) + expectation.fulfill() + } + .store(in: &cancellables) + + sut.canSelect = false + + waitForExpectations(timeout: 1) + } + + // MARK: - EmojiObject + + func test_emojiObject_equatable_sameValues() { + let obj1 = EmojiObject(emoji: "🍔", wordCloud: ["burger"], unicodeKeywords: "food", codePoints: ["1F354"], hexCodePoints32: [0x1F354]) + let obj2 = EmojiObject(emoji: "🍔", wordCloud: ["burger"], unicodeKeywords: "food", codePoints: ["1F354"], hexCodePoints32: [0x1F354]) + XCTAssertEqual(obj1, obj2) + } + + func test_emojiObject_equatable_differentEmoji() { + let obj1 = EmojiObject(emoji: "🍔", wordCloud: ["burger"], unicodeKeywords: "food", codePoints: ["1F354"], hexCodePoints32: [0x1F354]) + let obj2 = EmojiObject(emoji: "🍕", wordCloud: ["pizza"], unicodeKeywords: "food", codePoints: ["1F355"], hexCodePoints32: [0x1F355]) + XCTAssertNotEqual(obj1, obj2) + } + + // MARK: - EmojiSection + + func test_emojiSection_equatable_emptySections() { + let section1 = EmojiSection(sectionTitle: "Food", emojiObjects: nil) + let section2 = EmojiSection(sectionTitle: "Food", emojiObjects: nil) + XCTAssertEqual(section1, section2) + } + + func test_emojiSection_equatable_differentTitles() { + let section1 = EmojiSection(sectionTitle: "Food", emojiObjects: nil) + let section2 = EmojiSection(sectionTitle: "Animals", emojiObjects: nil) + XCTAssertNotEqual(section1, section2) + } + + // MARK: - LiteEmojiObject + + func test_liteEmojiObject_hasUniqueIDs() { + let obj1 = LiteEmojiObject(emoji: "🍔") + let obj2 = LiteEmojiObject(emoji: "🍔") + XCTAssertNotEqual(obj1.id, obj2.id, "Each LiteEmojiObject should have a unique UUID") + } + + func test_liteEmojiObject_storesEmoji() { + let obj = LiteEmojiObject(emoji: "🌮") + XCTAssertEqual(obj.emoji, "🌮") + } +} diff --git a/BrainwalletUnitTests/Fiat Currency Tests/CurrencyTests.swift b/BrainwalletUnitTests/Fiat Currency Tests/CurrencyTests.swift new file mode 100644 index 00000000..c59b341f --- /dev/null +++ b/BrainwalletUnitTests/Fiat Currency Tests/CurrencyTests.swift @@ -0,0 +1,488 @@ +// CurrencyTests.swift +// brainwalletTests +// +// Unit tests for Currency.swift (release/v3.9.2) +// Tests cover: Currency class, GlobalCurrency enum cases, properties, +// lookup, uniqueness invariants, and exhaustive data-integrity checks. + +import XCTest +@testable import brainwallet + +// MARK: - Currency Class Tests + +final class CurrencyClassTests: XCTestCase { + + // MARK: Known valid codes + + func testGetSymbolForCurrencyCode_USD_returnsSymbol() { + let symbol = Currency.getSymbolForCurrencyCode(code: "USD") + XCTAssertNotNil(symbol, "USD should return a currency symbol") + } + + func testGetSymbolForCurrencyCode_EUR_returnsSymbol() { + let symbol = Currency.getSymbolForCurrencyCode(code: "EUR") + XCTAssertNotNil(symbol, "EUR should return a currency symbol") + } + + func testGetSymbolForCurrencyCode_GBP_returnsSymbol() { + let symbol = Currency.getSymbolForCurrencyCode(code: "GBP") + XCTAssertNotNil(symbol, "GBP should return a currency symbol") + } + + func testGetSymbolForCurrencyCode_JPY_returnsSymbol() { + let symbol = Currency.getSymbolForCurrencyCode(code: "JPY") + XCTAssertNotNil(symbol, "JPY should return a currency symbol") + } + + func testGetSymbolForCurrencyCode_CAD_returnsSymbol() { + let symbol = Currency.getSymbolForCurrencyCode(code: "CAD") + XCTAssertNotNil(symbol, "CAD should return a currency symbol") + } + + // MARK: Invalid / edge-case codes + + func testGetSymbolForCurrencyCode_invalidCode_returnsNil() { + let symbol = Currency.getSymbolForCurrencyCode(code: "XYZ") + XCTAssertNil(symbol, "An unknown currency code should return nil") + } + + func testGetSymbolForCurrencyCode_emptyString_returnsNil() { + let symbol = Currency.getSymbolForCurrencyCode(code: "") + XCTAssertNil(symbol, "An empty string should return nil") + } + + func testGetSymbolForCurrencyCode_lowercaseCode_returnsNil() { + // Locale currency identifiers are uppercase; lowercase should not match. + let symbol = Currency.getSymbolForCurrencyCode(code: "usd") + XCTAssertNil(symbol, "Lowercase currency code should return nil") + } + + func testGetSymbolForCurrencyCode_numericString_returnsNil() { + let symbol = Currency.getSymbolForCurrencyCode(code: "123") + XCTAssertNil(symbol, "A numeric string should return nil") + } + + func testGetSymbolForCurrencyCode_returnsString_whenFound() { + // If a valid code is found the returned symbol must be non-empty. + if let symbol = Currency.getSymbolForCurrencyCode(code: "USD") { + XCTAssertFalse(symbol.isEmpty, "Returned symbol must not be an empty string") + } + } +} + +// MARK: - GlobalCurrency Enum: Case Count & Raw Values + +final class GlobalCurrencyEnumStructureTests: XCTestCase { + + func testAllCasesCount_is160() { + // The enum contains 160 cases as defined in v3.9.2. + XCTAssertEqual(GlobalCurrency.allCases.count, 160) + } + + func testUSD_rawValue_isZero() { + XCTAssertEqual(GlobalCurrency.USD.rawValue, 0) + } + + func testEUR_rawValue_isOne() { + XCTAssertEqual(GlobalCurrency.EUR.rawValue, 1) + } + + func testRawValues_areContiguous() { + // Raw values must run 0 ..< count with no gaps. + let values = GlobalCurrency.allCases.map(\.rawValue).sorted() + for (index, value) in values.enumerated() { + XCTAssertEqual(value, index, "Raw value gap detected at index \(index)") + } + } +} + +// MARK: - GlobalCurrency: Identifiable + +final class GlobalCurrencyIdentifiableTests: XCTestCase { + + func testId_returnsSelf() { + XCTAssertEqual(GlobalCurrency.USD.id, GlobalCurrency.USD) + XCTAssertEqual(GlobalCurrency.EUR.id, GlobalCurrency.EUR) + XCTAssertEqual(GlobalCurrency.LTC.id, GlobalCurrency.LTC) + } + + func testAllCases_idEqualsSelf() { + for currency in GlobalCurrency.allCases { + XCTAssertEqual(currency.id, currency, "\(currency) id should equal self") + } + } +} + +// MARK: - GlobalCurrency: Equatable + +final class GlobalCurrencyEquatableTests: XCTestCase { + + func testSameCase_isEqual() { + XCTAssertEqual(GlobalCurrency.USD, GlobalCurrency.USD) + XCTAssertEqual(GlobalCurrency.GBP, GlobalCurrency.GBP) + } + + func testDifferentCases_areNotEqual() { + XCTAssertNotEqual(GlobalCurrency.USD, GlobalCurrency.EUR) + XCTAssertNotEqual(GlobalCurrency.LTC, GlobalCurrency.BTC) + } +} + +// MARK: - GlobalCurrency.from(code:) + +final class GlobalCurrencyFromCodeTests: XCTestCase { + + // MARK: Valid lookups – spot-check representative currencies + + func testFrom_USD_returnsUSD() { + XCTAssertEqual(GlobalCurrency.from(code: "USD"), .USD) + } + + func testFrom_EUR_returnsEUR() { + XCTAssertEqual(GlobalCurrency.from(code: "EUR"), .EUR) + } + + func testFrom_GBP_returnsGBP() { + XCTAssertEqual(GlobalCurrency.from(code: "GBP"), .GBP) + } + + func testFrom_LTC_returnsLTC() { + XCTAssertEqual(GlobalCurrency.from(code: "LTC"), .LTC) + } + + func testFrom_BTC_returnsBTC() { + XCTAssertEqual(GlobalCurrency.from(code: "BTC"), .BTC) + } + + func testFrom_ETH_returnsETH() { + XCTAssertEqual(GlobalCurrency.from(code: "ETH"), .ETH) + } + + func testFrom_JPY_returnsJPY() { + XCTAssertEqual(GlobalCurrency.from(code: "JPY"), .JPY) + } + + func testFrom_ZMW_returnsZMW() { + XCTAssertEqual(GlobalCurrency.from(code: "ZMW"), .ZMW) + } + + // MARK: Invalid lookups + + func testFrom_invalidCode_returnsNil() { + XCTAssertNil(GlobalCurrency.from(code: "XXX")) + } + + func testFrom_emptyString_returnsNil() { + XCTAssertNil(GlobalCurrency.from(code: "")) + } + + func testFrom_lowercaseCode_returnsNil() { + XCTAssertNil(GlobalCurrency.from(code: "usd"), + "Lookup must be case-sensitive; lowercase should not match") + } + + func testFrom_mixedCase_returnsNil() { + XCTAssertNil(GlobalCurrency.from(code: "Usd")) + } + + func testFrom_partialCode_returnsNil() { + XCTAssertNil(GlobalCurrency.from(code: "US")) + } + + // MARK: Round-trip invariant + + func testFrom_roundTrip_allCases() { + // from(code:) must recover every case via its own .code property. + for currency in GlobalCurrency.allCases { + let recovered = GlobalCurrency.from(code: currency.code) + XCTAssertEqual(recovered, currency, + "Round-trip failed for \(currency.code)") + } + } +} + +// MARK: - GlobalCurrency.code + +final class GlobalCurrencyCodeTests: XCTestCase { + + // MARK: Spot-checks + + func testCode_USD() { XCTAssertEqual(GlobalCurrency.USD.code, "USD") } + func testCode_EUR() { XCTAssertEqual(GlobalCurrency.EUR.code, "EUR") } + func testCode_GBP() { XCTAssertEqual(GlobalCurrency.GBP.code, "GBP") } + func testCode_AED() { XCTAssertEqual(GlobalCurrency.AED.code, "AED") } + func testCode_LTC() { XCTAssertEqual(GlobalCurrency.LTC.code, "LTC") } + func testCode_BTC() { XCTAssertEqual(GlobalCurrency.BTC.code, "BTC") } + func testCode_ETH() { XCTAssertEqual(GlobalCurrency.ETH.code, "ETH") } + func testCode_ZMW() { XCTAssertEqual(GlobalCurrency.ZMW.code, "ZMW") } + func testCode_ZMK() { XCTAssertEqual(GlobalCurrency.ZMK.code, "ZMK") } + func testCode_XOF() { XCTAssertEqual(GlobalCurrency.XOF.code, "XOF") } + func testCode_XPF() { XCTAssertEqual(GlobalCurrency.XPF.code, "XPF") } + + // MARK: Invariants across all cases + + func testCode_allCases_isNonEmpty() { + for currency in GlobalCurrency.allCases { + XCTAssertFalse(currency.code.isEmpty, + "\(currency) should have a non-empty code") + } + } + + func testCode_allCases_isThreeOrFourCharacters() { + // All ISO 4217 codes are 3 chars; crypto codes in this enum are also 3 chars. + for currency in GlobalCurrency.allCases { + let length = currency.code.count + XCTAssertTrue(length == 3 || length == 4, + "\(currency.code) has unexpected length \(length)") + } + } + + func testCode_allCases_isUppercase() { + for currency in GlobalCurrency.allCases { + XCTAssertEqual(currency.code, currency.code.uppercased(), + "\(currency.code) should be uppercase") + } + } + + func testCode_allCases_areUnique() { + let codes = GlobalCurrency.allCases.map(\.code) + let unique = Set(codes) + XCTAssertEqual(codes.count, unique.count, + "Every case must have a unique code") + } +} + +// MARK: - GlobalCurrency.symbol + +final class GlobalCurrencySymbolTests: XCTestCase { + + // MARK: Spot-checks for well-known symbols + + func testSymbol_USD_isDollar() { XCTAssertEqual(GlobalCurrency.USD.symbol, "$") } + func testSymbol_EUR_isEuro() { XCTAssertEqual(GlobalCurrency.EUR.symbol, "€") } + func testSymbol_GBP_isPound() { XCTAssertEqual(GlobalCurrency.GBP.symbol, "£") } + func testSymbol_JPY_isYen() { XCTAssertEqual(GlobalCurrency.JPY.symbol, "¥") } + func testSymbol_CNY_isYen() { XCTAssertEqual(GlobalCurrency.CNY.symbol, "¥") } + func testSymbol_INR_isRupee() { XCTAssertEqual(GlobalCurrency.INR.symbol, "₹") } + func testSymbol_BTC_isBitcoin(){ XCTAssertEqual(GlobalCurrency.BTC.symbol, "₿") } + func testSymbol_LTC_isLitecoin(){ XCTAssertEqual(GlobalCurrency.LTC.symbol, "Ł") } + func testSymbol_ETH_isEthereum(){ XCTAssertEqual(GlobalCurrency.ETH.symbol, "Ξ") } + func testSymbol_ETC_isEthereum(){ XCTAssertEqual(GlobalCurrency.ETC.symbol, "Ξ") } + func testSymbol_KRW_isWon() { XCTAssertEqual(GlobalCurrency.KRW.symbol, "₩") } + func testSymbol_RUB_isRuble() { XCTAssertEqual(GlobalCurrency.RUB.symbol, "₽") } + func testSymbol_TRY_isLira() { XCTAssertEqual(GlobalCurrency.TRY.symbol, "₺") } + func testSymbol_NGN_isNaira() { XCTAssertEqual(GlobalCurrency.NGN.symbol, "₦") } + func testSymbol_CHF_isCHF() { XCTAssertEqual(GlobalCurrency.CHF.symbol, "CHF") } + func testSymbol_AUD_isAUD() { XCTAssertEqual(GlobalCurrency.AUD.symbol, "A$") } + func testSymbol_CAD_isCAD() { XCTAssertEqual(GlobalCurrency.CAD.symbol, "C$") } + func testSymbol_HKD_isHKD() { XCTAssertEqual(GlobalCurrency.HKD.symbol, "HK$") } + func testSymbol_NZD_isNZD() { XCTAssertEqual(GlobalCurrency.NZD.symbol, "NZ$") } + func testSymbol_SGD_isSGD() { XCTAssertEqual(GlobalCurrency.SGD.symbol, "S$") } + func testSymbol_ZAR_isRand() { XCTAssertEqual(GlobalCurrency.ZAR.symbol, "R") } + func testSymbol_ZMK_isZK() { XCTAssertEqual(GlobalCurrency.ZMK.symbol, "ZK") } + func testSymbol_ZMW_isZK() { XCTAssertEqual(GlobalCurrency.ZMW.symbol, "ZK") } + + // MARK: Invariants + + func testSymbol_allCases_isNonEmpty() { + for currency in GlobalCurrency.allCases { + XCTAssertFalse(currency.symbol.isEmpty, + "\(currency.code) must have a non-empty symbol") + } + } +} + +// MARK: - GlobalCurrency.fullCurrencyName + +final class GlobalCurrencyFullNameTests: XCTestCase { + + // MARK: Spot-checks + + func testFullName_USD() { XCTAssertEqual(GlobalCurrency.USD.fullCurrencyName, "US Dollar") } + func testFullName_EUR() { XCTAssertEqual(GlobalCurrency.EUR.fullCurrencyName, "Euro") } + func testFullName_GBP() { XCTAssertEqual(GlobalCurrency.GBP.fullCurrencyName, "British Pound Sterling") } + func testFullName_LTC() { XCTAssertEqual(GlobalCurrency.LTC.fullCurrencyName, "Litecoin") } + func testFullName_BTC() { XCTAssertEqual(GlobalCurrency.BTC.fullCurrencyName, "Bitcoin") } + func testFullName_ETH() { XCTAssertEqual(GlobalCurrency.ETH.fullCurrencyName, "Ethereum") } + func testFullName_ETC() { XCTAssertEqual(GlobalCurrency.ETC.fullCurrencyName, "Ethereum Classic") } + func testFullName_BCH() { XCTAssertEqual(GlobalCurrency.BCH.fullCurrencyName, "Bitcoin Cash") } + func testFullName_JPY() { XCTAssertEqual(GlobalCurrency.JPY.fullCurrencyName, "Japanese Yen") } + func testFullName_ZMK() { XCTAssertEqual(GlobalCurrency.ZMK.fullCurrencyName, "Zambian Kwacha (old)") } + func testFullName_ZMW() { XCTAssertEqual(GlobalCurrency.ZMW.fullCurrencyName, "Zambian Kwacha") } + func testFullName_XAF() { XCTAssertEqual(GlobalCurrency.XAF.fullCurrencyName, "CFA Franc BEAC") } + func testFullName_XOF() { XCTAssertEqual(GlobalCurrency.XOF.fullCurrencyName, "CFA Franc BCEAO") } + func testFullName_XPF() { XCTAssertEqual(GlobalCurrency.XPF.fullCurrencyName, "CFP Franc") } + + // MARK: Invariants + + func testFullName_allCases_isNonEmpty() { + for currency in GlobalCurrency.allCases { + XCTAssertFalse(currency.fullCurrencyName.isEmpty, + "\(currency.code) must have a non-empty fullCurrencyName") + } + } + + func testFullName_allCases_areUnique() { + let names = GlobalCurrency.allCases.map(\.fullCurrencyName) + let unique = Set(names) + XCTAssertEqual(names.count, unique.count, + "Every case must have a unique fullCurrencyName") + } +} + +// MARK: - GlobalCurrency.countryFlag + +final class GlobalCurrencyFlagTests: XCTestCase { + + // MARK: Spot-checks for country flag emoji + + func testFlag_USD_isUSFlag() { XCTAssertEqual(GlobalCurrency.USD.countryFlag, "🇺🇸") } + func testFlag_EUR_isEUFlag() { XCTAssertEqual(GlobalCurrency.EUR.countryFlag, "🇪🇺") } + func testFlag_GBP_isGBFlag() { XCTAssertEqual(GlobalCurrency.GBP.countryFlag, "🇬🇧") } + func testFlag_JPY_isJPFlag() { XCTAssertEqual(GlobalCurrency.JPY.countryFlag, "🇯🇵") } + func testFlag_AUD_isAUFlag() { XCTAssertEqual(GlobalCurrency.AUD.countryFlag, "🇦🇺") } + func testFlag_CAD_isCAFlag() { XCTAssertEqual(GlobalCurrency.CAD.countryFlag, "🇨🇦") } + func testFlag_ZAR_isZAFlag() { XCTAssertEqual(GlobalCurrency.ZAR.countryFlag, "🇿🇦") } + func testFlag_ZMK_isZMFlag() { XCTAssertEqual(GlobalCurrency.ZMK.countryFlag, "🇿🇲") } + func testFlag_ZMW_isZMFlag() { XCTAssertEqual(GlobalCurrency.ZMW.countryFlag, "🇿🇲") } + func testFlag_XCD_isAGFlag() { XCTAssertEqual(GlobalCurrency.XCD.countryFlag, "🇦🇬") } + func testFlag_XAF_isCMFlag() { XCTAssertEqual(GlobalCurrency.XAF.countryFlag, "🇨🇲") } + func testFlag_XOF_isSNFlag() { XCTAssertEqual(GlobalCurrency.XOF.countryFlag, "🇸🇳") } + func testFlag_XPF_isPFFlag() { XCTAssertEqual(GlobalCurrency.XPF.countryFlag, "🇵🇫") } + + // Crypto cases use a symbol character, not a flag emoji. + func testFlag_BTC_isBitcoinSymbol() { XCTAssertEqual(GlobalCurrency.BTC.countryFlag, "₿") } + func testFlag_BCH_isBitcoinSymbol() { XCTAssertEqual(GlobalCurrency.BCH.countryFlag, "₿") } + func testFlag_LTC_isLitecoinSymbol(){ XCTAssertEqual(GlobalCurrency.LTC.countryFlag, "Ł") } + func testFlag_ETH_isEthereumSymbol(){ XCTAssertEqual(GlobalCurrency.ETH.countryFlag, "Ξ") } + func testFlag_ETC_isEthereumSymbol(){ XCTAssertEqual(GlobalCurrency.ETC.countryFlag, "Ξ") } + + // MARK: Invariants + + func testFlag_allCases_isNonEmpty() { + for currency in GlobalCurrency.allCases { + XCTAssertFalse(currency.countryFlag.isEmpty, + "\(currency.code) must have a non-empty countryFlag") + } + } +} + +// MARK: - GlobalCurrency: Cross-property Integrity + +final class GlobalCurrencyIntegrityTests: XCTestCase { + + /// Every property on every case must be populated — no accidental empty strings. + func testAllCases_allProperties_nonEmpty() { + for currency in GlobalCurrency.allCases { + XCTAssertFalse(currency.code.isEmpty, "\(currency): code is empty") + XCTAssertFalse(currency.symbol.isEmpty, "\(currency): symbol is empty") + XCTAssertFalse(currency.fullCurrencyName.isEmpty, "\(currency): fullCurrencyName is empty") + XCTAssertFalse(currency.countryFlag.isEmpty, "\(currency): countryFlag is empty") + } + } + + /// Codes must be unique — duplicate codes would break `from(code:)` determinism. + func testAllCases_codes_areUnique() { + let codes = GlobalCurrency.allCases.map(\.code) + XCTAssertEqual(codes.count, Set(codes).count, + "Duplicate codes found: \(findDuplicates(in: codes))") + } + + /// Full names must be unique to avoid display ambiguity. + func testAllCases_fullCurrencyNames_areUnique() { + let names = GlobalCurrency.allCases.map(\.fullCurrencyName) + XCTAssertEqual(names.count, Set(names).count, + "Duplicate fullCurrencyNames found: \(findDuplicates(in: names))") + } + + /// Raw values must be unique (guaranteed by the enum, but worth asserting explicitly). + func testAllCases_rawValues_areUnique() { + let rawValues = GlobalCurrency.allCases.map(\.rawValue) + XCTAssertEqual(rawValues.count, Set(rawValues).count, + "Duplicate raw values detected") + } + + // MARK: - Helpers + + private func findDuplicates(in array: [String]) -> [String] { + var seen = Set() + return array.filter { !seen.insert($0).inserted } + } +} + +// MARK: - GlobalCurrency: Known Fiat Currency Membership + +final class GlobalCurrencyMembershipTests: XCTestCase { + + private let expectedFiatCodes: Set = [ + "USD", "EUR", "GBP", "JPY", "AUD", "CAD", "CHF", "CNY", + "HKD", "SGD", "NZD", "SEK", "NOK", "DKK", "MXN", "ZAR", + "INR", "BRL", "RUB", "KRW", "TRY", "IDR", "SAR", "AED", + "MYR", "THB", "TWD", "PLN", "HUF", "CZK", "ILS", "CLP", + "ARS", "PHP", "EGP", "NGN", "PKR", "VND", "BDT", "UAH", + "KZT", "QAR", "KWD", "IRR", "IQD", "LBP", "ZMW", "ZMK" + ] + + func testAllExpectedFiatCodes_arePresentInEnum() { + let allCodes = Set(GlobalCurrency.allCases.map(\.code)) + for fiat in expectedFiatCodes { + XCTAssertTrue(allCodes.contains(fiat), "\(fiat) is missing from GlobalCurrency") + } + } + + func testCryptoAssets_arePresentInEnum() { + let expectedCrypto = ["BTC", "ETH", "LTC", "BCH", "ETC"] + let allCodes = Set(GlobalCurrency.allCases.map(\.code)) + for crypto in expectedCrypto { + XCTAssertTrue(allCodes.contains(crypto), "\(crypto) is missing from GlobalCurrency") + } + } +} + +// MARK: - GlobalCurrency: Litecoin as Base Currency + +final class GlobalCurrencyLitecoinTests: XCTestCase { + + /// LTC is the base currency of Brainwallet; it must always be present. + func testLTC_isPresent() { + XCTAssertNotNil(GlobalCurrency.from(code: "LTC")) + } + + func testLTC_symbol_isLitecoinSymbol() { + XCTAssertEqual(GlobalCurrency.LTC.symbol, "Ł") + } + + func testLTC_fullName_isLitecoin() { + XCTAssertEqual(GlobalCurrency.LTC.fullCurrencyName, "Litecoin") + } + + func testLTC_code_isLTC() { + XCTAssertEqual(GlobalCurrency.LTC.code, "LTC") + } + + func testLTC_flag_isLitecoinGlyph() { + XCTAssertEqual(GlobalCurrency.LTC.countryFlag, "Ł") + } +} + +// MARK: - GlobalCurrency: CaseIterable ordering + +final class GlobalCurrencyCaseIterableTests: XCTestCase { + + func testFirstCase_isUSD() { + XCTAssertEqual(GlobalCurrency.allCases.first, .USD, + "USD (rawValue 0) must be the first case") + } + + func testLastCase_isZMW() { + XCTAssertEqual(GlobalCurrency.allCases.last, .ZMW, + "ZMW must be the last case") + } + + func testAllCases_sortedByRawValue_matchesAllCasesOrder() { + let byAllCases = GlobalCurrency.allCases + let byRawValue = GlobalCurrency.allCases.sorted { $0.rawValue < $1.rawValue } + XCTAssertEqual(byAllCases, byRawValue, + "allCases must be ordered by ascending raw value") + } +} diff --git a/BrainwalletUnitTests/Sprite Kit Scene Tests/SceneTests.swift b/BrainwalletUnitTests/Sprite Kit Scene Tests/SceneTests.swift index b4929008..99d13de7 100644 --- a/BrainwalletUnitTests/Sprite Kit Scene Tests/SceneTests.swift +++ b/BrainwalletUnitTests/Sprite Kit Scene Tests/SceneTests.swift @@ -89,7 +89,7 @@ class FallinSceneTests: XCTestCase { expectation.fulfill() } - waitForExpectations(timeout: 1.0) + waitForExpectations(timeout: 1.5) let labelNodes = scene.children.compactMap { $0 as? SKLabelNode } XCTAssertFalse(labelNodes.first?.text?.isEmpty ?? true, "Label should have text") diff --git a/BrainwalletUnitTests/brainwalletUnitTests.xctestplan b/BrainwalletUnitTests/brainwalletUnitTests.xctestplan index 5853dc57..46b5cf83 100644 --- a/BrainwalletUnitTests/brainwalletUnitTests.xctestplan +++ b/BrainwalletUnitTests/brainwalletUnitTests.xctestplan @@ -2,8 +2,9 @@ "configurations" : [ { "id" : "AEDC2994-6395-476D-9A3C-0E69A8BE82FD", - "name" : "Configuration 1", + "name" : "Main Test Configuration", "options" : { + "areLocalizationScreenshotsEnabled" : true, "targetForVariableExpansion" : { "containerPath" : "container:brainwallet.xcodeproj", "identifier" : "75A2A78F1DA5934300A983D8", @@ -21,6 +22,11 @@ "name" : "brainwallet" } ] + }, + "targetForVariableExpansion" : { + "containerPath" : "container:brainwallet.xcodeproj", + "identifier" : "75A2A78F1DA5934300A983D8", + "name" : "brainwallet" } }, "testTargets" : [ diff --git a/README.html b/README.html deleted file mode 100644 index f243c988..00000000 --- a/README.html +++ /dev/null @@ -1,6 +0,0 @@ - - - -

TEST GH Action

- - \ No newline at end of file diff --git a/README.md b/README.md index 3b8598c6..34117c9d 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,14 @@ The open source code of Brainwallet iOS ## Release Notes +### v3.9.2 + Added the first Emoji Picker so that users are ready to set their first 3 emojis for gameplay. + +#### Fixes and Changes: +- Minor layout changes +- Successfully enabled Xcode Cloud testing + + ### v3.9.0 - v3.9.1 Latest Update README for improved description by @kcw-grunt in #78 Beta Release [ 🚀 ] Merge Develop into Main by @kcw-grunt in #81 diff --git a/brainwallet.xcodeproj/project.pbxproj b/brainwallet.xcodeproj/project.pbxproj index 8a642b1c..c75f699c 100644 --- a/brainwallet.xcodeproj/project.pbxproj +++ b/brainwallet.xcodeproj/project.pbxproj @@ -73,6 +73,8 @@ 243B88872F1112E500A8DB69 /* LeaderEllipseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 243B88812F1112DC00A8DB69 /* LeaderEllipseView.swift */; }; 244310442E21BCBD004AE386 /* errorsound.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 244310432E21BCBD004AE386 /* errorsound.mp3 */; }; 244310462E21BCCE004AE386 /* clickseedword.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 244310452E21BCCE004AE386 /* clickseedword.mp3 */; }; + 24444F4C2F461FCA00AFF295 /* GameHubViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24444F462F461FC000AFF295 /* GameHubViewModel.swift */; }; + 24444F4E2F462E3000AFF295 /* EmojiSetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24444F4D2F462E3000AFF295 /* EmojiSetView.swift */; }; 244520342DE7031F003AFFDF /* LockScreenHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244520332DE70310003AFFDF /* LockScreenHostingController.swift */; }; 2446DF522E2906AC001453DF /* bloop.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 2446DF512E2906AC001453DF /* bloop.mp3 */; }; 244A8D932DE84C890024D356 /* BrainwalletShapes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244A8D922DE84C7F0024D356 /* BrainwalletShapes.swift */; }; @@ -103,7 +105,7 @@ 246C42A22F24E23E009BC881 /* SendStep3View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 246C42A12F24E23E009BC881 /* SendStep3View.swift */; }; 246C42A62F250E96009BC881 /* CalloutTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 246C42A52F250E89009BC881 /* CalloutTextView.swift */; }; 246EA1972EC8B32D00085D3A /* DataScannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 246EA1962EC8B31900085D3A /* DataScannerView.swift */; }; - 246F97EA2E846230001923A6 /* BrainwalletiOSPrivateGeneralPurpose.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246F97E72E846218001923A6 /* BrainwalletiOSPrivateGeneralPurpose.framework */; }; + 246F97EA2E846230001923A6 /* BrainwalletiOSPrivateGeneralPurpose.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 246F97E72E846218001923A6 /* BrainwalletiOSPrivateGeneralPurpose.framework */; platformFilter = ios; }; 2472D5D42F1276D100DC6737 /* BentoSendStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2472D5CE2F1276C700DC6737 /* BentoSendStyle.swift */; }; 2473D44F2DB991EC0076746A /* PasscodeGridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2473D44E2DB991D90076746A /* PasscodeGridView.swift */; }; 2476646A2F2FFEFA00F1A70E /* 215595__taira-komori__bomb.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 247664692F2FFEFA00F1A70E /* 215595__taira-komori__bomb.mp3 */; }; @@ -147,6 +149,7 @@ 249C45E02D9415D900E9C3B0 /* AppsFlyerLib in Frameworks */ = {isa = PBXBuildFile; productRef = 249C45DF2D9415D900E9C3B0 /* AppsFlyerLib */; }; 249DDE422DCD573700B2B275 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249DDE412DCD572F00B2B275 /* SettingsView.swift */; }; 24A0ACAB2E0C812C0077E695 /* SettingsLitecoinDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A0ACAA2E0C812C0077E695 /* SettingsLitecoinDetailView.swift */; }; + 24A0FFE22F4C50080003BAA0 /* EmojiSetViewModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A0FFE12F4C50080003BAA0 /* EmojiSetViewModifier.swift */; }; 24A404232DC92F3E006CD076 /* WebBuyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A404222DC92F35006CD076 /* WebBuyView.swift */; }; 24AAB31B2DE79E9000F0C18C /* ReceiveHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24AAB31A2DE79E9000F0C18C /* ReceiveHostingController.swift */; }; 24AAB31D2DE79ECC00F0C18C /* NewReceiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24AAB31C2DE79ECA00F0C18C /* NewReceiveView.swift */; }; @@ -174,6 +177,9 @@ 24BC37C02E22B249005DD3AC /* coinflip.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 24BC37BF2E22B249005DD3AC /* coinflip.mp3 */; }; 24BEBB972DCDE4D4001E1F1F /* (null) in Frameworks */ = {isa = PBXBuildFile; }; 24BEC6072DF0B53000140AAD /* WipeWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BEC6062DF0B52600140AAD /* WipeWalletView.swift */; }; + 24BFAF902F4B635200DC0521 /* BrainwalletPhraseContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BFAF8F2F4B635200DC0521 /* BrainwalletPhraseContainerView.swift */; }; + 24BFAF922F4B875D00DC0521 /* EmojiPhraseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BFAF912F4B875D00DC0521 /* EmojiPhraseView.swift */; }; + 24BFB0492F4BB03B00DC0521 /* EmojiViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24BFB0482F4BB03B00DC0521 /* EmojiViewModel.swift */; }; 24C639CE2DC6D5F60014E6DD /* TransactionRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C639CD2DC6D5E70014E6DD /* TransactionRowView.swift */; }; 24C6D2D42E1D6B150096AD62 /* SeedWordPileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C6D2D32E1D6B030096AD62 /* SeedWordPileView.swift */; }; 24C6D2D62E1D9C4E0096AD62 /* SeedWordDragView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C6D2D52E1D9C4E0096AD62 /* SeedWordDragView.swift */; }; @@ -181,6 +187,8 @@ 24C6D2DA2E1E77BE0096AD62 /* WordBucketView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C6D2D92E1E77B90096AD62 /* WordBucketView.swift */; }; 24C73FBC2DF2CA4100042B01 /* PromptTypeEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C73FBB2DF2CA3600042B01 /* PromptTypeEnum.swift */; }; 24C8875E2F3DCDC100E14910 /* AudioServicesWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C8875D2F3DCDA300E14910 /* AudioServicesWrapper.swift */; }; + 24C949CB2F4A5C6E0073852B /* UIEmojiTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C949CA2F4A5C6E0073852B /* UIEmojiTextField.swift */; }; + 24CA0BE32F475F3200DB0DC7 /* EmojiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CA0BE22F475F3200DB0DC7 /* EmojiView.swift */; }; 24D0343B2E1AED2F00AF81DF /* SwiftUIEffects.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D0343A2E1AED2200AF81DF /* SwiftUIEffects.swift */; }; 24D0343D2E1BFB9500AF81DF /* RestoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D0343C2E1BFB9500AF81DF /* RestoreView.swift */; }; 24D7AE542DCFF6530078252E /* NewConfirmHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D7AE532DCFF6440078252E /* NewConfirmHostingController.swift */; }; @@ -222,8 +230,7 @@ 24F5BD582E04711E0010D340 /* CurrencyPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F5BD572E04711E0010D340 /* CurrencyPickerView.swift */; }; 24F64C202DAFBDA4001DC9B6 /* WelcomMojiDemoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F64C1F2DAFBD94001DC9B6 /* WelcomMojiDemoView.swift */; }; 24FBB86A2E035E10002B5F84 /* SettingsHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24FBB8692E035E07002B5F84 /* SettingsHostingController.swift */; }; - 24FEB8BB2DD2425A00D60036 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 24FEB8B92DD2425A00D60036 /* InfoPlist.strings */; }; - 24FF3E6A2E898D4000FF43C5 /* BrainwalletiOSPrivateGeneralPurpose.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 246F97E72E846218001923A6 /* BrainwalletiOSPrivateGeneralPurpose.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 24FF3E6A2E898D4000FF43C5 /* BrainwalletiOSPrivateGeneralPurpose.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 246F97E72E846218001923A6 /* BrainwalletiOSPrivateGeneralPurpose.framework */; platformFilter = ios; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 759DA0BE1DAC36A3008CC49B /* libBRCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 755CD9D11DAA197C0075898E /* libBRCore.a */; settings = {ATTRIBUTES = (Required, ); }; }; C312D2D02D7DC27700BB97A4 /* ReachabilityMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C312D2912D7DC27700BB97A4 /* ReachabilityMonitor.swift */; }; C312D2D12D7DC27700BB97A4 /* CopyButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C312D23A2D7DC27700BB97A4 /* CopyButtonView.swift */; }; @@ -535,13 +542,14 @@ 242C43ED2F25397300CF6EA4 /* WalkthroughStep3View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalkthroughStep3View.swift; sourceTree = ""; }; 242C43F22F253A3E00CF6EA4 /* TutorialWalkthroughBentoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialWalkthroughBentoView.swift; sourceTree = ""; }; 242C43F42F253A6800CF6EA4 /* TutorialWalkthroughPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialWalkthroughPageView.swift; sourceTree = ""; }; - 242E6CDE2E095AF4002C579A /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 243136FA2E0AFD1000BCBED1 /* SettingsHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsHelpers.swift; sourceTree = ""; }; 243136FC2E0B251900BCBED1 /* SettingsActionToggleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsActionToggleView.swift; sourceTree = ""; }; 2434109B2DBC0C95001C595B /* ConfirmPasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfirmPasscodeView.swift; sourceTree = ""; }; 243B88812F1112DC00A8DB69 /* LeaderEllipseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeaderEllipseView.swift; sourceTree = ""; }; 244310432E21BCBD004AE386 /* errorsound.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = errorsound.mp3; sourceTree = ""; }; 244310452E21BCCE004AE386 /* clickseedword.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = clickseedword.mp3; sourceTree = ""; }; + 24444F462F461FC000AFF295 /* GameHubViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameHubViewModel.swift; sourceTree = ""; }; + 24444F4D2F462E3000AFF295 /* EmojiSetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiSetView.swift; sourceTree = ""; }; 244520332DE70310003AFFDF /* LockScreenHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenHostingController.swift; sourceTree = ""; }; 2446DF512E2906AC001453DF /* bloop.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = bloop.mp3; sourceTree = ""; }; 244A8D922DE84C7F0024D356 /* BrainwalletShapes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrainwalletShapes.swift; sourceTree = ""; }; @@ -553,7 +561,6 @@ 24582D842F30BA73008B133A /* SeedWordViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedWordViewModel.swift; sourceTree = ""; }; 245A91DB2DBA3E450048E3A6 /* PINRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PINRowView.swift; sourceTree = ""; }; 245F189B2DD1F27E00D20715 /* BuyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyViewModel.swift; sourceTree = ""; }; - 246027A62E5E178700CDEB7A /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/InfoPlist.strings"; sourceTree = ""; }; 2461418E2DA9B7AF007BB116 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = brainwallet/LaunchScreen.storyboard; sourceTree = SOURCE_ROOT; }; 24618EE92D90435200A878AC /* BRCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRCore.swift; sourceTree = ""; }; 24691D132EAE4D1C003CDC7C /* SyncSubBentoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncSubBentoView.swift; sourceTree = ""; }; @@ -573,7 +580,6 @@ 247664692F2FFEFA00F1A70E /* 215595__taira-komori__bomb.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "215595__taira-komori__bomb.mp3"; sourceTree = ""; }; 2476646B2F2FFFA600F1A70E /* 807381__jean_filho__sci-fi-grenade-explosion.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "807381__jean_filho__sci-fi-grenade-explosion.mp3"; sourceTree = ""; }; 2476646D2F3002B900F1A70E /* WelcomeFallinScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeFallinScene.swift; sourceTree = ""; }; - 2476AE322E27038F0065CE22 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; 2476AE332E27B44B0065CE22 /* InputWordsGridView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputWordsGridView.swift; sourceTree = ""; }; 2476AE352E28029B0065CE22 /* InputSeedWordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputSeedWordView.swift; sourceTree = ""; }; 247A7D062E951653000DF8C0 /* BalanceBentoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceBentoView.swift; sourceTree = ""; }; @@ -726,6 +732,7 @@ 249C45DA2D936DA600E9C3B0 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; name = module.modulemap; path = ../core/module.modulemap; sourceTree = SOURCE_ROOT; }; 249DDE412DCD572F00B2B275 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 24A0ACAA2E0C812C0077E695 /* SettingsLitecoinDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsLitecoinDetailView.swift; sourceTree = ""; }; + 24A0FFE12F4C50080003BAA0 /* EmojiSetViewModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiSetViewModifier.swift; sourceTree = ""; }; 24A404222DC92F35006CD076 /* WebBuyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebBuyView.swift; sourceTree = ""; }; 24AAB31A2DE79E9000F0C18C /* ReceiveHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveHostingController.swift; sourceTree = ""; }; 24AAB31C2DE79ECA00F0C18C /* NewReceiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewReceiveView.swift; sourceTree = ""; }; @@ -746,14 +753,15 @@ 24B0653F2DC647F000B5E000 /* GameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = ""; }; 24B7D75A2DF6E91D0031F129 /* BuyReceiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuyReceiveView.swift; sourceTree = ""; }; 24B7D75C2DF6F9F60031F129 /* ModalPresenter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ModalPresenter+Extension.swift"; sourceTree = ""; }; - 24B84F7B2E085BBC0060C2EE /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/InfoPlist.strings; sourceTree = ""; }; - 24B84F7C2E085CE40060C2EE /* pa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pa; path = pa.lproj/InfoPlist.strings; sourceTree = ""; }; 24B84F822E0868370060C2EE /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; 24BC04BE2E0D7969007B0195 /* SettingsActionShareView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsActionShareView.swift; sourceTree = ""; }; 24BC04C02E0D7FA1007B0195 /* SettingsActionBrainwalletPhraseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsActionBrainwalletPhraseView.swift; sourceTree = ""; }; 24BC04C22E0DB1C1007B0195 /* SettingsActionSeedPhraseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsActionSeedPhraseView.swift; sourceTree = ""; }; 24BC37BF2E22B249005DD3AC /* coinflip.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = coinflip.mp3; sourceTree = ""; }; 24BEC6062DF0B52600140AAD /* WipeWalletView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WipeWalletView.swift; sourceTree = ""; }; + 24BFAF8F2F4B635200DC0521 /* BrainwalletPhraseContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrainwalletPhraseContainerView.swift; sourceTree = ""; }; + 24BFAF912F4B875D00DC0521 /* EmojiPhraseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiPhraseView.swift; sourceTree = ""; }; + 24BFB0482F4BB03B00DC0521 /* EmojiViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiViewModel.swift; sourceTree = ""; }; 24C639CD2DC6D5E70014E6DD /* TransactionRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionRowView.swift; sourceTree = ""; }; 24C6D2D32E1D6B030096AD62 /* SeedWordPileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedWordPileView.swift; sourceTree = ""; }; 24C6D2D52E1D9C4E0096AD62 /* SeedWordDragView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeedWordDragView.swift; sourceTree = ""; }; @@ -761,6 +769,8 @@ 24C6D2D92E1E77B90096AD62 /* WordBucketView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordBucketView.swift; sourceTree = ""; }; 24C73FBB2DF2CA3600042B01 /* PromptTypeEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromptTypeEnum.swift; sourceTree = ""; }; 24C8875D2F3DCDA300E14910 /* AudioServicesWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioServicesWrapper.swift; sourceTree = ""; }; + 24C949CA2F4A5C6E0073852B /* UIEmojiTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIEmojiTextField.swift; sourceTree = ""; }; + 24CA0BE22F475F3200DB0DC7 /* EmojiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiView.swift; sourceTree = ""; }; 24D0343A2E1AED2200AF81DF /* SwiftUIEffects.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIEffects.swift; sourceTree = ""; }; 24D0343C2E1BFB9500AF81DF /* RestoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestoreView.swift; sourceTree = ""; }; 24D7AE532DCFF6440078252E /* NewConfirmHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewConfirmHostingController.swift; sourceTree = ""; }; @@ -802,20 +812,6 @@ 24F5BD572E04711E0010D340 /* CurrencyPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrencyPickerView.swift; sourceTree = ""; }; 24F64C1F2DAFBD94001DC9B6 /* WelcomMojiDemoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomMojiDemoView.swift; sourceTree = ""; }; 24FBB8692E035E07002B5F84 /* SettingsHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsHostingController.swift; sourceTree = ""; }; - 24FEB8BA2DD2425A00D60036 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8BC2DD2449600D60036 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8BE2DD244D200D60036 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8BF2DD2465300D60036 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8C02DD25B3900D60036 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8C12DD25B5200D60036 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8C22DD25B6600D60036 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - 24FEB8C32DD25B7600D60036 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8C52DD25BA200D60036 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8C62DD25BB600D60036 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8C72DD25BD000D60036 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = ""; }; - 24FEB8C82DD25D7200D60036 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; - 24FEB8C92DD25D8300D60036 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; - 24FEB8CA2DD25D9500D60036 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; 755CD9D11DAA197C0075898E /* libBRCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBRCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; 75A2A7901DA5934300A983D8 /* Brainwallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Brainwallet.app; sourceTree = BUILT_PRODUCTS_DIR; }; 75A2A7F21DA5935F00A983D8 /* Messages.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Messages.framework; path = System/Library/Frameworks/Messages.framework; sourceTree = SDKROOT; }; @@ -1643,13 +1639,6 @@ path = Modules/core; sourceTree = ""; }; - 249DDE402DCD55D700B2B275 /* Recovered References */ = { - isa = PBXGroup; - children = ( - ); - name = "Recovered References"; - sourceTree = ""; - }; 24A404212DC92F1F006CD076 /* New Buy Webview */ = { isa = PBXGroup; children = ( @@ -1707,7 +1696,10 @@ 24B0653E2DC647DC00B5E000 /* Game Classes */ = { isa = PBXGroup; children = ( + 24444F462F461FC000AFF295 /* GameHubViewModel.swift */, 24B0653F2DC647F000B5E000 /* GameView.swift */, + 24444F4D2F462E3000AFF295 /* EmojiSetView.swift */, + 24CA0BE22F475F3200DB0DC7 /* EmojiView.swift */, ); path = "Game Classes"; sourceTree = ""; @@ -1738,6 +1730,18 @@ path = "Settings Classes"; sourceTree = ""; }; + 24C949C42F4A5C440073852B /* Emoji Classes */ = { + isa = PBXGroup; + children = ( + 24C949CA2F4A5C6E0073852B /* UIEmojiTextField.swift */, + 24BFAF8F2F4B635200DC0521 /* BrainwalletPhraseContainerView.swift */, + 24BFAF912F4B875D00DC0521 /* EmojiPhraseView.swift */, + 24BFB0482F4BB03B00DC0521 /* EmojiViewModel.swift */, + 24A0FFE12F4C50080003BAA0 /* EmojiSetViewModifier.swift */, + ); + path = "Emoji Classes"; + sourceTree = ""; + }; 24D034392E1AED0200AF81DF /* Geometric Effects */ = { isa = PBXGroup; children = ( @@ -1832,7 +1836,6 @@ 75B6F52F1DA71DCC0031A93F /* Modules */, 75A2A7F11DA5935F00A983D8 /* Frameworks */, 75A2A7911DA5934300A983D8 /* Products */, - 249DDE402DCD55D700B2B275 /* Recovered References */, 24295E3C2E341F1C00A76776 /* BrainwalletUnitTests */, 24295E9C2E3428CA00A76776 /* BrainwalletUITests */, ); @@ -1962,6 +1965,7 @@ 24E078A62DF1F915004B5958 /* Legacy Prompt Classes */, 24F378002DE89C5B00A388AB /* MoonPay Helper */, 244A8D912DE84C710024D356 /* Brainwallet Custom Shapes */, + 24C949C42F4A5C440073852B /* Emoji Classes */, 24AAB3192DE79E6E00F0C18C /* New Receive Classes */, 248E5C402DE78625003F232F /* Networking */, 241B477E2DCEA05D00279954 /* Localizations */, @@ -2067,7 +2071,6 @@ C312D24D2D7DC27700BB97A4 /* ForgotView.swift */, C312D24E2D7DC27700BB97A4 /* Functions.swift */, C312D2532D7DC27700BB97A4 /* Info.plist */, - 24FEB8B92DD2425A00D60036 /* InfoPlist.strings */, C312D2542D7DC27700BB97A4 /* IntroStepView.swift */, C312D2552D7DC27700BB97A4 /* KVStoreCoordinator.swift */, C312D2582D7DC27700BB97A4 /* LaunchCardHostingController.swift */, @@ -2302,10 +2305,10 @@ uk, Base, pa, - fa, pl, fr, "es-419", + "fa-IR", ); mainGroup = 75A2A7871DA5934300A983D8; packageReferences = ( @@ -2394,7 +2397,6 @@ 2476646A2F2FFEFA00F1A70E /* 215595__taira-komori__bomb.mp3 in Resources */, 24E06FC52DF4790B00719B6C /* remote-config-defaults.plist in Resources */, 2461418F2DA9B7AF007BB116 /* LaunchScreen.storyboard in Resources */, - 24FEB8BB2DD2425A00D60036 /* InfoPlist.strings in Resources */, 24D7EA052E336D0800A9AB68 /* Assets.xcassets in Resources */, 247A83992EA3E3D800B5DFD8 /* BoldenVan.ttf in Resources */, 24D7EA062E336D0800A9AB68 /* Icon.xcassets in Resources */, @@ -2639,6 +2641,7 @@ 24E078AA2DF1F9AE004B5958 /* PromptCellViewModel.swift in Sources */, C3236A012D7DE355007039A1 /* URLController.swift in Sources */, 2428718C2DE5E3370035DE48 /* NewSyncHostingController.swift in Sources */, + 24444F4E2F462E3000AFF295 /* EmojiSetView.swift in Sources */, 24C6D2D82E1E75510096AD62 /* SeedWordTargetView.swift in Sources */, C312D3072D7DC27700BB97A4 /* CGRect+Additions.swift in Sources */, 247A83932EA034BC00B5DFD8 /* Renderer.swift in Sources */, @@ -2711,6 +2714,7 @@ 24C6D2D42E1D6B150096AD62 /* SeedWordPileView.swift in Sources */, 24B065372DC6281D00B5E000 /* NewMainViewModel.swift in Sources */, 2416CE722DA90D0D00FFBD10 /* BRTxInputExtension.swift in Sources */, + 24444F4C2F461FCA00AFF295 /* GameHubViewModel.swift in Sources */, 24BC04C32E0DB1C1007B0195 /* SettingsActionSeedPhraseView.swift in Sources */, 2416CE742DA90D0D00FFBD10 /* BRReplicatedKVStore.swift in Sources */, 249DDE422DCD573700B2B275 /* SettingsView.swift in Sources */, @@ -2779,6 +2783,7 @@ 2457DC822EB63AAE00688B9A /* TransactionHelper.swift in Sources */, 2476646E2F3002BB00F1A70E /* WelcomeFallinScene.swift in Sources */, 240CF5A72F2E7C7500428378 /* FallinMojiDemoView.swift in Sources */, + 24C949CB2F4A5C6E0073852B /* UIEmojiTextField.swift in Sources */, 24DB05E42E05D5E800C57FE9 /* SettingsActionThemeView.swift in Sources */, C312D3CB2D7DC27700BB97A4 /* PartnerData.swift in Sources */, C312D3CD2D7DC27700BB97A4 /* AlertFailureView.swift in Sources */, @@ -2787,6 +2792,7 @@ C312D3D22D7DC27700BB97A4 /* LaunchView.swift in Sources */, C312D3D42D7DC27700BB97A4 /* BuyTileView.swift in Sources */, C312D3D52D7DC27700BB97A4 /* UIScreen+Additions.swift in Sources */, + 24CA0BE32F475F3200DB0DC7 /* EmojiView.swift in Sources */, C312D3D82D7DC27700BB97A4 /* UITableView+Additions.swift in Sources */, 240CEE1C2F2D87CB00428378 /* WalkthroughStep4View.swift in Sources */, 24006C2C2F0FCE5500F29F0A /* BentoSendInitialView.swift in Sources */, @@ -2874,6 +2880,7 @@ C312D4632D7DC27700BB97A4 /* PinPadCells.swift in Sources */, C312D4662D7DC27700BB97A4 /* PaymentRequest.swift in Sources */, C312D4692D7DC27700BB97A4 /* CGContext+Additions.swift in Sources */, + 24A0FFE22F4C50080003BAA0 /* EmojiSetViewModifier.swift in Sources */, 24E078A82DF1F9A9004B5958 /* PromptCellView.swift in Sources */, C312D46D2D7DC27700BB97A4 /* DismissLoginAnimator.swift in Sources */, C312D46E2D7DC27700BB97A4 /* SeedWordContainerView.swift in Sources */, @@ -2884,6 +2891,7 @@ 247A83972EA2A9A500B5DFD8 /* BentoBackgroundHelpers.swift in Sources */, 240850F42F40B29B0097706A /* SendProgressBarView.swift in Sources */, C312D4752D7DC27700BB97A4 /* ApplicationController.swift in Sources */, + 24BFAF902F4B635200DC0521 /* BrainwalletPhraseContainerView.swift in Sources */, 24DB05E82E06B44700C57FE9 /* SettingsExpandingBlockchainView.swift in Sources */, C312D4772D7DC27700BB97A4 /* NSNotificationNameExtension.swift in Sources */, C312D4782D7DC27700BB97A4 /* ContainerViewController.swift in Sources */, @@ -2895,6 +2903,7 @@ 24B7D75D2DF6FA0C0031F129 /* ModalPresenter+Extension.swift in Sources */, C312D47F2D7DC27700BB97A4 /* Extensions.swift in Sources */, C312D4812D7DC27700BB97A4 /* DismissModalAnimator.swift in Sources */, + 24BFB0492F4BB03B00DC0521 /* EmojiViewModel.swift in Sources */, C312D4832D7DC27700BB97A4 /* GradientCircle.swift in Sources */, C312D4842D7DC27700BB97A4 /* ModalViewController.swift in Sources */, 245A91DC2DBA3E670048E3A6 /* PINRowView.swift in Sources */, @@ -2905,6 +2914,7 @@ C312D48A2D7DC27700BB97A4 /* MenuButtonType.swift in Sources */, 248E5C422DE78653003F232F /* NetworkHelper.swift in Sources */, C312D48B2D7DC27700BB97A4 /* CreateWalletView.swift in Sources */, + 24BFAF922F4B875D00DC0521 /* EmojiPhraseView.swift in Sources */, C312D48F2D7DC27700BB97A4 /* SimpleRedux.swift in Sources */, 241D22492DB526E9000302C8 /* YourSeedWordsView.swift in Sources */, C312D4912D7DC27700BB97A4 /* ForgotAlertViewModel.swift in Sources */, @@ -2938,36 +2948,6 @@ }; /* End PBXTargetDependency section */ -/* Begin PBXVariantGroup section */ - 24FEB8B92DD2425A00D60036 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 24FEB8BA2DD2425A00D60036 /* ar */, - 24FEB8BC2DD2449600D60036 /* de */, - 24FEB8BE2DD244D200D60036 /* hi */, - 24FEB8BF2DD2465300D60036 /* id */, - 24FEB8C02DD25B3900D60036 /* it */, - 24FEB8C12DD25B5200D60036 /* ja */, - 24FEB8C22DD25B6600D60036 /* pt-BR */, - 24FEB8C32DD25B7600D60036 /* ru */, - 24FEB8C52DD25BA200D60036 /* sv */, - 24FEB8C62DD25BB600D60036 /* tr */, - 24FEB8C72DD25BD000D60036 /* uk */, - 24FEB8C82DD25D7200D60036 /* zh-Hans */, - 24FEB8C92DD25D8300D60036 /* zh-Hant */, - 24FEB8CA2DD25D9500D60036 /* ko */, - 24B84F7B2E085BBC0060C2EE /* fa */, - 24B84F7C2E085CE40060C2EE /* pa */, - 242E6CDE2E095AF4002C579A /* pl */, - 2476AE322E27038F0065CE22 /* fr */, - 246027A62E5E178700CDEB7A /* es-419 */, - ); - name = InfoPlist.strings; - path = brainwallet; - sourceTree = SOURCE_ROOT; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ 24295E422E341F1C00A76776 /* Debug */ = { isa = XCBuildConfiguration; @@ -3174,7 +3154,7 @@ CODE_SIGN_ENTITLEMENTS = brainwallet/brainwallet.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2602120; + CURRENT_PROJECT_VERSION = 2602266; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEPLOYMENT_POSTPROCESSING = NO; DEVELOPMENT_TEAM = U8WDVUDC2P; @@ -3191,7 +3171,7 @@ "@executable_path/Frameworks", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 3.9.1; + MARKETING_VERSION = 3.9.2; ONLY_ACTIVE_ARCH = NO; OTHER_SWIFT_FLAGS = "-DDebug $(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = com.gruntsoftware.brainwallet; @@ -3205,7 +3185,7 @@ "SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -3366,7 +3346,7 @@ CODE_SIGN_ENTITLEMENTS = brainwallet/brainwallet.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2602120; + CURRENT_PROJECT_VERSION = 2602266; DEPLOYMENT_POSTPROCESSING = YES; DEVELOPMENT_TEAM = U8WDVUDC2P; DOCC_EXTRACT_SWIFT_INFO_FOR_OBJC_SYMBOLS = YES; @@ -3382,7 +3362,7 @@ "@executable_path/Frameworks", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 3.9.1; + MARKETING_VERSION = 3.9.2; ONLY_ACTIVE_ARCH = NO; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = com.gruntsoftware.brainwallet; @@ -3394,7 +3374,7 @@ SWIFT_INCLUDE_PATHS = "$(SDK_DIR)/usr/include $(SRCROOT)/Modules $(SRCROOT)/br-swift"; SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; diff --git a/brainwallet/Additions/String+Additions.swift b/brainwallet/Additions/String+Additions.swift index 674fdd5b..22565a94 100644 --- a/brainwallet/Additions/String+Additions.swift +++ b/brainwallet/Additions/String+Additions.swift @@ -59,16 +59,16 @@ extension String { let endCount = tagsRemoved.utf8.count var i = 0 while output.string.utf8.count < endCount || i < 50 { - var regular: NSString? - var bold: NSString? - scanner.scanUpTo(startTag, into: ®ular) - scanner.scanUpTo(endTag, into: &bold) - if let regular = regular { - output.append(NSAttributedString(string: (regular as String).tagsRemoved, attributes: UIFont.regularAttributes)) - } - if let bold = bold { - output.append(NSAttributedString(string: (bold as String).tagsRemoved, attributes: UIFont.boldAttributes)) - } + if let regular = scanner.scanUpToString(startTag) { + output.append(NSAttributedString(string: (regular as String) + .tagsRemoved, attributes: UIFont.regularAttributes)) + } + + if let bold = scanner.scanUpToString(endTag) { + output.append(NSAttributedString(string: (bold as String) + .tagsRemoved, attributes: UIFont.boldAttributes)) + } + i += 1 } return output diff --git a/brainwallet/Additions/UIButton+BRWAdditions.swift b/brainwallet/Additions/UIButton+BRWAdditions.swift index 12266cd1..237f710f 100644 --- a/brainwallet/Additions/UIButton+BRWAdditions.swift +++ b/brainwallet/Additions/UIButton+BRWAdditions.swift @@ -6,8 +6,7 @@ extension UIButton { button.setTitle(title, for: .normal) button.setImage(image, for: .normal) button.titleLabel?.font = UIFont.customMedium(size: 11.0) - if let imageSize = button.imageView?.image?.size, - let font = button.titleLabel?.font { + if let font = button.titleLabel?.font { let spacing: CGFloat = C.padding[1] / 2.0 let titleSize = NSString(string: title).size(withAttributes: [NSAttributedString.Key.font: font]) } diff --git a/brainwallet/App Launch Classes/AppDelegate.swift b/brainwallet/App Launch Classes/AppDelegate.swift index cc295307..897c4821 100644 --- a/brainwallet/App Launch Classes/AppDelegate.swift +++ b/brainwallet/App Launch Classes/AppDelegate.swift @@ -192,34 +192,27 @@ class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate { } /// Sets the correct Google Services plist file - private func setFirebaseConfiguration() { - - guard let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist") else { - assertionFailure("Couldn't load google services file") - return - } - - if let fboptions = FirebaseOptions(contentsOfFile: filePath) { - FirebaseApp.configure(options: fboptions) - #if DEBUG - Analytics.setUserProperty("debug_mode", forName: "debug_enabled") - - /// Notfy the Firebase Console for monitoring and debugging - Analytics - .logEvent("debug_mode_launched", - parameters: ["device": UIDevice.current.model - ]) - #endif - - } else { - Analytics.logEvent("error_message", - parameters: [ - "firebase_config_failed": "launch_error" - ]) - - assertionFailure("Couldn't load Firebase config file") - } - } + func setFirebaseConfiguration() { + guard FirebaseApp.app() == nil else { return } + + if let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist"), + let options = FirebaseOptions(contentsOfFile: filePath) { + // Production path — real plist present + FirebaseApp.configure(options: options) + } else { + // Plist absent — CI/test environment, configure with stub + // to prevent Crashlytics/Performance SEGV during static init + let options = FirebaseOptions( + googleAppID: "1:000000000000:ios:0000000000000000000000", + gcmSenderID: "000000000000" + ) + options.projectID = "test-project" + options.storageBucket = "test-project.firebasestorage.app" + options.apiKey = "AIzaSy00000000000000000000000000000000" + FirebaseApp.configure(options: options) + Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false) + } + } /// On Demand Resources /// Use for another resource heavy view diff --git a/brainwallet/Colors/Brainwallet+Color.swift b/brainwallet/Colors/Brainwallet+Color.swift index 93a1edc3..0ca4995f 100644 --- a/brainwallet/Colors/Brainwallet+Color.swift +++ b/brainwallet/Colors/Brainwallet+Color.swift @@ -79,26 +79,32 @@ struct BrainwalletUIColor { struct BentoColor { /// purple1 - #C8B3EE + private static let purple1Chip = Color(#colorLiteral(red: 0.7843137255, green: 0.7019607843, blue: 0.9333333333, alpha: 1)) static let purple1 = Color(red: 0.7843137254901961, green: 0.7019607843137254, blue: 0.9333333333333333) /// purple2 - #8669BA + private static let purple2Chip = Color(#colorLiteral(red: 0.5254901961, green: 0.4117647059, blue: 0.7294117647, alpha: 1)) static let purple2 = Color(red: 0.5254901960784314, green: 0.4117647058823529, blue: 0.7294117647058823) /// purple3 - #121348 + private static let purple3Chip = Color(#colorLiteral(red: 0.07058823529, green: 0.07450980392, blue: 0.2823529412, alpha: 1)) static let purple3 = Color(red: 0.07058823529411765, green: 0.07450980392156863, blue: 0.2823529411764706) /// purple4 - #491FA3 + private static let purple4Chip = Color(#colorLiteral(red: 0.2862745098, green: 0.1215686275, blue: 0.6392156863, alpha: 1)) static let purple4 = Color(red: 0.28627450980392155, green: 0.12156862745098039, blue: 0.6392156862745098) /// purple5 - #5754FF + private static let purple5Chip = Color(#colorLiteral(red: 0.3411764706, green: 0.3294117647, blue: 1, alpha: 1)) static let purple5 = Color(red: 0.3411764705882353, green: 0.32941176470588235, blue: 1) /// grayBackground- #E8EAEC + private static let grayChip = Color(#colorLiteral(red: 0.9098039216, green: 0.9176470588, blue: 0.9254901961, alpha: 1)) static let grayBackground = Color(red: 0.9098039215686274, green: 0.9176470588235294, blue: 0.9254901960784314) diff --git a/brainwallet/Currency.swift b/brainwallet/Currency.swift index 431622f2..42e9026b 100644 --- a/brainwallet/Currency.swift +++ b/brainwallet/Currency.swift @@ -9,7 +9,6 @@ class Currency { return result?.currencySymbol } } - enum GlobalCurrency: Int, CaseIterable, Equatable, Identifiable { case USD = 0 @@ -18,61 +17,106 @@ enum GlobalCurrency: Int, CaseIterable, Equatable, Identifiable { case AFN case ALL case AMD + case ANG + case AOA case ARS case AUD + case AWG case AZN case BAM case BBD + case BCH case BDT case BGN case BHD + case BIF + case BMD case BND case BOB case BRL + case BSD + case BTC case BTN + case BWP case BYN + case BZD case CAD + case CDF case CHF case CLP case CNY case COP case CRC + case CVE case CZK + case DJF case DKK case DOP case DZD case EGP + case ERN + case ETB + case ETC + case ETH case FJD + case FKP case GBP case GEL + case GGP case GHS + case GIP + case GMD + case GNF case GTQ + case GYD case HKD case HNL case HRK + case HTG case HUF case IDR case ILS + case IMP case INR + case IQD + case IRR case ISK + case JEP case JMD case JOD case JPY case KES case KGS case KHR + case KMF case KRW case KWD + case KYD case KZT case LAK + case LBP case LKR + case LRD + case LSL + case LTC + case LTL + case LYD case MAD case MDL + case MGA case MKD case MMK case MNT + case MOP + case MRO + case MTL + case MUR + case MVR + case MWK case MXN case MYR + case MZN + case NAD case NGN case NIO case NOK @@ -90,10 +134,18 @@ enum GlobalCurrency: Int, CaseIterable, Equatable, Identifiable { case RON case RSD case RUB + case RWF case SAR case SBD + case SCR + case SDG case SEK case SGD + case SHP + case SOS + case SRD + case SVC + case SZL case THB case TJS case TMT @@ -102,332 +154,525 @@ enum GlobalCurrency: Int, CaseIterable, Equatable, Identifiable { case TRY case TTD case TWD + case TZS case UAH + case UGX case UYU case UZS case VES case VND case VUV case WST + case XAF case XCD + case XOF + case XPF + case YER case ZAR + case ZMK + case ZMW var id: GlobalCurrency { self } + static func from(code: String) -> GlobalCurrency? { - return allCases.first { $0.code == code } + return allCases.first { $0.code == code } } var symbol: String { - switch self { - case .USD: return "$" - case .EUR: return "€" - case .AED: return "د.إ" - case .AFN: return "؋" - case .ALL: return "L" - case .AMD: return "֏" - case .ARS: return "$" - case .AUD: return "A$" - case .AZN: return "₼" - case .BAM: return "КМ" - case .BBD: return "Bds$" - case .BDT: return "৳" - case .BGN: return "лв" - case .BHD: return ".د.ب" - case .BND: return "B$" - case .BOB: return "Bs." - case .BRL: return "R$" - case .BTN: return "Nu." - case .BYN: return "Br" - case .CAD: return "C$" - case .CHF: return "CHF" - case .CLP: return "$" - case .CNY: return "¥" - case .COP: return "$" - case .CRC: return "₡" - case .CZK: return "Kč" - case .DKK: return "kr" - case .DOP: return "RD$" - case .DZD: return "د.ج" - case .EGP: return "£" - case .FJD: return "FJ$" - case .GBP: return "£" - case .GEL: return "₾" - case .GHS: return "₵" - case .GTQ: return "Q" - case .HKD: return "HK$" - case .HNL: return "L" - case .HRK: return "kn" - case .HUF: return "Ft" - case .IDR: return "Rp" - case .ILS: return "₪" - case .INR: return "₹" - case .ISK: return "kr" - case .JMD: return "J$" - case .JOD: return "د.ا" - case .JPY: return "¥" - case .KES: return "Sh" - case .KGS: return "лв" - case .KHR: return "៛" - case .KRW: return "₩" - case .KWD: return "د.ك" - case .KZT: return "₸" - case .LAK: return "₭" - case .LKR: return "Rs" - case .MAD: return "د.م." - case .MDL: return "L" - case .MKD: return "ден" - case .MMK: return "Ks" - case .MNT: return "₮" - case .MXN: return "$" - case .MYR: return "RM" - case .NGN: return "₦" - case .NIO: return "C$" - case .NOK: return "kr" - case .NPR: return "Rs" - case .NZD: return "NZ$" - case .OMR: return "﷼" - case .PAB: return "B/." - case .PEN: return "S/" - case .PGK: return "K" - case .PHP: return "₱" - case .PKR: return "₨" - case .PLN: return "zł" - case .PYG: return "₲" - case .QAR: return "﷼" - case .RON: return "lei" - case .RSD: return "дин" - case .RUB: return "₽" - case .SAR: return "﷼" - case .SBD: return "SI$" - case .SEK: return "kr" - case .SGD: return "S$" - case .THB: return "฿" - case .TJS: return "ЅМ" - case .TMT: return "m" - case .TND: return "د.ت" - case .TOP: return "T$" - case .TRY: return "₺" - case .TTD: return "TT$" - case .TWD: return "NT$" - case .UAH: return "₴" - case .UYU: return "$" - case .UZS: return "лв" - case .VES: return "Bs.S" - case .VND: return "₫" - case .VUV: return "Vt" - case .WST: return "WS$" - case .XCD: return "$" - case .ZAR: return "R" - } + switch self { + case .USD: return "$" + case .EUR: return "€" + case .AED: return "د.إ" + case .AFN: return "؋" + case .ALL: return "L" + case .AMD: return "֏" + case .ANG: return "ƒ" + case .AOA: return "Kz" + case .ARS: return "$" + case .AUD: return "A$" + case .AWG: return "ƒ" + case .AZN: return "₼" + case .BAM: return "КМ" + case .BBD: return "Bds$" + case .BCH: return "BCH" + case .BDT: return "৳" + case .BGN: return "лв" + case .BHD: return ".د.ب" + case .BIF: return "Fr" + case .BMD: return "$" + case .BND: return "B$" + case .BOB: return "Bs." + case .BRL: return "R$" + case .BSD: return "$" + case .BTC: return "₿" + case .BTN: return "Nu." + case .BWP: return "P" + case .BYN: return "Br" + case .BZD: return "BZ$" + case .CAD: return "C$" + case .CDF: return "Fr" + case .CHF: return "CHF" + case .CLP: return "$" + case .CNY: return "¥" + case .COP: return "$" + case .CRC: return "₡" + case .CVE: return "$" + case .CZK: return "Kč" + case .DJF: return "Fr" + case .DKK: return "kr" + case .DOP: return "RD$" + case .DZD: return "د.ج" + case .EGP: return "£" + case .ERN: return "Nfk" + case .ETB: return "Br" + case .ETC: return "Ξ" + case .ETH: return "Ξ" + case .FJD: return "FJ$" + case .FKP: return "£" + case .GBP: return "£" + case .GEL: return "₾" + case .GGP: return "£" + case .GHS: return "₵" + case .GIP: return "£" + case .GMD: return "D" + case .GNF: return "Fr" + case .GTQ: return "Q" + case .GYD: return "$" + case .HKD: return "HK$" + case .HNL: return "L" + case .HRK: return "kn" + case .HTG: return "G" + case .HUF: return "Ft" + case .IDR: return "Rp" + case .ILS: return "₪" + case .IMP: return "£" + case .INR: return "₹" + case .IQD: return "ع.د" + case .IRR: return "﷼" + case .ISK: return "kr" + case .JEP: return "£" + case .JMD: return "J$" + case .JOD: return "د.ا" + case .JPY: return "¥" + case .KES: return "Sh" + case .KGS: return "лв" + case .KHR: return "៛" + case .KMF: return "Fr" + case .KRW: return "₩" + case .KWD: return "د.ك" + case .KYD: return "$" + case .KZT: return "₸" + case .LAK: return "₭" + case .LBP: return "ل.ل" + case .LKR: return "Rs" + case .LRD: return "$" + case .LSL: return "L" + case .LTC: return "Ł" + case .LTL: return "Lt" + case .LYD: return "ل.د" + case .MAD: return "د.م." + case .MDL: return "L" + case .MGA: return "Ar" + case .MKD: return "ден" + case .MMK: return "Ks" + case .MNT: return "₮" + case .MOP: return "P" + case .MRO: return "UM" + case .MTL: return "₤" + case .MUR: return "Rs" + case .MVR: return "Rf" + case .MWK: return "MK" + case .MXN: return "$" + case .MYR: return "RM" + case .MZN: return "MT" + case .NAD: return "N$" + case .NGN: return "₦" + case .NIO: return "C$" + case .NOK: return "kr" + case .NPR: return "Rs" + case .NZD: return "NZ$" + case .OMR: return "﷼" + case .PAB: return "B/." + case .PEN: return "S/" + case .PGK: return "K" + case .PHP: return "₱" + case .PKR: return "₨" + case .PLN: return "zł" + case .PYG: return "₲" + case .QAR: return "﷼" + case .RON: return "lei" + case .RSD: return "дин" + case .RUB: return "₽" + case .RWF: return "Fr" + case .SAR: return "﷼" + case .SBD: return "SI$" + case .SCR: return "Rs" + case .SDG: return "£" + case .SEK: return "kr" + case .SGD: return "S$" + case .SHP: return "£" + case .SOS: return "Sh" + case .SRD: return "$" + case .SVC: return "₡" + case .SZL: return "L" + case .THB: return "฿" + case .TJS: return "ЅМ" + case .TMT: return "m" + case .TND: return "د.ت" + case .TOP: return "T$" + case .TRY: return "₺" + case .TTD: return "TT$" + case .TWD: return "NT$" + case .TZS: return "Sh" + case .UAH: return "₴" + case .UGX: return "Sh" + case .UYU: return "$" + case .UZS: return "лв" + case .VES: return "Bs.S" + case .VND: return "₫" + case .VUV: return "Vt" + case .WST: return "WS$" + case .XAF: return "Fr" + case .XCD: return "$" + case .XOF: return "Fr" + case .XPF: return "Fr" + case .YER: return "﷼" + case .ZAR: return "R" + case .ZMK: return "ZK" + case .ZMW: return "ZK" } + } var code: String { - switch self { - case .USD: return "USD" - case .EUR: return "EUR" - case .AED: return "AED" - case .AFN: return "AFN" - case .ALL: return "ALL" - case .AMD: return "AMD" - case .ARS: return "ARS" - case .AUD: return "AUD" - case .AZN: return "AZN" - case .BAM: return "BAM" - case .BBD: return "BBD" - case .BDT: return "BDT" - case .BGN: return "BGN" - case .BHD: return "BHD" - case .BND: return "BND" - case .BOB: return "BOB" - case .BRL: return "BRL" - case .BTN: return "BTN" - case .BYN: return "BYN" - case .CAD: return "CAD" - case .CHF: return "CHF" - case .CLP: return "CLP" - case .CNY: return "CNY" - case .COP: return "COP" - case .CRC: return "CRC" - case .CZK: return "CZK" - case .DKK: return "DKK" - case .DOP: return "DOP" - case .DZD: return "DZD" - case .EGP: return "EGP" - case .FJD: return "FJD" - case .GBP: return "GBP" - case .GEL: return "GEL" - case .GHS: return "GHS" - case .GTQ: return "GTQ" - case .HKD: return "HKD" - case .HNL: return "HNL" - case .HRK: return "HRK" - case .HUF: return "HUF" - case .IDR: return "IDR" - case .ILS: return "ILS" - case .INR: return "INR" - case .ISK: return "ISK" - case .JMD: return "JMD" - case .JOD: return "JOD" - case .JPY: return "JPY" - case .KES: return "KES" - case .KGS: return "KGS" - case .KHR: return "KHR" - case .KRW: return "KRW" - case .KWD: return "KWD" - case .KZT: return "KZT" - case .LAK: return "LAK" - case .LKR: return "LKR" - case .MAD: return "MAD" - case .MDL: return "MDL" - case .MKD: return "MKD" - case .MMK: return "MMK" - case .MNT: return "MNT" - case .MXN: return "MXN" - case .MYR: return "MYR" - case .NGN: return "NGN" - case .NIO: return "NIO" - case .NOK: return "NOK" - case .NPR: return "NPR" - case .NZD: return "NZD" - case .OMR: return "OMR" - case .PAB: return "PAB" - case .PEN: return "PEN" - case .PGK: return "PGK" - case .PHP: return "PHP" - case .PKR: return "PKR" - case .PLN: return "PLN" - case .PYG: return "PYG" - case .QAR: return "QAR" - case .RON: return "RON" - case .RSD: return "RSD" - case .RUB: return "RUB" - case .SAR: return "SAR" - case .SBD: return "SBD" - case .SEK: return "SEK" - case .SGD: return "SGD" - case .THB: return "THB" - case .TJS: return "TJS" - case .TMT: return "TMT" - case .TND: return "TND" - case .TOP: return "TOP" - case .TRY: return "TRY" - case .TTD: return "TTD" - case .TWD: return "TWD" - case .UAH: return "UAH" - case .UYU: return "UYU" - case .UZS: return "UZS" - case .VES: return "VES" - case .VND: return "VND" - case .VUV: return "VUV" - case .WST: return "WST" - case .XCD: return "XCD" - case .ZAR: return "ZAR" - } + switch self { + case .USD: return "USD" + case .EUR: return "EUR" + case .AED: return "AED" + case .AFN: return "AFN" + case .ALL: return "ALL" + case .AMD: return "AMD" + case .ANG: return "ANG" + case .AOA: return "AOA" + case .ARS: return "ARS" + case .AUD: return "AUD" + case .AWG: return "AWG" + case .AZN: return "AZN" + case .BAM: return "BAM" + case .BBD: return "BBD" + case .BCH: return "BCH" + case .BDT: return "BDT" + case .BGN: return "BGN" + case .BHD: return "BHD" + case .BIF: return "BIF" + case .BMD: return "BMD" + case .BND: return "BND" + case .BOB: return "BOB" + case .BRL: return "BRL" + case .BSD: return "BSD" + case .BTC: return "BTC" + case .BTN: return "BTN" + case .BWP: return "BWP" + case .BYN: return "BYN" + case .BZD: return "BZD" + case .CAD: return "CAD" + case .CDF: return "CDF" + case .CHF: return "CHF" + case .CLP: return "CLP" + case .CNY: return "CNY" + case .COP: return "COP" + case .CRC: return "CRC" + case .CVE: return "CVE" + case .CZK: return "CZK" + case .DJF: return "DJF" + case .DKK: return "DKK" + case .DOP: return "DOP" + case .DZD: return "DZD" + case .EGP: return "EGP" + case .ERN: return "ERN" + case .ETB: return "ETB" + case .ETC: return "ETC" + case .ETH: return "ETH" + case .FJD: return "FJD" + case .FKP: return "FKP" + case .GBP: return "GBP" + case .GEL: return "GEL" + case .GGP: return "GGP" + case .GHS: return "GHS" + case .GIP: return "GIP" + case .GMD: return "GMD" + case .GNF: return "GNF" + case .GTQ: return "GTQ" + case .GYD: return "GYD" + case .HKD: return "HKD" + case .HNL: return "HNL" + case .HRK: return "HRK" + case .HTG: return "HTG" + case .HUF: return "HUF" + case .IDR: return "IDR" + case .ILS: return "ILS" + case .IMP: return "IMP" + case .INR: return "INR" + case .IQD: return "IQD" + case .IRR: return "IRR" + case .ISK: return "ISK" + case .JEP: return "JEP" + case .JMD: return "JMD" + case .JOD: return "JOD" + case .JPY: return "JPY" + case .KES: return "KES" + case .KGS: return "KGS" + case .KHR: return "KHR" + case .KMF: return "KMF" + case .KRW: return "KRW" + case .KWD: return "KWD" + case .KYD: return "KYD" + case .KZT: return "KZT" + case .LAK: return "LAK" + case .LBP: return "LBP" + case .LKR: return "LKR" + case .LRD: return "LRD" + case .LSL: return "LSL" + case .LTC: return "LTC" + case .LTL: return "LTL" + case .LYD: return "LYD" + case .MAD: return "MAD" + case .MDL: return "MDL" + case .MGA: return "MGA" + case .MKD: return "MKD" + case .MMK: return "MMK" + case .MNT: return "MNT" + case .MOP: return "MOP" + case .MRO: return "MRO" + case .MTL: return "MTL" + case .MUR: return "MUR" + case .MVR: return "MVR" + case .MWK: return "MWK" + case .MXN: return "MXN" + case .MYR: return "MYR" + case .MZN: return "MZN" + case .NAD: return "NAD" + case .NGN: return "NGN" + case .NIO: return "NIO" + case .NOK: return "NOK" + case .NPR: return "NPR" + case .NZD: return "NZD" + case .OMR: return "OMR" + case .PAB: return "PAB" + case .PEN: return "PEN" + case .PGK: return "PGK" + case .PHP: return "PHP" + case .PKR: return "PKR" + case .PLN: return "PLN" + case .PYG: return "PYG" + case .QAR: return "QAR" + case .RON: return "RON" + case .RSD: return "RSD" + case .RUB: return "RUB" + case .RWF: return "RWF" + case .SAR: return "SAR" + case .SBD: return "SBD" + case .SCR: return "SCR" + case .SDG: return "SDG" + case .SEK: return "SEK" + case .SGD: return "SGD" + case .SHP: return "SHP" + case .SOS: return "SOS" + case .SRD: return "SRD" + case .SVC: return "SVC" + case .SZL: return "SZL" + case .THB: return "THB" + case .TJS: return "TJS" + case .TMT: return "TMT" + case .TND: return "TND" + case .TOP: return "TOP" + case .TRY: return "TRY" + case .TTD: return "TTD" + case .TWD: return "TWD" + case .TZS: return "TZS" + case .UAH: return "UAH" + case .UGX: return "UGX" + case .UYU: return "UYU" + case .UZS: return "UZS" + case .VES: return "VES" + case .VND: return "VND" + case .VUV: return "VUV" + case .WST: return "WST" + case .XAF: return "XAF" + case .XCD: return "XCD" + case .XOF: return "XOF" + case .XPF: return "XPF" + case .YER: return "YER" + case .ZAR: return "ZAR" + case .ZMK: return "ZMK" + case .ZMW: return "ZMW" } + } var fullCurrencyName: String { - switch self { - case .USD: return "US Dollar" - case .EUR: return "Euro" - case .AED: return "UAE Dirham" - case .AFN: return "Afghan Afghani" - case .ALL: return "Albanian Lek" - case .AMD: return "Armenian Dram" - case .ARS: return "Argentine Peso" - case .AUD: return "Australian Dollar" - case .AZN: return "Azerbaijani Manat" - case .BAM: return "Bosnia and Herzegovina Convertible Mark" - case .BBD: return "Barbadian Dollar" - case .BDT: return "Bangladeshi Taka" - case .BGN: return "Bulgarian Lev" - case .BHD: return "Bahraini Dinar" - case .BND: return "Brunei Dollar" - case .BOB: return "Bolivian Boliviano" - case .BRL: return "Brazilian Real" - case .BTN: return "Bhutanese Ngultrum" - case .BYN: return "Belarusian Ruble" - case .CAD: return "Canadian Dollar" - case .CHF: return "Swiss Franc" - case .CLP: return "Chilean Peso" - case .CNY: return "Chinese Yuan" - case .COP: return "Colombian Peso" - case .CRC: return "Costa Rican Colón" - case .CZK: return "Czech Koruna" - case .DKK: return "Danish Krone" - case .DOP: return "Dominican Peso" - case .DZD: return "Algerian Dinar" - case .EGP: return "Egyptian Pound" - case .FJD: return "Fijian Dollar" - case .GBP: return "British Pound Sterling" - case .GEL: return "Georgian Lari" - case .GHS: return "Ghanaian Cedi" - case .GTQ: return "Guatemalan Quetzal" - case .HKD: return "Hong Kong Dollar" - case .HNL: return "Honduran Lempira" - case .HRK: return "Croatian Kuna" - case .HUF: return "Hungarian Forint" - case .IDR: return "Indonesian Rupiah" - case .ILS: return "Israeli Shekel" - case .INR: return "Indian Rupee" - case .ISK: return "Icelandic Krona" - case .JMD: return "Jamaican Dollar" - case .JOD: return "Jordanian Dinar" - case .JPY: return "Japanese Yen" - case .KES: return "Kenyan Shilling" - case .KGS: return "Kyrgyzstani Som" - case .KHR: return "Cambodian Riel" - case .KRW: return "South Korean Won" - case .KWD: return "Kuwaiti Dinar" - case .KZT: return "Kazakhstani Tenge" - case .LAK: return "Lao Kip" - case .LKR: return "Sri Lankan Rupee" - case .MAD: return "Moroccan Dirham" - case .MDL: return "Moldovan Leu" - case .MKD: return "Macedonian Denar" - case .MMK: return "Myanmar Kyat" - case .MNT: return "Mongolian Tugrik" - case .MXN: return "Mexican Peso" - case .MYR: return "Malaysian Ringgit" - case .NGN: return "Nigerian Naira" - case .NIO: return "Nicaraguan Córdoba" - case .NOK: return "Norwegian Krone" - case .NPR: return "Nepalese Rupee" - case .NZD: return "New Zealand Dollar" - case .OMR: return "Omani Rial" - case .PAB: return "Panamanian Balboa" - case .PEN: return "Peruvian Sol" - case .PGK: return "Papua New Guinea Kina" - case .PHP: return "Philippine Peso" - case .PKR: return "Pakistani Rupee" - case .PLN: return "Polish Zloty" - case .PYG: return "Paraguayan Guarani" - case .QAR: return "Qatari Riyal" - case .RON: return "Romanian Leu" - case .RSD: return "Serbian Dinar" - case .RUB: return "Russian Ruble" - case .SAR: return "Saudi Riyal" - case .SBD: return "Solomon Islands Dollar" - case .SEK: return "Swedish Krona" - case .SGD: return "Singapore Dollar" - case .THB: return "Thai Baht" - case .TJS: return "Tajikistani Somoni" - case .TMT: return "Turkmenistani Manat" - case .TND: return "Tunisian Dinar" - case .TOP: return "Tongan Pa'anga" - case .TRY: return "Turkish Lira" - case .TTD: return "Trinidad and Tobago Dollar" - case .TWD: return "Taiwan Dollar" - case .UAH: return "Ukrainian Hryvnia" - case .UYU: return "Uruguayan Peso" - case .UZS: return "Uzbekistani Som" - case .VES: return "Venezuelan Bolívar" - case .VND: return "Vietnamese Dong" - case .VUV: return "Vanuatu Vatu" - case .WST: return "Samoan Tala" - case .XCD: return "East Caribbean Dollar" - case .ZAR: return "South African Rand" - } + switch self { + case .USD: return "US Dollar" + case .EUR: return "Euro" + case .AED: return "UAE Dirham" + case .AFN: return "Afghan Afghani" + case .ALL: return "Albanian Lek" + case .AMD: return "Armenian Dram" + case .ANG: return "Netherlands Antillean Guilder" + case .AOA: return "Angolan Kwanza" + case .ARS: return "Argentine Peso" + case .AUD: return "Australian Dollar" + case .AWG: return "Aruban Florin" + case .AZN: return "Azerbaijani Manat" + case .BAM: return "Bosnia and Herzegovina Convertible Mark" + case .BBD: return "Barbadian Dollar" + case .BCH: return "Bitcoin Cash" + case .BDT: return "Bangladeshi Taka" + case .BGN: return "Bulgarian Lev" + case .BHD: return "Bahraini Dinar" + case .BIF: return "Burundian Franc" + case .BMD: return "Bermudian Dollar" + case .BND: return "Brunei Dollar" + case .BOB: return "Bolivian Boliviano" + case .BRL: return "Brazilian Real" + case .BSD: return "Bahamian Dollar" + case .BTC: return "Bitcoin" + case .BTN: return "Bhutanese Ngultrum" + case .BWP: return "Botswana Pula" + case .BYN: return "Belarusian Ruble" + case .BZD: return "Belize Dollar" + case .CAD: return "Canadian Dollar" + case .CDF: return "Congolese Franc" + case .CHF: return "Swiss Franc" + case .CLP: return "Chilean Peso" + case .CNY: return "Chinese Yuan" + case .COP: return "Colombian Peso" + case .CRC: return "Costa Rican Colón" + case .CVE: return "Cape Verdean Escudo" + case .CZK: return "Czech Koruna" + case .DJF: return "Djiboutian Franc" + case .DKK: return "Danish Krone" + case .DOP: return "Dominican Peso" + case .DZD: return "Algerian Dinar" + case .EGP: return "Egyptian Pound" + case .ERN: return "Eritrean Nakfa" + case .ETB: return "Ethiopian Birr" + case .ETC: return "Ethereum Classic" + case .ETH: return "Ethereum" + case .FJD: return "Fijian Dollar" + case .FKP: return "Falkland Islands Pound" + case .GBP: return "British Pound Sterling" + case .GEL: return "Georgian Lari" + case .GGP: return "Guernsey Pound" + case .GHS: return "Ghanaian Cedi" + case .GIP: return "Gibraltar Pound" + case .GMD: return "Gambian Dalasi" + case .GNF: return "Guinean Franc" + case .GTQ: return "Guatemalan Quetzal" + case .GYD: return "Guyanese Dollar" + case .HKD: return "Hong Kong Dollar" + case .HNL: return "Honduran Lempira" + case .HRK: return "Croatian Kuna" + case .HTG: return "Haitian Gourde" + case .HUF: return "Hungarian Forint" + case .IDR: return "Indonesian Rupiah" + case .ILS: return "Israeli Shekel" + case .IMP: return "Isle of Man Pound" + case .INR: return "Indian Rupee" + case .IQD: return "Iraqi Dinar" + case .IRR: return "Iranian Rial" + case .ISK: return "Icelandic Krona" + case .JEP: return "Jersey Pound" + case .JMD: return "Jamaican Dollar" + case .JOD: return "Jordanian Dinar" + case .JPY: return "Japanese Yen" + case .KES: return "Kenyan Shilling" + case .KGS: return "Kyrgyzstani Som" + case .KHR: return "Cambodian Riel" + case .KMF: return "Comorian Franc" + case .KRW: return "South Korean Won" + case .KWD: return "Kuwaiti Dinar" + case .KYD: return "Cayman Islands Dollar" + case .KZT: return "Kazakhstani Tenge" + case .LAK: return "Lao Kip" + case .LBP: return "Lebanese Pound" + case .LKR: return "Sri Lankan Rupee" + case .LRD: return "Liberian Dollar" + case .LSL: return "Lesotho Loti" + case .LTC: return "Litecoin" + case .LTL: return "Lithuanian Litas" + case .LYD: return "Libyan Dinar" + case .MAD: return "Moroccan Dirham" + case .MDL: return "Moldovan Leu" + case .MGA: return "Malagasy Ariary" + case .MKD: return "Macedonian Denar" + case .MMK: return "Myanmar Kyat" + case .MNT: return "Mongolian Tugrik" + case .MOP: return "Macanese Pataca" + case .MRO: return "Mauritanian Ouguiya" + case .MTL: return "Maltese Lira" + case .MUR: return "Mauritian Rupee" + case .MVR: return "Maldivian Rufiyaa" + case .MWK: return "Malawian Kwacha" + case .MXN: return "Mexican Peso" + case .MYR: return "Malaysian Ringgit" + case .MZN: return "Mozambican Metical" + case .NAD: return "Namibian Dollar" + case .NGN: return "Nigerian Naira" + case .NIO: return "Nicaraguan Córdoba" + case .NOK: return "Norwegian Krone" + case .NPR: return "Nepalese Rupee" + case .NZD: return "New Zealand Dollar" + case .OMR: return "Omani Rial" + case .PAB: return "Panamanian Balboa" + case .PEN: return "Peruvian Sol" + case .PGK: return "Papua New Guinea Kina" + case .PHP: return "Philippine Peso" + case .PKR: return "Pakistani Rupee" + case .PLN: return "Polish Zloty" + case .PYG: return "Paraguayan Guarani" + case .QAR: return "Qatari Riyal" + case .RON: return "Romanian Leu" + case .RSD: return "Serbian Dinar" + case .RUB: return "Russian Ruble" + case .RWF: return "Rwandan Franc" + case .SAR: return "Saudi Riyal" + case .SBD: return "Solomon Islands Dollar" + case .SCR: return "Seychellois Rupee" + case .SDG: return "Sudanese Pound" + case .SEK: return "Swedish Krona" + case .SGD: return "Singapore Dollar" + case .SHP: return "Saint Helena Pound" + case .SOS: return "Somali Shilling" + case .SRD: return "Surinamese Dollar" + case .SVC: return "Salvadoran Colón" + case .SZL: return "Swazi Lilangeni" + case .THB: return "Thai Baht" + case .TJS: return "Tajikistani Somoni" + case .TMT: return "Turkmenistani Manat" + case .TND: return "Tunisian Dinar" + case .TOP: return "Tongan Pa'anga" + case .TRY: return "Turkish Lira" + case .TTD: return "Trinidad and Tobago Dollar" + case .TWD: return "Taiwan Dollar" + case .TZS: return "Tanzanian Shilling" + case .UAH: return "Ukrainian Hryvnia" + case .UGX: return "Ugandan Shilling" + case .UYU: return "Uruguayan Peso" + case .UZS: return "Uzbekistani Som" + case .VES: return "Venezuelan Bolívar" + case .VND: return "Vietnamese Dong" + case .VUV: return "Vanuatu Vatu" + case .WST: return "Samoan Tala" + case .XAF: return "CFA Franc BEAC" + case .XCD: return "East Caribbean Dollar" + case .XOF: return "CFA Franc BCEAO" + case .XPF: return "CFP Franc" + case .YER: return "Yemeni Rial" + case .ZAR: return "South African Rand" + case .ZMK: return "Zambian Kwacha (old)" + case .ZMW: return "Zambian Kwacha" } + } + var countryFlag: String { switch self { case .USD: return "🇺🇸" @@ -436,61 +681,106 @@ enum GlobalCurrency: Int, CaseIterable, Equatable, Identifiable { case .AFN: return "🇦🇫" case .ALL: return "🇦🇱" case .AMD: return "🇦🇲" + case .ANG: return "🇨🇼" + case .AOA: return "🇦🇴" case .ARS: return "🇦🇷" case .AUD: return "🇦🇺" + case .AWG: return "🇦🇼" case .AZN: return "🇦🇿" case .BAM: return "🇧🇦" case .BBD: return "🇧🇧" + case .BCH: return "₿" case .BDT: return "🇧🇩" case .BGN: return "🇧🇬" case .BHD: return "🇧🇭" + case .BIF: return "🇧🇮" + case .BMD: return "🇧🇲" case .BND: return "🇧🇳" case .BOB: return "🇧🇴" case .BRL: return "🇧🇷" + case .BSD: return "🇧🇸" + case .BTC: return "₿" case .BTN: return "🇧🇹" + case .BWP: return "🇧🇼" case .BYN: return "🇧🇾" + case .BZD: return "🇧🇿" case .CAD: return "🇨🇦" + case .CDF: return "🇨🇩" case .CHF: return "🇨🇭" case .CLP: return "🇨🇱" case .CNY: return "🇨🇳" case .COP: return "🇨🇴" case .CRC: return "🇨🇷" + case .CVE: return "🇨🇻" case .CZK: return "🇨🇿" + case .DJF: return "🇩🇯" case .DKK: return "🇩🇰" case .DOP: return "🇩🇴" case .DZD: return "🇩🇿" case .EGP: return "🇪🇬" + case .ERN: return "🇪🇷" + case .ETB: return "🇪🇹" + case .ETC: return "Ξ" + case .ETH: return "Ξ" case .FJD: return "🇫🇯" + case .FKP: return "🇫🇰" case .GBP: return "🇬🇧" case .GEL: return "🇬🇪" + case .GGP: return "🇬🇬" case .GHS: return "🇬🇭" + case .GIP: return "🇬🇮" + case .GMD: return "🇬🇲" + case .GNF: return "🇬🇳" case .GTQ: return "🇬🇹" + case .GYD: return "🇬🇾" case .HKD: return "🇭🇰" case .HNL: return "🇭🇳" case .HRK: return "🇭🇷" + case .HTG: return "🇭🇹" case .HUF: return "🇭🇺" case .IDR: return "🇮🇩" case .ILS: return "🇮🇱" + case .IMP: return "🇮🇲" case .INR: return "🇮🇳" + case .IQD: return "🇮🇶" + case .IRR: return "🇮🇷" case .ISK: return "🇮🇸" + case .JEP: return "🇯🇪" case .JMD: return "🇯🇲" case .JOD: return "🇯🇴" case .JPY: return "🇯🇵" case .KES: return "🇰🇪" case .KGS: return "🇰🇬" case .KHR: return "🇰🇭" + case .KMF: return "🇰🇲" case .KRW: return "🇰🇷" case .KWD: return "🇰🇼" + case .KYD: return "🇰🇾" case .KZT: return "🇰🇿" case .LAK: return "🇱🇦" + case .LBP: return "🇱🇧" case .LKR: return "🇱🇰" + case .LRD: return "🇱🇷" + case .LSL: return "🇱🇸" + case .LTC: return "Ł" + case .LTL: return "🇱🇹" + case .LYD: return "🇱🇾" case .MAD: return "🇲🇦" case .MDL: return "🇲🇩" + case .MGA: return "🇲🇬" case .MKD: return "🇲🇰" case .MMK: return "🇲🇲" case .MNT: return "🇲🇳" + case .MOP: return "🇲🇴" + case .MRO: return "🇲🇷" + case .MTL: return "🇲🇹" + case .MUR: return "🇲🇺" + case .MVR: return "🇲🇻" + case .MWK: return "🇲🇼" case .MXN: return "🇲🇽" case .MYR: return "🇲🇾" + case .MZN: return "🇲🇿" + case .NAD: return "🇳🇦" case .NGN: return "🇳🇬" case .NIO: return "🇳🇮" case .NOK: return "🇳🇴" @@ -508,10 +798,18 @@ enum GlobalCurrency: Int, CaseIterable, Equatable, Identifiable { case .RON: return "🇷🇴" case .RSD: return "🇷🇸" case .RUB: return "🇷🇺" + case .RWF: return "🇷🇼" case .SAR: return "🇸🇦" case .SBD: return "🇸🇧" + case .SCR: return "🇸🇨" + case .SDG: return "🇸🇩" case .SEK: return "🇸🇪" case .SGD: return "🇸🇬" + case .SHP: return "🇸🇭" + case .SOS: return "🇸🇴" + case .SRD: return "🇸🇷" + case .SVC: return "🇸🇻" + case .SZL: return "🇸🇿" case .THB: return "🇹🇭" case .TJS: return "🇹🇯" case .TMT: return "🇹🇲" @@ -520,15 +818,23 @@ enum GlobalCurrency: Int, CaseIterable, Equatable, Identifiable { case .TRY: return "🇹🇷" case .TTD: return "🇹🇹" case .TWD: return "🇹🇼" + case .TZS: return "🇹🇿" case .UAH: return "🇺🇦" + case .UGX: return "🇺🇬" case .UYU: return "🇺🇾" case .UZS: return "🇺🇿" case .VES: return "🇻🇪" case .VND: return "🇻🇳" case .VUV: return "🇻🇺" case .WST: return "🇼🇸" - case .XCD: return "🇦🇬" // Antigua and Barbuda (representing East Caribbean) + case .XAF: return "🇨🇲" + case .XCD: return "🇦🇬" + case .XOF: return "🇸🇳" + case .XPF: return "🇵🇫" + case .YER: return "🇾🇪" case .ZAR: return "🇿🇦" + case .ZMK: return "🇿🇲" + case .ZMW: return "🇿🇲" } } } diff --git a/brainwallet/Emoji Classes/BrainwalletPhraseContainerView.swift b/brainwallet/Emoji Classes/BrainwalletPhraseContainerView.swift new file mode 100644 index 00000000..fd7c2d2f --- /dev/null +++ b/brainwallet/Emoji Classes/BrainwalletPhraseContainerView.swift @@ -0,0 +1,128 @@ +// +// BrainwalletPhraseContainerView.swift +// brainwallet +// +// Created by Kerry Washington on 22/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// + +import SwiftUI + +struct BrainwalletPhraseContainerView: View { + + let generalPad: CGFloat = 10.0 + let largePad: CGFloat = 80.0 + let wordPad: CGFloat = 10.0 + let secureFieldHeight: CGFloat = 45.0 + + let seedWordCount: Int = kSeedPhraseLength + + @State + private var viewColumns = [GridItem]() + + @State + private var wordViewWidthRoot = 3 + + @State + private var enteredPIN = "" + + @State + private var fetchedEmojisArray: [String] = [""] + + @State + private var shouldShowEmojis = false + + @Binding + var shouldShow: Bool + + @State + private var didEnterPINCode = false + + var walletManager: WalletManager + + init(shouldShow: Binding, walletManager: WalletManager) { + _shouldShow = shouldShow + self.walletManager = walletManager + } + var body: some View { + GeometryReader { geometry in + + let width = geometry.size.width + let height = geometry.size.height + let wordViewWidth = width / CGFloat(wordViewWidthRoot) - wordPad + ZStack { + + BrainwalletColor.surface.edgesIgnoringSafeArea(.all) + VStack { + HStack { + Text("This is your Brainwallet phrase. Its your emojis you use to remember your 12 seed words.") + .modifier(BWIPSSemiBold(size: 24.0, lineLimit: 3)) + .foregroundColor(BrainwalletColor.content) + } + .padding(20) + if shouldShowEmojis { + LazyVGrid(columns: viewColumns, spacing: 1.0) { + ForEach(0 ..< fetchedEmojisArray.count, id: \.self) { index in + EmojiPhraseView(emojiItem: fetchedEmojisArray[index], emojiNumber: index+1) + .frame(width: wordViewWidth, + height: height * 0.1) + } + } + Spacer() + Button(action: { + if walletManager.deleteEmojiString(pin: enteredPIN) { + fetchedEmojisArray = [""] + shouldShow.toggle() + } + }) { + Text("Delete my Emojis") + .modifier(BWIPSBold(size: 24.0)) + .foregroundColor(BrainwalletColor.content.opacity(0.6)) + .frame(width: width * 0.7, height: largeButtonHeight, alignment: .center) + + } + .padding(.all, 8.0) + .accessibilityIdentifier("BrainwalletPhraseContainerView.DeleteEmojis") + + } else { + HStack { + SecureField("Enter PIN", + text: $enteredPIN) + .keyboardType(.numberPad) + .textFieldStyle(.roundedBorder) + .multilineTextAlignment(.center) + .toolbar { + ToolbarItemGroup(placement: .keyboard) { + Spacer() + Button("Done") { + didEnterPINCode.toggle() + } + .foregroundColor(BrainwalletColor.content) + .frame(width: width * 0.25, alignment: .trailing) + } + } + .frame(width: width * 0.3, + height: secureFieldHeight, alignment: .center) + .background(BrainwalletColor.surface) + } + .frame(height: secureFieldHeight, alignment: .top) + .padding(.top, 32.0) + } + Spacer() + } + } + .padding(.all, 10) + .onAppear { + viewColumns = [GridItem](repeating: GridItem(.flexible()), + count: wordViewWidthRoot) + } + .onChange(of: didEnterPINCode) { _,_ in + if let fetchedEmojis = walletManager.emojiString(pin: enteredPIN) { + + fetchedEmojisArray = fetchedEmojis.map { String($0) } + shouldShowEmojis = true + } + } + } + } +} diff --git a/brainwallet/Emoji Classes/EmojiPhraseView.swift b/brainwallet/Emoji Classes/EmojiPhraseView.swift new file mode 100644 index 00000000..b12373a7 --- /dev/null +++ b/brainwallet/Emoji Classes/EmojiPhraseView.swift @@ -0,0 +1,63 @@ +// +// EmojiPhraseView.swift +// brainwallet +// +// Created by Kerry Washington on 22/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// +import Foundation +import SwiftUI + +struct EmojiItem: Identifiable, Equatable { + let id = UUID() + let word: String + let tagNumber: Int +} + +struct EmojiPhraseView: View { + let emojiItem: String + let emojiNumber: Int + let genericPad = 16.0 + let cellHeight = 40.0 + let userPrefersDarkTheme = UserDefaults.userPreferredDarkTheme + + var body: some View { + GeometryReader { geometry in + + let width = geometry.size.width + let height = geometry.size.height + ZStack { + VStack { + ZStack { + RoundedRectangle(cornerRadius: cellHeight / 2) + .frame(height: cellHeight, alignment: .center) + .foregroundColor(BrainwalletColor.background.opacity(0.4)) + + Text("\(emojiItem)") + .frame(height: cellHeight, alignment: .center) + .modifier(BWIPSLight(size: 15.0)) + .foregroundColor(userPrefersDarkTheme ? .white : + BrainwalletColor.content) + VStack { + HStack { + Text("\(emojiNumber)") + .modifier(BWIPSLight(size: 10.0)) + .foregroundColor(userPrefersDarkTheme ? .white : + BrainwalletColor.content) + .frame(width: 18, + height: cellHeight, + alignment: .topLeading) + .padding(.leading, genericPad) + .offset(x: -4, y: 3) + Spacer() + } + } + } + } + .frame(width: width, height: height) + .padding(.all, genericPad) + } + .frame(width: width, height: height) + } + } +} diff --git a/brainwallet/Emoji Classes/EmojiSetViewModifier.swift b/brainwallet/Emoji Classes/EmojiSetViewModifier.swift new file mode 100644 index 00000000..94f168b6 --- /dev/null +++ b/brainwallet/Emoji Classes/EmojiSetViewModifier.swift @@ -0,0 +1,29 @@ +// +// EmojiSetViewModifier.swift +// +// Created by Kerry Washington on 23/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// + +import SwiftUI + +struct EmojiSetViewModifier: ViewModifier { + let showEmojiSetView: Bool + let emojiSetView: OverlayView + func body(content: Content) -> some View { + ZStack { + content + if showEmojiSetView { + emojiSetView + .background(.ultraThinMaterial) + .zIndex(1) + } + } + } +} + +extension View { + func showEmojiPicker(showEmojiSetView: Bool, emojiSetView: EmojiSetView) -> some View { + modifier(EmojiSetViewModifier(showEmojiSetView: showEmojiSetView, emojiSetView: emojiSetView)) + } +} diff --git a/brainwallet/Emoji Classes/EmojiViewModel.swift b/brainwallet/Emoji Classes/EmojiViewModel.swift new file mode 100644 index 00000000..47c44693 --- /dev/null +++ b/brainwallet/Emoji Classes/EmojiViewModel.swift @@ -0,0 +1,122 @@ +// +// EmojiViewModel.swift +// brainwallet +// +// Created by Kerry Washington on 22/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// + +import Foundation +import SwiftUI +import UIKit + +struct EmojiSection: Encodable, Equatable, Hashable { + var sectionTitle: String = "" + var emojiObjects: [EmojiObject]? +} + +struct EmojiObject: Encodable, Equatable, Hashable { + var emoji: String = "" + var wordCloud: [String] = [""] + var unicodeKeywords: String = "" + var codePoints: [String] + var hexCodePoints32: [UInt32] + var order: Int? +} + +struct LiteEmojiObject: Equatable, Hashable, Identifiable { + var emoji: Character + var tagID = UUID() + var id: UUID { tagID } +} + +enum EmojiTriplet: String, CaseIterable { + case first + case second + case third + case fourth + + var index: Int { + switch self { + case .first: + return 1 + case .second: + return 2 + case .third: + return 3 + case .fourth: + return 4 + } + } + + var boxNumbers: [Int] { + switch self { + case .first: + return [1,2,3] + case .second: + return [4,5,6] + case .third: + return [7,8,9] + case .fourth: + return [10,11,12] + } + } + + var guideTitle: String { + switch self { + case .first: + return String(localized: "Set your first emojis!") + case .second: + return String(localized: "Pick your next emojis.") + case .third: + return String(localized: "You are on your way!") + case .fourth: + return String(localized: "This is your final set!") + } + } + + var guideDetail: String { + switch self { + case .first: + return String(localized: "Tap 🍔 > Security > Seed Phrase > PIN to recall your first 3 words.") + case .second: + return String(localized: "Now you know the deal.") + case .third: + return String(localized: "Hey? Aren't you the expert.") + case .fourth: + return String(localized: "Let's go! 12 seed words.") + } + } + + var guideDetail2: String { + switch self { + case .first: + return String(localized: "Pick emojis that mean something personal to you.") + case .second: + return String(localized: "Pick your next 3!") + case .third: + return String(localized: "Now pick 3 emojis to get to 9") + case .fourth: + return String(localized: "Add 3 more emojis, and you have a dozen.") + } + } +} + +class EmojiViewModel: ObservableObject { + + // MARK: - Public Variables + + @Published + var currentEmojiTriplet: EmojiTriplet = .first + + @Published + var didSelectTriplet: Bool = false + + @Published + var canSelect: Bool = false + + init() { + + } + +} diff --git a/brainwallet/Emoji Classes/UIEmojiTextField.swift b/brainwallet/Emoji Classes/UIEmojiTextField.swift new file mode 100644 index 00000000..19d2b562 --- /dev/null +++ b/brainwallet/Emoji Classes/UIEmojiTextField.swift @@ -0,0 +1,94 @@ +// +// UIEmojiTextField.swift +// brainwallet +// +// Created by Kerry Washington on 21/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// + +import UIKit +import SwiftUI +// Source - https://stackoverflow.com/a/66397959 +// Posted by Raja Kishan, modified by community. See post 'Timeline' for change history +// Retrieved 2026-02-21, License - CC BY-SA 4.0 + +class UIEmojiTextField: UITextField { + + var isEmoji = false { + didSet { + setEmoji() + } + } + + private func setEmoji() { + self.reloadInputViews() + } + + override var textInputContextIdentifier: String? { + return "" + } + + override var textInputMode: UITextInputMode? { + for mode in UITextInputMode.activeInputModes { + if mode.primaryLanguage == "emoji" && self.isEmoji { + self.keyboardType = .default + return mode + + } else if !self.isEmoji { + return mode + } + } + return nil + } + + override func layoutSubviews() { + super.layoutSubviews() + // Update frame when layout changes + if let gradientLayer = layer.sublayers?.first as? CAGradientLayer { + gradientLayer.frame = bounds + } + } + +} + +struct EmojiTextField: UIViewRepresentable { + @Binding var text: String + @Binding var userPrefersDarkTheme: Bool + var placeholder: String = "" + + func makeUIView(context: Context) -> UIEmojiTextField { + + let textField = UIEmojiTextField() + textField.placeholder = placeholder + textField.text = text + textField.textAlignment = .center + textField.font = UIFont.systemFont(ofSize: 65) + textField.backgroundColor = .clear + textField.tintColor = UIColor(BentoColor.tutorialGreen2) + textField.delegate = context.coordinator + return textField + } + + func updateUIView(_ uiView: UIEmojiTextField, context: Context) { + uiView.text = text + uiView.isEmoji = true + } + + func makeCoordinator() -> Coordinator { + Coordinator(parent: self) + } + + class Coordinator: NSObject, UITextFieldDelegate { + var parent: EmojiTextField + + init(parent: EmojiTextField) { + self.parent = parent + } + + func textFieldDidChangeSelection(_ textField: UITextField) { + Task { + parent.text = textField.text ?? "" + } + } + } +} diff --git a/brainwallet/Game Classes/EmojiSetView.swift b/brainwallet/Game Classes/EmojiSetView.swift new file mode 100644 index 00000000..1b429b0f --- /dev/null +++ b/brainwallet/Game Classes/EmojiSetView.swift @@ -0,0 +1,242 @@ +// +// EmojiSetView.swift +// brainwallet +// +// Created by Kerry Washington on 18/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// + +import SwiftUI +import FirebaseAnalytics + +struct EmojiSetView: View { + + enum SetField { + case firstField + case secondField + case thirdField + } + + @ObservedObject + var gameHubModel: GameHubViewModel + + @ObservedObject + var newMainViewModel: NewMainViewModel + + @State + private var firstEmojiString: String = "" + + @State + private var secondEmojiString: String = "" + + @State + private var thirdEmojiString: String = "" + + @State + private var uniqueEmojisSelected = false + + @Binding + var shouldShowView: Bool + + @Binding + var userPrefersDarkTheme: Bool + + @FocusState + private var focusedField: SetField? + + let darkModeColor = LinearGradient(colors: [.white, + BentoColor.purple2], + startPoint: .topLeading, + endPoint: .bottomTrailing) + let lightModeColor = LinearGradient(colors: [.white, BentoColor.purple1], startPoint: .topLeading, + endPoint: .bottomTrailing) + + let backgroundColor = LinearGradient(colors: [.clear, BentoColor.purple4], startPoint: .topLeading, + endPoint: .bottomTrailing) + + init(gameHubViewModel: GameHubViewModel, + viewModel: NewMainViewModel, + shouldShowView: Binding, + userPrefersDarkTheme: Binding) { + _userPrefersDarkTheme = userPrefersDarkTheme + _shouldShowView = shouldShowView + gameHubModel = gameHubViewModel + newMainViewModel = viewModel + + } + + private func areUniqueEmojisSelected() -> Bool { + return firstEmojiString.isEmpty == false + && secondEmojiString.isEmpty == false + && thirdEmojiString.isEmpty == false + && firstEmojiString != secondEmojiString + && firstEmojiString != thirdEmojiString + && secondEmojiString != thirdEmojiString + } + + var body: some View { + GeometryReader { geometry in + + let width = geometry.size.width + let height = geometry.size.height + let boxHeight = width * 0.7 * 0.33 + let innerRadii = 12.0 + + ZStack { + VStack { + HStack { + VStack { + Text(gameHubModel.currentEmojiTriplet.guideTitle) + .modifier(BWIPSBold(size: 26.0)) + .frame(alignment: .center) + .foregroundStyle( userPrefersDarkTheme ? .white : BentoColor.purple3) + .accessibilityIdentifier("emojiPickerViewTitle") + Text(gameHubModel.currentEmojiTriplet.guideDetail) + .modifier(BWIPSSemiBold(size: 20.0, lineLimit: 2)) + .frame(alignment: .topLeading) + .foregroundStyle( userPrefersDarkTheme ? .white : BentoColor.purple3) + .accessibilityIdentifier("emojiPickerViewDescription") + .padding(.top, 8.0) + .padding([.leading, .trailing], 32.0) + Spacer() + } + + } + .frame(height: height * 0.26, alignment: .center) + .padding([.leading, .trailing], 16.0) + .padding(.top, 8.0) + + HStack { + EmojiTextField(text: $firstEmojiString, userPrefersDarkTheme: $userPrefersDarkTheme) + .onChange(of: firstEmojiString) { _,_ in + + if !firstEmojiString.isEmpty { + let firstCharIndex = firstEmojiString.index(firstEmojiString.startIndex, offsetBy: 1) + let firstChar = String(firstEmojiString[.. Security > Seed Phrase > PIN to recall your first 3 words.") + case .second: + return String(localized: "Now you know the deal.") + case .third: + return String(localized: "Hey? Aren't you the expert.") + case .fourth: + return String(localized: "Let's go! 12 seed words.") + } + } + + var guideDetail2: String { + switch self { + case .first: + return String(localized: "Pick emojis that mean something personal to you.") + case .second: + return String(localized: "Pick your next 3!") + case .third: + return String(localized: "Now pick 3 emojis to get to 9") + case .fourth: + return String(localized: "Add 3 more emojis, and you have a dozen.") + } + } +} + +class EmojiViewModel: ObservableObject { + + // MARK: - Public Variables + var walletManager: WalletManager? { + didSet { + canSelect = true + } + } + + @Published + var currentEmojiTriplet: EmojiTriplet = .first + + @Published + var didSelectTriplet: Bool = false + + @Published + var canSelect: Bool = false + + @Published + var tripletDictionary: [Int : String] = [1 : "", + 2 : "", + 3 : ""] + + init(walletManager: WalletManager? = nil) { + + } + func setEmojiTriplet() { + print("::::// \(tripletDictionary.description)") + + let first = tripletDictionary[1] ?? "" + let second = tripletDictionary[2] ?? "" + let third = tripletDictionary[3] ?? "" + + if let walletManager = walletManager, + walletManager.updateEmojiString("\(first)\(second)\(third)") { + didSelectTriplet = true + } + } + +} diff --git a/brainwallet/Game Classes/GameHubViewModel.swift b/brainwallet/Game Classes/GameHubViewModel.swift new file mode 100644 index 00000000..64d926c6 --- /dev/null +++ b/brainwallet/Game Classes/GameHubViewModel.swift @@ -0,0 +1,58 @@ +// +// GameHubViewModel.swift +// brainwallet +// +// Created by Kerry Washington on 18/02/2026. +// Copyright © 2026 Grunt Software, LTD. All rights reserved. +// + +import SwiftUI + +@MainActor +class GameHubViewModel: ObservableObject { + + // MARK: - Public Variables + var walletManager: WalletManager? { + didSet { + showEmojiPicker() + } + } + + @Published + var shouldUserSetEmojis: Bool = false + + @Published + var currentEmojiTriplet: EmojiTriplet = .first + + init(walletManager: WalletManager? = nil) { + } + + deinit { + NotificationCenter.default.removeObserver(self) + } + + @objc func showEmojiPicker() { + + guard let walletManager = self.walletManager else { return } + + /// TBD After the Unity code is ready + if walletManager.wallet != nil, + ((walletManager.emojiStringCount() % 3) == 0) { + + switch walletManager.emojiStringCount() / 3 { + case 0: + currentEmojiTriplet = .first + shouldUserSetEmojis.toggle() + case 1: + currentEmojiTriplet = .second + case 2: + currentEmojiTriplet = .third + case 3: + currentEmojiTriplet = .fourth + default : + break + } + } + + } +} diff --git a/brainwallet/Localizations/Localizable.xcstrings b/brainwallet/Localizations/Localizable.xcstrings index 9de8cb96..6395f4e0 100644 --- a/brainwallet/Localizations/Localizable.xcstrings +++ b/brainwallet/Localizations/Localizable.xcstrings @@ -140,6 +140,124 @@ } } }, + " Each emoji must be different." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "احذف رموزي التعبيرية" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jedes Emoji muss anders sein." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cada emoji debe ser diferente." + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "هر شکلک باید متفاوت باشد." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chaque emoji doit être différent." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रत्येक इमोजी अलग होना चाहिए।" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setiap emoji harus berbeda." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ogni emoji deve essere diversa." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "絵文字はそれぞれ異なるものでなければなりません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "각 이모지는 달라야 합니다." + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਹਰ ਇਮੋਜੀ ਵੱਖਰਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Każda emotikona musi być inna." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cada emoji deve ser diferente." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Каждый эмодзи должен быть разным." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varje emoji måste vara olika." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Her emoji farklı olmalıdır." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Кожен емодзі має бути різним." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "每个表情符号必须不同。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "每個表情符號必須不同。" + } + } + } + }, " Home " : { "localizations" : { "ar" : { @@ -2452,6 +2570,126 @@ } } }, + "Add 3 more emojis, and you have a dozen." : { + "comment" : "Guide detail text for the final emoji triplet selection screen.", + "isCommentAutoGenerated" : true, + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أضف ٣ رموز تعبيرية أخرى وسيكون لديك اثنا عشر." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Füge 3 weitere Emojis hinzu und du hast ein Dutzend." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Añade 3 emojis más y tendrás una docena." + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "۳ شکلک دیگه اضافه کن و یه دوجین داری." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajoutez 3 emojis de plus et vous en aurez une douzaine." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 और इमोजी जोड़ें, और आपके पास एक दर्जन हो जाएगा।" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tambahkan 3 emoji lagi, dan kamu punya selusin." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi altre 3 emoji e ne avrai una dozzina." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "絵文字を3つ追加すれば、12個になります。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이모지를 3개 더 추가하면 12개가 됩니다." + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 ਹੋਰ ਇਮੋਜੀ ਜੋੜੋ, ਅਤੇ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਦਰਜਨ ਹੋਣਗੇ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj jeszcze 3 emotikony, a będziesz mieć tuzin." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicione mais 3 emojis e você terá uma dúzia." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавь ещё 3 эмодзи, и у тебя будет дюжина." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till 3 fler emojis så har du ett dussin." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 emoji daha ekle ve bir düzine tamamlanır." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Додай ще 3 емодзі, і у тебе буде дюжина." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "再添加3个表情符号,你就有一打了。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "再添加3個表情符號,你就有一打了。" + } + } + } + }, "Address Copied" : { "localizations" : { "ar" : { @@ -5034,128 +5272,122 @@ } } }, - "Brainwallet makes a new address each time. Tap on Buy/Receive Tab show or copy the QR code in the screen that shows." : { - "comment" : "Description of the first step of the receive flow.", + "Brainwallet makes a new address each time. Tap on Get/Receive Tab show or copy the QR code in the screen that shows." : { + "comment" : "Description of the first step in the receive process.", "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تقوم Brainwallet بإنشاء عنوان جديد في كل مرة. اضغط على علامة التبويب \"شراء/استلام\" لعرض رمز الاستجابة السريعة (QR) أو نسخه في الشاشة التي تظهر." + "value" : " Brainwallet بإنشاء عنوان جديد في كل مرة. اضغط على علامة التبويب الحصول/استلام لعرض أو نسخ رمز QR على " } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet macht jedes Mal eine neue Adresse. Tippen Sie auf die Registerkarte Kaufen/Empfangen, um den QR-Code auf dem angezeigten Bildschirm anzuzeigen oder zu kopieren." + "value" : "Brainwallet erstellt jedes Mal eine neue Adresse. Tippen Sie auf den Tab „Erhalten/Empfangen“, um den QR-Code auf dem Bildschirm anzuzeigen oder zu kopieren." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet crea una nueva dirección cada vez. Pulse en la pestaña Comprar/Recibir mostrar o copie el código QR en la pantalla que se muestra." + "value" : "Brainwallet crea una nueva dirección cada vez. Toca la pestaña Obtener/Recibir para mostrar o copiar el código QR en la pantalla." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "برین‌والت هر بار یک آدرس جدید می‌سازد. روی برگه خرید/دریافت ضربه بزنید تا کد QR را در صفحه‌ای که نمایش داده می‌شود، نشان دهید یا کپی کنید." + "value" : "Brainwallet هر بار یک آدرس جدید ایجاد می‌کند. روی تب دریافت ضربه بزنید تا کد QR روی صفحه نمایش داده یا کپی " } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet crée une nouvelle adresse à chaque fois. Tapez sur l'onglet Acheter/Recevoir pour afficher ou copier le code QR dans l'écran qui s'affiche." - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Brainwallet crée une nouvelle adresse à chaque transaction. Appuyez sur l'onglet « Acheter/Recevoir » pour afficher ou copier le code QR qui s'affiche à l'écran." + "value" : "Brainwallet crée une nouvelle adresse à chaque fois. Appuyez sur l’onglet Obtenir/Recevoir pour afficher ou copier le code QR à l’écran." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "ब्रेनवॉलेट हर बार एक नया पता बनाता है। टैप करें Buy/Receive टैब पर और स्क्रीन पर दिखाई देने वाले QR कोड को दिखाएं या कॉपी करें।" + "value" : "Brainwallet हर बार एक नया पता बनाता है। स्क्रीन पर QR कोड दिखाने या कॉपी करने के लिए Get/Receive टैब पर टैप करें।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet membuat alamat baru setiap kali. Ketuk Tab Beli/Terima untuk menampilkan atau menyalin kode QR di layar yang ditampilkan." + "value" : "Brainwallet membuat alamat baru setiap kali. Ketuk tab Dapatkan/Terima untuk menampilkan atau menyalin kode QR di layar." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet crea ogni volta un nuovo indirizzo. Toccare la scheda Acquista/Ricevi per visualizzare o copiare il codice QR nella schermata visualizzata." + "value" : "Brainwallet crea un nuovo indirizzo ogni volta. Tocca la scheda Ottieni/Ricevi per mostrare o copiare il codice QR sullo schermo." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ブレインウォレットは毎回新しいアドレスを作成する。購入/受信タブをタップするか、表示された画面のQRコードをコピーしてください。" + "value" : "Brainwallet は毎回新しいアドレスを作成します。「取得/受け取り」タブをタップすると、画面にQRコードが表示され、コピーできます。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet은 매번 새로운 주소를 만듭니다. 구매/받기 탭 화면에 표시하거나 QR 코드를 복사하세요." + "value" : "Brainwallet는 매번 새로운 주소를 생성합니다. 화면의 QR 코드를 표시하거나 복사하려면 받기/수신 탭을 누르세요." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਬ੍ਰੇਨਵਾਲਿਟ ਹਰ ਵਾਰ ਇੱਕ ਨਵਾਂ ਪਤਾ ਬਣਾਉਂਦਾ ਹੈ। ਖਰੀਦੋ/ਪ੍ਰਾਪਤ ਕਰੋ ਟੈਬ ਦਿਖਾਓ 'ਤੇ ਟੈਪ ਕਰੋ ਜਾਂ ਦਿਖਾਈ ਦੇਣ ਵਾਲੀ ਸਕ੍ਰੀਨ ਵਿੱਚ QR ਕੋਡ ਦੀ ਨਕਲ ਕਰੋ।" + "value" : "Brainwallet ਹਰ ਵਾਰ ਇੱਕ ਨਵਾਂ ਪਤਾ ਬਣਾਉਂਦਾ ਹੈ। ਸਕ੍ਰੀਨ ਉੱਤੇ QR ਕੋਡ ਵੇਖਾਉਣ ਜਾਂ ਕਾਪੀ ਕਰਨ ਲਈ Get/Receive ਟੈਬ 'ਤੇ ਟੈਪ ਕਰੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet za każdym razem tworzy nowy adres. Stuknij kartę Kup/Odbierz, aby wyświetlić lub skopiuj kod QR na wyświetlonym ekranie." + "value" : "Brainwallet tworzy nowy adres za każdym razem. Stuknij zakładkę Pobierz/Odbierz, aby wyświetlić lub skopiować kod QR na ekranie." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "O Brainwallet cria um novo endereço a cada vez. Toque na aba Comprar/Receber para exibir ou copie o código QR na tela que aparecer." + "value" : "O Brainwallet cria um novo endereço a cada vez. Toque na aba Obter/Receber para mostrar ou copiar o código QR na tela." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet каждый раз создает новый адрес. Нажмите на вкладку «Купить/получить» или скопируйте QR-код на отображаемом экране." + "value" : "Brainwallet создаёт новый адрес каждый раз. Нажмите вкладку Получить/Принять, чтобы показать или скопировать QR-код на экране." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet skapar en ny adress varje gång. Tryck på Buy/Receive Tab visa eller kopiera QR-koden på skärmen som visas." + "value" : "Brainwallet skapar en ny adress varje gång. Tryck på fliken Skaffa/Ta emot för att visa eller kopiera QR-koden på skärmen. " } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet her seferinde yeni bir adres oluşturur. Gösterilen ekranda Satın Al/Al Sekmesine dokunun veya QR kodunu kopyalayın." + "value" : "Brainwallet her seferinde yeni bir adres oluşturur. Ekrandaki QR kodunu göstermek veya kopyalamak için Al/Alım sekmesine dokunun." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet щоразу створює нову адресу. Натисніть на вкладку «Купити/Отримати» або скопіюйте QR-код на екрані, що відображається." + "value" : "Brainwallet створює нову адресу щоразу. Натисніть вкладку Отримати/Прийняти, щоб показати або скопіювати QR-код на екрані." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet每次都会生成一个新的地址。点击“购买/接收”选项卡,显示或复制屏幕上显示的二维码。" + "value" : "Brainwallet 每次都会生成一个新的地址。点击“获取/接收”标签以显示或复制屏幕上的二维码。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet每次都會產生一個新的地址。點選「購買/接收」選項卡,顯示或複製螢幕上顯示的二維碼。" + "value" : "Brainwallet 每次都會建立新的地址。點擊「取得/接收」分頁以顯示或複製畫面上的 QR 碼。" } } } @@ -5540,480 +5772,226 @@ } } }, - "BUY LTC" : { + "Buy with MoonPay" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اشترِ LTC" + "value" : "اشترِ باستخدام MoonPay" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "KAUFEN SIE LTC" + "value" : "Mit MoonPay kaufen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "COMPRAR LTC" + "value" : "Comprar con MoonPay" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "COMPRAR LTC" + "value" : "Comprar con MoonPay" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "خرید LTC" + "value" : "خرید با مون‌پی" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "خرید LTC" + "value" : "خرید با مون‌پی" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "ACHETER LTC" + "value" : "Acheter avec MoonPay" } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "ACHETER LTC" + "value" : "Acheter avec MoonPay" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "एलटीसी खरीदें" + "value" : "मूनपे से खरीदें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "BELI LTC" + "value" : "Beli dengan MoonPay" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "ACQUISTA LTC" + "value" : "Acquista con MoonPay" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "LTCを買う" + "value" : "MoonPayで購入" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "LTC 구매" + "value" : "MoonPay로 구매하기" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "LTC ਖਰੀਦੋ" + "value" : "ਮੂਨਪੇ ਨਾਲ ਖਰੀਦੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "KUP LTC" + "value" : "Kupuj za pomocą MoonPay" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "COMPRAR LTC" + "value" : "Comprar com MoonPay" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "КУПИТЬ LTC" + "value" : "Покупайте с MoonPay" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "KÖP LTC" + "value" : "Köp med MoonPay" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "LTC SATIN AL" + "value" : "MoonPay ile satın alın" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "КУПИТИ LTC" + "value" : "Купуйте з MoonPay" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "购买LTC" + "value" : "通过MoonPay购买" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "購買LTC" + "value" : "使用 MoonPay 購買" } } } }, - "Buy with MoonPay" : { + "Cancel" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اشترِ باستخدام MoonPay" + "value" : "إلغاء" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Mit MoonPay kaufen" + "value" : "Abbrechen" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Comprar con MoonPay" + "value" : "Cancelar" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Comprar con MoonPay" + "value" : "Cancelar" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "خرید با مون‌پی" + "value" : "لغو" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "خرید با مون‌پی" + "value" : "لغو" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Acheter avec MoonPay" + "value" : "Annuler" } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "Acheter avec MoonPay" + "value" : "Annuler" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "मूनपे से खरीदें" + "value" : "रद्द करना" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Beli dengan MoonPay" + "value" : "Batal" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Acquista con MoonPay" + "value" : "Cancellare" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "MoonPayで購入" + "value" : "キャンセル" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "MoonPay로 구매하기" + "value" : "취소" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੂਨਪੇ ਨਾਲ ਖਰੀਦੋ" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kupuj za pomocą MoonPay" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Comprar com MoonPay" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Покупайте с MoonPay" - } - }, - "sv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Köp med MoonPay" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "MoonPay ile satın alın" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Купуйте з MoonPay" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "通过MoonPay购买" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用 MoonPay 購買" - } - } - } - }, - "Buy/Receive" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "شراء/استلام" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kaufen/Erhalten" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Comprar/Recibir" - } - }, - "fa-IR" : { - "stringUnit" : { - "state" : "translated", - "value" : "خرید/دریافت" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acheter/recevoir" - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "क्रय करें/प्राप्त करें" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Beli/Terima" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acquistare/Ricevere" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "買う/受け取る" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "구매/받기" - } - }, - "pa" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਖਰੀਦੋ/ਪ੍ਰਾਪਤ ਕਰੋ" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kup/Odbierz" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Comprar/Receber" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Купить/Получить" - } - }, - "sv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Köpa/ta emot" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Satın Al/Al" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Купівля/Отримання" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "买/收" - } - }, - "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "買/收" - } - } - } - }, - "Cancel" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إلغاء" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abbrechen" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelar" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelar" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "لغو" - } - }, - "fa-IR" : { - "stringUnit" : { - "state" : "translated", - "value" : "لغو" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annuler" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annuler" - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "रद्द करना" - } - }, - "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Batal" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancellare" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "キャンセル" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "취소" - } - }, - "pa" : { - "stringUnit" : { - "state" : "translated", - "value" : "ਰੱਦ ਕਰੋ" + "value" : "ਰੱਦ ਕਰੋ" } }, "pl" : { @@ -8374,57 +8352,177 @@ } } }, - "Delete my wallet & data?" : { + "Delete my Emojis" : { + "comment" : "A button label that allows the user to delete their emojis.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حذف محفظتي والبيانات؟" + "value" : "احذف رموزي التعبيرية" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Mein Wallet & Daten löschen?" + "value" : "Meine Emojis löschen" } }, - "es" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "¿Eliminar mi billetera y datos?" + "value" : "Eliminar mis emojis" } }, - "es-419" : { + "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "¿Eliminar mi billetera y datos?" + "value" : "شکلک‌هایم را حذف کن" } }, - "fa" : { + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "حذف کیف پول و داده‌های من؟" + "value" : "Supprimer mes emojis" } }, - "fa-IR" : { + "hi" : { "stringUnit" : { "state" : "translated", - "value" : "حذف کیف پول و داده‌های من؟" + "value" : "मेरे इमोजी हटाएं" } }, - "fr" : { + "id" : { "stringUnit" : { "state" : "translated", - "value" : "Supprimer mon portefeuille et mes données ?" + "value" : "Hapus Emoji saya" } }, - "fr-FR" : { + "it" : { "stringUnit" : { "state" : "translated", - "value" : "Supprimer mon portefeuille et mes données ?" + "value" : "Elimina le mie emoji" } }, - "hi" : { + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "絵文字を削除する" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "내 이모지 삭제" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਮੇਰੇ ਇਮੋਜੀ ਮਿਟਾਓ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń moje emotikony" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excluir meus emojis" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить мои эмодзи" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort mina emojis" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emojilerimi sil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Видалити мої емодзі" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除我的表情符号" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "刪除我的表情符號" + } + } + } + }, + "Delete my wallet & data?" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف محفظتي والبيانات؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mein Wallet & Daten löschen?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Eliminar mi billetera y datos?" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Eliminar mi billetera y datos?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف کیف پول و داده‌های من؟" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف کیف پول و داده‌های من؟" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer mon portefeuille et mes données ?" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer mon portefeuille et mes données ?" + } + }, + "hi" : { "stringUnit" : { "state" : "translated", "value" : "मेरा वॉलेट और डेटा हटाएँ?" @@ -11587,4990 +11685,6066 @@ } } }, - "Get some Litecoin for your Brainwallet" : { + "GET LTC" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "احصل على بعض عملة لايتكوين لـ Brainwallet " + "value" : " LTC" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Holen Sie sich etwas Litecoin für Ihr Brainwallet" + "value" : "LTC erhalten" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Consigue algo de Litecoin para tu Brainwallet" + "value" : "Obtener LTC" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "چند لایت‌کوین برای کیف پول ذهنی خود دریافت کنید" + "value" : "دریافت LTC" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Obtenez du Litecoin pour votre Brainwallet" + "value" : "Obtenir LTC" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "अपने ब्रेनवॉलेट के लिए कुछ लाइटकॉइन प्राप्त करें" + "value" : "LTC प्राप्त करें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Dapatkan beberapa Litecoin untuk Brainwallet Anda" + "value" : "Dapatkan LTC" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ottieni Litecoin per il tuo Brainwallet" + "value" : "Ottieni LTC" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "あなたのブレインウォレットにライトコインを" + "value" : "LTCを取得" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "브레인월렛에 라이트코인을 사세요" + "value" : "LTC 받기" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਆਪਣੇ ਬ੍ਰੇਨਵਾਲਿਟ ਲਈ ਕੁਝ ਲਾਈਟਕੋਇਨ ਪ੍ਰਾਪਤ ਕਰੋ" + "value" : "LTC ਪ੍ਰਾਪਤ ਕਰੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zdobądź trochę Litecoinów dla swojego Brainwallet" + "value" : "Odbierz LTC" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Obtenha um pouco de Litecoin para sua Brainwallet" + "value" : "Obter LTC" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Получите немного Litecoin для вашего Brainwallet." + "value" : "Получить LTC" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Skaffa lite Litecoin till din Brainwallet" + "value" : "Skaffa LTC" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet'ınız için biraz Litecoin alın" + "value" : "LTC Al" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Отримайте трохи Litecoin для свого Brainwallet" + "value" : "Отримати LTC" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "为你的 Brainwallet 购买一些莱特币" + "value" : "获取 LTC" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "為你的 Brainwallet 購買一些萊特幣" + "value" : "取得 LTC" } } } }, - "Go Deep!" : { - "comment" : "Title for a step in the walkthrough that takes the user to more detailed transaction information.", - "isCommentAutoGenerated" : true, + "Get some Litecoin for your Brainwallet" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تعمّق!" + "value" : "احصل على بعض عملة لايتكوين لـ Brainwallet " } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Gehen Sie in die Tiefe!" + "value" : "Holen Sie sich etwas Litecoin für Ihr Brainwallet" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "¡Profundiza!" + "value" : "Consigue algo de Litecoin para tu Brainwallet" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "برو عمیق!" + "value" : "چند لایت‌کوین برای کیف پول ذهنی خود دریافت کنید" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Allez-y à fond !" + "value" : "Obtenez du Litecoin pour votre Brainwallet" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "गहराई में जाओ!" + "value" : "अपने ब्रेनवॉलेट के लिए कुछ लाइटकॉइन प्राप्त करें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Lebih Dalam!" + "value" : "Dapatkan beberapa Litecoin untuk Brainwallet Anda" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Andate in profondità!" + "value" : "Ottieni Litecoin per il tuo Brainwallet" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "深く潜れ!" + "value" : "あなたのブレインウォレットにライトコインを" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "깊게 들어가!" + "value" : "브레인월렛에 라이트코인을 사세요" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਡੂੰਘਾਈ ਵਿੱਚ ਜਾਓ!" + "value" : "ਆਪਣੇ ਬ੍ਰੇਨਵਾਲਿਟ ਲਈ ਕੁਝ ਲਾਈਟਕੋਇਨ ਪ੍ਰਾਪਤ ਕਰੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wejdź głęboko!" + "value" : "Zdobądź trochę Litecoinów dla swojego Brainwallet" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Vá fundo!" + "value" : "Obtenha um pouco de Litecoin para sua Brainwallet" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Углубляйтесь!" + "value" : "Получите немного Litecoin для вашего Brainwallet." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Gå på djupet!" + "value" : "Skaffa lite Litecoin till din Brainwallet" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Derine in!" + "value" : "Brainwallet'ınız için biraz Litecoin alın" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Go Deep!" + "value" : "Отримайте трохи Litecoin для свого Brainwallet" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "深入探索!" + "value" : "为你的 Brainwallet 购买一些莱特币" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "深入探索!" + "value" : "為你的 Brainwallet 購買一些萊特幣" } } } }, - "Go Gaming" : { - "comment" : "Title for a step in the walkthrough that takes the user to the Game Hub.", - "isCommentAutoGenerated" : true, + "Get/Receive" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اذهب للألعاب" + "value" : " " } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Go Gaming" + "value" : "Erhalten/Empfangen" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Go Gaming" + "value" : "Obtener/Recibir" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "برو گیمینگ" + "value" : "دریافت " } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Allez jouer" + "value" : "Obtenir/Recevoir" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "गो गेमिंग" + "value" : "प्राप्त करें/प्राप्त करना" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Bermain Game" + "value" : "Dapatkan/Terima" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Gioco d'azzardo" + "value" : "Ottieni/Ricevi" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ゲーム" + "value" : "取得/受け取る" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "고 게이밍" + "value" : "받기/수신" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਗੋ ਗੇਮਿੰਗ" + "value" : "ਪ੍ਰਾਪਤ ਕਰੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Go Gaming" + "value" : "Odbierz/Otrzymaj" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Go Gaming" + "value" : "Obter/Receber" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Go Gaming" + "value" : "Получить/Принять" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Gå till spel" + "value" : "Få/Ta emot" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Go Gaming" + "value" : "Al/Almak" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Go Gaming" + "value" : "Отримати/Прийняти" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "去玩游戏" + "value" : "获取 / 接收" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "去玩遊戲" + "value" : "取得 / 接收" } } } }, - "History" : { + "Go Deep!" : { + "comment" : "Title for a step in the walkthrough that takes the user to more detailed transaction information.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تاريخ" + "value" : "تعمّق!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Geschichte" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Historia" + "value" : "Gehen Sie in die Tiefe!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Historia" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "تاریخ" + "value" : "¡Profundiza!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "تاریخ" + "value" : "برو عمیق!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Histoire" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Histoire" + "value" : "Allez-y à fond !" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "इतिहास" + "value" : "गहराई में जाओ!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sejarah" + "value" : "Lebih Dalam!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Storia" + "value" : "Andate in profondità!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "歴史" + "value" : "深く潜れ!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "히스토리" + "value" : "깊게 들어가!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਇਤਿਹਾਸ" + "value" : "ਡੂੰਘਾਈ ਵਿੱਚ ਜਾਓ!" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Historia" + "value" : "Wejdź głęboko!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Histórico" + "value" : "Vá fundo!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "История" + "value" : "Углубляйтесь!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Historia" + "value" : "Gå på djupet!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Tarih" + "value" : "Derine in!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Історія" + "value" : "Go Deep!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "历史" + "value" : "深入探索!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "歷史" + "value" : "深入探索!" } } } }, - "How to receive LTC" : { - "comment" : "A heading describing how to receive Litecoin.", - "isCommentAutoGenerated" : true, + "Go Gaming" : { + "comment" : "Title for a step in the walkthrough that takes the user to the Game Hub.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "كيفية تلقي LTC" + "value" : "اذهب للألعاب" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wie man LTC erhält" + "value" : "Go Gaming" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cómo recibir LTC" + "value" : "Go Gaming" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "چگونه LTC دریافت کنیم" + "value" : "برو گیمینگ" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Comment recevoir des LTC" + "value" : "Allez jouer" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "एलटीसी कैसे प्राप्त करें" + "value" : "गो गेमिंग" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Cara menerima LTC" + "value" : "Bermain Game" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Come ricevere la LTC" + "value" : "Gioco d'azzardo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "LTCを受けるには" + "value" : "ゲーム" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "장기 요양 받는 방법" + "value" : "고 게이밍" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "LTC ਕਿਵੇਂ ਪ੍ਰਾਪਤ ਕਰੀਏ" + "value" : "ਗੋ ਗੇਮਿੰਗ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jak otrzymać LTC" + "value" : "Go Gaming" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Como receber cuidados de longo prazo" + "value" : "Go Gaming" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Как получить LTC" + "value" : "Go Gaming" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Hur man erhåller långtidsvård" + "value" : "Gå till spel" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "LTC nasıl alınır" + "value" : "Go Gaming" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Як отримати LTC" + "value" : "Go Gaming" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "如何领取长期护理保险" + "value" : "去玩游戏" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "如何領取長期照護保險" + "value" : "去玩遊戲" } } } }, - "How to Receive LTC" : { - "comment" : "The title of a screen that explains how to receive Litecoin.", + "Hey? Aren't you the expert." : { + "comment" : "Guide detail for the third emoji triplet guide.", "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "كيفية تلقي LTC" + "value" : "مرحباً؟ أليس أنت الخبير." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wie man LTC erhält" + "value" : "Hey? Du bist doch der Experte." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cómo recibir LTC" + "value" : "¡Oye! Tú eres el experto." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "چگونه LTC دریافت کنیم" + "value" : "هی؟ مگه تو متخصص نیستی." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Comment recevoir des LTC" + "value" : "Hé ? N'es-tu pas l'expert." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "एलटीसी कैसे प्राप्त करें" + "value" : "अरे? क्या आप विशेषज्ञ नहीं हैं।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Cara Menerima LTC" + "value" : "Hei? Bukankah kamu ahlinya." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Come ricevere la LTC" + "value" : "Ehi? Non sei tu l'esperto." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "LTCを受けるには" + "value" : "ねえ?あなたが専門家でしょう。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "장기 요양 받는 방법" + "value" : "이봐요? 당신이 전문가잖아요." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "LTC ਕਿਵੇਂ ਪ੍ਰਾਪਤ ਕਰੀਏ" + "value" : "ਹੇ? ਕੀ ਤੁਸੀਂ ਮਾਹਰ ਨਹੀਂ ਹੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jak otrzymywać LTC" + "value" : "Hej? Czy nie jesteś ekspertem." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Como receber cuidados de longo prazo" + "value" : "Ei? Você não é o especialista." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Как получить LTC" + "value" : "Эй? Разве ты не эксперт." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Hur man erhåller långtidsvård" + "value" : "Hej? Är du inte experten." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "LTC Nasıl Alınır" + "value" : "Hey? Sen uzman değil misin." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Як отримати LTC" + "value" : "Гей? Хіба ти не експерт." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "如何领取长期护理保险" + "value" : "嘿?你不就是专家嘛。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "如何領取長期照護保險" + "value" : "嘿?你不就是專家嗎。" } } } }, - "How to Send Litecoin" : { - "comment" : "A title for a section of the tutorial guide.", - "isCommentAutoGenerated" : true, + "History" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "كيفية إرسال Litecoin" + "value" : "تاريخ" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "So senden Sie Litecoin" + "value" : "Geschichte" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Historia" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cómo enviar Litecoin" + "value" : "Historia" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تاریخ" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "چگونه لایت‌کوین ارسال کنیم" + "value" : "تاریخ" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Comment envoyer du Litecoin" + "value" : "Histoire" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Histoire" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "लाइटकॉइन कैसे भेजें" + "value" : "इतिहास" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Cara Mengirim Litecoin" + "value" : "Sejarah" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Come inviare Litecoin" + "value" : "Storia" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ライトコインの送金方法" + "value" : "歴史" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "라이트코인 송금 방법" + "value" : "히스토리" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "Litecoin ਕਿਵੇਂ ਭੇਜਣਾ ਹੈ" + "value" : "ਇਤਿਹਾਸ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jak wysłać Litecoin" + "value" : "Historia" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Como enviar Litecoin" + "value" : "Histórico" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Как отправить Litecoin" + "value" : "История" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Hur man skickar Litecoin" + "value" : "Historia" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Litecoin Nasıl Gönderilir" + "value" : "Tarih" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Як надіслати Litecoin" + "value" : "Історія" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "如何发送莱特币" + "value" : "历史" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "如何發送萊特幣" + "value" : "歷史" } } } }, - "How to Send LTC" : { - "comment" : "The title of a screen that explains how to send Litecoin.", + "How to receive LTC" : { + "comment" : "A heading describing how to receive Litecoin.", "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "كيفية إرسال LTC" + "value" : "كيفية تلقي LTC" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "So senden Sie LTC" + "value" : "Wie man LTC erhält" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cómo enviar LTC" + "value" : "Cómo recibir LTC" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "چگونه LTC ارسال کنیم" + "value" : "چگونه LTC دریافت کنیم" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Comment envoyer du LTC" + "value" : "Comment recevoir des LTC" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "लाइटकॉइन (LTC) कैसे भेजें" + "value" : "एलटीसी कैसे प्राप्त करें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Cara Mengirim LTC" + "value" : "Cara menerima LTC" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Come inviare LTC" + "value" : "Come ricevere la LTC" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "LTCの送付方法" + "value" : "LTCを受けるには" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "장기 요양 보내는 방법" + "value" : "장기 요양 받는 방법" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "LTC ਕਿਵੇਂ ਭੇਜਣਾ ਹੈ" + "value" : "LTC ਕਿਵੇਂ ਪ੍ਰਾਪਤ ਕਰੀਏ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jak wysłać LTC" + "value" : "Jak otrzymać LTC" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Como enviar uma licença para transporte de passageiros (LTC)" + "value" : "Como receber cuidados de longo prazo" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Как отправить LTC" + "value" : "Как получить LTC" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Hur man skickar LTC" + "value" : "Hur man erhåller långtidsvård" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "LTC Nasıl Gönderilir" + "value" : "LTC nasıl alınır" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Як надіслати LTC" + "value" : "Як отримати LTC" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "如何发送 LTC" + "value" : "如何领取长期护理保险" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "如何發送 LTC" + "value" : "如何領取長期照護保險" } } } }, - "I saved it on paper or metal" : { + "How to Receive LTC" : { + "comment" : "The title of a screen that explains how to receive Litecoin.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حفظته على الورق أو المعدن" + "value" : "كيفية تلقي LTC" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ich habe es auf Papier oder Metall gespeichert" + "value" : "Wie man LTC erhält" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Lo guardé en papel o metal" + "value" : "Cómo recibir LTC" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "آن را روی کاغذ یا فلز ذخیره کردم" + "value" : "چگونه LTC دریافت کنیم" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Je l’ai sauvegardé sur papier ou métal" + "value" : "Comment recevoir des LTC" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "मैंने इसे कागज़ या धातु पर सहेजा" + "value" : "एलटीसी कैसे प्राप्त करें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Saya menyimpannya di atas kertas atau logam" + "value" : "Cara Menerima LTC" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "L'ho salvato su carta o metallo" + "value" : "Come ricevere la LTC" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "紙か金属に保存した" + "value" : "LTCを受けるには" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "종이나 금속에 저장했어요" + "value" : "장기 요양 받는 방법" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੈਂ ਇਸਨੂੰ ਕਾਗਜ਼ ਜਾਂ ਧਾਤ 'ਤੇ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਹੈ।" + "value" : "LTC ਕਿਵੇਂ ਪ੍ਰਾਪਤ ਕਰੀਏ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zapisałem je na papierze lub metalu" + "value" : "Jak otrzymywać LTC" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Guardei em papel ou metal" + "value" : "Como receber cuidados de longo prazo" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Я сохранил это на бумаге или металле." + "value" : "Как получить LTC" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Jag sparade det på papper eller metall" + "value" : "Hur man erhåller långtidsvård" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Kağıt ya da metal üzerine kaydettim." + "value" : "LTC Nasıl Alınır" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Я зберіг це на папері чи металі" + "value" : "Як отримати LTC" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "我把它保存在纸上或金属上。" + "value" : "如何领取长期护理保险" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "我把它保存在紙上或金屬上。" + "value" : "如何領取長期照護保險" } } } }, - "If you saved 12 word seed phrase on your phone or had it on Litewallet, you can restore your Brainwallet here." : { + "How to Send Litecoin" : { + "comment" : "A title for a section of the tutorial guide.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "إذا قمت بحفظ عبارة البذور المكونة من 12 كلمة على هاتفك أو كانت لديك على Litewallet، يمكنك استعادة محفظة الدماغ هنا." + "value" : "كيفية إرسال Litecoin" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wenn Sie Ihre 12-Wort-Seed-Phrase auf Ihrem Telefon gespeichert haben oder sie in Litewallet hatten, können Sie Ihr Brainwallet hier wiederherstellen." + "value" : "So senden Sie Litecoin" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Si guardaste la frase semilla de 12 palabras en tu teléfono o la tenías en Litewallet, puedes restaurar tu Brainwallet aquí." + "value" : "Cómo enviar Litecoin" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "اگر عبارت بازیابی ۱۲ کلمه‌ای را روی تلفن خود ذخیره کرده‌اید یا آن را در Litewallet داشته‌اید، می‌توانید Brainwallet خود را اینجا بازیابی کنید." + "value" : "چگونه لایت‌کوین ارسال کنیم" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Si vous avez enregistré une phrase de récupération de 12 mots sur votre téléphone ou si vous l’aviez sur Litewallet, vous pouvez restaurer votre Brainwallet ici." + "value" : "Comment envoyer du Litecoin" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "यदि आपने अपने फोन पर 12 शब्दों का बीज वाक्यांश सहेजा है या इसे लाइटवॉलेट पर रखा है, तो आप यहां अपने ब्रेनवॉलेट को पुनर्स्थापित कर सकते हैं।" + "value" : "लाइटकॉइन कैसे भेजें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Jika Anda menyimpan 12 frasa benih kata di ponsel Anda atau menyimpannya di Litewallet, Anda dapat memulihkan Brainwallet Anda di sini." + "value" : "Cara Mengirim Litecoin" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Se hai salvato una frase seed di 12 parole sul tuo telefono o l'hai salvata su Litewallet, puoi ripristinare il tuo Brainwallet qui." + "value" : "Come inviare Litecoin" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "12単語のシードフレーズを携帯電話に保存している場合、またはLitewalletに保存している場合は、ここでBrainwalletを復元できます。" + "value" : "ライトコインの送金方法" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "만약 휴대폰에 12단어 시드 문구를 저장했거나 Litewallet에 저장해 두었다면, 여기에서 Brainwallet을 복원할 수 있습니다." + "value" : "라이트코인 송금 방법" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਜੇਕਰ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ 'ਤੇ 12 ਸ਼ਬਦਾਂ ਦੇ ਸੀਡ ਵਾਕਾਂਸ਼ ਨੂੰ ਸੇਵ ਕੀਤਾ ਹੈ ਜਾਂ Litewallet 'ਤੇ ਰੱਖਿਆ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇੱਥੇ ਆਪਣੇ ਬ੍ਰੇਨਵਾਲਿਟ ਨੂੰ ਰੀਸਟੋਰ ਕਰ ਸਕਦੇ ਹੋ।" + "value" : "Litecoin ਕਿਵੇਂ ਭੇਜਣਾ ਹੈ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jeśli zapisałeś frazę 12 word seed na swoim telefonie lub miałeś ją na Litewallet, możesz przywrócić swój Brainwallet tutaj." + "value" : "Jak wysłać Litecoin" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Se você salvou 12 palavras e frases de sementes em seu telefone ou as tinha no Litewallet, pode restaurar seu Brainwallet aqui." + "value" : "Como enviar Litecoin" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Если вы сохранили 12 слов из seed-фразы на своем телефоне или имели ее в Litewallet, вы можете восстановить свой Brainwallet здесь." + "value" : "Как отправить Litecoin" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Om du sparade 12 ordfröfraser på din telefon eller hade dem på Litewallet, kan du återställa din Brainwallet här." + "value" : "Hur man skickar Litecoin" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "12 kelimelik tohum cümlesini telefonunuza kaydettiyseniz veya Litewallet'ta varsa, Brainwallet'ınızı buradan geri yükleyebilirsiniz." + "value" : "Litecoin Nasıl Gönderilir" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Якщо ви зберегли 12-словну основну фразу на своєму телефоні або мали її на Litewallet, ви можете відновити свій Brainwallet тут." + "value" : "Як надіслати Litecoin" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "如果您在手机上保存了 12 个单词的助记词,或者将其保存在 Litewallet 中,您可以在这里恢复您的 Brainwallet。" + "value" : "如何发送莱特币" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "如果您在手機上保存了 12 個單字的助記詞,或者將其保存在 Litewallet 中,您可以在這裡恢復您的 Brainwallet。" + "value" : "如何發送萊特幣" } } } }, - "In progress: %1$@" : { + "How to Send LTC" : { + "comment" : "The title of a screen that explains how to send Litecoin.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "قيد التقدم: %1$@" + "value" : "كيفية إرسال LTC" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "In Bearbeitung: %1$@" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "En progreso: %1$@" + "value" : "So senden Sie LTC" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "En progreso: %1$@" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "در حال پیشرفت: %1$@" + "value" : "Cómo enviar LTC" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "در حال پیشرفت: %1$@" + "value" : "چگونه LTC ارسال کنیم" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "En cours : %1$@" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "En cours : %1$@" + "value" : "Comment envoyer du LTC" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "प्रगति पर: %1$@" + "value" : "लाइटकॉइन (LTC) कैसे भेजें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Sedang berlangsung: %1$@" + "value" : "Cara Mengirim LTC" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "In corso: %1$@" + "value" : "Come inviare LTC" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "進行中: %1$@" + "value" : "LTCの送付方法" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "진행 중: % 1 $ @" + "value" : "장기 요양 보내는 방법" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਪ੍ਰਗਤੀ ਅਧੀਨ: %1$@" + "value" : "LTC ਕਿਵੇਂ ਭੇਜਣਾ ਹੈ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "W toku: %1$@" + "value" : "Jak wysłać LTC" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Em andamento: %1$@" + "value" : "Como enviar uma licença para transporte de passageiros (LTC)" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "В процессе: %1$@" + "value" : "Как отправить LTC" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Pågår: %1$@" + "value" : "Hur man skickar LTC" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Devam ediyor: %1$@" + "value" : "LTC Nasıl Gönderilir" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Виконується: %1$@" + "value" : "Як надіслати LTC" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "进行中:%1$@" + "value" : "如何发送 LTC" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "進行中:%1$@" + "value" : "如何發送 LTC" } } } }, - "Just for you.\nIs it the private key that lets you send." : { + "I saved it on paper or metal" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "خصيصًا لك.\n\nهل هو المفتاح الخاص الذي يسمح لك بالإرسال؟" + "value" : "حفظته على الورق أو المعدن" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Nur für dich.\nIst es der private Schlüssel, mit dem du senden kannst?" + "value" : "Ich habe es auf Papier oder Metall gespeichert" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Solo para ti.\n¿Es la clave privada la que te permite enviar?" + "value" : "Lo guardé en papel o metal" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "فقط برای شما. آیا این کلید خصوصی است که به شما امکان ارسال می‌دهد؟" + "value" : "آن را روی کاغذ یا فلز ذخیره کردم" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Traduction française de: Just for you.\nIs it the private key that lets you send." + "value" : "Je l’ai sauvegardé sur papier ou métal" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "सिर्फ़ आपके लिए.\nक्या यह प्राइवेट की है जिससे आप भेज सकते हैं?" + "value" : "मैंने इसे कागज़ या धातु पर सहेजा" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Hanya untuk Anda.\nIni adalah kunci pribadi yang memungkinkan Anda mengirim." + "value" : "Saya menyimpannya di atas kertas atau logam" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Solo per te.\nÈ la chiave privata che ti consente di inviare." + "value" : "L'ho salvato su carta o metallo" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "あなただけに。\n送信に使えるのは秘密鍵ですか?" + "value" : "紙か金属に保存した" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "당신만을 위한 거예요.\n그게 바로 당신이 보낼 수 있게 해주는 개인 키인가요?" + "value" : "종이나 금속에 저장했어요" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਸਿਰਫ਼ ਤੁਹਾਡੇ ਲਈ।\nਕੀ ਇਹ ਉਹ ਨਿੱਜੀ ਕੁੰਜੀ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਭੇਜਣ ਦਿੰਦੀ ਹੈ।" + "value" : "ਮੈਂ ਇਸਨੂੰ ਕਾਗਜ਼ ਜਾਂ ਧਾਤ 'ਤੇ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Tylko dla Ciebie.\nCzy to klucz prywatny, który pozwala Ci wysyłać?" + "value" : "Zapisałem je na papierze lub metalu" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Só para você.\nÉ a chave privada que permite o envio?" + "value" : "Guardei em papel ou metal" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Только для тебя.\nЭто закрытый ключ, который позволяет тебе отправлять?" + "value" : "Я сохранил это на бумаге или металле." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Bara för dig. Är det den privata nyckeln som låter dig skicka." + "value" : "Jag sparade det på papper eller metall" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Sadece senin için.\nGöndermenizi sağlayan özel anahtar bu mu?" + "value" : "Kağıt ya da metal üzerine kaydettim." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Тільки для тебе.\nЦе закритий ключ, який дозволяє тобі надсилати." + "value" : "Я зберіг це на папері чи металі" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "专为你准备。\n\n这是让你发送信息的私钥吗?" + "value" : "我把它保存在纸上或金属上。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "專為你準備。\n\n這是讓你發送訊息的私鑰嗎?" + "value" : "我把它保存在紙上或金屬上。" } } } }, - "Ł %lf" : { + "If you saved 12 word seed phrase on your phone or had it on Litewallet, you can restore your Brainwallet here." : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "إذا قمت بحفظ عبارة البذور المكونة من 12 كلمة على هاتفك أو كانت لديك على Litewallet، يمكنك استعادة محفظة الدماغ هنا." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Wenn Sie Ihre 12-Wort-Seed-Phrase auf Ihrem Telefon gespeichert haben oder sie in Litewallet hatten, können Sie Ihr Brainwallet hier wiederherstellen." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Si guardaste la frase semilla de 12 palabras en tu teléfono o la tenías en Litewallet, puedes restaurar tu Brainwallet aquí." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "اگر عبارت بازیابی ۱۲ کلمه‌ای را روی تلفن خود ذخیره کرده‌اید یا آن را در Litewallet داشته‌اید، می‌توانید Brainwallet خود را اینجا بازیابی کنید." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Si vous avez enregistré une phrase de récupération de 12 mots sur votre téléphone ou si vous l’aviez sur Litewallet, vous pouvez restaurer votre Brainwallet ici." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "यदि आपने अपने फोन पर 12 शब्दों का बीज वाक्यांश सहेजा है या इसे लाइटवॉलेट पर रखा है, तो आप यहां अपने ब्रेनवॉलेट को पुनर्स्थापित कर सकते हैं।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Jika Anda menyimpan 12 frasa benih kata di ponsel Anda atau menyimpannya di Litewallet, Anda dapat memulihkan Brainwallet Anda di sini." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Se hai salvato una frase seed di 12 parole sul tuo telefono o l'hai salvata su Litewallet, puoi ripristinare il tuo Brainwallet qui." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "12単語のシードフレーズを携帯電話に保存している場合、またはLitewalletに保存している場合は、ここでBrainwalletを復元できます。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "만약 휴대폰에 12단어 시드 문구를 저장했거나 Litewallet에 저장해 두었다면, 여기에서 Brainwallet을 복원할 수 있습니다." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "ਜੇਕਰ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ 'ਤੇ 12 ਸ਼ਬਦਾਂ ਦੇ ਸੀਡ ਵਾਕਾਂਸ਼ ਨੂੰ ਸੇਵ ਕੀਤਾ ਹੈ ਜਾਂ Litewallet 'ਤੇ ਰੱਖਿਆ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇੱਥੇ ਆਪਣੇ ਬ੍ਰੇਨਵਾਲਿਟ ਨੂੰ ਰੀਸਟੋਰ ਕਰ ਸਕਦੇ ਹੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Jeśli zapisałeś frazę 12 word seed na swoim telefonie lub miałeś ją na Litewallet, możesz przywrócić swój Brainwallet tutaj." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Se você salvou 12 palavras e frases de sementes em seu telefone ou as tinha no Litewallet, pode restaurar seu Brainwallet aqui." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Если вы сохранили 12 слов из seed-фразы на своем телефоне или имели ее в Litewallet, вы можете восстановить свой Brainwallet здесь." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Om du sparade 12 ordfröfraser på din telefon eller hade dem på Litewallet, kan du återställa din Brainwallet här." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "12 kelimelik tohum cümlesini telefonunuza kaydettiyseniz veya Litewallet'ta varsa, Brainwallet'ınızı buradan geri yükleyebilirsiniz." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "Якщо ви зберегли 12-словну основну фразу на своєму телефоні або мали її на Litewallet, ви можете відновити свій Brainwallet тут." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "如果您在手机上保存了 12 个单词的助记词,或者将其保存在 Litewallet 中,您可以在这里恢复您的 Brainwallet。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "Ł %lf" + "value" : "如果您在手機上保存了 12 個單字的助記詞,或者將其保存在 Litewallet 中,您可以在這裡恢復您的 Brainwallet。" } } } }, - "Last block: " : { + "In progress: %1$@" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "المكوِّن الأخير: " + "value" : "قيد التقدم: %1$@" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Letzter Block: " + "value" : "In Bearbeitung: %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "En progreso: %1$@" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Último bloque: " + "value" : "En progreso: %1$@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "در حال پیشرفت: %1$@" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "آخرین بلوک: " + "value" : "در حال پیشرفت: %1$@" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Dernier bloc : " + "value" : "En cours : %1$@" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "En cours : %1$@" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "अंतिम ब्लॉक: " + "value" : "प्रगति पर: %1$@" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Blok terakhir:" + "value" : "Sedang berlangsung: %1$@" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ultimo blocco: " + "value" : "In corso: %1$@" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "最後のブロック:" + "value" : "進行中: %1$@" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "마지막 블록: " + "value" : "진행 중: % 1 $ @" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਆਖਰੀ ਬਲਾਕ: " + "value" : "ਪ੍ਰਗਤੀ ਅਧੀਨ: %1$@" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ostatni blok: " + "value" : "W toku: %1$@" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Último bloco: " + "value" : "Em andamento: %1$@" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Последний блок: " + "value" : "В процессе: %1$@" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Sista kvarteret: " + "value" : "Pågår: %1$@" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Son blok: " + "value" : "Devam ediyor: %1$@" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Останній блок: " + "value" : "Виконується: %1$@" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "最后一个方块:" + "value" : "进行中:%1$@" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "最後一個方塊:" + "value" : "進行中:%1$@" } } } }, - "Light Mode" : { + "Just for you.\nIs it the private key that lets you send." : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "وضع الضوء" + "value" : "خصيصًا لك.\n\nهل هو المفتاح الخاص الذي يسمح لك بالإرسال؟" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Heller Modus" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Modo Claro" + "value" : "Nur für dich.\nIst es der private Schlüssel, mit dem du senden kannst?" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Modo Claro" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "حالت روشن" + "value" : "Solo para ti.\n¿Es la clave privada la que te permite enviar?" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "حالت روشن" + "value" : "فقط برای شما. آیا این کلید خصوصی است که به شما امکان ارسال می‌دهد؟" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Mode d’éclairage" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mode d’éclairage" + "value" : "Traduction française de: Just for you.\nIs it the private key that lets you send." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "लाइट मोड" + "value" : "सिर्फ़ आपके लिए.\nक्या यह प्राइवेट की है जिससे आप भेज सकते हैं?" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Mode Cahaya" + "value" : "Hanya untuk Anda.\nIni adalah kunci pribadi yang memungkinkan Anda mengirim." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Modalità luce" + "value" : "Solo per te.\nÈ la chiave privata che ti consente di inviare." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ライトモード" + "value" : "あなただけに。\n送信に使えるのは秘密鍵ですか?" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "라이트 모드" + "value" : "당신만을 위한 거예요.\n그게 바로 당신이 보낼 수 있게 해주는 개인 키인가요?" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਲਾਈਟ ਮੋਡ" + "value" : "ਸਿਰਫ਼ ਤੁਹਾਡੇ ਲਈ।\nਕੀ ਇਹ ਉਹ ਨਿੱਜੀ ਕੁੰਜੀ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਭੇਜਣ ਦਿੰਦੀ ਹੈ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Tryb podświetlenia" + "value" : "Tylko dla Ciebie.\nCzy to klucz prywatny, który pozwala Ci wysyłać?" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Modo de luz" + "value" : "Só para você.\nÉ a chave privada que permite o envio?" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Светлый режим" + "value" : "Только для тебя.\nЭто закрытый ключ, который позволяет тебе отправлять?" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ljusläge" + "value" : "Bara för dig. Är det den privata nyckeln som låter dig skicka." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Işık Modu" + "value" : "Sadece senin için.\nGöndermenizi sağlayan özel anahtar bu mu?" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Режим світла" + "value" : "Тільки для тебе.\nЦе закритий ключ, який дозволяє тобі надсилати." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "浅色模式" + "value" : "专为你准备。\n\n这是让你发送信息的私钥吗?" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "燈光模式" + "value" : "專為你準備。\n\n這是讓你發送訊息的私鑰嗎?" } } } }, - "Litecoin Display Unit" : { + "Ł %lf" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "وحدة عرض لايتكوين" + "value" : "Ł %lf" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Litecoin-Anzeigeeinheit" + "value" : "Ł %lf" } }, - "es" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Unidad de Visualización de Litecoin" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unidad de Visualización de Litecoin" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "واحد نمایش لایت کوین" + "value" : "Ł %lf" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "واحد نمایش لایت کوین" + "value" : "Ł %lf" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Unité d’affichage Litecoin" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unité d’affichage Litecoin" + "value" : "Ł %lf" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "लाइटकॉइन डिस्प्ले यूनिट" + "value" : "Ł %lf" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Unit Tampilan Litecoin" + "value" : "Ł %lf" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Unità di visualizzazione Litecoin" + "value" : "Ł %lf" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ライトコイン表示ユニット" + "value" : "Ł %lf" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "Litecoin 디스플레이 장치" + "value" : "Ł %lf" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਲਾਈਟਕੋਇਨ ਡਿਸਪਲੇ ਯੂਨਿਟ" + "value" : "Ł %lf" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wyświetlacz Litecoin" + "value" : "Ł %lf" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Unidade de exibição de Litecoin" + "value" : "Ł %lf" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Блок отображения Litecoin" + "value" : "Ł %lf" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Litecoin Displayenhet" + "value" : "Ł %lf" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Litecoin Görüntüleme Birimi" + "value" : "Ł %lf" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Блок відображення Litecoin" + "value" : "Ł %lf" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "莱特币显示单位" + "value" : "Ł %lf" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "萊特幣顯示單元" + "value" : "Ł %lf" } } } }, - "Loading Wallet" : { + "Last block: " : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "جارٍ تحميل المحفظة" + "value" : "المكوِّن الأخير: " } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Brieftasche laden" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cargando Billetera" + "value" : "Letzter Block: " } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Cargando Billetera" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "بارگذاری کیف پول" + "value" : "Último bloque: " } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "بارگذاری کیف پول" + "value" : "آخرین بلوک: " } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Chargement du portefeuille" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chargement du portefeuille" + "value" : "Dernier bloc : " } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "वॉलेट लोड हो रहा है" + "value" : "अंतिम ब्लॉक: " } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Memuat Dompet" + "value" : "Blok terakhir:" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Caricamento del portafoglio" + "value" : "Ultimo blocco: " } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ウォレットを読み込み中" + "value" : "最後のブロック:" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "지갑 로딩 중" + "value" : "마지막 블록: " } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਵਾਲਿਟ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + "value" : "ਆਖਰੀ ਬਲਾਕ: " } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ładowanie portfela" + "value" : "Ostatni blok: " } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Carregando a carteira" + "value" : "Último bloco: " } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Загрузка кошелька" + "value" : "Последний блок: " } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Laddar Plånbok" + "value" : "Sista kvarteret: " } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Cüzdan yükleniyor" + "value" : "Son blok: " } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Завантаження гаманця" + "value" : "Останній блок: " } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "加载钱包" + "value" : "最后一个方块:" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "加載錢包" + "value" : "最後一個方塊:" } } } }, - "Locale: %@" : { + "Let's go! 12 seed words." : { + "comment" : "Text displayed in a guide detail label on the last emoji triplet screen, explaining that they need to pick 12 seed words.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اللغة: %@" + "value" : "هيا بنا! ١٢ كلمة أساسية." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Schauplatz: %@" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Por favor, traduzca este texto fuente del inglés al español (Latinoamérica). Toda su respuesta debe ser una traducción, sin ninguna adición. \\nTexto fuente: Localidad: %@\\n Ahora, por favor escriba una traducción del texto fuente al español (Latinoamérica). Recuerde, usted es un traductor profesional y solo traduce el texto fuente. Traducción: " + "value" : "Los geht's! 12 Seed-Wörter." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Por favor, traduzca este texto fuente del inglés al español (Latinoamérica). Toda su respuesta debe ser una traducción, sin ninguna adición. \\nTexto fuente: Localidad: %@\\n Ahora, por favor escriba una traducción del texto fuente al español (Latinoamérica). Recuerde, usted es un traductor profesional y solo traduce el texto fuente. Traducción: " - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "محل: %@" + "value" : "¡Vamos! 12 palabras semilla." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "محل: %@" + "value" : "بریم! ۱۲ کلمه بازیابی." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Paramètres régionaux: %@" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Paramètres régionaux: %@" + "value" : "C'est parti ! 12 mots de récupération." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "स्थान:%@" + "value" : "चलिए शुरू करते हैं! 12 सीड शब्द।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Lokal: %@" + "value" : "Ayo! 12 kata benih." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Localizzazione:%@" + "value" : "Andiamo! 12 parole seme." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ロケール:%@" + "value" : "さあ行こう!シードワード12個。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "지역: %@" + "value" : "시작해요! 시드 단어 12개." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਸਥਾਨ:%@" + "value" : "ਚਲੋ! 12 ਬੀਜ ਸ਼ਬਦ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Lokalizacja: %@" + "value" : "Ruszamy! 12 słów klucz." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Local: %@" + "value" : "Vamos! 12 palavras-semente." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Местность: %@" + "value" : "Поехали! 12 сид-слов." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Språkinställning: %@" + "value" : "Nu kör vi! 12 seed-ord." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Yerel: %@" + "value" : "Hadi gidelim! 12 tohum kelime." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Локація:%@" + "value" : "Поїхали! 12 слів-сідів." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "区域设置:%@" + "value" : "出发吧!12个助记词。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "區域設定:%@" + "value" : "出發吧!12個助記詞。" } } } }, - "Lock" : { + "Light Mode" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "قفل" + "value" : "وضع الضوء" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Schloss" + "value" : "Heller Modus" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Bloquear" + "value" : "Modo Claro" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Bloquear" + "value" : "Modo Claro" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "قفل" + "value" : "حالت روشن" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "قفل" + "value" : "حالت روشن" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Serrure" + "value" : "Mode d’éclairage" } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "Serrure" + "value" : "Mode d’éclairage" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "ताला" + "value" : "लाइट मोड" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Mengunci" + "value" : "Mode Cahaya" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Serratura" + "value" : "Modalità luce" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ロック" + "value" : "ライトモード" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "잠금" + "value" : "라이트 모드" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਲਾਕ" + "value" : "ਲਾਈਟ ਮੋਡ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Blokada" + "value" : "Tryb podświetlenia" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Trava" + "value" : "Modo de luz" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Замок" + "value" : "Светлый режим" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Lås" + "value" : "Ljusläge" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Kilit" + "value" : "Işık Modu" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Замок" + "value" : "Режим світла" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "锁" + "value" : "浅色模式" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "鎖" + "value" : "燈光模式" + } + } + } + }, + "Litecoin Display Unit" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وحدة عرض لايتكوين" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Litecoin-Anzeigeeinheit" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unidad de Visualización de Litecoin" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unidad de Visualización de Litecoin" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "واحد نمایش لایت کوین" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "واحد نمایش لایت کوین" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unité d’affichage Litecoin" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unité d’affichage Litecoin" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लाइटकॉइन डिस्प्ले यूनिट" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unit Tampilan Litecoin" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unità di visualizzazione Litecoin" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ライトコイン表示ユニット" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Litecoin 디스플레이 장치" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਲਾਈਟਕੋਇਨ ਡਿਸਪਲੇ ਯੂਨਿਟ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyświetlacz Litecoin" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unidade de exibição de Litecoin" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Блок отображения Litecoin" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Litecoin Displayenhet" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Litecoin Görüntüleme Birimi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Блок відображення Litecoin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "莱特币显示单位" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "萊特幣顯示單元" + } + } + } + }, + "Loading Wallet" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جارٍ تحميل المحفظة" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brieftasche laden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cargando Billetera" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cargando Billetera" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "بارگذاری کیف پول" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "بارگذاری کیف پول" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chargement du portefeuille" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chargement du portefeuille" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "वॉलेट लोड हो रहा है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memuat Dompet" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Caricamento del portafoglio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ウォレットを読み込み中" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지갑 로딩 중" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਵਾਲਿਟ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ładowanie portfela" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carregando a carteira" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Загрузка кошелька" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laddar Plånbok" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cüzdan yükleniyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завантаження гаманця" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "加载钱包" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "加載錢包" + } + } + } + }, + "Locale: %@" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اللغة: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schauplatz: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por favor, traduzca este texto fuente del inglés al español (Latinoamérica). Toda su respuesta debe ser una traducción, sin ninguna adición. \\nTexto fuente: Localidad: %@\\n Ahora, por favor escriba una traducción del texto fuente al español (Latinoamérica). Recuerde, usted es un traductor profesional y solo traduce el texto fuente. Traducción: " + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por favor, traduzca este texto fuente del inglés al español (Latinoamérica). Toda su respuesta debe ser una traducción, sin ninguna adición. \\nTexto fuente: Localidad: %@\\n Ahora, por favor escriba una traducción del texto fuente al español (Latinoamérica). Recuerde, usted es un traductor profesional y solo traduce el texto fuente. Traducción: " + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "محل: %@" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "محل: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paramètres régionaux: %@" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paramètres régionaux: %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थान:%@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lokal: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Localizzazione:%@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ロケール:%@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지역: %@" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਸਥਾਨ:%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lokalizacja: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Local: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Местность: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Språkinställning: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yerel: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Локація:%@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "区域设置:%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "區域設定:%@" + } + } + } + }, + "Lock" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قفل" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schloss" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bloquear" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bloquear" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "قفل" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "قفل" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serrure" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serrure" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ताला" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mengunci" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serratura" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ロック" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "잠금" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਲਾਕ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blokada" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trava" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замок" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lås" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kilit" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замок" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "锁" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "鎖" + } + } + } + }, + "Long press & drag a word into place" : { + "comment" : "A description below the draggable seed words, instructing the user to drag them into place.", + "isCommentAutoGenerated" : true, + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اضغط مطولاً واسحب الكلمة إلى مكانها" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Langes Drücken und Ziehen eines Wortes an die richtige Stelle" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mantenga presionada y arrastre una palabra a su lugar" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "فشار طولانی و کشیدن یک کلمه به جای دلخواه" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez longuement et faites glisser un mot à l'endroit souhaité." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "किसी शब्द को देर तक दबाकर खींचें और उसे सही स्थान पर रखें" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tekan lama dan seret kata ke tempat yang diinginkan." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Premi a lungo e trascina una parola nella posizione desiderata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "単語を長押しして所定の位置にドラッグします" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "단어를 길게 누른 후 드래그하여 원하는 위치에 놓으세요." + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਕਿਸੇ ਸ਼ਬਦ ਨੂੰ ਦੇਰ ਤੱਕ ਦਬਾ ਕੇ ਰੱਖੋ ਅਤੇ ਘਸੀਟੋ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naciśnij i przytrzymaj słowo, przeciągając je w odpowiednie miejsce" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pressione e segure e arraste a palavra para o lugar desejado." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите и удерживайте слово, затем перетащите его на нужное место." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Långt tryck och dra ett ord till rätt plats" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Långt tryck och dra ett ord till rätt plats" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Тривале натискання та перетягування слова на потрібне місце" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "长按并拖动单词到指定位置" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "長按並拖曳單字到指定位置" + } + } + } + }, + "Lose your smartphone in a boating accident?\n\n" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هل فقدت هاتفك الذكي في حادث قارب؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haben Sie Ihr Smartphone bei einem Bootsunfall verloren?" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Perdió su teléfono inteligente en un accidente náutico?" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "گوشی هوشمند خود را در یک حادثه قایق‌سواری از دست می‌دهید؟" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Traduction française de: Lose your smartphone in a boating accident?\n\n" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "क्या बोटिंग एक्सीडेंट में आपका स्मार्टफोन खो गया?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kehilangan smartphone Anda dalam kecelakaan perahu?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai perso lo smartphone in un incidente in barca?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボート事故でスマートフォンを紛失しましたか?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "보트 사고로 스마트폰을 잃어버리셨나요?" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਕਿਸ਼ਤੀ ਹਾਦਸੇ ਵਿੱਚ ਤੁਹਾਡਾ ਸਮਾਰਟਫੋਨ ਗੁਆਚ ਗਿਆ?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zgubiłeś smartfon w wypadku na łodzi?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perdeu seu smartphone em um acidente náutico?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Потеряли смартфон в результате несчастного случая на воде?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förlorade du din smartphone i en båtolycka?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tekne kazasında akıllı telefonunuzu mu kaybettiniz?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Втратили смартфон під час аварії на човні?" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在船艇事故中丢失了智能手机?" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "在划船事故中遺失了智慧型手機?" + } + } + } + }, + "Maybe later (Skip)" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ربما لاحقًا (تخطي)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vielleicht später (Überspringen)" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tal vez más tarde (Omitir)" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "شاید بعداً (رد شدن)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Peut-être plus tard (Skip)" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "शायद बाद में (छोड़ें)" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mungkin nanti (Lewati)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forse più tardi (Salta)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "たぶん後で(スキップ)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아마 나중에요 (건너뛰기)" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Może później (pomiń)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Talvez mais tarde (pular)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Возможно, позже (Пропустить)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kanske senare (Skip)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Belki sonra (Skip)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Можливо пізніше (Пропустити)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "或许稍后(跳过)" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "或許稍後(跳過)" + } + } + } + }, + "Memo" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مذكرة" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "یادداشت" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mémo" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ज्ञापन" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メモ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메모" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਮੀਮੋ" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notatka" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memorando" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Памятка" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нотатка" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "备注" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "備忘錄" + } + } + } + }, + "Memo (Optional):" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مذكرة (اختياري):" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notiz (optional):" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo (Opcional):" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "یادداشت (اختیاری):" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mémo (optionnel) :" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "मेमो (वैकल्पिक):" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo (Opsional):" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo (opzionale):" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メモ(オプション):" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메모 (선택 사항):" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਮੀਮੋ (ਵਿਕਲਪਿਕ):" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notatka (opcjonalnie):" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memorando (Opcional):" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Памятка (необязательно):" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Memo (valfritt):" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not (İsteğe bağlı):" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Примітка (необов'язково):" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "备注(可选):" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "備註(可選):" } } } }, - "Long press & drag a word into place" : { - "comment" : "A description below the draggable seed words, instructing the user to drag them into place.", - "isCommentAutoGenerated" : true, + "Memo: " : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اضغط مطولاً واسحب الكلمة إلى مكانها" + "value" : "مذكرة: " } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Langes Drücken und Ziehen eines Wortes an die richtige Stelle" + "value" : "Memo: " } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Mantenga presionada y arrastre una palabra a su lugar" + "value" : "Memo: " } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "فشار طولانی و کشیدن یک کلمه به جای دلخواه" + "value" : "یادداشت: " } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Appuyez longuement et faites glisser un mot à l'endroit souhaité." + "value" : "Mémo : " } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "किसी शब्द को देर तक दबाकर खींचें और उसे सही स्थान पर रखें" + "value" : "ज्ञापन: " } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tekan lama dan seret kata ke tempat yang diinginkan." + "value" : "Memo:" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Premi a lungo e trascina una parola nella posizione desiderata" + "value" : "Memo: " } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "単語を長押しして所定の位置にドラッグします" + "value" : "メモ" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "단어를 길게 누른 후 드래그하여 원하는 위치에 놓으세요." + "value" : "메모: " } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਕਿਸੇ ਸ਼ਬਦ ਨੂੰ ਦੇਰ ਤੱਕ ਦਬਾ ਕੇ ਰੱਖੋ ਅਤੇ ਘਸੀਟੋ" + "value" : "ਮੀਮੋ: " } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Naciśnij i przytrzymaj słowo, przeciągając je w odpowiednie miejsce" + "value" : "Memo: " } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Pressione e segure e arraste a palavra para o lugar desejado." + "value" : "Memorando: " } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Нажмите и удерживайте слово, затем перетащите его на нужное место." + "value" : "Памятка: " } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Långt tryck och dra ett ord till rätt plats" + "value" : "Memo: " } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Långt tryck och dra ett ord till rätt plats" + "value" : "Not: " } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Тривале натискання та перетягування слова на потрібне місце" + "value" : "Примітка: " } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "长按并拖动单词到指定位置" + "value" : "备忘录:" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "長按並拖曳單字到指定位置" + "value" : "備忘錄:" } } } }, - "Lose your smartphone in a boating accident?\n\n" : { + "Money Sent!" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "هل فقدت هاتفك الذكي في حادث قارب؟" + "value" : "تم إرسال المال!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Haben Sie Ihr Smartphone bei einem Bootsunfall verloren?" + "value" : "Geld gesendet!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dinero Enviado!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "¿Perdió su teléfono inteligente en un accidente náutico?" + "value" : "¡Dinero Enviado!" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "پول ارسال شد!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "گوشی هوشمند خود را در یک حادثه قایق‌سواری از دست می‌دهید؟" + "value" : "پول ارسال شد!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Traduction française de: Lose your smartphone in a boating accident?\n\n" + "value" : "De l’argent envoyé !" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "De l’argent envoyé !" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "क्या बोटिंग एक्सीडेंट में आपका स्मार्टफोन खो गया?" + "value" : "पैसा भेजा गया!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kehilangan smartphone Anda dalam kecelakaan perahu?" + "value" : "Uang terkirim!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Hai perso lo smartphone in un incidente in barca?" + "value" : "Denaro inviato!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ボート事故でスマートフォンを紛失しましたか?" + "value" : "送金完了!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "보트 사고로 스마트폰을 잃어버리셨나요?" + "value" : "금액이 전송되었습니다!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਕਿਸ਼ਤੀ ਹਾਦਸੇ ਵਿੱਚ ਤੁਹਾਡਾ ਸਮਾਰਟਫੋਨ ਗੁਆਚ ਗਿਆ?" + "value" : "ਪੈਸੇ ਭੇਜੇ ਗਏ!" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zgubiłeś smartfon w wypadku na łodzi?" + "value" : "Pieniądze wysłane!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Perdeu seu smartphone em um acidente náutico?" + "value" : "Dinheiro enviado!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Потеряли смартфон в результате несчастного случая на воде?" + "value" : "Деньги отправлены!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Förlorade du din smartphone i en båtolycka?" + "value" : "Pengar skickade!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Tekne kazasında akıllı telefonunuzu mu kaybettiniz?" + "value" : "Para gönderildi!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Втратили смартфон під час аварії на човні?" + "value" : "Гроші надіслано!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "在船艇事故中丢失了智能手机?" + "value" : "款项已发送!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "在划船事故中遺失了智慧型手機?" + "value" : "錢已寄出!" } } } }, - "Maybe later (Skip)" : { + "Moved" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "ربما لاحقًا (تخطي)" + "value" : "تم النقل" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Vielleicht später (Überspringen)" + "value" : "Verschoben" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tal vez más tarde (Omitir)" + "value" : "Movido" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "شاید بعداً (رد شدن)" + "value" : "منتقل شد" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Peut-être plus tard (Skip)" + "value" : "Déplacé" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "शायद बाद में (छोड़ें)" + "value" : "स्थानांतरित" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Mungkin nanti (Lewati)" + "value" : "Dipindahkan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Forse più tardi (Salta)" + "value" : "Spostato" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "たぶん後で(スキップ)" + "value" : "移動" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "아마 나중에요 (건너뛰기)" + "value" : "이사" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" + "value" : "ਬਦਲਿਆ ਗਿਆ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Może później (pomiń)" + "value" : "Przeniesione" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Talvez mais tarde (pular)" + "value" : "Movido" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Возможно, позже (Пропустить)" + "value" : "Перемещено" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Kanske senare (Skip)" + "value" : "Flyttad" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Belki sonra (Skip)" + "value" : "Taşındı" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Можливо пізніше (Пропустити)" + "value" : "Переміщено" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "或许稍后(跳过)" + "value" : "已搬迁" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "或許稍後(跳過)" + "value" : "已搬遷" } } } }, - "Memo" : { + "Moved %1@" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مذكرة" + "value" : "نُقِل %1@" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Memo" + "value" : "Verschoben %1@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Movido %1@" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Memo" + "value" : "Movido %1@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "انتقال یافت %1@" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "یادداشت" + "value" : "انتقال یافت %1@" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Mémo" + "value" : "Déplacé  %1@" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déplacé  %1@" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "ज्ञापन" + "value" : "%1@ स्थानांतरित किया गया" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Memo" + "value" : "Pindah %1@" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Memo" + "value" : "Spostato %1@" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "メモ" + "value" : "移動しました %1@" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "메모" + "value" : "< b > % 1 @ 이동함" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੀਮੋ" + "value" : "%1@ ਨੂੰ ਤਬਦੀਲ ਕੀਤਾ ਗਿਆ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Notatka" + "value" : "Przeniesiono %1@" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Memorando" + "value" : "Movido %1@" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Памятка" + "value" : "Перемещено %1@" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Memo" + "value" : "Flyttade %1@" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Memo" + "value" : "%1@ taşındı" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Нотатка" + "value" : "Переміщено %1@" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "备注" + "value" : "移动 %1@" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "備忘錄" + "value" : "已移動%1@" } } } }, - "Memo (Optional):" : { + "MY BALANCE" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مذكرة (اختياري):" + "value" : "رصيدي" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Notiz (optional):" + "value" : "MEIN KONTOSTAND" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Memo (Opcional):" + "value" : "MI BALANCE" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "یادداشت (اختیاری):" + "value" : "موجودی من" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Mémo (optionnel) :" + "value" : "MON SOLDE" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "मेमो (वैकल्पिक):" + "value" : "मेरा बैलेंस" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Memo (Opsional):" + "value" : "SALDO SAYA" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Memo (opzionale):" + "value" : "IL MIO EQUILIBRIO" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "メモ(オプション):" + "value" : "マイ・バランス" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "메모 (선택 사항):" + "value" : "내 균형" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੀਮੋ (ਵਿਕਲਪਿਕ):" + "value" : "ਮੇਰਾ ਸੰਤੁਲਨ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Notatka (opcjonalnie):" + "value" : "MOJA RÓWNOWAGA" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Memorando (Opcional):" + "value" : "MEU SALDO" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Памятка (необязательно):" + "value" : "МОЙ БАЛАНС" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Memo (valfritt):" + "value" : "MIN BALANS" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Not (İsteğe bağlı):" + "value" : "BENİM DENGEM" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Примітка (необов'язково):" + "value" : "МІЙ БАЛАНС" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "备注(可选):" + "value" : "我的余额" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "備註(可選):" + "value" : "我的餘額" } } } }, - "Memo: " : { + "Network fees" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مذكرة: " + "value" : "رسوم الشبكة" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Memo: " + "value" : "Netzwerkgebühren" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Memo: " + "value" : "Tarifas de red" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "یادداشت: " + "value" : "کارمزد شبکه" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Mémo : " + "value" : "Frais de réseau" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "ज्ञापन: " + "value" : "नेटवर्क शुल्क" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Memo:" + "value" : "Biaya jaringan" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Memo: " + "value" : "Costi di rete" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "メモ" + "value" : "ネットワーク使用料" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "메모: " + "value" : "네트워크 요금" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੀਮੋ: " + "value" : "ਨੈੱਟਵਰਕ ਫੀਸ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Memo: " + "value" : "Opłaty sieciowe" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Memorando: " + "value" : "Tarifas de rede" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Памятка: " + "value" : "Сетевые сборы" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Memo: " + "value" : "Nätverksavgifter" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Not: " + "value" : "Ağ ücretleri" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Примітка: " + "value" : "Комісії мережі" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "备忘录:" + "value" : "网络费用" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "備忘錄:" + "value" : "網路費用" } } } }, - "Money Sent!" : { + "New address copied" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تم إرسال المال!" + "value" : "تم نسخ العنوان الجديد" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Geld gesendet!" + "value" : "Neue Adresse kopiert" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Dinero Enviado!" + "value" : "Nueva dirección copiada" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "¡Dinero Enviado!" + "value" : "Nueva dirección copiada" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "پول ارسال شد!" + "value" : "آدرس جدید کپی شد" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "پول ارسال شد!" + "value" : "آدرس جدید کپی شد" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "De l’argent envoyé !" + "value" : "Nouvelle adresse copiée" } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "De l’argent envoyé !" + "value" : "Nouvelle adresse copiée" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "पैसा भेजा गया!" + "value" : "नया पता कॉपी किया गया" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Uang terkirim!" + "value" : "Alamat baru disalin" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Denaro inviato!" + "value" : "Nuovo indirizzo copiato" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "送金完了!" + "value" : "新しいアドレスをコピーしました" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "금액이 전송되었습니다!" + "value" : "새 주소 복사 완료" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਪੈਸੇ ਭੇਜੇ ਗਏ!" + "value" : "ਨਵਾਂ ਪਤਾ ਕਾਪੀ ਕੀਤਾ ਗਿਆ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Pieniądze wysłane!" + "value" : "Skopiowano nowy adres" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Dinheiro enviado!" + "value" : "Novo endereço copiado" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Деньги отправлены!" + "value" : "Новый адрес скопирован" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Pengar skickade!" + "value" : "Ny adress kopierad" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Para gönderildi!" + "value" : "Yeni adres kopyalandı" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Гроші надіслано!" + "value" : "Нову адресу скопійовано" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "款项已发送!" + "value" : "新地址已复制" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "錢已寄出!" + "value" : "已複製新地址" } } } }, - "Moved" : { + "New LTC Address" : { + "comment" : "A label displayed above the new Litecoin address.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تم النقل" + "value" : "عنوان LTC الجديد" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Verschoben" + "value" : "Neue LTC-Adresse" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Movido" + "value" : "Nueva dirección LTC" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "منتقل شد" + "value" : "آدرس جدید LTC" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Déplacé" + "value" : "Nouvelle adresse de SLD" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "स्थानांतरित" + "value" : "नया एलटीसी पता" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Dipindahkan" + "value" : "Alamat LTC Baru" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Spostato" + "value" : "Nuovo indirizzo LTC" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "移動" + "value" : "新しいLTCアドレス" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이사" + "value" : "새로운 장지 요원 주소" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਬਦਲਿਆ ਗਿਆ" + "value" : "ਨਵਾਂ LTC ਪਤਾ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przeniesione" + "value" : "Nowy adres LTC" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Movido" + "value" : "Novo endereço da LTC" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Перемещено" + "value" : "Новый адрес LTC" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Flyttad" + "value" : "Ny LTC-adress" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Taşındı" + "value" : "Yeni LTC Adresi" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Переміщено" + "value" : "Нова адреса LTC" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "已搬迁" + "value" : "新LTC地址" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "已搬遷" + "value" : "新LTC地址" } } } }, - "Moved %1@" : { + "No internet connection found. Check your connection and try again." : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نُقِل %1@" + "value" : "لم يتم العثور على اتصال بالإنترنت. تحقق من الاتصال وحاول مرة أخرى." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Verschoben %1@" + "value" : "Keine Internetverbindung gefunden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Movido %1@" + "value" : "No se encontró conexión a internet. Verifica tu conexión e inténtalo de nuevo." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Movido %1@" + "value" : "No se encontró conexión a internet. Verifica tu conexión e inténtalo de nuevo." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "انتقال یافت %1@" + "value" : "اتصال اینترنت یافت نشد. اتصال خود را بررسی کنید و دوباره تلاش کنید." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "انتقال یافت %1@" + "value" : "اتصال اینترنت یافت نشد. اتصال خود را بررسی کنید و دوباره تلاش کنید." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Déplacé  %1@" + "value" : "Aucune connexion Internet n’a été trouvée. Vérifiez votre connexion et réessayez." } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "Déplacé  %1@" + "value" : "Aucune connexion Internet n’a été trouvée. Vérifiez votre connexion et réessayez." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "%1@ स्थानांतरित किया गया" + "value" : "कोई इंटरनेट कनेक्शन नहीं मिला. अपना कनेक्शन जांचें और पुनः प्रयास करें." } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pindah %1@" + "value" : "Tidak ditemukan koneksi internet. Periksa koneksi Anda dan coba lagi." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Spostato %1@" + "value" : "Nessuna connessione Internet trovata. Controlla la connessione e riprova." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "移動しました %1@" + "value" : "インターネット接続が見つかりません接続を確認して、もう一度試してください。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "< b > % 1 @ 이동함" + "value" : "인터넷 연결을 찾을 수 없습니다. 연결을 확인하고 다시 시도하세요." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "%1@ ਨੂੰ ਤਬਦੀਲ ਕੀਤਾ ਗਿਆ" + "value" : "ਕੋਈ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਮਿਲਿਆ। ਆਪਣੇ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Przeniesiono %1@" + "value" : "Nie znaleziono połączenia internetowego. Sprawdź połączenie i spróbuj ponownie." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Movido %1@" + "value" : "Nenhuma conexão com a Internet foi encontrada. Verifique sua conexão e tente novamente." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Перемещено %1@" + "value" : "Подключение к интернету не найдено. Проверьте подключение и попробуйте снова." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Flyttade %1@" + "value" : "Ingen internetanslutning hittad. Kontrollera din anslutning och försök igen." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "%1@ taşındı" + "value" : "İnternet bağlantısı bulunamadı. Bağlantınızı kontrol edin ve tekrar deneyin." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Переміщено %1@" + "value" : "Не знайдено підключення до Інтернету. Перевірте з’єднання та спробуйте ще раз." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "移动 %1@" + "value" : "未找到互联网连接。请检查您的连接并重试。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "已移動%1@" + "value" : "未找到網路連線。檢查您的連線並重試。" } } } }, - "MY BALANCE" : { + "No Prompt" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "رصيدي" + "value" : "لا توجد مطالبة" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "MEIN KONTOSTAND" + "value" : "Keine Aufforderung" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "MI BALANCE" + "value" : "No Prompt" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "موجودی من" + "value" : "بدون اعلان" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "MON SOLDE" + "value" : "Pas d'invite" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "मेरा बैलेंस" + "value" : "मुझे अनुवाद करने के लिए कोई स्रोत पाठ प्राप्त नहीं हुआ है।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "SALDO SAYA" + "value" : "Tanpa Prompt" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "IL MIO EQUILIBRIO" + "value" : "Nessun prompt" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "マイ・バランス" + "value" : "プロンプトなし" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "내 균형" + "value" : "주제 없음" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਮੇਰਾ ਸੰਤੁਲਨ" + "value" : "ਕੋਈ ਪ੍ਰੋਂਪਟ ਨਹੀਂ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "MOJA RÓWNOWAGA" + "value" : "Brak monitu" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "MEU SALDO" + "value" : "Sem instruções" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "МОЙ БАЛАНС" + "value" : "Нет подсказки" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "MIN BALANS" + "value" : "Ingen uppmaning" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "BENİM DENGEM" + "value" : "İstem Yok" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "МІЙ БАЛАНС" + "value" : "Без запиту" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "我的余额" + "value" : "无提示" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "我的餘額" + "value" : "無提示" } } } }, - "Network fees" : { + "Nothing yet. Top up now!" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "رسوم الشبكة" + "value" : "لا شيء حتى الآن. قم بتعبئة الرصيد الآن!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Netzwerkgebühren" + "value" : "Noch nichts. Jetzt aufladen!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Tarifas de red" + "value" : "Todavía nada. ¡Recarga ya!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "کارمزد شبکه" + "value" : "هنوز چیزی نیست. الان شارژ کنید!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Frais de réseau" + "value" : "Rien pour l'instant. Rechargez maintenant !" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "नेटवर्क शुल्क" + "value" : "अभी तक कुछ नहीं। अभी टॉप अप करें!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Biaya jaringan" + "value" : "Belum ada apa-apa. Isi ulang sekarang!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Costi di rete" + "value" : "Ancora niente. Ricaricate subito!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ネットワーク使用料" + "value" : "まだ何もない。今すぐ補給を!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "네트워크 요금" + "value" : "아직 아무것도 없어. 지금 바로 채워!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਨੈੱਟਵਰਕ ਫੀਸ" + "value" : "ਅਜੇ ਕੁਝ ਨਹੀਂ। ਹੁਣੇ ਟੌਪ ਅੱਪ ਕਰੋ!" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Opłaty sieciowe" + "value" : "Jeszcze nic. Doładuj teraz!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Tarifas de rede" + "value" : "Nada ainda. Recarregue agora!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Сетевые сборы" + "value" : "Пока ничего. Пополнить сейчас!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Nätverksavgifter" + "value" : "Ingenting ännu. Fyll på nu!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Ağ ücretleri" + "value" : "Henüz bir şey yok. Hemen doldurun!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Комісії мережі" + "value" : "Поки що нічого. Поповніть зараз!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "网络费用" + "value" : "目前还没有消息。立即充值!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "網路費用" + "value" : "目前還沒有消息。立即儲值!" } } } }, - "New address copied" : { + "Now pick 3 emojis to get to 9" : { + "comment" : "Guide detail text for the third emoji triplet guide screen.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تم نسخ العنوان الجديد" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neue Adresse kopiert" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nueva dirección copiada" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nueva dirección copiada" + "value" : "الآن اختر ٣ رموز تعبيرية للوصول إلى ٩" } }, - "fa" : { + "de" : { "stringUnit" : { "state" : "translated", - "value" : "آدرس جدید کپی شد" + "value" : "Wähle jetzt 3 Emojis, um auf 9 zu kommen" } }, - "fa-IR" : { + "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "آدرس جدید کپی شد" + "value" : "Ahora elige 3 emojis para llegar a 9" } }, - "fr" : { + "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "Nouvelle adresse copiée" + "value" : "حالا ۳ شکلک انتخاب کن تا به ۹ برسی" } }, - "fr-FR" : { + "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Nouvelle adresse copiée" + "value" : "Choisissez maintenant 3 emojis pour en avoir 9" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "नया पता कॉपी किया गया" + "value" : "अब 9 तक पहुँचने के लिए 3 इमोजी चुनें" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Alamat baru disalin" + "value" : "Sekarang pilih 3 emoji untuk mencapai 9" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Nuovo indirizzo copiato" + "value" : "Ora scegli 3 emoji per arrivare a 9" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "新しいアドレスをコピーしました" + "value" : "次に3つの絵文字を選んで9つにしよう" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "새 주소 복사 완료" + "value" : "이제 9개가 되도록 이모지 3개를 선택하세요" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਨਵਾਂ ਪਤਾ ਕਾਪੀ ਕੀਤਾ ਗਿਆ" + "value" : "ਹੁਣ 9 ਤੱਕ ਪਹੁੰਚਣ ਲਈ 3 ਇਮੋਜੀ ਚੁਣੋ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Skopiowano nowy adres" + "value" : "Teraz wybierz 3 emotikony, aby osiągnąć 9" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Novo endereço copiado" + "value" : "Agora escolha 3 emojis para chegar a 9" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Новый адрес скопирован" + "value" : "Теперь выберите 3 эмодзи, чтобы дойти до 9" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ny adress kopierad" + "value" : "Välj nu 3 emojis för att komma till 9" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Yeni adres kopyalandı" + "value" : "Şimdi 9'a ulaşmak için 3 emoji seç" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Нову адресу скопійовано" + "value" : "Тепер обери 3 емодзі, щоб дійти до 9" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "新地址已复制" + "value" : "现在选择3个表情符号以达到9个" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "已複製新地址" + "value" : "現在選擇3個表情符號以達到9個" } } } }, - "New LTC Address" : { - "comment" : "A label displayed above the new Litecoin address.", + "Now you know the deal." : { + "comment" : "Text displayed in a guide detail label when on the second emoji triplet.", "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "عنوان LTC الجديد" + "value" : "الآن أنت تعرف الأمر." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Neue LTC-Adresse" + "value" : "Jetzt weißt du, worum es geht." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Nueva dirección LTC" + "value" : "Ahora ya sabes cómo funciona." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "آدرس جدید LTC" + "value" : "حالا می‌دونی ماجرا چیه." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Nouvelle adresse de SLD" + "value" : "Maintenant tu connais le principe." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "नया एलटीसी पता" + "value" : "अब आप समझ गए हैं।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Alamat LTC Baru" + "value" : "Sekarang kamu sudah tahu caranya." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Nuovo indirizzo LTC" + "value" : "Ora sai come funziona." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "新しいLTCアドレス" + "value" : "もうわかったでしょう。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "새로운 장지 요원 주소" + "value" : "이제 어떻게 하는지 알겠죠." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਨਵਾਂ LTC ਪਤਾ" + "value" : "ਹੁਣ ਤੁਸੀਂ ਸਮਝ ਗਏ ਹੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nowy adres LTC" + "value" : "Teraz już wiesz, o co chodzi." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Novo endereço da LTC" + "value" : "Agora você já sabe como funciona." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Новый адрес LTC" + "value" : "Теперь ты знаешь, как это работает." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ny LTC-adress" + "value" : "Nu vet du hur det funkar." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Yeni LTC Adresi" + "value" : "Artık nasıl olduğunu biliyorsun." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Нова адреса LTC" + "value" : "Тепер ти знаєш, як це працює." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "新LTC地址" + "value" : "现在你明白了吧。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "新LTC地址" + "value" : "現在你明白了吧。" } } } }, - "No internet connection found. Check your connection and try again." : { + "Ok" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "لم يتم العثور على اتصال بالإنترنت. تحقق من الاتصال وحاول مرة أخرى." + "value" : "حسنًا" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Keine Internetverbindung gefunden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut." + "value" : "Ok" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "No se encontró conexión a internet. Verifica tu conexión e inténtalo de nuevo." + "value" : "Ok" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No se encontró conexión a internet. Verifica tu conexión e inténtalo de nuevo." + "value" : "Vale" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "اتصال اینترنت یافت نشد. اتصال خود را بررسی کنید و دوباره تلاش کنید." + "value" : "باشه" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "اتصال اینترنت یافت نشد. اتصال خود را بررسی کنید و دوباره تلاش کنید." + "value" : "باشه" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Aucune connexion Internet n’a été trouvée. Vérifiez votre connexion et réessayez." + "value" : "D’accord" } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "Aucune connexion Internet n’a été trouvée. Vérifiez votre connexion et réessayez." + "value" : "D’accord" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "कोई इंटरनेट कनेक्शन नहीं मिला. अपना कनेक्शन जांचें और पुनः प्रयास करें." + "value" : "ठीक है" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tidak ditemukan koneksi internet. Periksa koneksi Anda dan coba lagi." + "value" : "Baiklah." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Nessuna connessione Internet trovata. Controlla la connessione e riprova." + "value" : "OK" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "インターネット接続が見つかりません接続を確認して、もう一度試してください。" + "value" : "わかりました" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "인터넷 연결을 찾을 수 없습니다. 연결을 확인하고 다시 시도하세요." + "value" : "확인" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਕੋਈ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ ਮਿਲਿਆ। ਆਪਣੇ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" + "value" : "ਠੀਕ ਹੈ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie znaleziono połączenia internetowego. Sprawdź połączenie i spróbuj ponownie." + "value" : "Ok" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Nenhuma conexão com a Internet foi encontrada. Verifique sua conexão e tente novamente." + "value" : "Ok" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Подключение к интернету не найдено. Проверьте подключение и попробуйте снова." + "value" : "Хорошо" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ingen internetanslutning hittad. Kontrollera din anslutning och försök igen." + "value" : "Ok" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "İnternet bağlantısı bulunamadı. Bağlantınızı kontrol edin ve tekrar deneyin." + "value" : "Tamam." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Не знайдено підключення до Інтернету. Перевірте з’єднання та спробуйте ще раз." + "value" : "Гаразд" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "未找到互联网连接。请检查您的连接并重试。" + "value" : "好的" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "未找到網路連線。檢查您的連線並重試。" + "value" : "好的" } } } }, - "No Prompt" : { + "OK" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "لا توجد مطالبة" + "value" : "حسنًا" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Keine Aufforderung" + "value" : "OK" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No Prompt" + "value" : "OK" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "بدون اعلان" + "value" : "باشه" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Pas d'invite" + "value" : "D’ACCORD" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "मुझे अनुवाद करने के लिए कोई स्रोत पाठ प्राप्त नहीं हुआ है।" + "value" : "ठीक है" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Tanpa Prompt" + "value" : "BAIKLAH." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Nessun prompt" + "value" : "OK" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "プロンプトなし" + "value" : "OK" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "주제 없음" + "value" : "그래" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਕੋਈ ਪ੍ਰੋਂਪਟ ਨਹੀਂ" + "value" : "ਠੀਕ ਹੈ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Brak monitu" + "value" : "OK" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Sem instruções" + "value" : "OK" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Нет подсказки" + "value" : "Хорошо" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ingen uppmaning" + "value" : "OK" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "İstem Yok" + "value" : "TAMAM." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Без запиту" + "value" : "Гаразд" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无提示" + "value" : "好的" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "無提示" + "value" : "好的" } } } }, - "Nothing yet. Top up now!" : { + "Paper Key" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "لا شيء حتى الآن. قم بتعبئة الرصيد الآن!" + "value" : "مفتاح الورق" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Noch nichts. Jetzt aufladen!" + "value" : "Papierschlüssel" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Llave de Papel" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Todavía nada. ¡Recarga ya!" + "value" : "Llave de Papel" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کلید کاغذی" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "هنوز چیزی نیست. الان شارژ کنید!" + "value" : "کلید کاغذی" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Rien pour l'instant. Rechargez maintenant !" + "value" : "Clé en papier" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clé en papier" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "अभी तक कुछ नहीं। अभी टॉप अप करें!" + "value" : "कागज़ की कुंजी" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Belum ada apa-apa. Isi ulang sekarang!" + "value" : "Kunci Kertas" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Ancora niente. Ricaricate subito!" + "value" : "Chiave di carta" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "まだ何もない。今すぐ補給を!" + "value" : "紙のキー" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "아직 아무것도 없어. 지금 바로 채워!" + "value" : "용지 키" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਅਜੇ ਕੁਝ ਨਹੀਂ। ਹੁਣੇ ਟੌਪ ਅੱਪ ਕਰੋ!" + "value" : "ਕਾਗਜ਼ ਦੀ ਚਾਬੀ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Jeszcze nic. Doładuj teraz!" + "value" : "Klucz do papieru" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Nada ainda. Recarregue agora!" + "value" : "Chave de papel" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Пока ничего. Пополнить сейчас!" + "value" : "Бумажный ключ" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ingenting ännu. Fyll på nu!" + "value" : "Pappersnyckel" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Henüz bir şey yok. Hemen doldurun!" + "value" : "Kağıt Anahtar" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Поки що нічого. Поповніть зараз!" + "value" : "Паперовий ключ" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "目前还没有消息。立即充值!" + "value" : "纸钥匙" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "目前還沒有消息。立即儲值!" + "value" : "紙鑰匙" } } } }, - "Ok" : { + "Paper Key Set" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حسنًا" + "value" : "مجموعة مفاتيح الورق" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ok" + "value" : "Papierschlüsselsatz" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Ok" + "value" : "Conjunto de Llaves de Papel" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Vale" + "value" : "Conjunto de Llaves de Papel" } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "باشه" + "value" : "مجموعه کلید کاغذی" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "باشه" + "value" : "مجموعه کلید کاغذی" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "D’accord" + "value" : "Jeu de clés en papier" } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "D’accord" + "value" : "Jeu de clés en papier" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "ठीक है" + "value" : "कागज़ कुंजी सेट" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Baiklah." + "value" : "Set Kunci Kertas" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "Set di chiavi di carta" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "わかりました" + "value" : "紙鍵セット" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "확인" + "value" : "종이 키 세트" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਠੀਕ ਹੈ" + "value" : "ਕਾਗਜ਼ੀ ਚਾਬੀ ਸੈੱਟ" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Ok" + "value" : "Zestaw kluczy papierowych" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Ok" + "value" : "Conjunto de chaves de papel" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Хорошо" + "value" : "Набор бумажных ключей" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ok" + "value" : "Pappersnyckelsats" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Tamam." + "value" : "Kağıt Anahtar Seti" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Гаразд" + "value" : "Набір паперових ключів" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "好的" + "value" : "纸质密钥集" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "好的" + "value" : "紙質鑰匙套裝" } } } }, - "OK" : { + "Pick a passcode to unlock your Brainwallet. Not a phone lock code! Make it different. Make it cool!" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حسنًا" + "value" : "اختر رمز مرور لفتح محفظة الدماغ الخاصة بك. ليس رمز قفل الهاتف! اجعلها مختلفة. اجعلها رائعة!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "Wählen Sie einen Passcode, um Ihr Brainwallet zu entsperren. Kein Telefon-Sperrcode! Mach es anders. Mach es cool!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "Elige una contraseña para desbloquear tu Brainwallet. ¡No es un código de bloqueo de teléfono! Hazlo diferente. ¡Hazlo genial!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "باشه" + "value" : "یک رمز عبور برای باز کردن قفل Brainwallet خود انتخاب کنید. نه کد قفل تلفن! آن را متفاوت کنید. آن را جالب کنید!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "D’ACCORD" + "value" : "Choisissez un mot de passe pour déverrouiller votre Brainwallet. Pas un code de verrouillage de téléphone ! Faites en sorte que ce soit différent. Rendez-le cool !" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "ठीक है" + "value" : "अपने ब्रेनवॉलेट को अनलॉक करने के लिए पासकोड चुनें। यह कोई फ़ोन लॉक कोड नहीं है! इसे अलग बनाओ. इसे ठंडा बनाओ!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "BAIKLAH." + "value" : "Pilih kode sandi untuk membuka kunci Brainwallet Anda. Bukan kode kunci telepon! Buatlah berbeda. Buatlah keren!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "Scegli un codice di accesso per sbloccare il tuo Brainwallet. Non è un codice di blocco del telefono! Rendila diversa. Rendila fantastica!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "パスコードを選んでブレインウォレットのロックを解除してください。電話のロックコードではない!他とは違うものにする。クールにしてくれ!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "그래" + "value" : "브레인 지갑을 잠금 해제하는 비밀번호를 선택하세요. 전화 잠금 코드가 아니야! 다르게 만들어. 멋지게 만들어!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਠੀਕ ਹੈ" + "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "Wybierz kod, aby odblokować Brainwallet. Nie kod blokady telefonu! Zrób to inaczej. Niech będzie super!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "Escolha uma senha para desbloquear seu Brainwallet. Não é um código de bloqueio telefônico! Torne-o diferente. Faça com que seja legal!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Хорошо" + "value" : "Выберите код доступа для разблокировки вашего Brainwallet. Это не код блокировки телефона! Сделай это по-другому. Сделай это круто!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "OK" + "value" : "Välj en lösenkod för att låsa upp din Brainwallet. Inte en kod för telefonlås! Gör det annorlunda. Gör det coolt!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "TAMAM." + "value" : "Brainwallet'ınızın kilidini açmak için bir şifre seçin. Telefon kilit kodu değil! Farklı olsun. Havalı olsun!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Гаразд" + "value" : "Виберіть пароль, щоб розблокувати свій Brainwallet. Не код блокування телефону! Зробіть це інакше. Зробіть це круто!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "好的" + "value" : "选择一个密码来解锁你的脑钱包。这不是手机锁屏密码!让它与众不同。让它酷炫起来!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "好的" + "value" : "選擇一個密碼來解鎖你的腦錢包。這不是手機鎖定螢幕密碼!讓它與眾不同。讓它酷炫!" } } } }, - "Paper Key" : { + "Pick emojis that mean something personal to you." : { + "comment" : "Text displayed in a guide to help users pick emojis that are meaningful to them.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مفتاح الورق" + "value" : "اختر رموزاً تعبيرية ذات معنى شخصي لك." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Papierschlüssel" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Llave de Papel" + "value" : "Wähle Emojis, die für dich eine persönliche Bedeutung haben." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Llave de Papel" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "کلید کاغذی" + "value" : "Elige emojis que tengan un significado personal para ti." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "کلید کاغذی" + "value" : "شکلک‌هایی انتخاب کن که برات معنای شخصی دارن." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Clé en papier" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clé en papier" + "value" : "Choisissez des emojis qui ont une signification personnelle pour vous." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "कागज़ की कुंजी" + "value" : "ऐसे इमोजी चुनें जो आपके लिए व्यक्तिगत अर्थ रखते हों।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Kunci Kertas" + "value" : "Pilih emoji yang memiliki makna pribadi bagimu." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Chiave di carta" + "value" : "Scegli emoji che abbiano un significato personale per te." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "紙のキー" + "value" : "自分にとって個人的な意味を持つ絵文字を選んでください。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "용지 키" + "value" : "개인적으로 의미 있는 이모지를 선택하세요." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਕਾਗਜ਼ ਦੀ ਚਾਬੀ" + "value" : "ਅਜਿਹੇ ਇਮੋਜੀ ਚੁਣੋ ਜੋ ਤੁਹਾਡੇ ਲਈ ਨਿੱਜੀ ਮਹੱਤਵ ਰੱਖਦੇ ਹੋਣ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Klucz do papieru" + "value" : "Wybierz emotikony, które mają dla ciebie osobiste znaczenie." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Chave de papel" + "value" : "Escolha emojis que tenham um significado pessoal para você." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Бумажный ключ" + "value" : "Выбери эмодзи, которые что-то значат лично для тебя." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Pappersnyckel" + "value" : "Välj emojis som betyder något personligt för dig." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Kağıt Anahtar" + "value" : "Senin için kişisel bir anlam taşıyan emojiler seç." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Паперовий ключ" + "value" : "Обери емодзі, які щось означають особисто для тебе." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "纸钥匙" + "value" : "选择对你有个人意义的表情符号。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "紙鑰匙" + "value" : "選擇對你有個人意義的表情符號。" } } } }, - "Paper Key Set" : { + "Pick your next 3!" : { + "comment" : "Guide detail text for the third emoji triplet.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مجموعة مفاتيح الورق" + "value" : "اختر الـ٣ التالية!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Papierschlüsselsatz" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Conjunto de Llaves de Papel" + "value" : "Wähle deine nächsten 3!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Conjunto de Llaves de Papel" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "مجموعه کلید کاغذی" + "value" : "¡Elige tus próximos 3!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "مجموعه کلید کاغذی" + "value" : "۳ تای بعدی‌ات رو انتخاب کن!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Jeu de clés en papier" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jeu de clés en papier" + "value" : "Choisissez vos 3 prochains !" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "कागज़ कुंजी सेट" + "value" : "अपने अगले 3 चुनें!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Set Kunci Kertas" + "value" : "Pilih 3 berikutnya!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Set di chiavi di carta" + "value" : "Scegli i tuoi prossimi 3!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "紙鍵セット" + "value" : "次の3つを選ぼう!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "종이 키 세트" + "value" : "다음 3개를 선택하세요!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਕਾਗਜ਼ੀ ਚਾਬੀ ਸੈੱਟ" + "value" : "ਆਪਣੇ ਅਗਲੇ 3 ਚੁਣੋ!" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Zestaw kluczy papierowych" + "value" : "Wybierz kolejne 3!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Conjunto de chaves de papel" + "value" : "Escolha seus próximos 3!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Набор бумажных ключей" + "value" : "Выбери следующие 3!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Pappersnyckelsats" + "value" : "Välj dina nästa 3!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Kağıt Anahtar Seti" + "value" : "Sonraki 3'ünü seç!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Набір паперових ключів" + "value" : "Обери наступні 3!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "纸质密钥集" + "value" : "选择你的下3个!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "紙質鑰匙套裝" + "value" : "選擇你的下3個!" } } } }, - "Pick a passcode to unlock your Brainwallet. Not a phone lock code! Make it different. Make it cool!" : { + "Pick your next emojis." : { + "comment" : "Guide detail text for the third emoji triplet.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "اختر رمز مرور لفتح محفظة الدماغ الخاصة بك. ليس رمز قفل الهاتف! اجعلها مختلفة. اجعلها رائعة!" + "value" : "اختر رموزك التعبيرية التالية." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Wählen Sie einen Passcode, um Ihr Brainwallet zu entsperren. Kein Telefon-Sperrcode! Mach es anders. Mach es cool!" + "value" : "Wähle deine nächsten Emojis." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Elige una contraseña para desbloquear tu Brainwallet. ¡No es un código de bloqueo de teléfono! Hazlo diferente. ¡Hazlo genial!" + "value" : "Elige tus próximos emojis." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "یک رمز عبور برای باز کردن قفل Brainwallet خود انتخاب کنید. نه کد قفل تلفن! آن را متفاوت کنید. آن را جالب کنید!" + "value" : "شکلک‌های بعدی‌ات رو انتخاب کن." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Choisissez un mot de passe pour déverrouiller votre Brainwallet. Pas un code de verrouillage de téléphone ! Faites en sorte que ce soit différent. Rendez-le cool !" + "value" : "Choisissez vos prochains emojis." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "अपने ब्रेनवॉलेट को अनलॉक करने के लिए पासकोड चुनें। यह कोई फ़ोन लॉक कोड नहीं है! इसे अलग बनाओ. इसे ठंडा बनाओ!" + "value" : "अपने अगले इमोजी चुनें।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Pilih kode sandi untuk membuka kunci Brainwallet Anda. Bukan kode kunci telepon! Buatlah berbeda. Buatlah keren!" + "value" : "Pilih emoji berikutnya." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Scegli un codice di accesso per sbloccare il tuo Brainwallet. Non è un codice di blocco del telefono! Rendila diversa. Rendila fantastica!" + "value" : "Scegli le tue prossime emoji." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "パスコードを選んでブレインウォレットのロックを解除してください。電話のロックコードではない!他とは違うものにする。クールにしてくれ!" + "value" : "次の絵文字を選んでください。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "브레인 지갑을 잠금 해제하는 비밀번호를 선택하세요. 전화 잠금 코드가 아니야! 다르게 만들어. 멋지게 만들어!" + "value" : "다음 이모지를 선택하세요." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" + "value" : "ਆਪਣੇ ਅਗਲੇ ਇਮੋਜੀ ਚੁਣੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wybierz kod, aby odblokować Brainwallet. Nie kod blokady telefonu! Zrób to inaczej. Niech będzie super!" + "value" : "Wybierz kolejne emotikony." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Escolha uma senha para desbloquear seu Brainwallet. Não é um código de bloqueio telefônico! Torne-o diferente. Faça com que seja legal!" + "value" : "Escolha seus próximos emojis." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Выберите код доступа для разблокировки вашего Brainwallet. Это не код блокировки телефона! Сделай это по-другому. Сделай это круто!" + "value" : "Выбери свои следующие эмодзи." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Välj en lösenkod för att låsa upp din Brainwallet. Inte en kod för telefonlås! Gör det annorlunda. Gör det coolt!" + "value" : "Välj dina nästa emojis." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet'ınızın kilidini açmak için bir şifre seçin. Telefon kilit kodu değil! Farklı olsun. Havalı olsun!" + "value" : "Sonraki emojilerini seç." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Виберіть пароль, щоб розблокувати свій Brainwallet. Не код блокування телефону! Зробіть це інакше. Зробіть це круто!" + "value" : "Обери свої наступні емодзі." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "选择一个密码来解锁你的脑钱包。这不是手机锁屏密码!让它与众不同。让它酷炫起来!" + "value" : "选择你的下一批表情符号。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "選擇一個密碼來解鎖你的腦錢包。這不是手機鎖定螢幕密碼!讓它與眾不同。讓它酷炫!" + "value" : "選擇你的下一批表情符號。" } } } @@ -17734,185 +18908,303 @@ "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wprowadź ponownie nowy kod PIN." + "value" : "Wprowadź ponownie nowy kod PIN." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite novamente seu novo PIN." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повторно введите новый PIN-код." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange din nya PIN-kod igen." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeni PIN kodunuzu tekrar girin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введіть свій новий PIN-код ще раз." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请重新输入您的新密码。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "重新輸入您的新 PIN。" + } + } + } + }, + "Ready to start?" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مستعد للبدء؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bereit anzufangen?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Listo para empezar?" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Listo para empezar?" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آماده شروع هستید؟" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "آماده شروع هستید؟" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prêt à commencer ?" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prêt à commencer ?" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "शुरू करने के लिए तैयार हैं?" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Siap untuk memulai?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pronti per iniziare?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "準備はできたか?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "시작할 준비 되셨나요?" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gotowy do rozpoczęcia?" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Digite novamente seu novo PIN." + "value" : "Pronto para começar?" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Повторно введите новый PIN-код." + "value" : "Готовы начать?" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Ange din nya PIN-kod igen." + "value" : "Är du redo att börja om?" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Yeni PIN kodunuzu tekrar girin." + "value" : "Başlamaya hazır mısınız?" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Введіть свій новий PIN-код ще раз." + "value" : "Готові почати?" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "请重新输入您的新密码。" + "value" : "准备开始吗?" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "重新輸入您的新 PIN。" + "value" : "準備開始嗎?" } } } }, - "Ready to start?" : { + "Ready, Set, Go!" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "مستعد للبدء؟" + "value" : "استعد، انطلق!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Bereit anzufangen?" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¿Listo para empezar?" + "value" : "Fertig, los!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "¿Listo para empezar?" - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "آماده شروع هستید؟" + "value" : "¡Listos, preparados, ya!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "آماده شروع هستید؟" + "value" : "آماده، پایدار، برو!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Prêt à commencer ?" - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Prêt à commencer ?" + "value" : "Prêt, feu, partez !" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "शुरू करने के लिए तैयार हैं?" + "value" : "तैयार, सेट, जाओ!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Siap untuk memulai?" + "value" : "Siap, sedia, mulai!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Pronti per iniziare?" + "value" : "Pronti, partenza, via!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "準備はできたか?" + "value" : "位置について、よーい、スタート!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "시작할 준비 되셨나요?" + "value" : "준비, 시작!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" + "value" : "ਤਿਆਰ, ਸੈੱਟ, ਜਾਓ!" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Gotowy do rozpoczęcia?" + "value" : "Gotowi, do startu, start!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Pronto para começar?" + "value" : "Pronto, preparar, já!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Готовы начать?" + "value" : "Готов, внимание, марш!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Är du redo att börja om?" + "value" : "Färdiga, klara, gå!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Başlamaya hazır mısınız?" + "value" : "Hazır, ayarla, git!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Готові почати?" + "value" : "Готово, на старт, руш!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "准备开始吗?" + "value" : "准备、就位、出发!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "準備開始嗎?" + "value" : "準備、就位、出發!" } } } @@ -22279,6 +23571,126 @@ } } }, + "Set your first emojis!" : { + "comment" : "A title displayed at the top of the emoji picker view.", + "isCommentAutoGenerated" : true, + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حدد رموزك التعبيرية الأولى!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lege deine ersten Emojis fest!" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Establece tus primeros emojis!" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "اولین شکلک‌هایت رو تنظیم کن!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Définissez vos premiers emojis !" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने पहले इमोजी सेट करें!" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tetapkan emoji pertamamu!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imposta le tue prime emoji!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "最初の絵文字を設定しよう!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "첫 번째 이모지를 설정하세요!" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਆਪਣੇ ਪਹਿਲੇ ਇਮੋਜੀ ਸੈੱਟ ਕਰੋ!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustaw swoje pierwsze emotikony!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Defina seus primeiros emojis!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Установи свои первые эмодзи!" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ställ in dina första emojis!" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlk emojilerini ayarla!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Встанови свої перші емодзі!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "设定你的第一批表情符号!" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定你的第一批表情符號!" + } + } + } + }, "Settings" : { "localizations" : { "ar" : { @@ -24694,19 +26106,139 @@ "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Приділіть наступні 5 хвилин, щоб захистити свій Litecoin." + "value" : "Приділіть наступні 5 хвилин, щоб захистити свій Litecoin." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请花接下来的5分钟来保护您的莱特币。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "請花接下來的 5 分鐘來保護您的萊特幣。" + } + } + } + }, + "Tap 🍔 > Security > Seed Phrase > PIN to recall your first 3 words." : { + "comment" : "Detailed instruction for retrieving the first 3 seed words from the user's wallet.", + "isCommentAutoGenerated" : true, + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "اضغط على 🍔 ثم الأمان ثم عبارة البذور ثم الرقم السري لاسترجاع كلماتك الثلاث الأولى." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe auf 🍔 > Sicherheit > Seed-Phrase > PIN, um deine ersten 3 Wörter abzurufen." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toca 🍔 > Seguridad > Frase semilla > PIN para recordar tus primeras 3 palabras." + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "روی 🍔 > امنیت > عبارت بازیابی > PIN ضربه بزن تا ۳ کلمه اولت رو به یاد بیاری." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez sur 🍔 > Sécurité > Phrase de récupération > PIN pour rappeler vos 3 premiers mots." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अपने पहले 3 शब्द याद करने के लिए 🍔 > सुरक्षा > सीड फ्रेज़ > PIN दबाएं।" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ketuk 🍔 > Keamanan > Frasa Benih > PIN untuk mengingat 3 kata pertamamu." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca 🍔 > Sicurezza > Frase seme > PIN per ricordare le tue prime 3 parole." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "最初の3つの単語を思い出すには 🍔 > セキュリティ > シードフレーズ > PIN をタップしてください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "처음 3개의 단어를 떠올리려면 🍔 > 보안 > 시드 구문 > PIN을 탭하세요." + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "🍔 > ਸੁਰੱਖਿਆ > ਸੀਡ ਵਾਕਾਂਸ਼ > PIN ਦਬਾਓ ਆਪਣੇ ਪਹਿਲੇ 3 ਸ਼ਬਦ ਯਾਦ ਕਰਨ ਲਈ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naciśnij 🍔 > Bezpieczeństwo > Fraza seed > PIN, aby przypomnieć sobie pierwsze 3 słowa." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque em 🍔 > Segurança > Frase semente > PIN para lembrar suas primeiras 3 palavras." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажми 🍔 > Безопасность > Сид-фраза > PIN, чтобы вспомнить первые 3 слова." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck på 🍔 > Säkerhet > Seed-fras > PIN för att komma ihåg dina första 3 ord." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlk 3 kelimeni hatırlamak için 🍔 > Güvenlik > Seed İfadesi > PIN'e dokun." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Натисни 🍔 > Безпека > Сід-фраза > PIN, щоб згадати свої перші 3 слова." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "请花接下来的5分钟来保护您的莱特币。" + "value" : "点击 🍔 > 安全 > 助记词 > PIN 以回忆你的前3个词。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "請花接下來的 5 分鐘來保護您的萊特幣。" + "value" : "點按 🍔 > 安全 > 助記詞 > PIN 以回憶你的前3個詞。" } } } @@ -26256,530 +27788,770 @@ "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Введені слова не відповідають вашому паперовому ключу. Будь ласка, спробуйте ще раз." + "value" : "Введені слова не відповідають вашому паперовому ключу. Будь ласка, спробуйте ще раз." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入的单词与您的纸质密钥不匹配。请再试一次。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "輸入的單字與您的紙質鑰匙不符。請重試。" + } + } + } + }, + "There was a serious error in creating your Brainwallet. Visit us at brainwallet.co to file a customer support ticket." : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حدث خطأ جسيم في إنشاء محفظة الدماغ الخاصة بك. قم بزيارتنا على brainwallet.co لتقديم تذكرة دعم العملاء." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es gab einen schwerwiegenden Fehler beim Erstellen Ihrer Brainwallet. Besuchen Sie uns unter brainwallet.co, um ein Kundensupport-Ticket zu erstellen." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hubo un error grave al crear tu Brainwallet. Visítanos en brainwallet.co para enviar un ticket de soporte al cliente." + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "یک خطای جدی در ایجاد Brainwallet شما رخ داد. از brainwallet.co بازدید کنید تا یک تیکت پشتیبانی مشتری ثبت کنید." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il y a eu une grave erreur lors de la création de votre Brainwallet. Rendez-vous sur brainwallet.co pour déposer un ticket d’assistance client." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपके ब्रेनवॉलेट को बनाने में एक गंभीर त्रुटि हुई है। ग्राहक सहायता टिकट दर्ज करने के लिए brainwallet.co पर हमारी वेबसाइट पर जाएँ।" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ada kesalahan serius dalam membuat Brainwallet Anda. Kunjungi kami di brainwallet.co untuk mengajukan tiket dukungan pelanggan." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si è verificato un grave errore durante la creazione del tuo Brainwallet. Visitateci su brainwallet.co per inviare un ticket di assistenza clienti." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ブレインウォレットの作成に重大な誤りがありました。brainwallet.coでカスタマーサポートチケットを提出してください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "브레인월렛을 만드는 데 심각한 오류가 있었습니다. 고객 지원 티켓을 제출하려면 brainwallet.co 에 방문해 주세요." + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wystąpił poważny błąd podczas tworzenia Brainwallet. Odwiedź naszą stronę brainwallet.co, aby złożyć zgłoszenie do działu obsługi klienta." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Houve um erro grave na criação de seu Brainwallet. Visite-nos em brainwallet.co para registrar um tíquete de suporte ao cliente." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "При создании вашего Brainwallet произошла серьезная ошибка. Посетите наш сайт brainwallet.co, чтобы подать заявку в службу поддержки клиентов." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det uppstod ett allvarligt fel vid skapandet av din Brainwallet. Besök oss på brainwallet.co för att skicka in ett kundtjänstärende." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brainwallet'ınızı oluştururken ciddi bir hata oluştu. Bir müşteri destek bileti oluşturmak için brainwallet.co adresinden bizi ziyaret edin." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Під час створення вашого Brainwallet сталася серйозна помилка. Відвідайте наш веб-сайт brainwallet.co, щоб подати запит на підтримку клієнтів." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "创建您的 Brainwallet 时出现严重错误。请访问 brainwallet.co 提交客户支持工单。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "建立您的 Brainwallet 時出現嚴重錯誤。請造訪 brainwallet.co 提交客戶支援工單。" + } + } + } + }, + "These are your seed words. If you show them to anyone, they can take your Litecoin" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هذه هي كلماتك الأساسية. إذا أظهرتهم لأي شخص، يمكنهم أخذ اللايتكوين الخاص بك." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dies sind Ihre Saatworte. Wenn Sie sie jemandem zeigen, kann er Ihre Litecoin nehmen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estas son tus palabras clave. Si se los muestras a alguien, pueden tomar tu Litecoin." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estas son tus palabras clave. Si se los muestras a alguien, pueden tomar tu Litecoin." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "اینها کلمات بذر شما هستند. اگر آنها را به کسی نشان دهید، می‌توانند لایت‌کوین شما را بگیرند" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "اینها کلمات بذر شما هستند. اگر آنها را به کسی نشان دهید، می‌توانند لایت‌کوین شما را بگیرند" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ce sont vos mots-semences. Si vous les montrez à n’importe qui, ils peuvent prendre votre Litecoin" + } + }, + "fr-FR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ce sont vos mots-semences. Si vous les montrez à n’importe qui, ils peuvent prendre votre Litecoin" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ये आपके बीज शब्द हैं। यदि आप इन्हें किसी को दिखाते हैं, तो वे आपका लाइटकॉइन ले सकते हैं" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ini adalah kata-kata benih Anda. Jika Anda menunjukkannya kepada siapa pun, mereka dapat mengambil Litecoin Anda" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Queste sono le tue parole seme. Se li mostri a chiunque, possono prendere i tuoi Litecoin" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "これらはあなたのシードワードです。誰かに見せれば、ライトコインを盗まれる可能性がある" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이것은 여러분의 씨앗 단어입니다. 다른 사람에게 보여 주면 Litecoin을 가져갈 수 있습니다." + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਇਹ ਤੁਹਾਡੇ ਬੀਜ ਸ਼ਬਦ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਕਿਸੇ ਨੂੰ ਦਿਖਾਉਂਦੇ ਹੋ, ਤਾਂ ਉਹ ਤੁਹਾਡਾ Litecoin ਲੈ ਸਕਦੇ ਹਨ।" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "To są twoje słowa zalążkowe. Jeśli pokażesz je komukolwiek, może on zabrać twoje Litecoiny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essas são suas palavras-semente. Se você mostrá-los a alguém, essa pessoa poderá tomar seu Litecoin" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Это ваши семенные слова. Если вы покажете их кому-нибудь, они могут забрать ваши Litecoin." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det här är dina seed-ord. Om du visar dem för någon, kan de ta dina Litecoin" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bunlar sizin tohum kelimeleriniz. Eğer bunları birine gösterirseniz, Litecoin'inizi alabilirler." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Це ваші ключові слова. Якщо ви їх комусь покажете, вони можуть забрати ваш Litecoin" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "输入的单词与您的纸质密钥不匹配。请再试一次。" + "value" : "这些是你的种子词。如果你把它们展示给任何人,他们都可以拿走你的莱特币。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "輸入的單字與您的紙質鑰匙不符。請重試。" + "value" : "這些都是你的種子詞。如果你把它們展示給任何人,他們就可以拿走你的萊特幣" } } } }, - "There was a serious error in creating your Brainwallet. Visit us at brainwallet.co to file a customer support ticket." : { + "This is for you alone.\n\nSetup the app passcode, open your password manager or grab a pen to record it & your new seed phrase.\n\n" : { + "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "حدث خطأ جسيم في إنشاء محفظة الدماغ الخاصة بك. قم بزيارتنا على brainwallet.co لتقديم تذكرة دعم العملاء." + "value" : "هذا خاص بك وحدك.\n\nقم بإعداد رمز مرور التطبيق، افتح مدير كلمات المرور أو استخدم قلمًا لتسجيله مع عبارة الاسترداد الجديدة." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Es gab einen schwerwiegenden Fehler beim Erstellen Ihrer Brainwallet. Besuchen Sie uns unter brainwallet.co, um ein Kundensupport-Ticket zu erstellen." + "value" : "Dies ist nur für Sie.\\n\\nRichten Sie den App-Passcode ein, öffnen Sie Ihren Passwort-Manager oder nehmen Sie einen Stift zur Hand, um ihn und Ihre neue Seed-Phrase zu notieren.\\n\\n" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Hubo un error grave al crear tu Brainwallet. Visítanos en brainwallet.co para enviar un ticket de soporte al cliente." + "value" : "Esto es solo para ti.\n\nConfigura la contraseña de la aplicación, abre tu administrador de contraseñas o usa un bolígrafo para registrarla junto con tu nueva frase inicial." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "یک خطای جدی در ایجاد Brainwallet شما رخ داد. از brainwallet.co بازدید کنید تا یک تیکت پشتیبانی مشتری ثبت کنید." + "value" : "این فقط برای شماست.\n\nکد عبور برنامه را تنظیم کنید، مدیر رمز عبور خود را باز کنید یا یک خودکار بردارید و آن و عبارت بازیابی جدید خود را یادداشت کنید." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Il y a eu une grave erreur lors de la création de votre Brainwallet. Rendez-vous sur brainwallet.co pour déposer un ticket d’assistance client." + "value" : "Ceci est uniquement pour vous.\\n\\nConfigurez le code d'accès de l'application, ouvrez votre gestionnaire de mots de passe ou prenez un stylo pour le noter ainsi que votre nouvelle phrase de récupération.\\n\\n\n" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आपके ब्रेनवॉलेट को बनाने में एक गंभीर त्रुटि हुई है। ग्राहक सहायता टिकट दर्ज करने के लिए brainwallet.co पर हमारी वेबसाइट पर जाएँ।" + "value" : "यह सिर्फ़ आपके लिए है।\n\nऐप पासकोड सेटअप करें, अपना पासवर्ड मैनेजर खोलें या इसे और अपने नए सीड फ्रेज़ को रिकॉर्ड करने के लिए एक पेन लें।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ada kesalahan serius dalam membuat Brainwallet Anda. Kunjungi kami di brainwallet.co untuk mengajukan tiket dukungan pelanggan." + "value" : "Ini hanya untuk Anda.\n\nAtur kode sandi aplikasi, buka pengelola kata sandi Anda atau ambil pena untuk mencatatnya & frasa benih baru Anda." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Si è verificato un grave errore durante la creazione del tuo Brainwallet. Visitateci su brainwallet.co per inviare un ticket di assistenza clienti." + "value" : "Questo è solo per te.\n\nImposta il codice di accesso dell'app, apri il tuo gestore di password o prendi una penna per registrarlo insieme alla tua nuova frase seme." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ブレインウォレットの作成に重大な誤りがありました。brainwallet.coでカスタマーサポートチケットを提出してください。" + "value" : "これはあなただけのものです。\n\nアプリのパスコードを設定し、パスワードマネージャーを開くか、ペンを用意してパスコードと新しいシードフレーズを記録してください。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "브레인월렛을 만드는 데 심각한 오류가 있었습니다. 고객 지원 티켓을 제출하려면 brainwallet.co 에 방문해 주세요." + "value" : "이건 오직 당신만을 위한 것입니다.\n\n앱 암호를 설정하고, 암호 관리자를 열거나 펜을 꺼내 암호와 새 시드 문구를 적어 두세요." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ) ਸ਼ਾਇਦ ਬਾਅਦ ਵਿੱਚ (ਛੱਡੋ)" + "value" : "ਇਹ ਸਿਰਫ਼ ਤੁਹਾਡੇ ਲਈ ਹੈ।\n\nਐਪ ਪਾਸਕੋਡ ਸੈੱਟਅੱਪ ਕਰੋ, ਆਪਣਾ ਪਾਸਵਰਡ ਮੈਨੇਜਰ ਖੋਲ੍ਹੋ ਜਾਂ ਇਸਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਇੱਕ ਪੈੱਨ ਫੜੋ ਅਤੇ ਆਪਣਾ ਨਵਾਂ ਸੀਡ ਵਾਕੰਸ਼।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Wystąpił poważny błąd podczas tworzenia Brainwallet. Odwiedź naszą stronę brainwallet.co, aby złożyć zgłoszenie do działu obsługi klienta." + "value" : "To tylko dla Ciebie.\n\nSkonfiguruj hasło aplikacji, otwórz menedżera haseł lub weź długopis i zapisz je oraz nową frazę startową." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Houve um erro grave na criação de seu Brainwallet. Visite-nos em brainwallet.co para registrar um tíquete de suporte ao cliente." + "value" : "Isso é só para você.\n\nConfigure a senha do aplicativo, abra seu gerenciador de senhas ou pegue uma caneta para anotá-la, juntamente com sua nova frase-semente." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "При создании вашего Brainwallet произошла серьезная ошибка. Посетите наш сайт brainwallet.co, чтобы подать заявку в службу поддержки клиентов." + "value" : "Это только для вас.\n\nУстановите пароль приложения, откройте менеджер паролей или возьмите ручку, чтобы записать его и вашу новую сид-фразу." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Det uppstod ett allvarligt fel vid skapandet av din Brainwallet. Besök oss på brainwallet.co för att skicka in ett kundtjänstärende." + "value" : "Detta är bara för dig.\n\nStäll in appens lösenord, öppna lösenordshanteraren eller ta en penna för att anteckna det och din nya startfras." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Brainwallet'ınızı oluştururken ciddi bir hata oluştu. Bir müşteri destek bileti oluşturmak için brainwallet.co adresinden bizi ziyaret edin." + "value" : "Bu sadece sizin için.\n\nUygulama şifresini ayarlayın, şifre yöneticinizi açın veya bir kalem alıp şifrenizi ve yeni kurtarma kelime öbeğinizi kaydedin." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Під час створення вашого Brainwallet сталася серйозна помилка. Відвідайте наш веб-сайт brainwallet.co, щоб подати запит на підтримку клієнтів." + "value" : "Це тільки для вас.\n\nНалаштуйте пароль програми, відкрийте менеджер паролів або візьміть ручку, щоб записати його та нову початкову фразу." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "创建您的 Brainwallet 时出现严重错误。请访问 brainwallet.co 提交客户支持工单。" + "value" : "这是专门为你准备的。\n\n设置应用密码,打开密码管理器或用笔记录密码和你的新助记词。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "建立您的 Brainwallet 時出現嚴重錯誤。請造訪 brainwallet.co 提交客戶支援工單。" + "value" : "設定應用密碼,開啟密碼管理器或用筆記錄密碼和新的助記詞。" } } } }, - "These are your seed words. If you show them to anyone, they can take your Litecoin" : { + "This is for you alone. Setup the app passcode,\nopen your password manager or grab a pen to\nrecord it & your new seed phrase." : { + "comment" : "A set of text displayed on the \"Ready to start?\" screen.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "هذه هي كلماتك الأساسية. إذا أظهرتهم لأي شخص، يمكنهم أخذ اللايتكوين الخاص بك." + "value" : "\nهذا لك وحدك. قم بإعداد رمز مرور التطبيق، افتح مدير كلمات المرور الخاص بك أو أحضر قلمًا لتسجيله وعبارة الاسترداد الجديدة الخاصة بك." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dies sind Ihre Saatworte. Wenn Sie sie jemandem zeigen, kann er Ihre Litecoin nehmen." + "value" : "Dies ist nur für Sie. Richten Sie den App-Passcode ein, öffnen Sie Ihren Passwort-Manager oder nehmen Sie einen Stift zur Hand, um ihn und Ihre neue Seed-Phrase zu notieren." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Estas son tus palabras clave. Si se los muestras a alguien, pueden tomar tu Litecoin." + "value" : "Esto es solo para ti. Configura el código de acceso de la aplicación, abre tu gestor de contraseñas o toma un bolígrafo para registrarlo junto con tu nueva frase de recuperación." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Estas son tus palabras clave. Si se los muestras a alguien, pueden tomar tu Litecoin." + "value" : "Esto es solo para ti. Configura el código de acceso de la aplicación, abre tu gestor de contraseñas o toma un bolígrafo para registrarlo junto con tu nueva frase de recuperación." } }, "fa" : { "stringUnit" : { "state" : "translated", - "value" : "اینها کلمات بذر شما هستند. اگر آنها را به کسی نشان دهید، می‌توانند لایت‌کوین شما را بگیرند" + "value" : "\nاین فقط برای خود شماست. رمز عبور برنامه را تنظیم کنید، مدیر رمزهای عبور خود را باز کنید یا یک خودکار بردارید تا آن و عبارت بازیابی جدید خود را ثبت کنید." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "اینها کلمات بذر شما هستند. اگر آنها را به کسی نشان دهید، می‌توانند لایت‌کوین شما را بگیرند" + "value" : "\nاین فقط برای خود شماست. رمز عبور برنامه را تنظیم کنید، مدیر رمزهای عبور خود را باز کنید یا یک خودکار بردارید تا آن و عبارت بازیابی جدید خود را ثبت کنید." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ce sont vos mots-semences. Si vous les montrez à n’importe qui, ils peuvent prendre votre Litecoin" + "value" : "Ceci est pour vous seul. Configurez le code d'accès de l'application, ouvrez votre gestionnaire de mots de passe ou prenez un stylo pour l'enregistrer ainsi que votre nouvelle phrase de récupération." } }, "fr-FR" : { "stringUnit" : { "state" : "translated", - "value" : "Ce sont vos mots-semences. Si vous les montrez à n’importe qui, ils peuvent prendre votre Litecoin" + "value" : "Ceci est pour vous seul. Configurez le code d'accès de l'application, ouvrez votre gestionnaire de mots de passe ou prenez un stylo pour l'enregistrer ainsi que votre nouvelle phrase de récupération." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "ये आपके बीज शब्द हैं। यदि आप इन्हें किसी को दिखाते हैं, तो वे आपका लाइटकॉइन ले सकते हैं" + "value" : "यह केवल आपके लिए है। ऐप पासकोड सेटअप करें, अपना पासवर्ड मैनेजर खोलें या इसे और अपने नए सीड फ्रेज को रिकॉर्ड करने के लिए एक पेन लें।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ini adalah kata-kata benih Anda. Jika Anda menunjukkannya kepada siapa pun, mereka dapat mengambil Litecoin Anda" + "value" : "Ini hanya untuk Anda sendiri. Atur kode sandi aplikasi, buka pengelola kata sandi Anda atau ambil pena untuk mencatatnya dan frasa pemulihan baru Anda." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Queste sono le tue parole seme. Se li mostri a chiunque, possono prendere i tuoi Litecoin" + "value" : "Questo è solo per te. Configura il codice di accesso dell'app, apri il tuo gestore di password o prendi una penna per registrarlo insieme alla tua nuova frase di recupero." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "これらはあなたのシードワードです。誰かに見せれば、ライトコインを盗まれる可能性がある" + "value" : "これはあなただけのものです。アプリのパスコードを設定し、パスワードマネージャーを開くか、ペンを取ってそれと新しいシードフレーズを記録してください。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이것은 여러분의 씨앗 단어입니다. 다른 사람에게 보여 주면 Litecoin을 가져갈 수 있습니다." + "value" : "이것은 오직 당신만을 위한 것입니다. 앱 비밀번호를 설정하고, 비밀번호 관리자를 열거나 펜을 들고 이것과 새 복구 문구를 기록하세요." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਇਹ ਤੁਹਾਡੇ ਬੀਜ ਸ਼ਬਦ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਕਿਸੇ ਨੂੰ ਦਿਖਾਉਂਦੇ ਹੋ, ਤਾਂ ਉਹ ਤੁਹਾਡਾ Litecoin ਲੈ ਸਕਦੇ ਹਨ।" + "value" : "ਇਹ ਸਿਰਫ਼ ਤੁਹਾਡੇ ਲਈ ਹੈ। ਐਪ ਪਾਸਕੋਡ ਸੈੱਟਅੱਪ ਕਰੋ, ਆਪਣਾ ਪਾਸਵਰਡ ਮੈਨੇਜਰ ਖੋਲ੍ਹੋ ਜਾਂ ਇਸਨੂੰ ਅਤੇ ਆਪਣੇ ਨਵੇਂ ਸੀਡ ਫਰੇਜ਼ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਇੱਕ ਪੈੱਨ ਫੜੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "To są twoje słowa zalążkowe. Jeśli pokażesz je komukolwiek, może on zabrać twoje Litecoiny" + "value" : "To jest tylko dla ciebie. Skonfiguruj kod dostępu do aplikacji, otwórz menedżer haseł lub weź długopis, aby zapisać go wraz z nową frazą odzyskiwania." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Essas são suas palavras-semente. Se você mostrá-los a alguém, essa pessoa poderá tomar seu Litecoin" + "value" : "Isto é apenas para você. Configure a senha do aplicativo, abra seu gerenciador de senhas ou pegue uma caneta para registrá-la junto com sua nova frase de recuperação." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Это ваши семенные слова. Если вы покажете их кому-нибудь, они могут забрать ваши Litecoin." + "value" : "Это только для вас. Настройте пароль приложения, откройте свой менеджер паролей или возьмите ручку, чтобы записать его и вашу новую фразу восстановления." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Det här är dina seed-ord. Om du visar dem för någon, kan de ta dina Litecoin" + "value" : "Detta är bara för dig. Ställ in appens lösenord, öppna din lösenordshanterare eller ta en penna för att skriva ner det och din nya återställningsfras." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Bunlar sizin tohum kelimeleriniz. Eğer bunları birine gösterirseniz, Litecoin'inizi alabilirler." + "value" : "Bu sadece sizin için. Uygulama parolasını ayarlayın, şifre yöneticinizi açın veya bunu ve yeni kurtarma ifadenizi kaydetmek için bir kalem alın." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Це ваші ключові слова. Якщо ви їх комусь покажете, вони можуть забрати ваш Litecoin" + "value" : "Це тільки для вас. Налаштуйте пароль додатка, відкрийте свій менеджер паролів або візьміть ручку, щоб записати його та вашу нову фразу відновлення." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "这些是你的种子词。如果你把它们展示给任何人,他们都可以拿走你的莱特币。" + "value" : "这仅供您个人使用。设置应用程序密码,打开您的密码管理器或拿笔记录它和您的新助记词。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "這些都是你的種子詞。如果你把它們展示給任何人,他們就可以拿走你的萊特幣" + "value" : "這僅供您個人使用。設置應用程式密碼,打開您的密碼管理器或拿筆記錄它和您的新助記詞。" } } } }, - "This is for you alone.\n\nSetup the app passcode, open your password manager or grab a pen to record it & your new seed phrase.\n\n" : { - "extractionState" : "manual", + "This is your Brainwallet phrase. Its your emojis you use to remember your 12 seed words." : { + "comment" : "A description of the purpose of the user's brainwallet phrase.", + "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "هذا خاص بك وحدك.\n\nقم بإعداد رمز مرور التطبيق، افتح مدير كلمات المرور أو استخدم قلمًا لتسجيله مع عبارة الاسترداد الجديدة." + "value" : "هذه هي عبارة محفظتك الذهنية. إنها رموزك التعبيرية التي تستخدمها لتذكر كلماتك الـ١٢ الأساسية." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dies ist nur für Sie.\\n\\nRichten Sie den App-Passcode ein, öffnen Sie Ihren Passwort-Manager oder nehmen Sie einen Stift zur Hand, um ihn und Ihre neue Seed-Phrase zu notieren.\\n\\n" + "value" : "Dies ist deine Brainwallet-Phrase. Das sind deine Emojis, mit denen du deine 12 Seed-Wörter merkst." } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Esto es solo para ti.\n\nConfigura la contraseña de la aplicación, abre tu administrador de contraseñas o usa un bolígrafo para registrarla junto con tu nueva frase inicial." + "value" : "Esta es tu frase Brainwallet. Son tus emojis que usas para recordar tus 12 palabras semilla." } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "این فقط برای شماست.\n\nکد عبور برنامه را تنظیم کنید، مدیر رمز عبور خود را باز کنید یا یک خودکار بردارید و آن و عبارت بازیابی جدید خود را یادداشت کنید." + "value" : "این عبارت کیف‌پول ذهنی توئه. اینا شکلک‌هایی هستن که برای به یاد آوردن ۱۲ کلمه بازیابیت ازشون استفاده می‌کنی." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ceci est uniquement pour vous.\\n\\nConfigurez le code d'accès de l'application, ouvrez votre gestionnaire de mots de passe ou prenez un stylo pour le noter ainsi que votre nouvelle phrase de récupération.\\n\\n\n" + "value" : "C'est votre phrase Brainwallet. Ce sont vos emojis que vous utilisez pour vous souvenir de vos 12 mots de récupération." } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "यह सिर्फ़ आपके लिए है।\n\nऐप पासकोड सेटअप करें, अपना पासवर्ड मैनेजर खोलें या इसे और अपने नए सीड फ्रेज़ को रिकॉर्ड करने के लिए एक पेन लें।" + "value" : "यह आपका ब्रेनवॉलेट वाक्यांश है। ये वे इमोजी हैं जिनका उपयोग आप अपने 12 सीड शब्द याद रखने के लिए करते हैं।" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ini hanya untuk Anda.\n\nAtur kode sandi aplikasi, buka pengelola kata sandi Anda atau ambil pena untuk mencatatnya & frasa benih baru Anda." + "value" : "Ini adalah frasa Brainwallet kamu. Ini adalah emoji yang kamu gunakan untuk mengingat 12 kata benihmu." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Questo è solo per te.\n\nImposta il codice di accesso dell'app, apri il tuo gestore di password o prendi una penna per registrarlo insieme alla tua nuova frase seme." + "value" : "Questa è la tua frase Brainwallet. Sono le tue emoji che usi per ricordare le tue 12 parole seme." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "これはあなただけのものです。\n\nアプリのパスコードを設定し、パスワードマネージャーを開くか、ペンを用意してパスコードと新しいシードフレーズを記録してください。" + "value" : "これはあなたのブレインウォレットフレーズです。12のシードワードを覚えるために使う絵文字です。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이건 오직 당신만을 위한 것입니다.\n\n앱 암호를 설정하고, 암호 관리자를 열거나 펜을 꺼내 암호와 새 시드 문구를 적어 두세요." + "value" : "이것이 당신의 브레인월렛 구문입니다. 12개의 시드 단어를 기억하는 데 사용하는 이모지입니다." } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਇਹ ਸਿਰਫ਼ ਤੁਹਾਡੇ ਲਈ ਹੈ।\n\nਐਪ ਪਾਸਕੋਡ ਸੈੱਟਅੱਪ ਕਰੋ, ਆਪਣਾ ਪਾਸਵਰਡ ਮੈਨੇਜਰ ਖੋਲ੍ਹੋ ਜਾਂ ਇਸਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਇੱਕ ਪੈੱਨ ਫੜੋ ਅਤੇ ਆਪਣਾ ਨਵਾਂ ਸੀਡ ਵਾਕੰਸ਼।" + "value" : "ਇਹ ਤੁਹਾਡਾ ਬ੍ਰੇਨਵਾਲਿਟ ਵਾਕਾਂਸ਼ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਇਮੋਜੀ ਹਨ ਜੋ ਤੁਸੀਂ ਆਪਣੇ 12 ਬੀਜ ਸ਼ਬਦ ਯਾਦ ਕਰਨ ਲਈ ਵਰਤਦੇ ਹੋ।" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "To tylko dla Ciebie.\n\nSkonfiguruj hasło aplikacji, otwórz menedżera haseł lub weź długopis i zapisz je oraz nową frazę startową." + "value" : "To jest twoja fraza Brainwallet. To twoje emotikony, których używasz, aby zapamiętać 12 słów klucz." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Isso é só para você.\n\nConfigure a senha do aplicativo, abra seu gerenciador de senhas ou pegue uma caneta para anotá-la, juntamente com sua nova frase-semente." + "value" : "Esta é sua frase Brainwallet. São seus emojis que você usa para lembrar suas 12 palavras-semente." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Это только для вас.\n\nУстановите пароль приложения, откройте менеджер паролей или возьмите ручку, чтобы записать его и вашу новую сид-фразу." + "value" : "Это твоя фраза Brainwallet. Это твои эмодзи, которые ты используешь, чтобы запомнить 12 сид-слов." } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Detta är bara för dig.\n\nStäll in appens lösenord, öppna lösenordshanteraren eller ta en penna för att anteckna det och din nya startfras." + "value" : "Det här är din Brainwallet-fras. Det är dina emojis som du använder för att komma ihåg dina 12 seed-ord." } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Bu sadece sizin için.\n\nUygulama şifresini ayarlayın, şifre yöneticinizi açın veya bir kalem alıp şifrenizi ve yeni kurtarma kelime öbeğinizi kaydedin." + "value" : "Bu senin Brainwallet ifaden. 12 tohum kelimeni hatırlamak için kullandığın emojilerdir." } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Це тільки для вас.\n\nНалаштуйте пароль програми, відкрийте менеджер паролів або візьміть ручку, щоб записати його та нову початкову фразу." + "value" : "Це твоя фраза Brainwallet. Це твої емодзі, які ти використовуєш, щоб запам'ятати свої 12 слів-сідів." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "这是专门为你准备的。\n\n设置应用密码,打开密码管理器或用笔记录密码和你的新助记词。" + "value" : "这是你的脑钱包短语。这是你用来记住12个助记词的表情符号。" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "設定應用密碼,開啟密碼管理器或用筆記錄密碼和新的助記詞。" + "value" : "這是你的腦錢包短語。這是你用來記住12個助記詞的表情符號。" } } } }, - "This is for you alone. Setup the app passcode,\nopen your password manager or grab a pen to\nrecord it & your new seed phrase." : { - "comment" : "A set of text displayed on the \"Ready to start?\" screen.", + "This is your final set!" : { + "comment" : "Title for the final emoji selection guide screen.", "isCommentAutoGenerated" : true, "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "\nهذا لك وحدك. قم بإعداد رمز مرور التطبيق، افتح مدير كلمات المرور الخاص بك أو أحضر قلمًا لتسجيله وعبارة الاسترداد الجديدة الخاصة بك." + "value" : "هذه هي مجموعتك النهائية!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Dies ist nur für Sie. Richten Sie den App-Passcode ein, öffnen Sie Ihren Passwort-Manager oder nehmen Sie einen Stift zur Hand, um ihn und Ihre neue Seed-Phrase zu notieren." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Esto es solo para ti. Configura el código de acceso de la aplicación, abre tu gestor de contraseñas o toma un bolígrafo para registrarlo junto con tu nueva frase de recuperación." + "value" : "Das ist dein finales Set!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "Esto es solo para ti. Configura el código de acceso de la aplicación, abre tu gestor de contraseñas o toma un bolígrafo para registrarlo junto con tu nueva frase de recuperación." - } - }, - "fa" : { - "stringUnit" : { - "state" : "translated", - "value" : "\nاین فقط برای خود شماست. رمز عبور برنامه را تنظیم کنید، مدیر رمزهای عبور خود را باز کنید یا یک خودکار بردارید تا آن و عبارت بازیابی جدید خود را ثبت کنید." + "value" : "¡Este es tu conjunto final!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "\nاین فقط برای خود شماست. رمز عبور برنامه را تنظیم کنید، مدیر رمزهای عبور خود را باز کنید یا یک خودکار بردارید تا آن و عبارت بازیابی جدید خود را ثبت کنید." + "value" : "این آخرین مجموعه‌ات هست!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Ceci est pour vous seul. Configurez le code d'accès de l'application, ouvrez votre gestionnaire de mots de passe ou prenez un stylo pour l'enregistrer ainsi que votre nouvelle phrase de récupération." - } - }, - "fr-FR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ceci est pour vous seul. Configurez le code d'accès de l'application, ouvrez votre gestionnaire de mots de passe ou prenez un stylo pour l'enregistrer ainsi que votre nouvelle phrase de récupération." + "value" : "C'est votre ensemble final !" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "यह केवल आपके लिए है। ऐप पासकोड सेटअप करें, अपना पासवर्ड मैनेजर खोलें या इसे और अपने नए सीड फ्रेज को रिकॉर्ड करने के लिए एक पेन लें।" + "value" : "यह आपका अंतिम सेट है!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Ini hanya untuk Anda sendiri. Atur kode sandi aplikasi, buka pengelola kata sandi Anda atau ambil pena untuk mencatatnya dan frasa pemulihan baru Anda." + "value" : "Ini adalah set terakhirmu!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Questo è solo per te. Configura il codice di accesso dell'app, apri il tuo gestore di password o prendi una penna per registrarlo insieme alla tua nuova frase di recupero." + "value" : "Questo è il tuo set finale!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "これはあなただけのものです。アプリのパスコードを設定し、パスワードマネージャーを開くか、ペンを取ってそれと新しいシードフレーズを記録してください。" + "value" : "これがあなたの最終セットです!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이것은 오직 당신만을 위한 것입니다. 앱 비밀번호를 설정하고, 비밀번호 관리자를 열거나 펜을 들고 이것과 새 복구 문구를 기록하세요." + "value" : "이것이 당신의 최종 세트입니다!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਇਹ ਸਿਰਫ਼ ਤੁਹਾਡੇ ਲਈ ਹੈ। ਐਪ ਪਾਸਕੋਡ ਸੈੱਟਅੱਪ ਕਰੋ, ਆਪਣਾ ਪਾਸਵਰਡ ਮੈਨੇਜਰ ਖੋਲ੍ਹੋ ਜਾਂ ਇਸਨੂੰ ਅਤੇ ਆਪਣੇ ਨਵੇਂ ਸੀਡ ਫਰੇਜ਼ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਇੱਕ ਪੈੱਨ ਫੜੋ।" + "value" : "ਇਹ ਤੁਹਾਡਾ ਅੰਤਿਮ ਸੈੱਟ ਹੈ!" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "To jest tylko dla ciebie. Skonfiguruj kod dostępu do aplikacji, otwórz menedżer haseł lub weź długopis, aby zapisać go wraz z nową frazą odzyskiwania." + "value" : "To jest twój ostateczny zestaw!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Isto é apenas para você. Configure a senha do aplicativo, abra seu gerenciador de senhas ou pegue uma caneta para registrá-la junto com sua nova frase de recuperação." + "value" : "Este é o seu conjunto final!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Это только для вас. Настройте пароль приложения, откройте свой менеджер паролей или возьмите ручку, чтобы записать его и вашу новую фразу восстановления." + "value" : "Это твой финальный набор!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Detta är bara för dig. Ställ in appens lösenord, öppna din lösenordshanterare eller ta en penna för att skriva ner det och din nya återställningsfras." + "value" : "Det här är ditt slutliga set!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Bu sadece sizin için. Uygulama parolasını ayarlayın, şifre yöneticinizi açın veya bunu ve yeni kurtarma ifadenizi kaydetmek için bir kalem alın." + "value" : "Bu senin son setin!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Це тільки для вас. Налаштуйте пароль додатка, відкрийте свій менеджер паролів або візьміть ручку, щоб записати його та вашу нову фразу відновлення." + "value" : "Це твій фінальний набір!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "这仅供您个人使用。设置应用程序密码,打开您的密码管理器或拿笔记录它和您的新助记词。" + "value" : "这是你的最终组合!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "這僅供您個人使用。設置應用程式密碼,打開您的密碼管理器或拿筆記錄它和您的新助記詞。" + "value" : "這是你的最終組合!" } } } @@ -30618,6 +32390,126 @@ } } }, + "You are on your way!" : { + "comment" : "Title for a guide step in the emoji selection process.", + "isCommentAutoGenerated" : true, + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنت في طريقك!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du bist auf dem richtigen Weg!" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Estás en camino!" + } + }, + "fa-IR" : { + "stringUnit" : { + "state" : "translated", + "value" : "داری پیش می‌ری!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous êtes en route !" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आप अपने रास्ते पर हैं!" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kamu sudah dalam perjalanan!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sulla strada giusta!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "あなたは順調に進んでいます!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "당신은 순조롭게 나아가고 있습니다!" + } + }, + "pa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ਤੁਸੀਂ ਆਪਣੇ ਰਾਹ 'ਤੇ ਹੋ!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jesteś na dobrej drodze!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você está no caminho certo!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ты на верном пути!" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du är på väg!" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yoldasın!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ти на правильному шляху!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你已经在路上了!" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "你已經在路上了!" + } + } + } + }, "You cannot send if it's zero or it's syncing.\nTop up in 5 minutes with MoonPay if needed." : { "comment" : "Description of the first step in the send flow, explaining that the user cannot send if their balance is zero or syncing, and that they should top up in 5 minutes with MoonPay if needed.", "isCommentAutoGenerated" : true, @@ -30856,120 +32748,120 @@ } } }, - "You have no Litecoin. Tap Buy/Recieve. Get LTC in 5 minutes with MoonPay!" : { + "You have no Litecoin. Tap Get/Recieve. Get LTC in 5 minutes with MoonPay!" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "ليس لديك Litecoin. انقر على شراء/استلام. احصل على LTC في 5 دقائق مع MoonPay!" + "value" : "ليس لديك أي لايتكوين. اضغط على الحصول/الاستلام. احصل على LTC خلال 5 دقائق مع MoonPay!" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Sie haben keine Litecoin. Tippen Sie auf Kaufen/Empfangen. Holen Sie sich LTC in 5 Minuten mit MoonPay!" + "value" : "Sie haben keine Litecoin. Tippen Sie auf „Erhalten/Empfangen“. Erhalten Sie LTC in 5 Minuten mit MoonPay!" } }, "es-419" : { "stringUnit" : { "state" : "translated", - "value" : "No tienes Litecoin. Pulse Comprar/Recibir. ¡Consigue LTC en 5 minutos con MoonPay!" + "value" : "No tienes Litecoin. Toca Obtener/Recibir. ¡Consigue LTC en 5 minutos con MoonPay!" } }, "fa-IR" : { "stringUnit" : { "state" : "translated", - "value" : "شما لایت‌کوین ندارید. روی خرید/دریافت ضربه بزنید. LTC را ظرف ۵ دقیقه با MoonPay دریافت کنید!" + "value" : "شما هیچ لایت‌کوینی ندارید. روی دریافت ضربه بزنید. با MoonPay در ۵ دقیقه LTC دریافت کنید!" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Vous n'avez pas de Litecoin. Appuyez sur Acheter/Recevoir. Obtenez du LTC en 5 minutes avec MoonPay !" + "value" : "Vous n’avez aucun Litecoin. Appuyez sur Obtenir/Recevoir. Obtenez des LTC en 5 minutes avec MoonPay!" } }, "hi" : { "stringUnit" : { "state" : "translated", - "value" : "आपके पास कोई लाइटकॉइन नहीं है। टैप करें खरीदें/प्राप्त करें। MoonPay के साथ 5 मिनट में LTC प्राप्त करें!" + "value" : "आपके पास कोई Litecoin नहीं है। Get/Receive पर टैप करें। MoonPay के साथ 5 मिनट में LTC प्राप्त करें!" } }, "id" : { "stringUnit" : { "state" : "translated", - "value" : "Anda tidak memiliki Litecoin. Ketuk Beli/Terima. Dapatkan LTC dalam 5 menit dengan MoonPay!" + "value" : "Anda tidak memiliki Litecoin. Ketuk Dapatkan/Terima. Dapatkan LTC dalam 5 menit dengan MoonPay!" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Non avete Litecoin. Toccare Acquista/Ricevi. Ottenete LTC in 5 minuti con MoonPay!" + "value" : "Non hai Litecoin. Tocca Ottieni/Ricevi. Ottieni LTC in 5 minuti con MoonPay!" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "あなたはライトコインを持ってない。買う/受け取る」をタップする。MoonPayで5分でLTCをゲット!" + "value" : "Litecoin を持っていません。「取得/受け取り」をタップしてください。MoonPay で 5 分以内に LTC を入手できます!" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "라이트코인이 없어요. 구매/수령 탭. MoonPay로 5분 만에 LTC를 받으세요!" + "value" : "보유한 Litecoin이 없습니다. 받기/수신을 누르세요. MoonPay로 5분 안에 LTC를 받으세요!" } }, "pa" : { "stringUnit" : { "state" : "translated", - "value" : "ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ Litecoin ਨਹੀਂ ਹੈ। ਖਰੀਦੋ/ਪ੍ਰਾਪਤ ਕਰੋ 'ਤੇ ਟੈਪ ਕਰੋ। ਮੂਨਪੇ ਨਾਲ 5 ਮਿੰਟਾਂ ਵਿੱਚ LTC ਪ੍ਰਾਪਤ ਕਰੋ!" + "value" : "ਤੁਹਾਡੇ ਕੋਲ ਕੋਈ Litecoin ਨਹੀਂ ਹੈ। Get/Receive 'ਤੇ ਟੈਪ ਕਰੋ। MoonPay ਨਾਲ 5 ਮਿੰਟ ਵਿੱਚ LTC ਪ੍ਰਾਪਤ ਕਰੋ!" } }, "pl" : { "stringUnit" : { "state" : "translated", - "value" : "Nie masz Litecoinów. Naciśnij Kup/Odbierz. Zdobądź LTC w 5 minut z MoonPay!" + "value" : "Nie masz Litecoinów. Stuknij Pobierz/Odbierz. Otrzymaj LTC w 5 minut dzięki MoonPay!" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Você não possui Litecoin. Toque em Comprar/Receber. Consiga LTC em 5 minutos com MoonPay!" + "value" : "Você não tem Litecoin. Toque em Obter/Receber. Obtenha LTC em 5 minutos com a MoonPay!" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "У вас нет Litecoin. Нажмите Купить/Получить. Получите LTC за 5 минут с MoonPay!" + "value" : "У вас нет Litecoin. Нажмите Получить/Принять. Получите LTC за 5 минут с MoonPay!" } }, "sv" : { "stringUnit" : { "state" : "translated", - "value" : "Du har inga Litecoin. Tryck på Buy/Recieve. Få LTC på 5 minuter med MoonPay!" + "value" : "Du har ingen Litecoin. Tryck på Skaffa/Ta emot. Skaffa LTC på 5 minuter med MoonPay!" } }, "tr" : { "stringUnit" : { "state" : "translated", - "value" : "Litecoin'in yok. Satın Al/Elde Et öğesine dokunun. MoonPay ile 5 dakikada LTC alın!" + "value" : "Litecoin’iniz yok. Al/Alım’a dokunun. MoonPay ile 5 dakika içinde LTC alın!" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "У вас немає Litecoin. Натисніть «Купити/Отримати». Отримайте LTC за 5 хвилин з MoonPay!" + "value" : "У вас немає Litecoin. Натисніть Отримати/Прийняти. Отримайте LTC за 5 хвилин з MoonPay!" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "您没有莱特币。点击“购买/接收”。使用 MoonPay,5 分钟即可获得 LTC!" + "value" : "您没有莱特币。点击“获取/接收”。通过 MoonPay 在 5 分钟内获得 LTC!" } }, "zh-Hant" : { "stringUnit" : { "state" : "translated", - "value" : "您沒有萊特幣。點擊“購買/接收”。使用 MoonPay,5 分鐘即可獲得 LTC!" + "value" : "您沒有萊特幣。點擊「取得/接收」。透過 MoonPay 在 5 分鐘內獲得 LTC!" } } } diff --git a/brainwallet/ModalTransitionDelegate.swift b/brainwallet/ModalTransitionDelegate.swift index c5dc4503..c022f0d9 100644 --- a/brainwallet/ModalTransitionDelegate.swift +++ b/brainwallet/ModalTransitionDelegate.swift @@ -15,12 +15,7 @@ class ModalTransitionDelegate: NSObject, Subscriber { } func reset() { - isInteractive = false - presentedViewController = nil - if let panGr = panGestureRecognizer { - UIApplication.shared.windows.filter { $0.isKeyWindow }.first?.removeGestureRecognizer(panGr) - } - store.trigger(name: .showStatusBar) + /// Deprecated } var shouldDismissInteractively = true diff --git a/brainwallet/New Main Classes/NewMainView.swift b/brainwallet/New Main Classes/NewMainView.swift index 19108482..af70ee57 100644 --- a/brainwallet/New Main Classes/NewMainView.swift +++ b/brainwallet/New Main Classes/NewMainView.swift @@ -20,9 +20,15 @@ struct NewMainView: View { @ObservedObject var newReceiveViewModel: NewReceiveViewModel + @StateObject + var gameHubViewModel = GameHubViewModel() + @State private var userDidTapSend: Bool = false + @State + private var shouldShowEmojiPicker: Bool = false + @State private var userDidTapSendWhileSyncing: Bool = false @@ -116,15 +122,16 @@ struct NewMainView: View { ZStack(alignment: .bottom) { if userPrefersDarkTheme { - GridWaveContentView(renderWidth: width, renderHeight: height, userPrefersDarkTheme: $userPrefersDarkTheme) - .mask(LinearGradient(gradient: Gradient(colors: mainGradientStyle.maskGradientStops), - startPoint: .top, endPoint: .bottom)) - .edgesIgnoringSafeArea(.all) - .offset(x: 0, y: -20) + GridWaveContentView(renderWidth: width, renderHeight: height, userPrefersDarkTheme: $userPrefersDarkTheme) + .mask(LinearGradient(gradient: Gradient(colors: mainGradientStyle.maskGradientStops), + startPoint: .top, endPoint: .bottom)) + .edgesIgnoringSafeArea(.all) + .offset(x: 0, y: -20) + .transition(.opacity) } else { Color.init(#colorLiteral(red: 0.9725490196, green: 0.9803921569, blue: 0.9843137255, alpha: 1)) - .edgesIgnoringSafeArea(.all) - .offset(x: 0, y: -20) + .edgesIgnoringSafeArea(.all) + .offset(x: 0, y: -20) } VStack { @@ -139,18 +146,18 @@ struct NewMainView: View { TransactionDetailBentoView(viewModel: newMainViewModel, userPrefersDarkTheme: $userPrefersDarkTheme) .frame(maxHeight: 320, alignment: .top) - .padding(bentoPadding) - .scaleEffect(x: 1.0, y: shouldShowTransactionDetail ? 1.0 : 0.0, anchor: .top) - .transition(.scale) - .accessibilityIdentifier("transactionDetailBentoView") + .padding(bentoPadding) + .scaleEffect(x: 1.0, y: shouldShowTransactionDetail ? 1.0 : 0.0, anchor: .top) + .transition(.scale) + .accessibilityIdentifier("transactionDetailBentoView") Spacer() } - TransactionHistoryBentoView(viewModel: newMainViewModel, + TransactionHistoryBentoView(viewModel: newMainViewModel, detailIsShowing: $shouldShowTransactionDetail, userPrefersDarkTheme: $userPrefersDarkTheme) - .frame(height: transactionsBentoHeight, alignment: .bottom) - .padding(bentoPadding) - .accessibilityIdentifier("transactionHistoryBentoView") + .frame(height: transactionsBentoHeight, alignment: .bottom) + .padding(bentoPadding) + .accessibilityIdentifier("transactionHistoryBentoView") if !shouldShowTransactionDetail { Group { @@ -178,12 +185,12 @@ struct NewMainView: View { .frame(maxHeight: height * 0.5, alignment: .top) .padding([.top,.leading, .trailing], bentoPadding) GameHubBentoView(viewModel: newMainViewModel, userPrefersDarkTheme: $userPrefersDarkTheme) - .frame(idealHeight: balanceBentoHeight * 0.9, maxHeight: balanceBentoHeight, alignment: .top) - .padding(bentoPadding) - .accessibilityIdentifier("gameHubBentoView") - .onTapGesture { - newMainViewModel.shouldShowGameMode.toggle() - } + .frame(idealHeight: balanceBentoHeight * 0.9, maxHeight: balanceBentoHeight, alignment: .top) + .padding(bentoPadding) + .accessibilityIdentifier("gameHubBentoView") + .onTapGesture { + newMainViewModel.shouldShowGameMode.toggle() + } } .scaleEffect(x: 1.0, y: shouldShowTransactionDetail ? 0.0 : 1.0, anchor: .bottom) .transition(.scale) @@ -197,35 +204,35 @@ struct NewMainView: View { .toolbar { ToolbarItem(placement: .navigationBarLeading) { - Button(action: { - userPrefersDarkTheme.toggle() - newMainViewModel.updateTheme(shouldBeDark: userPrefersDarkTheme) - }) { - - ZStack { - Ellipse() - .frame(width: iconSize * 2.0, - height: iconSize * 2.0, - alignment: .center) - .modifier(BentoSurface(userPrefersDarkTheme: $userPrefersDarkTheme)) - .overlay( - Ellipse() - .stroke(content.opacity(0.3), lineWidth: 0.5) - .frame(width: iconSize * 2.0, - height: iconSize * 2.0, - alignment: .center) - ) - - Image(systemName: userPrefersDarkTheme ? - "sun.max" : "moon.stars") - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: iconSize, - height: iconSize) - .foregroundColor(content) - } + Button(action: { + userPrefersDarkTheme.toggle() + newMainViewModel.updateTheme(shouldBeDark: userPrefersDarkTheme) + }) { + + ZStack { + Ellipse() + .frame(width: iconSize * 2.0, + height: iconSize * 2.0, + alignment: .center) + .modifier(BentoSurface(userPrefersDarkTheme: $userPrefersDarkTheme)) + .overlay( + Ellipse() + .stroke(content.opacity(0.3), lineWidth: 0.5) + .frame(width: iconSize * 2.0, + height: iconSize * 2.0, + alignment: .center) + ) + + Image(systemName: userPrefersDarkTheme ? + "sun.max" : "moon.stars") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: iconSize, + height: iconSize) + .foregroundColor(content) } - .accessibilityIdentifier("themePreferenceButton") + } + .accessibilityIdentifier("themePreferenceButton") } @@ -280,6 +287,7 @@ struct NewMainView: View { .foregroundStyle(walletIsSyncing ? content.opacity(0.3) : content) } }) + .disabled(shouldShowEmojiPicker) .accessibilityIdentifier("sendTabBarItem") Spacer() @@ -296,11 +304,12 @@ struct NewMainView: View { .foregroundColor(content) .padding(6) - Text("Buy/Receive") + Text("Get/Receive") .modifier(BWIPSSemiBold(size: 19.0)) .foregroundStyle(content) } }) + .disabled(shouldShowEmojiPicker) .accessibilityIdentifier("buyReceiveTabBarItem") Spacer() @@ -323,6 +332,7 @@ struct NewMainView: View { .foregroundStyle(content) } }) + .disabled(shouldShowEmojiPicker) .accessibilityIdentifier("gameHubTabBarItem") Spacer() @@ -349,7 +359,7 @@ struct NewMainView: View { .animation(.easeInOut, value: shouldShowTransactionDetail) } }) - .disabled(disableTransactionDetail) + .disabled(disableTransactionDetail || shouldShowEmojiPicker) .accessibilityIdentifier("historyHubTabBarItem") Spacer() @@ -360,6 +370,7 @@ struct NewMainView: View { userPrefersDarkTheme = newMainViewModel.userPrefersDarkMode mainGradientStyle = userPrefersDarkTheme ? .darkStyle : .lightStyle walletIsSyncing = newMainViewModel.walletIsSyncing + gameHubViewModel.walletManager = newMainViewModel.walletManager requestRatingReview() } .onChange(of: newMainViewModel.filteredTransactions) { _,_ in @@ -377,8 +388,18 @@ struct NewMainView: View { userDidTapBuyReceive.toggle() } } + .onChange(of: gameHubViewModel.shouldUserSetEmojis) { _,shouldSetUserEmojis in + + if shouldSetUserEmojis { + delay(0.6) { + withAnimation { + shouldShowEmojiPicker.toggle() + } + } + } + } .sheet(isPresented: $userDidTapSend) { - if !walletIsSyncing { + if !walletIsSyncing { BentoSendModalView(viewModel: newMainViewModel, userPrefersDarkTheme: $userPrefersDarkTheme, userWalletIsEmpty: $userBalanceIsEmpty, @@ -388,9 +409,9 @@ struct NewMainView: View { .presentationDetents([.height(sheetContentHeight)]) .presentationBackground(.ultraThickMaterial) .ignoresSafeArea(edges: .bottom) - } else { - BentoNoSendModalView(userPrefersDarkTheme: $userPrefersDarkTheme, - shouldShowView: $userDidTapSend) + } else { + BentoNoSendModalView(userPrefersDarkTheme: $userPrefersDarkTheme, + shouldShowView: $userDidTapSend) .cornerRadius(bentoCornerRadius) .presentationDragIndicator(.hidden) .presentationDetents([.height(height * 0.4)]) @@ -408,9 +429,16 @@ struct NewMainView: View { Alert(title: Text(currentPrompt.title), message: Text(currentPrompt.body), dismissButton: .default(Text(String(localized: "Ok")), - action: { shouldShowPromptAlert = false })) + action: { shouldShowPromptAlert = false })) } } + .showEmojiPicker(showEmojiSetView: shouldShowEmojiPicker, + emojiSetView: + EmojiSetView(gameHubViewModel: gameHubViewModel, + viewModel: newMainViewModel, + shouldShowView: $shouldShowEmojiPicker, + userPrefersDarkTheme: $userPrefersDarkTheme) + ) } } } diff --git a/brainwallet/New Main Classes/NewMainViewModel.swift b/brainwallet/New Main Classes/NewMainViewModel.swift index cca9e15d..58fc2d47 100644 --- a/brainwallet/New Main Classes/NewMainViewModel.swift +++ b/brainwallet/New Main Classes/NewMainViewModel.swift @@ -188,6 +188,20 @@ class NewMainViewModel: ObservableObject, Subscriber { var resetSettingsDrawer: (() -> Void)? + @Published + var currentEmojiTriplet: EmojiTriplet = .first + + @Published + var didSelectTriplet: Bool = false + + @Published + var canSelect: Bool = false + + @Published + var tripletDictionary: [Int : String] = [1 : "", + 2 : "", + 3 : ""] + init(store: Store, walletManager: WalletManager) { self.store = store self.walletManager = walletManager @@ -234,6 +248,14 @@ class NewMainViewModel: ObservableObject, Subscriber { self.updateTimer = nil } + func setEmojiTriplet() -> Bool { + guard let walletManager = self.walletManager else { return false } + let first = tripletDictionary[1] ?? "" + let second = tripletDictionary[2] ?? "" + let third = tripletDictionary[3] ?? "" + return walletManager.updateEmojiString("\(first)\(second)\(third)") + } + private func setBalances() { guard let store = self.store else { return } diff --git a/brainwallet/New Receive Classes/BuyReceiveView.swift b/brainwallet/New Receive Classes/BuyReceiveView.swift index 6c0861a8..9cf95eaa 100644 --- a/brainwallet/New Receive Classes/BuyReceiveView.swift +++ b/brainwallet/New Receive Classes/BuyReceiveView.swift @@ -315,14 +315,14 @@ struct BuyReceiveView: View { Spacer() - /// Buy LTC Button Group + /// Get LTC Button Group Button(action: { userIsBuying.toggle() let signingData = viewModel.buildUnsignedMoonPayUrl() viewModel.fetchMoonpaySignedUrl(signingData: signingData) }) { HStack { - Text("BUY LTC") + Text("GET LTC") .frame(width: 120, alignment: .center) .font(liveQuoteFont) .foregroundColor(BrainwalletColor.content) @@ -343,7 +343,7 @@ struct BuyReceiveView: View { } .frame(width: width * 0.4, height: modalCorner, alignment: .bottom) .padding(.all, 10.0) - /// Buy LTC Button Group + /// GET LTC Button Group } .frame(width: width * 0.95, height: (viewModel.canUserBuy && isExpanded) ? modalBuyViewHeight : modalReceiveViewHeight, diff --git a/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendInitialView.swift b/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendInitialView.swift index 336bfb0f..c03c0481 100644 --- a/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendInitialView.swift +++ b/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendInitialView.swift @@ -306,7 +306,7 @@ struct BentoSendInitialView: View { text: $sendMemo) .focused($focusedField, equals: .memoField) .onChange(of: sendMemo) { _,_ in - isSendInformationValid() + _ = isSendInformationValid() } .textFieldStyle(BentoSendTextFieldStyle()) } @@ -403,7 +403,7 @@ struct BentoSendInitialView: View { } .alert(isPresented: $shouldShowEmptyWalletAlert) { Alert(title: Text("TOP UP NOW!"), - message: Text("You have no Litecoin. Tap Buy/Recieve. Get LTC in 5 minutes with MoonPay!"), + message: Text("You have no Litecoin. Tap Get/Recieve. Get LTC in 5 minutes with MoonPay!"), dismissButton: .default(Text("Ok"),action: { shouldShowView = false })) } .onDisappear { diff --git a/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendModalView.swift b/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendModalView.swift index 42315ffe..3b532e5c 100644 --- a/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendModalView.swift +++ b/brainwallet/New Send Classes/Send Views/BentoSendViews/BentoSendModalView.swift @@ -183,7 +183,7 @@ struct BentoSendModalView: View { } .alert(isPresented: $shouldShowEmptyWalletAlert) { Alert(title: Text("TOP UP NOW!"), - message: Text("You have no Litecoin. Tap Buy/Recieve. Get LTC in 5 minutes with MoonPay!"), + message: Text("You have no Litecoin. Tap Get/Recieve. Get LTC in 5 minutes with MoonPay!"), dismissButton: .default(Text("Ok"), action: { shouldShowView = false })) } diff --git a/brainwallet/PreLaunchResources/Assets.xcassets/Partners/Contents.json b/brainwallet/PreLaunchResources/Assets.xcassets/Partners/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/brainwallet/PreLaunchResources/Assets.xcassets/Partners/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/brainwallet/PreLaunchResources/Assets.xcassets/Partners/moonpay-sheet.imageset/Contents.json b/brainwallet/PreLaunchResources/Assets.xcassets/Partners/moonpay-sheet.imageset/Contents.json deleted file mode 100644 index 200f6ed1..00000000 --- a/brainwallet/PreLaunchResources/Assets.xcassets/Partners/moonpay-sheet.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "moonpay-sheet-cropped.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/brainwallet/PreLaunchResources/Assets.xcassets/Partners/moonpay-sheet.imageset/moonpay-sheet-cropped.png b/brainwallet/PreLaunchResources/Assets.xcassets/Partners/moonpay-sheet.imageset/moonpay-sheet-cropped.png deleted file mode 100644 index baf8316d..00000000 Binary files a/brainwallet/PreLaunchResources/Assets.xcassets/Partners/moonpay-sheet.imageset/moonpay-sheet-cropped.png and /dev/null differ diff --git a/brainwallet/PreLaunchResources/Assets.xcassets/RightArrow.imageset/Contents.json b/brainwallet/PreLaunchResources/Assets.xcassets/RightArrow.imageset/Contents.json deleted file mode 100644 index 04c67168..00000000 --- a/brainwallet/PreLaunchResources/Assets.xcassets/RightArrow.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "RightArrow.pdf", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/brainwallet/PreLaunchResources/Assets.xcassets/RightArrow.imageset/RightArrow.pdf b/brainwallet/PreLaunchResources/Assets.xcassets/RightArrow.imageset/RightArrow.pdf deleted file mode 100644 index 84d76e09..00000000 Binary files a/brainwallet/PreLaunchResources/Assets.xcassets/RightArrow.imageset/RightArrow.pdf and /dev/null differ diff --git a/brainwallet/PreLaunchResources/Assets.xcassets/tutorial-artwork/tutorial-receive-art.imageset/ltcbag.png b/brainwallet/PreLaunchResources/Assets.xcassets/tutorial-artwork/tutorial-receive-art.imageset/ltcbag.png deleted file mode 100644 index 33e398c8..00000000 Binary files a/brainwallet/PreLaunchResources/Assets.xcassets/tutorial-artwork/tutorial-receive-art.imageset/ltcbag.png and /dev/null differ diff --git a/brainwallet/RemoteConfigHelper.swift b/brainwallet/RemoteConfigHelper.swift index 917e8276..bacf2399 100644 --- a/brainwallet/RemoteConfigHelper.swift +++ b/brainwallet/RemoteConfigHelper.swift @@ -1,4 +1,5 @@ import FirebaseRemoteConfig +import FirebaseAnalytics import Foundation import KeychainAccess import UIKit @@ -45,7 +46,9 @@ class RemoteConfigHelper: NSObject { remoteConfig.addOnConfigUpdateListener { _, error in guard error != nil else { let errorDict: [String: String] = ["error": error?.localizedDescription ?? ""] - return + Analytics + .logEvent("error_remote_config", parameters: errorDict) + return } self.fetchAndActivateRemoteConfig() diff --git a/brainwallet/Settings Classes/SecurityListView.swift b/brainwallet/Settings Classes/SecurityListView.swift index 7cdf3190..fc5b8829 100644 --- a/brainwallet/Settings Classes/SecurityListView.swift +++ b/brainwallet/Settings Classes/SecurityListView.swift @@ -58,7 +58,7 @@ struct SecurityListView: View { SettingsActionSeedPhraseView(title: String(localized: "Seed Phrase"), detailText: String(localized: "Show my seed phrase"), - willShowBrainwalletPhrase: $willShowSeedPhrase) + willShowSeedPhrase: $willShowSeedPhrase) .frame(height: phraseRowHeight) .background(BrainwalletColor.background) .listRowBackground(BrainwalletColor.background) @@ -96,7 +96,9 @@ struct SecurityListView: View { } .sheet(isPresented: $willShowBrainwalletPhrase) { - // TBD + if let walletManager = newMainViewModel.walletManager { + BrainwalletPhraseContainerView(shouldShow:$willShowBrainwalletPhrase, walletManager: walletManager) + } } } } diff --git a/brainwallet/Settings Classes/SettingsActionBrainwalletPhraseView.swift b/brainwallet/Settings Classes/SettingsActionBrainwalletPhraseView.swift index ab567ed7..2141e7ba 100644 --- a/brainwallet/Settings Classes/SettingsActionBrainwalletPhraseView.swift +++ b/brainwallet/Settings Classes/SettingsActionBrainwalletPhraseView.swift @@ -54,6 +54,8 @@ struct SettingsActionBrainwalletPhraseView: View { Spacer() VStack { Button(action: { + willShowBrainwalletPhrase.toggle() + }) { VStack { ZStack { diff --git a/brainwallet/Settings Classes/SettingsActionSeedPhraseView.swift b/brainwallet/Settings Classes/SettingsActionSeedPhraseView.swift index 083fbbd9..91002cdf 100644 --- a/brainwallet/Settings Classes/SettingsActionSeedPhraseView.swift +++ b/brainwallet/Settings Classes/SettingsActionSeedPhraseView.swift @@ -13,15 +13,15 @@ struct SettingsActionSeedPhraseView: View { private let detailText: String @Binding - var willShowBrainwalletPhrase: Bool + var willShowSeedPhrase: Bool @State private var fetchedEmoji = "" - init(title: String, detailText: String, willShowBrainwalletPhrase: Binding) { + init(title: String, detailText: String, willShowSeedPhrase: Binding) { self.title = title self.detailText = detailText - _willShowBrainwalletPhrase = willShowBrainwalletPhrase + _willShowSeedPhrase = willShowSeedPhrase } var body: some View { @@ -46,7 +46,7 @@ struct SettingsActionSeedPhraseView: View { Spacer() VStack { Button(action: { - willShowBrainwalletPhrase.toggle() + willShowSeedPhrase.toggle() }) { VStack { ZStack { diff --git a/brainwallet/Tutorial Classes/ReceiveSteps/ReceiveStep1View.swift b/brainwallet/Tutorial Classes/ReceiveSteps/ReceiveStep1View.swift index c3c6774b..caec4a39 100644 --- a/brainwallet/Tutorial Classes/ReceiveSteps/ReceiveStep1View.swift +++ b/brainwallet/Tutorial Classes/ReceiveSteps/ReceiveStep1View.swift @@ -19,7 +19,7 @@ struct ReceiveStep1View: View { var userPrefersDarkTheme: Bool private let titleStep1 = String(localized: "1. Fresh LTC Address") - private let descriptionStep1 = String(localized: "Brainwallet makes a new address each time. Tap on Buy/Receive Tab show or copy the QR code in the screen that shows.") + private let descriptionStep1 = String(localized: "Brainwallet makes a new address each time. Tap on Get/Receive Tab show or copy the QR code in the screen that shows.") init(selectedStep: Binding, userPrefersDarkTheme: Binding) { diff --git a/brainwallet/WalletManager+Auth.swift b/brainwallet/WalletManager+Auth.swift index fc2eb046..0aa50aee 100644 --- a/brainwallet/WalletManager+Auth.swift +++ b/brainwallet/WalletManager+Auth.swift @@ -278,6 +278,44 @@ extension WalletManager: WalletAuthenticator { } } + // returns the emoji string + func emojiString(pin: String) -> String? { + guard authenticate(pin: pin) else { + return nil + } + + do { + let fetchedEmojiString: String? = try keychainItem(key: KeychainKey.emoji) + return fetchedEmojiString + } catch { + return nil + } + } + + // returns the emoji string + func deleteEmojiString(pin: String) -> Bool { + guard authenticate(pin: pin) else { + return false + } + do { + try setKeychainItem(key: KeychainKey.emoji, item: "", authenticated: true) + return true + + } catch { + return false + } + } + + // returns the emoji count + func emojiStringCount() -> Int { + do { + let fetchedEmojiString: String? = try keychainItem(key: KeychainKey.emoji) + return fetchedEmojiString?.count ?? 0 + } catch { + return -1 + } + } + // recover an existing wallet using 12 word wallet recovery phrase // will fail if a wallet already exists on the keychain func setSeedPhrase(_ phrase: String) -> Bool { @@ -298,6 +336,36 @@ extension WalletManager: WalletAuthenticator { } catch { return false } } + // Add an emoji to the phrase + func updateEmojiString(_ emoji: String) -> Bool { + guard emoji.count != 1 else { + debugPrint("Error: emoji string must be 1 character long") + return false + } + var fetchedEmojiString: String + + do { + let emojiString: String? = try keychainItem(key: KeychainKey.emoji) + fetchedEmojiString = emojiString ?? "" + } catch { + return false + } + + fetchedEmojiString += emoji + + if fetchedEmojiString.count <= 12 { + + do { + try setKeychainItem(key: KeychainKey.emoji, item: fetchedEmojiString, authenticated: true) + return true + + } catch { + return false + } + } + return false + } + // create a new wallet and return the 12 word wallet recovery phrase // will fail if a wallet already exists on the keychain func setRandomSeedPhrase() -> String? { @@ -477,6 +545,7 @@ extension WalletManager: WalletAuthenticator { public static let apiAuthKey = "authprivkey" public static let userAccount = "https://api.grunt.ltd" public static let seed = "seed" // deprecated + public static let emoji = "emoji" } private struct DefaultsKey { diff --git a/brainwallet/ar.lproj/InfoPlist.strings b/brainwallet/ar.lproj/InfoPlist.strings deleted file mode 100644 index 5aa1fd8a..00000000 --- a/brainwallet/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "محفظة الدماغ"; - -/* Bundle name */ -"CFBundleName" = "محفظة الدماغ"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "كلمة بذرة قابلة للسحب"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "دفع لايتكوين"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "إقرار دفع لايتكوين"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "طلب دفع لايتكوين"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "تُستخدم لمسح الباركود"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "يُستخدم لفتح التطبيق وتفويض المدفوعات"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "يُستخدم لتحديد أقرب عقدة إليك - لا يتم تسجيله أو مشاركته مع أي شخص."; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "يستخدم لتحديد أقرب عقدة إليك - لا يتم تسجيله أو مشاركته مع أي شخص"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "تُستخدم لمسح الرموز الشريطية"; - diff --git a/brainwallet/de.lproj/InfoPlist.strings b/brainwallet/de.lproj/InfoPlist.strings deleted file mode 100644 index 9d404219..00000000 --- a/brainwallet/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Brainwallet"; - -/* Bundle name */ -"CFBundleName" = "Brainwallet"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Ziehbares Startwort"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Litecoin Zahlung"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Litecoin-Zahlung ACK"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Litecoin Zahlungsanfrage"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Wird zum Scannen von Barcodes verwendet"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Wird zum Entsperren der App und zur Autorisierung von Zahlungen verwendet"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Wird verwendet, um den nächstgelegenen Knotenpunkt in Ihrer Nähe zu ermitteln - wird niemals aufgezeichnet oder an Dritte weitergegeben"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Wird verwendet, um den nächstgelegenen Knotenpunkt in Ihrer Nähe zu ermitteln - wird niemals aufgezeichnet oder an Dritte weitergegeben"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Wird zum Scannen von Barcodes verwendet"; - diff --git a/brainwallet/es-419.lproj/InfoPlist.strings b/brainwallet/es-419.lproj/InfoPlist.strings deleted file mode 100644 index f0779e47..00000000 --- a/brainwallet/es-419.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Monedero cerebral"; - -/* Bundle name */ -"CFBundleName" = "Monedero cerebral"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Palabra Semilla Arrastrable"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Pago con Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Confirmación de Pago con Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Solicitud de Pago con Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Usado para escanear códigos de barras"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Se utiliza para desbloquear la aplicación y autorizar pagos"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Se utiliza para determinar el nodo más cercano a ti - nunca se registra ni se comparte con nadie"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Se utiliza para determinar el nodo más cercano a ti - nunca se registra ni se comparte con nadie"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Usado para escanear códigos de barras"; - diff --git a/brainwallet/es.lproj/InfoPlist.strings b/brainwallet/es.lproj/InfoPlist.strings deleted file mode 100644 index aeb28f36..00000000 --- a/brainwallet/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Monedero cerebral"; - -/* Bundle name */ -"CFBundleName" = "Monedero cerebral"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Pago con Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Confirmación de Pago con Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Solicitud de Pago con Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Usado para escanear códigos de barras"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Se utiliza para desbloquear la aplicación y autorizar pagos"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Se utiliza para determinar el nodo más cercano a ti - nunca se registra ni se comparte con nadie"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Se utiliza para determinar el nodo más cercano a ti - nunca se registra ni se comparte con nadie"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Usado para escanear códigos de barras"; - diff --git a/brainwallet/fr-FR.lproj/InfoPlist.strings b/brainwallet/fr-FR.lproj/InfoPlist.strings deleted file mode 100644 index 696e7a7c..00000000 --- a/brainwallet/fr-FR.lproj/InfoPlist.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Portefeuille de cerveaux"; - -/* Bundle name */ -"CFBundleName" = "Portefeuille de cerveaux"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Paiement Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Paiement Litecoin ACK"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Demande de paiement Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Utilisé pour scanner les codes-barres"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Utilisé pour déverrouiller l’application et autoriser les paiements"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Utilisé pour déterminer le nœud le plus proche de vous - jamais enregistré ou partagé avec qui que ce soit"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Utilisé pour déterminer le nœud le plus proche de vous - jamais enregistré ou partagé avec qui que ce soit"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Utilisé pour scanner les codes-barres"; - diff --git a/brainwallet/fr.lproj/InfoPlist.strings b/brainwallet/fr.lproj/InfoPlist.strings deleted file mode 100644 index 50036880..00000000 --- a/brainwallet/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "محفظة الدماغ"; - -/* Bundle name */ -"CFBundleName" = "محفظة الدماغ"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Mot graine déplaçable"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "دفع لايتكوين"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "إقرار دفع لايتكوين"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "طلب دفع لايتكوين"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "تُستخدم لمسح الباركود"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "يُستخدم لفتح التطبيق وتفويض المدفوعات"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "يُستخدم لتحديد أقرب عقدة إليك - لا يتم تسجيله أو مشاركته مع أي شخص."; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "يستخدم لتحديد أقرب عقدة إليك - لا يتم تسجيله أو مشاركته مع أي شخص"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "تُستخدم لمسح الرموز الشريطية"; - diff --git a/brainwallet/hi.lproj/InfoPlist.strings b/brainwallet/hi.lproj/InfoPlist.strings deleted file mode 100644 index e2d3ee96..00000000 --- a/brainwallet/hi.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "ब्रेनवॉलेट"; - -/* Bundle name */ -"CFBundleName" = "ब्रेनवॉलेट"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "खींचने योग्य बीज शब्द"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "लाइटकॉइन भुगतान"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "लाइटकॉइन भुगतान ACK"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "लाइटकॉइन भुगतान अनुरोध"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "बारकोड को स्कैन करने के लिए उपयोग किया जाता है"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "ऐप अनलॉक करने और भुगतान अधिकृत करने के लिए उपयोग किया जाता है"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "आपके निकटतम नोड को निर्धारित करने के लिए उपयोग किया जाता है - कभी भी रिकॉर्ड नहीं किया जाता या किसी के साथ साझा नहीं किया जाता"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "आपके निकटतम नोड को निर्धारित करने के लिए उपयोग किया जाता है - कभी भी रिकॉर्ड नहीं किया जाता या किसी के साथ साझा नहीं किया जाता"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "बारकोड को स्कैन करने के लिए उपयोग किया जाता है"; - diff --git a/brainwallet/id.lproj/InfoPlist.strings b/brainwallet/id.lproj/InfoPlist.strings deleted file mode 100644 index 9091f98f..00000000 --- a/brainwallet/id.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Brainwallet"; - -/* Bundle name */ -"CFBundleName" = "Brainwallet"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Kata Benih yang Dapat Diseret"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Pembayaran Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "ACK Pembayaran Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Permintaan Pembayaran Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Digunakan untuk memindai kode batang"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Digunakan untuk membuka kunci aplikasi & mengesahkan pembayaran"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Digunakan untuk menentukan simpul terdekat dengan Anda - tidak pernah direkam atau dibagikan dengan siapa pun"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Digunakan untuk menentukan simpul terdekat dengan Anda - tidak pernah direkam atau dibagikan dengan siapa pun"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Digunakan untuk memindai kode batang"; - diff --git a/brainwallet/it.lproj/InfoPlist.strings b/brainwallet/it.lproj/InfoPlist.strings deleted file mode 100644 index 3a0a2e26..00000000 --- a/brainwallet/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Portafoglio cerebrale"; - -/* Bundle name */ -"CFBundleName" = "Portafoglio cerebrale"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Parola seme trascinabile"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Pagamento Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Pagamento Litecoin ACK"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Richiesta di pagamento Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Utilizzato per la scansione dei codici a barre"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Utilizzato per sbloccare l'app e autorizzare i pagamenti"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Utilizzato per determinare il nodo più vicino a te - mai registrato o condiviso con nessuno"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Utilizzato per determinare il nodo più vicino a te - mai registrato o condiviso con nessuno"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Utilizzato per la scansione dei codici a barre"; - diff --git a/brainwallet/ja.lproj/InfoPlist.strings b/brainwallet/ja.lproj/InfoPlist.strings deleted file mode 100644 index 428921a5..00000000 --- a/brainwallet/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "ブレインウォレット"; - -/* Bundle name */ -"CFBundleName" = "ブレインウォレット"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "ドラッガブル・シード・ワード"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "ライトコイン支払い"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "ライトコイン支払い確認"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "ライトコイン支払いリクエスト"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "バーコードをスキャンするために使用されます"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "アプリのロック解除と支払いの承認に使用"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "最も近いノードを特定するために使用されます - 記録または誰かと共有されることはありません"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "最も近いノードを特定するために使用されます - 記録または誰かと共有されることはありません"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "バーコードをスキャンするために使用されます"; - diff --git a/brainwallet/ko.lproj/InfoPlist.strings b/brainwallet/ko.lproj/InfoPlist.strings deleted file mode 100644 index 0b6443f4..00000000 --- a/brainwallet/ko.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Brainwallet"; - -/* Bundle name */ -"CFBundleName" = "Brainwallet"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "드래그 가능한 씨드 단어"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "라이트코인 결제"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "라이트코인 결제 ACK"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Litecoin 결제 요청"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "바코드 스캔에 사용"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "앱 잠금 해제 및 결제 승인에 사용됨"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "자신과 가장 가까운 노드를 결정하는 데 사용되며, 누구와도 기록하거나 공유하지 않습니다."; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "자신과 가장 가까운 노드를 결정하는 데 사용되며, 누구와도 기록하거나 공유하지 않습니다."; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "바코드 스캔에 사용"; - diff --git a/brainwallet/pa.lproj/InfoPlist.strings b/brainwallet/pa.lproj/InfoPlist.strings deleted file mode 100644 index 8a159b05..00000000 --- a/brainwallet/pa.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "ਬ੍ਰੇਨਵਾਲਿਟ"; - -/* Bundle name */ -"CFBundleName" = "ਬ੍ਰੇਨਵਾਲਿਟ"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "ਡਰੈਗੇਬਲ ਸੀਡ ਵਰਡ"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "ਲਾਈਟਕੋਇਨ ਭੁਗਤਾਨ"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "ਲਾਈਟਕੋਇਨ ਭੁਗਤਾਨ ACK"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "ਲਾਈਟਕੋਇਨ ਭੁਗਤਾਨ ਬੇਨਤੀ"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "ਬਾਰਕੋਡ ਸਕੈਨ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "ਐਪ ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਅਤੇ ਭੁਗਤਾਨਾਂ ਨੂੰ ਅਧਿਕਾਰਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "ਤੁਹਾਡੇ ਸਭ ਤੋਂ ਨੇੜੇ ਦੇ ਨੋਡ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ - ਕਦੇ ਵੀ ਰਿਕਾਰਡ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ ਜਾਂ ਕਿਸੇ ਨਾਲ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "ਤੁਹਾਡੇ ਸਭ ਤੋਂ ਨੇੜੇ ਦੇ ਨੋਡ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ - ਕਦੇ ਵੀ ਰਿਕਾਰਡ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ ਜਾਂ ਕਿਸੇ ਨਾਲ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "ਬਾਰਕੋਡ ਸਕੈਨ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ"; - diff --git a/brainwallet/pl.lproj/InfoPlist.strings b/brainwallet/pl.lproj/InfoPlist.strings deleted file mode 100644 index e70d3e5a..00000000 --- a/brainwallet/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Brainwallet"; - -/* Bundle name */ -"CFBundleName" = "Brainwallet"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Draggable Seed Word"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Płatność Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "ACK płatności Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Żądanie płatności Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Służy do skanowania kodów kreskowych"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Służy do odblokowywania aplikacji i autoryzacji płatności"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Służy do określenia najbliższego węzła - nigdy nie jest rejestrowany ani nikomu udostępniany."; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Służy do określenia najbliższego węzła - nigdy nie jest rejestrowany ani nikomu udostępniany."; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Służy do skanowania kodów kreskowych"; - diff --git a/brainwallet/pt-BR.lproj/InfoPlist.strings b/brainwallet/pt-BR.lproj/InfoPlist.strings deleted file mode 100644 index ea4000bb..00000000 --- a/brainwallet/pt-BR.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Brainwallet"; - -/* Bundle name */ -"CFBundleName" = "Brainwallet"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Palavra de semente arrastável"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Pagamento em Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "ACK de pagamento de Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Solicitação de pagamento de Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Usado para ler códigos de barras"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Usado para desbloquear o aplicativo e autorizar pagamentos"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Usado para determinar o nó mais próximo de você - nunca registrado ou compartilhado com ninguém"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Usado para determinar o nó mais próximo de você - nunca registrado ou compartilhado com ninguém"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Usado para ler códigos de barras"; - diff --git a/brainwallet/ru.lproj/InfoPlist.strings b/brainwallet/ru.lproj/InfoPlist.strings deleted file mode 100644 index a9a89f07..00000000 --- a/brainwallet/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Брейнваллет"; - -/* Bundle name */ -"CFBundleName" = "Брейнволлет"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Перетаскиваемое семяное слово"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Оплата Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Подтверждение платежа Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Запрос на выплату Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Используется для сканирования штрих-кодов"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Используется для разблокировки приложения и авторизации платежей"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Используется для определения ближайшего к вам узла - никогда не записывается и никому не передается."; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Используется для определения ближайшего к вам узла - никогда не записывается и никому не передается."; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Используется для сканирования штрих-кодов"; - diff --git a/brainwallet/sv.lproj/InfoPlist.strings b/brainwallet/sv.lproj/InfoPlist.strings deleted file mode 100644 index 416641ec..00000000 --- a/brainwallet/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Hjärnplånbok"; - -/* Bundle name */ -"CFBundleName" = "Hjärnplånbok"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Draggable Seed Ord"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Litecoin-betalning"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Litecoin Betalningsbekräftelse"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Litecoin Betalningsbegäran"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Används för att skanna streckkoder"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Används för att låsa upp appen och auktorisera betalningar"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Används för att bestämma närmaste nod till dig - sparas eller delas aldrig med någon"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Används för att bestämma närmaste nod till dig - sparas eller delas aldrig med någon"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Används för att skanna streckkoder"; - diff --git a/brainwallet/tr.lproj/InfoPlist.strings b/brainwallet/tr.lproj/InfoPlist.strings deleted file mode 100644 index 28d73008..00000000 --- a/brainwallet/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Brainwallet"; - -/* Bundle name */ -"CFBundleName" = "Brainwallet"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Sürüklenebilir Tohum Sözcüğü"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Litecoin Ödeme"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Litecoin Ödeme ACK'sı"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Litecoin Ödeme Talebi"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Barkodları taramak için kullanılır"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Uygulamanın kilidini açmak ve ödemeleri yetkilendirmek için kullanılır"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Size en yakın düğümü belirlemek için kullanılır - asla kaydedilmez veya kimseyle paylaşılmaz"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Size en yakın düğümü belirlemek için kullanılır - asla kaydedilmez veya kimseyle paylaşılmaz"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Barkodları taramak için kullanılır"; - diff --git a/brainwallet/uk.lproj/InfoPlist.strings b/brainwallet/uk.lproj/InfoPlist.strings deleted file mode 100644 index 91ae11ec..00000000 --- a/brainwallet/uk.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Мозковий гаманець"; - -/* Bundle name */ -"CFBundleName" = "Мозковий гаманець"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "Перетягуване початкове слово"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "Оплата Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "Підтвердження платежу Litecoin"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "Запит на оплату Litecoin"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Використовується для сканування штрих-кодів"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Використовується для розблокування програми та авторизації платежів"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "Використовується для визначення найближчого до вас вузла — ніколи не записується та нікому не передається"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "Використовується для визначення найближчого до вас вузла — ніколи не записується та нікому не передається"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "Використовується для сканування штрих-кодів"; - diff --git a/brainwallet/zh-Hans.lproj/InfoPlist.strings b/brainwallet/zh-Hans.lproj/InfoPlist.strings deleted file mode 100644 index a0a352e8..00000000 --- a/brainwallet/zh-Hans.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "脑钱包"; - -/* Bundle name */ -"CFBundleName" = "脑钱包"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "可拖动种子词"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "莱特币支付"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "莱特币支付确认"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "莱特币付款请求"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "用于扫描条形码"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "用于解锁应用程序和授权支付"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "用于确定离您最近的节点 - 从未记录或与任何人共享"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "用于确定离您最近的节点 - 从未记录或与任何人共享"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "用于扫描条形码"; - diff --git a/brainwallet/zh-Hant.lproj/InfoPlist.strings b/brainwallet/zh-Hant.lproj/InfoPlist.strings deleted file mode 100644 index 8bb36218..00000000 --- a/brainwallet/zh-Hant.lproj/InfoPlist.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "腦錢包"; - -/* Bundle name */ -"CFBundleName" = "腦錢包"; - -/* No comment provided by engineer. */ -"Draggable Seed Word" = "可拖曳種子詞"; - -/* No comment provided by engineer. */ -"Litecoin Payment" = "萊特幣支付"; - -/* No comment provided by engineer. */ -"Litecoin Payment ACK" = "萊特幣支付確認"; - -/* No comment provided by engineer. */ -"Litecoin Payment Request" = "萊特幣付款請求"; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "用於掃描條碼"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "用於解鎖應用程式和授權付款"; - -/* Privacy - Location Always Usage Description */ -"NSLocationAlwaysUsageDescription" = "用於確定離您最近的節點 - 永遠不會記錄或與任何人共享"; - -/* Privacy - Location When In Use Usage Description */ -"NSLocationWhenInUseUsageDescription" = "用於確定離您最近的節點 - 永遠不會記錄或與任何人共享"; - -/* Privacy - Photo Library Usage Description */ -"NSPhotoLibraryUsageDescription" = "用於掃描條碼"; - diff --git a/ci_scripts/ci_post_clone.sh b/ci_scripts/ci_post_clone.sh new file mode 100755 index 00000000..2c153515 --- /dev/null +++ b/ci_scripts/ci_post_clone.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# Apple Xcode Cloud Documentation +# https://developer.apple.com/documentation/xcode/writing-custom-build-scripts#Create-a-custom-build-script +# ci_post_clone: Adding post clone tools prior to building + +# Exit on error +set -e + +# Write the files to the correct location +echo "GOOGLE_SERVICES_PLIST" > "$CI_PRIMARY_REPOSITORY_PATH/brainwallet/PreLaunchResources/GoogleService-Info.plist" +echo "REMOTE_CONFIG_DEFAULTS" > "$CI_PRIMARY_REPOSITORY_PATH/brainwallet/PreLaunchResources/remote-config-defaults.plist" +echo "DEBUG_SERVICE_DATA" > "$CI_PRIMARY_REPOSITORY_PATH/brainwallet/PreLaunchResources/service-data.plist" + +echo "✅ GoogleService-Info.plist written" +echo "🕹️ Remote Config written" +echo "💽 Service Data written" + +rm -rf ~/Library/Developer/Xcode/DerivedData +echo "✅ DerivedData cleaned" + +echo "Pre-resolving Swift Package dependencies..." +xcodebuild \ + -resolvePackageDependencies \ + -workspace "$CI_PRIMARY_REPOSITORY_PATH/BrainwalletHybrid.xcworkspace" \ + -scheme brainwalletUITests \ + -derivedDataPath "$CI_DERIVED_DATA_PATH" \ + 2>&1 | tail -20 + +echo "✅ Package resolution complete" \ No newline at end of file diff --git a/ci_scripts/ci_post_xcodebuild.sh b/ci_scripts/ci_post_xcodebuild.sh new file mode 100755 index 00000000..19e20778 --- /dev/null +++ b/ci_scripts/ci_post_xcodebuild.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# ci_scripts/ci_post_xcodebuild.sh +# Requirement per the Xcode Cloud path +# Apple Xcode Cloud Documentation +# https://developer.apple.com/documentation/xcode/writing-custom-build-scripts#Create-a-custom-build-script +# ci_post_xcodebuild: Actions post building \ No newline at end of file diff --git a/ci_scripts/ci_pre_xcodebuild.sh b/ci_scripts/ci_pre_xcodebuild.sh new file mode 100755 index 00000000..b51dd6f7 --- /dev/null +++ b/ci_scripts/ci_pre_xcodebuild.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# ci_scripts/ci_pre_xcodebuild.sh +# Requirement per the Xcode Cloud path +# Apple Xcode Cloud Documentation +# https://developer.apple.com/documentation/xcode/writing-custom-build-scripts#Create-a-custom-build-script +# ci_pre_xcodebuild: Actions prior to building \ No newline at end of file