Merge branch 'master' into qrsize

This commit is contained in:
marcosrdz 2021-02-24 20:37:16 -05:00
commit fca73fabb4
199 changed files with 4053 additions and 1795 deletions

View File

@ -21,42 +21,32 @@ const startAndDecrypt = async retry => {
password = await prompt((retry && loc._.bad_password) || loc._.enter_password, loc._.storage_is_encrypted, false);
} while (!password);
}
const success = await BlueApp.loadFromDisk(password);
let success = false;
let wasException = false;
try {
success = await BlueApp.loadFromDisk(password);
} catch (error) {
// in case of exception reading from keystore, lets retry instead of assuming there is no storage and
// proceeding with no wallets
console.warn(error);
wasException = true;
}
if (wasException) {
// retrying, but only once
try {
await new Promise(resolve => setTimeout(resolve, 3000)); // sleep
success = await BlueApp.loadFromDisk(password);
} catch (_) {}
}
if (success) {
console.log('loaded from disk');
// now, lets try to fetch balance and txs for first wallet if it is time for it
/* let hadToRefresh = false;
let noErr = true;
try {
let wallets = BlueApp.getWallets();
if (wallets && wallets[0] && wallets[0].timeToRefreshBalance()) {
console.log('time to refresh wallet #0');
let oldBalance = wallets[0].getBalance();
await wallets[0].fetchBalance();
if (oldBalance !== wallets[0].getBalance() || wallets[0].getUnconfirmedBalance() !== 0 || wallets[0].timeToRefreshTransaction()) {
// balance changed, thus txs too
// or wallet thinks its time to reload TX list
await wallets[0].fetchTransactions();
hadToRefresh = true;
EV(EV.enum.WALLETS_COUNT_CHANGED);
EV(EV.enum.TRANSACTIONS_COUNT_CHANGED);
} else {
console.log('balance not changed');
}
} // end of timeToRefresh
} catch (Err) {
noErr = false;
console.warn(Err);
}
if (hadToRefresh && noErr) {
await BlueApp.saveToDisk(); // caching
} */
// We want to return true to let the UnlockWith screen that its ok to proceed.
return true;
}
if (!success && password) {
if (password) {
// we had password and yet could not load/decrypt
unlockAttempt++;
if (unlockAttempt < 10 || Platform.OS !== 'ios') {

View File

@ -29,9 +29,7 @@ import { LightningCustodianWallet, MultisigHDWallet } from './class';
import { BitcoinUnit } from './models/bitcoinUnits';
import * as NavigationService from './NavigationService';
import WalletGradient from './class/wallet-gradient';
import ToolTip from 'react-native-tooltip';
import { BlurView } from '@react-native-community/blur';
import showPopupMenu from 'react-native-popup-menu-android';
import NetworkTransactionFees, { NetworkTransactionFee, NetworkTransactionFeeType } from './models/networkTransactionFees';
import Biometric from './class/biometrics';
import { getSystemName } from 'react-native-device-info';
@ -43,6 +41,7 @@ import { BlueCurrentTheme } from './components/themes';
import loc, { formatBalance, formatBalanceWithoutSuffix, formatBalancePlain, removeTrailingZeros, transactionTimeToReadable } from './loc';
import Lnurl from './class/lnurl';
import { BlueStorageContext } from './blue_modules/storage-context';
import ToolTipMenu from './components/TooltipMenu';
/** @type {AppStorage} */
const { height, width } = Dimensions.get('window');
const aspectRatio = height / width;
@ -232,7 +231,7 @@ export class BlueWalletNavigationHeader extends Component {
static contextType = BlueStorageContext;
walletBalanceText = React.createRef();
tooltip = React.createRef();
constructor(props) {
super(props);
this.state = {
@ -271,45 +270,6 @@ export class BlueWalletNavigationHeader extends Component {
await this.context.saveToDisk();
};
showAndroidTooltip = () => {
showPopupMenu(this.toolTipMenuOptions(), this.handleToolTipSelection, this.walletBalanceText.current);
};
handleToolTipSelection = item => {
if (item === 'balanceCopy' || item.id === 'balanceCopy') {
this.handleCopyPress();
} else if (item === 'balancePrivacy' || item.id === 'balancePrivacy') {
this.handleBalanceVisibility();
}
};
toolTipMenuOptions() {
return Platform.select({
// NOT WORKING ATM.
// ios: [
// { text: this.state.wallet.hideBalance ? loc.transactions.details_balance_show : loc.transactions.details_balance_hide, onPress: this.handleBalanceVisibility },
// { text: loc.transactions.details_copy, onPress: this.handleCopyPress },
// ],
android: this.state.wallet.hideBalance
? [
{
id: 'balancePrivacy',
label: this.state.wallet.hideBalance ? loc.transactions.details_balance_show : loc.transactions.details_balance_hide,
},
]
: [
{
id: 'balancePrivacy',
label: this.state.wallet.hideBalance ? loc.transactions.details_balance_show : loc.transactions.details_balance_hide,
},
{
id: 'balanceCopy',
label: loc.transactions.details_copy,
},
],
});
}
changeWalletBalanceUnit = () => {
let walletPreviousPreferredUnit = this.state.wallet.getPreferredBalanceUnit();
const wallet = this.state.wallet;
@ -336,7 +296,24 @@ export class BlueWalletNavigationHeader extends Component {
this.props.onManageFundsPressed();
};
showToolTipMenu = () => {
this.tooltip.current.showMenu();
};
handleToolTipOnPress = item => {
console.warn(item);
if (item === 'copyToClipboard') {
this.handleCopyPress();
} else if (item === 'walletBalanceVisibility') {
this.handleBalanceVisibility();
}
};
render() {
const balance =
!this.state.wallet.hideBalance &&
formatBalance(this.state.wallet.getBalance(), this.state.wallet.getPreferredBalanceUnit(), true).toString();
return (
<LinearGradient
colors={WalletGradient.gradientsFor(this.state.wallet.type)}
@ -362,7 +339,6 @@ export class BlueWalletNavigationHeader extends Component {
right: 0,
}}
/>
<Text
numberOfLines={1}
style={{
@ -373,41 +349,45 @@ export class BlueWalletNavigationHeader extends Component {
>
{this.state.wallet.getLabel()}
</Text>
{Platform.OS === 'ios' && (
<ToolTip
ref={tooltip => (this.tooltip = tooltip)}
actions={
this.state.wallet.hideBalance
? [
{
text: this.state.wallet.hideBalance ? loc.transactions.details_balance_show : loc.transactions.details_balance_hide,
onPress: this.handleBalanceVisibility,
},
]
: [
{
text: this.state.wallet.hideBalance ? loc.transactions.details_balance_show : loc.transactions.details_balance_hide,
onPress: this.handleBalanceVisibility,
},
{
text: loc.transactions.details_copy,
onPress: this.handleCopyPress,
},
]
}
/>
)}
<ToolTipMenu
ref={this.tooltip}
anchorRef={this.walletBalanceText}
actions={
this.state.wallet.hideBalance
? [
{
id: 'walletBalanceVisibility',
text: loc.transactions.details_balance_show,
onPress: this.handleBalanceVisibility,
},
]
: [
{
id: 'walletBalanceVisibility',
text: loc.transactions.details_balance_hide,
onPress: this.handleBalanceVisibility,
},
{
id: 'copyToClipboard',
text: loc.transactions.details_copy,
onPress: this.handleCopyPress,
},
]
}
onPress={this.handleToolTipOnPress}
/>
<TouchableOpacity
style={styles.balance}
onPress={this.changeWalletBalanceUnit}
ref={this.walletBalanceText}
onLongPress={() => (Platform.OS === 'ios' ? this.tooltip.showMenu() : this.showAndroidTooltip())}
onLongPress={this.showToolTipMenu}
>
{this.state.wallet.hideBalance ? (
<BluePrivateBalance />
) : (
<Text
testID="WalletBalance"
key={balance} // force component recreation on balance change. To fix right-to-left languages, like Farsi
numberOfLines={1}
adjustsFontSizeToFit
style={{
@ -417,7 +397,7 @@ export class BlueWalletNavigationHeader extends Component {
color: '#fff',
}}
>
{formatBalance(this.state.wallet.getBalance(), this.state.wallet.getPreferredBalanceUnit(), true).toString()}
{balance}
</Text>
)}
</TouchableOpacity>

View File

@ -1,42 +1,17 @@
import React, { useEffect, useState, useRef } from 'react';
import React from 'react';
import LottieView from 'lottie-react-native';
import WalletMigrate from './screen/wallets/walletMigrate';
import * as NavigationService from './NavigationService';
import { StackActions } from '@react-navigation/native';
const LoadingScreen = () => {
const [isMigratingData, setIsMigratinData] = useState(true);
const loadingAnimation = useRef();
const handleMigrationComplete = async () => {
setIsMigratinData(false);
};
const walletMigrate = useRef(new WalletMigrate(handleMigrationComplete));
const replaceStackNavigation = () => {
NavigationService.dispatch(StackActions.replace('UnlockWithScreenRoot'));
};
const onAnimationFinish = () => {
if (isMigratingData) {
loadingAnimation.current.play(0);
} else {
replaceStackNavigation();
}
replaceStackNavigation();
};
useEffect(() => {
walletMigrate.current.start();
}, [walletMigrate]);
return (
<LottieView
ref={loadingAnimation}
source={require('./img/bluewalletsplash.json')}
autoPlay
loop={false}
onAnimationFinish={onAnimationFinish}
/>
);
return <LottieView source={require('./img/bluewalletsplash.json')} autoPlay loop={false} onAnimationFinish={onAnimationFinish} />;
};
export default LoadingScreen;

View File

@ -60,6 +60,7 @@ import SendCreate from './screen/send/create';
import Confirm from './screen/send/confirm';
import PsbtWithHardwareWallet from './screen/send/psbtWithHardwareWallet';
import PsbtMultisig from './screen/send/psbtMultisig';
import PsbtMultisigQRCode from './screen/send/psbtMultisigQRCode';
import Success from './screen/send/success';
import Broadcast from './screen/send/broadcast';
import IsItMyAddress from './screen/send/isItMyAddress';
@ -78,7 +79,6 @@ import DrawerList from './screen/wallets/drawerList';
import { isTablet } from 'react-native-device-info';
import SettingsPrivacy from './screen/settings/SettingsPrivacy';
import LNDViewAdditionalInvoicePreImage from './screen/lnd/lndViewAdditionalInvoicePreImage';
import PsbtMultisigQRCode from './screen/send/psbtMultisigQRCode';
const defaultScreenOptions =
Platform.OS === 'ios'

View File

@ -123,6 +123,12 @@ Please note the values in curly braces should not be translated. These are the n
Transifex automatically creates Pull Request when language reaches 100% translation. We also trigger this by hand before each release, so don't worry if you can't translate everything, every word counts.
## Q&A
Builds automated and tested with BrowserStack
<a href="https://www.browserstack.com/"><img src="https://i.imgur.com/syscHCN.png" width="160px"></a>
## RESPONSIBLE DISCLOSURE
Found critical bugs/vulnerabilities? Please email them bluewallet@bluewallet.io

View File

@ -1,5 +1,11 @@
import { useContext, useEffect } from 'react';
import { updateApplicationContext, watchEvents, useReachability, useInstalled } from 'react-native-watch-connectivity';
import {
updateApplicationContext,
watchEvents,
useReachability,
useInstalled,
transferCurrentComplicationUserInfo,
} from 'react-native-watch-connectivity';
import { InteractionManager } from 'react-native';
import { Chain } from './models/bitcoinUnits';
import loc, { formatBalance, transactionTimeToReadable } from './loc';
@ -7,7 +13,9 @@ import { BlueStorageContext } from './blue_modules/storage-context';
import Notifications from './blue_modules/notifications';
function WatchConnectivity() {
const { walletsInitialized, wallets, fetchWalletTransactions, saveToDisk, txMetadata } = useContext(BlueStorageContext);
const { walletsInitialized, wallets, fetchWalletTransactions, saveToDisk, txMetadata, preferredFiatCurrency } = useContext(
BlueStorageContext,
);
const isReachable = useReachability();
const isInstalled = useInstalled(); // true | false
@ -17,7 +25,20 @@ function WatchConnectivity() {
watchEvents.on('message', handleMessages);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [walletsInitialized, wallets, isReachable, isInstalled]);
}, [walletsInitialized, wallets, preferredFiatCurrency, isReachable, isInstalled]);
useEffect(() => {
if (isInstalled && isReachable && walletsInitialized && preferredFiatCurrency) {
try {
transferCurrentComplicationUserInfo({
preferredFiatCurrency: JSON.parse(preferredFiatCurrency).endPointKey,
});
} catch (e) {
console.log('WatchConnectivity useEffect preferredFiatCurrency error');
console.log(e);
}
}
}, [preferredFiatCurrency, walletsInitialized, isReachable, isInstalled]);
const handleMessages = (message, reply) => {
if (message.request === 'createInvoice') {
@ -28,6 +49,11 @@ function WatchConnectivity() {
sendWalletsToWatch();
} else if (message.message === 'fetchTransactions') {
fetchWalletTransactions().then(() => saveToDisk());
} else if (message.message === 'hideBalance') {
const walletIndex = message.walletIndex;
const wallet = wallets[walletIndex];
wallet.hideBalance = message.hideBalance;
saveToDisk().finally(() => reply({}));
}
};
@ -154,6 +180,7 @@ function WatchConnectivity() {
receiveAddress: receiveAddress,
transactions: watchTransactions,
xpub: wallet.getXpub() ? wallet.getXpub() : wallet.getSecret(),
hideBalance: wallet.hideBalance,
});
}
updateApplicationContext({ wallets: walletsToProcess, randomID: Math.floor(Math.random() * 11) });

View File

@ -136,7 +136,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "6.0.4"
versionName "6.0.6"
multiDexEnabled true
missingDimensionStrategy 'react-native-camera', 'general'
testBuildType System.getProperty('testBuildType', 'debug') // This will later be used to control the test apk build type

View File

@ -422,7 +422,7 @@ module.exports.multiGetTransactionByTxid = async function (txids, batchsize, ver
txdata.result = await mainClient.blockchainTransaction_get(txdata.param, verbose);
}
ret[txdata.param] = txdata.result;
delete ret[txdata.param].hex; // compact
if (ret[txdata.param]) delete ret[txdata.param].hex; // compact
}
}

View File

@ -30,6 +30,7 @@ async function setPrefferedCurrency(item) {
async function getPreferredCurrency() {
const preferredCurrency = await JSON.parse(await AsyncStorage.getItem(AppStorage.PREFERRED_CURRENCY));
await DefaultPreference.setName('group.io.bluewallet.bluewallet');
await DefaultPreference.set('preferredCurrency', preferredCurrency.endPointKey);
await DefaultPreference.set('preferredCurrencyLocale', preferredCurrency.locale.replace('-', '_'));
return preferredCurrency;

View File

@ -170,23 +170,23 @@ const showFilePickerAndReadFile = async function () {
// this is either binary file from ElectrumDesktop OR string file with base64 string in there
file = await _readPsbtFileIntoBase64(uri);
return { data: file, uri: decodeURI(res.uri) };
} else {
if (res.type === DocumentPicker.types.images || res.type.startsWith('image/')) {
return new Promise(resolve => {
const uri = Platform.OS === 'ios' ? res.uri.toString().replace('file://', '') : res.uri;
LocalQRCode.decode(decodeURI(uri), (error, result) => {
if (!error) {
resolve({ data: result, uri: decodeURI(res.uri) });
} else {
resolve({ data: false, uri: false });
}
});
});
} else {
file = await RNFS.readFile(uri);
return { data: file, uri: decodeURI(res.uri) };
}
}
if (res?.type === DocumentPicker.types.images || res?.type?.startsWith('image/')) {
return new Promise(resolve => {
const uri = Platform.OS === 'ios' ? res.uri.toString().replace('file://', '') : res.uri;
LocalQRCode.decode(decodeURI(uri), (error, result) => {
if (!error) {
resolve({ data: result, uri: decodeURI(res.uri) });
} else {
resolve({ data: false, uri: false });
}
});
});
}
file = await RNFS.readFile(uri);
return { data: file, uri: decodeURI(res.uri) };
} catch (err) {
return { data: false, uri: false };
}

View File

@ -21,7 +21,6 @@ export const BlueStorageProvider = ({ children }) => {
const [language, _setLanguage] = useState();
const getPreferredCurrencyAsyncStorage = useAsyncStorage(AppStorage.PREFERRED_CURRENCY).getItem;
const getLanguageAsyncStorage = useAsyncStorage(AppStorage.LANG).getItem;
const [newWalletAdded, setNewWalletAdded] = useState(false);
const [isHandOffUseEnabled, setIsHandOffUseEnabled] = useState(false);
const [isDrawerListBlurred, _setIsDrawerListBlurred] = useState(false);
@ -213,8 +212,6 @@ export const BlueStorageProvider = ({ children }) => {
sleep,
setHodlHodlApiKey,
createFakeStorage,
newWalletAdded,
setNewWalletAdded,
resetWallets,
getHodlHodlApiKey,
decryptStorage,

View File

@ -76,7 +76,6 @@ export class AppStorage {
}
};
storageIsEncrypted = async () => {
let data;
try {
@ -111,11 +110,7 @@ export class AppStorage {
let decrypted;
let num = 0;
for (const value of data) {
try {
decrypted = encryption.decrypt(value, password);
} catch (e) {
console.log(e.message);
}
decrypted = encryption.decrypt(value, password);
if (decrypted) {
usedBucketNum = num;
@ -221,109 +216,104 @@ export class AppStorage {
* @returns {Promise.<boolean>}
*/
async loadFromDisk(password) {
try {
let data = await this.getItem('data');
if (password) {
data = this.decryptData(data, password);
if (data) {
// password is good, cache it
this.cachedPassword = password;
}
let data = await this.getItem('data');
if (password) {
data = this.decryptData(data, password);
if (data) {
// password is good, cache it
this.cachedPassword = password;
}
if (data !== null) {
const realm = await this.getRealm();
data = JSON.parse(data);
if (!data.wallets) return false;
const wallets = data.wallets;
for (const key of wallets) {
// deciding which type is wallet and instatiating correct object
const tempObj = JSON.parse(key);
let unserializedWallet;
switch (tempObj.type) {
case PlaceholderWallet.type:
}
if (data !== null) {
const realm = await this.getRealm();
data = JSON.parse(data);
if (!data.wallets) return false;
const wallets = data.wallets;
for (const key of wallets) {
// deciding which type is wallet and instatiating correct object
const tempObj = JSON.parse(key);
let unserializedWallet;
switch (tempObj.type) {
case PlaceholderWallet.type:
continue;
case SegwitBech32Wallet.type:
unserializedWallet = SegwitBech32Wallet.fromJson(key);
break;
case SegwitP2SHWallet.type:
unserializedWallet = SegwitP2SHWallet.fromJson(key);
break;
case WatchOnlyWallet.type:
unserializedWallet = WatchOnlyWallet.fromJson(key);
unserializedWallet.init();
if (unserializedWallet.isHd() && !unserializedWallet.isXpubValid()) {
continue;
case SegwitBech32Wallet.type:
unserializedWallet = SegwitBech32Wallet.fromJson(key);
break;
case SegwitP2SHWallet.type:
unserializedWallet = SegwitP2SHWallet.fromJson(key);
break;
case WatchOnlyWallet.type:
unserializedWallet = WatchOnlyWallet.fromJson(key);
unserializedWallet.init();
if (unserializedWallet.isHd() && !unserializedWallet.isXpubValid()) {
continue;
}
break;
case HDLegacyP2PKHWallet.type:
unserializedWallet = HDLegacyP2PKHWallet.fromJson(key);
break;
case HDSegwitP2SHWallet.type:
unserializedWallet = HDSegwitP2SHWallet.fromJson(key);
break;
case HDSegwitBech32Wallet.type:
unserializedWallet = HDSegwitBech32Wallet.fromJson(key);
break;
case HDLegacyBreadwalletWallet.type:
unserializedWallet = HDLegacyBreadwalletWallet.fromJson(key);
break;
case HDLegacyElectrumSeedP2PKHWallet.type:
unserializedWallet = HDLegacyElectrumSeedP2PKHWallet.fromJson(key);
break;
case HDSegwitElectrumSeedP2WPKHWallet.type:
unserializedWallet = HDSegwitElectrumSeedP2WPKHWallet.fromJson(key);
break;
case MultisigHDWallet.type:
unserializedWallet = MultisigHDWallet.fromJson(key);
break;
case HDAezeedWallet.type:
unserializedWallet = HDAezeedWallet.fromJson(key);
break;
case LightningCustodianWallet.type: {
/** @type {LightningCustodianWallet} */
unserializedWallet = LightningCustodianWallet.fromJson(key);
let lndhub = false;
try {
lndhub = await AsyncStorage.getItem(AppStorage.LNDHUB);
} catch (Error) {
console.warn(Error);
}
if (unserializedWallet.baseURI) {
unserializedWallet.setBaseURI(unserializedWallet.baseURI); // not really necessary, just for the sake of readability
console.log('using saved uri for for ln wallet:', unserializedWallet.baseURI);
} else if (lndhub) {
console.log('using wallet-wide settings ', lndhub, 'for ln wallet');
unserializedWallet.setBaseURI(lndhub);
} else {
console.log('using default', LightningCustodianWallet.defaultBaseUri, 'for ln wallet');
unserializedWallet.setBaseURI(LightningCustodianWallet.defaultBaseUri);
}
unserializedWallet.init();
break;
}
case LegacyWallet.type:
default:
unserializedWallet = LegacyWallet.fromJson(key);
break;
}
break;
case HDLegacyP2PKHWallet.type:
unserializedWallet = HDLegacyP2PKHWallet.fromJson(key);
break;
case HDSegwitP2SHWallet.type:
unserializedWallet = HDSegwitP2SHWallet.fromJson(key);
break;
case HDSegwitBech32Wallet.type:
unserializedWallet = HDSegwitBech32Wallet.fromJson(key);
break;
case HDLegacyBreadwalletWallet.type:
unserializedWallet = HDLegacyBreadwalletWallet.fromJson(key);
break;
case HDLegacyElectrumSeedP2PKHWallet.type:
unserializedWallet = HDLegacyElectrumSeedP2PKHWallet.fromJson(key);
break;
case HDSegwitElectrumSeedP2WPKHWallet.type:
unserializedWallet = HDSegwitElectrumSeedP2WPKHWallet.fromJson(key);
break;
case MultisigHDWallet.type:
unserializedWallet = MultisigHDWallet.fromJson(key);
break;
case HDAezeedWallet.type:
unserializedWallet = HDAezeedWallet.fromJson(key);
break;
case LightningCustodianWallet.type: {
/** @type {LightningCustodianWallet} */
unserializedWallet = LightningCustodianWallet.fromJson(key);
let lndhub = false;
try {
lndhub = await AsyncStorage.getItem(AppStorage.LNDHUB);
} catch (Error) {
console.warn(Error);
}
this.inflateWalletFromRealm(realm, unserializedWallet);
// done
if (!this.wallets.some(wallet => wallet.getSecret() === unserializedWallet.secret)) {
this.wallets.push(unserializedWallet);
this.tx_metadata = data.tx_metadata;
if (unserializedWallet.baseURI) {
unserializedWallet.setBaseURI(unserializedWallet.baseURI); // not really necessary, just for the sake of readability
console.log('using saved uri for for ln wallet:', unserializedWallet.baseURI);
} else if (lndhub) {
console.log('using wallet-wide settings ', lndhub, 'for ln wallet');
unserializedWallet.setBaseURI(lndhub);
} else {
console.log('using default', LightningCustodianWallet.defaultBaseUri, 'for ln wallet');
unserializedWallet.setBaseURI(LightningCustodianWallet.defaultBaseUri);
}
unserializedWallet.init();
break;
}
case LegacyWallet.type:
default:
unserializedWallet = LegacyWallet.fromJson(key);
break;
}
this.inflateWalletFromRealm(realm, unserializedWallet);
// done
if (!this.wallets.some(wallet => wallet.getSecret() === unserializedWallet.secret)) {
this.wallets.push(unserializedWallet);
this.tx_metadata = data.tx_metadata;
}
realm.close();
return true;
} else {
return false; // failed loading data or loading/decryptin data
}
} catch (error) {
console.warn(error.message);
return false;
realm.close();
return true;
} else {
return false; // failed loading data or loading/decryptin data
}
}

View File

@ -27,7 +27,7 @@ const wif = require('wif');
const prompt = require('../blue_modules/prompt');
function WalletImport() {
const { wallets, pendingWallets, setPendingWallets, saveToDisk, addWallet, setNewWalletAdded } = useContext(BlueStorageContext);
const { wallets, pendingWallets, setPendingWallets, saveToDisk, addWallet } = useContext(BlueStorageContext);
/**
*
@ -53,7 +53,6 @@ function WalletImport() {
}
addWallet(w);
await saveToDisk();
setNewWalletAdded(true);
A(A.ENUM.CREATED_WALLET);
alert(loc.wallets.import_success);
Notifications.majorTomToGroundControl(w.getAllExternalAddresses(), [], []);

View File

@ -1048,4 +1048,51 @@ export class AbstractHDElectrumWallet extends AbstractHDWallet {
}
return false;
}
calculateHowManySignaturesWeHaveFromPsbt(psbt) {
let sigsHave = 0;
for (const inp of psbt.data.inputs) {
if (inp.finalScriptSig || inp.finalScriptWitness || inp.partialSig) sigsHave++;
}
return sigsHave;
}
/**
* Tries to signs passed psbt object (by reference). If there are enough signatures - tries to finalize psbt
* and returns Transaction (ready to extract hex)
*
* @param psbt {Psbt}
* @returns {{ tx: Transaction }}
*/
cosignPsbt(psbt) {
const mnemonic = this.secret;
const seed = bip39.mnemonicToSeed(mnemonic);
const hdRoot = HDNode.fromSeed(seed);
for (let cc = 0; cc < psbt.inputCount; cc++) {
try {
psbt.signInputHD(cc, hdRoot);
} catch (e) {} // protects agains duplicate cosignings
if (!psbt.inputHasHDKey(cc, hdRoot)) {
for (const derivation of psbt.data.inputs[cc].bip32Derivation || []) {
const splt = derivation.path.split('/');
const internal = +splt[splt.length - 2];
const index = +splt[splt.length - 1];
const wif = this._getWIFByIndex(internal, index);
const keyPair = bitcoin.ECPair.fromWIF(wif);
try {
psbt.signInput(cc, keyPair);
} catch (e) {} // protects agains duplicate cosignings or if this output can't be signed with current wallet
}
}
}
let tx = false;
if (this.calculateHowManySignaturesWeHaveFromPsbt(psbt) === psbt.inputCount) {
tx = psbt.finalizeAllInputs().extractTransaction();
}
return { tx };
}
}

View File

@ -119,6 +119,10 @@ export class AbstractWallet {
return false;
}
allowCosignPsbt() {
return false;
}
weOwnAddress(address) {
throw Error('not implemented');
}
@ -164,12 +168,24 @@ export class AbstractWallet {
}
try {
const parsedSecret = JSON.parse(this.secret);
let parsedSecret;
// regex might've matched invalid data. if so, parse newSecret.
if (this.secret.trim().length > 0) {
try {
parsedSecret = JSON.parse(this.secret);
} catch (e) {
parsedSecret = JSON.parse(newSecret);
}
} else {
parsedSecret = JSON.parse(newSecret);
}
if (parsedSecret && parsedSecret.keystore && parsedSecret.keystore.xpub) {
let masterFingerprint = false;
if (parsedSecret.keystore.ckcc_xfp) {
// It is a ColdCard Hardware Wallet
masterFingerprint = Number(parsedSecret.keystore.ckcc_xfp);
} else if (parsedSecret.keystore.root_fingerprint) {
masterFingerprint = Number(parsedSecret.keystore.root_fingerprint);
}
if (parsedSecret.keystore.label) {
this.setLabel(parsedSecret.keystore.label);

View File

@ -21,6 +21,10 @@ export class HDLegacyP2PKHWallet extends AbstractHDElectrumWallet {
return true;
}
allowCosignPsbt() {
return true;
}
getXpub() {
if (this._xpub) {
return this._xpub; // cache hit

View File

@ -32,4 +32,8 @@ export class HDSegwitBech32Wallet extends AbstractHDElectrumWallet {
allowPayJoin() {
return true;
}
allowCosignPsbt() {
return true;
}
}

View File

@ -21,6 +21,10 @@ export class HDSegwitP2SHWallet extends AbstractHDElectrumWallet {
return true;
}
allowCosignPsbt() {
return true;
}
/**
* Get internal/external WIF by wallet index
* @param {Boolean} internal

View File

@ -480,7 +480,7 @@ export class MultisigHDWallet extends AbstractHDElectrumWallet {
}
// is it electrum json?
if (json && json.wallet_type) {
if (json && json.wallet_type && json.wallet_type !== 'standard') {
const mofn = json.wallet_type.split('of');
this.setM(parseInt(mofn[0].trim()));
const n = parseInt(mofn[1].trim());

View File

@ -105,6 +105,7 @@ export class DynamicQRCode extends Component {
return (
<View style={animatedQRCodeStyle.container}>
<TouchableOpacity
testID="DynamicCode"
style={animatedQRCodeStyle.qrcodeContainer}
onPress={() => {
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);

View File

@ -0,0 +1,30 @@
import React, { forwardRef, useEffect } from 'react';
import PropTypes from 'prop-types';
import { View } from 'react-native';
import showPopupMenu from 'react-native-popup-menu-android';
const ToolTipMenu = (props, ref) => {
const handleToolTipSelection = selection => {
props.onPress(selection.id);
};
const showMenu = () => {
const actions = props.actions.map(action => ({ id: action.id, label: action.text }));
showPopupMenu(actions, handleToolTipSelection, props.anchorRef.current);
};
useEffect(() => {
ref.current.showMenu = showMenu;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [ref]);
return <View ref={ref}>{props.children}</View>;
};
export default forwardRef(ToolTipMenu);
ToolTipMenu.propTypes = {
actions: PropTypes.arrayOf(PropTypes.shape).isRequired,
anchorRef: PropTypes.node,
children: PropTypes.node,
onPress: PropTypes.func.isRequired,
};

View File

@ -0,0 +1,28 @@
import React, { useRef, forwardRef, useEffect } from 'react';
import ToolTip from 'react-native-tooltip';
import PropTypes from 'prop-types';
import { View } from 'react-native';
const ToolTipMenu = (props, ref) => {
const toolTip = useRef();
const showMenu = () => {
console.log('Showing ToolTip');
toolTip.current?.showMenu();
};
useEffect(() => {
ref.current.showMenu = showMenu;
}, [ref]);
return (
<View ref={ref}>
<ToolTip ref={toolTip} actions={props.actions} />
</View>
);
};
export default forwardRef(ToolTipMenu);
ToolTipMenu.propTypes = {
actions: PropTypes.arrayOf(PropTypes.shape).isRequired,
};

View File

@ -0,0 +1,5 @@
const ToolTipMenu = props => {
return props.children;
};
export default ToolTipMenu;

View File

@ -20,7 +20,6 @@ import loc, { formatBalance, transactionTimeToReadable } from '../loc';
import { LightningCustodianWallet, MultisigHDWallet, PlaceholderWallet } from '../class';
import WalletGradient from '../class/wallet-gradient';
import { BluePrivateBalance } from '../BlueComponents';
import { BlueStorageContext } from '../blue_modules/storage-context';
const nStyles = StyleSheet.create({
@ -213,6 +212,8 @@ const WalletCarouselItem = ({ item, index, onPress, handleLongPress, isSelectedW
? loc.transactions.pending
: transactionTimeToReadable(item.getLatestTransactionTime());
const balance = !item.hideBalance && formatBalance(Number(item.getBalance()), item.getPreferredBalanceUnit(), true);
return (
<Animated.View
style={[iStyles.root, { opacity, transform: [{ scale: scaleValue }] }]}
@ -240,8 +241,13 @@ const WalletCarouselItem = ({ item, index, onPress, handleLongPress, isSelectedW
{item.hideBalance ? (
<BluePrivateBalance />
) : (
<Text numberOfLines={1} adjustsFontSizeToFit style={[iStyles.balance, { color: colors.inverseForegroundColor }]}>
{formatBalance(Number(item.getBalance()), item.getPreferredBalanceUnit(), true)}
<Text
numberOfLines={1}
key={balance} // force component recreation on balance change. To fix right-to-left languages, like Farsi
adjustsFontSizeToFit
style={[iStyles.balance, { color: colors.inverseForegroundColor }]}
>
{balance}
</Text>
)}
<Text style={iStyles.br} />

View File

@ -47,6 +47,7 @@ export const BlueDefaultTheme = {
feeText: '#81868e',
feeLabel: '#d2f8d6',
feeValue: '#37c0a1',
feeActive: '#d2f8d6',
labelText: '#81868e',
cta2: '#062453',
outputValue: '#13244D',
@ -92,6 +93,7 @@ export const BlueDarkTheme = {
feeText: '#81868e',
feeLabel: '#8EFFE5',
feeValue: '#000000',
feeActive: 'rgba(210,248,214,.2)',
cta2: '#ffffff',
outputValue: '#ffffff',
elevated: '#121212',

29
helpers/scan-qr.js Normal file
View File

@ -0,0 +1,29 @@
/**
* Helper function that navigates to ScanQR screen, and returns promise that will resolve with the result of a scan,
* and then navigates back. If QRCode scan was closed, promise resolves to null.
*
* @param navigateFunc {function}
* @param currentScreenName {string}
*
* @return {Promise<string>}
*/
module.exports = function (navigateFunc, currentScreenName) {
return new Promise(resolve => {
const params = {};
params.showFileImportButton = true;
params.onBarScanned = function (data) {
setTimeout(() => resolve(data.data || data), 1);
navigateFunc(currentScreenName);
};
params.onDismiss = function () {
setTimeout(() => resolve(null), 1);
};
navigateFunc('ScanQRCodeRoot', {
screen: 'ScanQRCode',
params,
});
});
};

View File

@ -18,7 +18,6 @@
3271B0BB236E329400DA766F /* TodayAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3271B0BA236E329400DA766F /* TodayAPI.swift */; };
32B5A32A2334450100F8D608 /* Bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B5A3292334450100F8D608 /* Bridge.swift */; };
32F0A29A2311DBB20095C559 /* ComplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F0A2992311DBB20095C559 /* ComplicationController.swift */; };
5875B7B2D85DC56E00F292FF /* libPods-WalletInformationWidgetExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CC8A6C610EAE90F810EADCC /* libPods-WalletInformationWidgetExtension.a */; platformFilter = ios; };
590C62D2ED8BF487C33945B0 /* libPods-WalletInformationAndMarketWidgetExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 98455D960744E4E5DD50BA87 /* libPods-WalletInformationAndMarketWidgetExtension.a */; platformFilter = ios; };
6D2A6464258BA92D0092292B /* Stickers.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6D2A6463258BA92D0092292B /* Stickers.xcassets */; };
6D2A6468258BA92D0092292B /* Stickers.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6D2A6461258BA92C0092292B /* Stickers.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
@ -31,6 +30,17 @@
6D2AA80A2568B8F40090B089 /* FiatUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2AA8072568B8F40090B089 /* FiatUnit.swift */; };
6D2AA80B2568B8F40090B089 /* FiatUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2AA8072568B8F40090B089 /* FiatUnit.swift */; };
6D32C5C62596CE3A008C077C /* EventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D32C5C52596CE3A008C077C /* EventEmitter.m */; };
6D4AF15925D21172009DD853 /* WidgetAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9A2E6A254BAB1B007B5B82 /* WidgetAPI.swift */; };
6D4AF16325D21185009DD853 /* WidgetDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9A2E6B254BAB1B007B5B82 /* WidgetDataStore.swift */; };
6D4AF16D25D21192009DD853 /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4BFA254FBA0E00E9F9AA /* Models.swift */; };
6D4AF17725D211A3009DD853 /* FiatUnits.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6D2AA7F92568B8750090B089 /* FiatUnits.plist */; };
6D4AF17825D211A3009DD853 /* FiatUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2AA8072568B8F40090B089 /* FiatUnit.swift */; };
6D4AF18425D215D1009DD853 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
6D4AF18525D215D1009DD853 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
6D4AF18625D215D1009DD853 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
6D4AF18725D215D1009DD853 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
6D4AF18825D215D1009DD853 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
6D4AF18925D215D1009DD853 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */; };
6D641F18255226DA003792DF /* MarketView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D641F17255226DA003792DF /* MarketView.swift */; };
6D641F19255226DA003792DF /* MarketView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D641F17255226DA003792DF /* MarketView.swift */; };
6D641F2325525054003792DF /* WalletInformationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D641F2225525053003792DF /* WalletInformationView.swift */; };
@ -51,7 +61,6 @@
6D6CA5332558ED54009312A5 /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEB4BFA254FBA0E00E9F9AA /* Models.swift */; };
6D6CA53C2558F316009312A5 /* WidgetAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9A2E6A254BAB1B007B5B82 /* WidgetAPI.swift */; };
6D6CA5452558F365009312A5 /* WidgetDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9A2E6B254BAB1B007B5B82 /* WidgetDataStore.swift */; };
6D6CA54E2558F497009312A5 /* WidgetAPI+Electrum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6CA5142558EBA3009312A5 /* WidgetAPI+Electrum.swift */; };
6D99465F2555A660000E52E8 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D333B3A252FE1A3004D72DF /* WidgetKit.framework */; platformFilter = ios; };
6D9946602555A660000E52E8 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D333B3C252FE1A3004D72DF /* SwiftUI.framework */; platformFilter = ios; };
6D9946632555A660000E52E8 /* MarketWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D9946622555A660000E52E8 /* MarketWidget.swift */; };
@ -225,7 +234,6 @@
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* BlueWalletTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BlueWalletTests.m; sourceTree = "<group>"; };
04466491BA2D4876A71222FC /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
0CC8A6C610EAE90F810EADCC /* libPods-WalletInformationWidgetExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WalletInformationWidgetExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
13B07F961A680F5B00A75B9A /* BlueWallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BlueWallet.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = BlueWallet/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = BlueWallet/AppDelegate.m; sourceTree = "<group>"; };
@ -254,7 +262,6 @@
334051161886419EA186F4BA /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
367FA8CEB35BC9431019D98A /* Pods-MarketWidgetExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MarketWidgetExtension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MarketWidgetExtension/Pods-MarketWidgetExtension.debug.xcconfig"; sourceTree = "<group>"; };
3703B10AAB374CF896CCC2EA /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = "<group>"; };
3D9CAFACCECFFBFCD9B2BC7E /* Pods-WalletInformationWidgetExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WalletInformationWidgetExtension.release.xcconfig"; path = "Pods/Target Support Files/Pods-WalletInformationWidgetExtension/Pods-WalletInformationWidgetExtension.release.xcconfig"; sourceTree = "<group>"; };
3F7F1B8332C6439793D55B45 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
41BD3AC9FD81723B68A63C12 /* libPods-MarketWidgetExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MarketWidgetExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
44BC9E3EE0E9476A830CCCB9 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
@ -263,8 +270,8 @@
4D746BBE67E84684848246E2 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
4F12F501B686459183E0BE0D /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
5A8F67CF29564E41882ECEF8 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; };
64774910B0DBEC412995CB89 /* Pods-WalletInformationWidgetExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WalletInformationWidgetExtension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WalletInformationWidgetExtension/Pods-WalletInformationWidgetExtension.debug.xcconfig"; sourceTree = "<group>"; };
6A65D81712444D37BA152B06 /* libRNRandomBytes.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRandomBytes.a; sourceTree = "<group>"; };
6D203C2025D4ED2500493AD1 /* BlueWalletWatch.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = BlueWalletWatch.entitlements; sourceTree = "<group>"; };
6D294A7324D510AC0039E22B /* af */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = af; path = af.lproj/Interface.strings; sourceTree = "<group>"; };
6D294A7424D510AC0039E22B /* af */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = af; path = af.lproj/MainInterface.strings; sourceTree = "<group>"; };
6D294A7524D510D60039E22B /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Interface.strings; sourceTree = "<group>"; };
@ -318,6 +325,8 @@
6D32C5C52596CE3A008C077C /* EventEmitter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EventEmitter.m; sourceTree = "<group>"; };
6D333B3A252FE1A3004D72DF /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
6D333B3C252FE1A3004D72DF /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
6D4AF18225D215D0009DD853 /* BlueWalletWatch-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BlueWalletWatch-Bridging-Header.h"; sourceTree = "<group>"; };
6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsExtension.swift; sourceTree = "<group>"; };
6D641F17255226DA003792DF /* MarketView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarketView.swift; sourceTree = "<group>"; };
6D641F2225525053003792DF /* WalletInformationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletInformationView.swift; sourceTree = "<group>"; };
6D641F3425526311003792DF /* SendReceiveButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendReceiveButtons.swift; sourceTree = "<group>"; };
@ -473,7 +482,6 @@
files = (
6DEB4AAF254FB59C00E9F9AA /* SwiftUI.framework in Frameworks */,
6DEB4AAE254FB59C00E9F9AA /* WidgetKit.framework in Frameworks */,
5875B7B2D85DC56E00F292FF /* libPods-WalletInformationWidgetExtension.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -550,7 +558,6 @@
6D333B3A252FE1A3004D72DF /* WidgetKit.framework */,
6D333B3C252FE1A3004D72DF /* SwiftUI.framework */,
98455D960744E4E5DD50BA87 /* libPods-WalletInformationAndMarketWidgetExtension.a */,
0CC8A6C610EAE90F810EADCC /* libPods-WalletInformationWidgetExtension.a */,
41BD3AC9FD81723B68A63C12 /* libPods-MarketWidgetExtension.a */,
);
name = Frameworks;
@ -671,6 +678,8 @@
6D9A2E08254BA348007B5B82 /* Assets.xcassets */,
6DEB4BFA254FBA0E00E9F9AA /* Models.swift */,
6DEB4C3A254FBF4800E9F9AA /* Colors.swift */,
6D4AF18325D215D1009DD853 /* UserDefaultsExtension.swift */,
6D4AF18225D215D0009DD853 /* BlueWalletWatch-Bridging-Header.h */,
);
path = Shared;
sourceTree = "<group>";
@ -735,8 +744,6 @@
FF45EB303C9601ED114589A4 /* Pods-MarketWidgetExtension.release.xcconfig */,
AA7DCFB2C7887DF26EDB5710 /* Pods-WalletInformationAndMarketWidgetExtension.debug.xcconfig */,
7BAA8F97E61B677D33CF1944 /* Pods-WalletInformationAndMarketWidgetExtension.release.xcconfig */,
64774910B0DBEC412995CB89 /* Pods-WalletInformationWidgetExtension.debug.xcconfig */,
3D9CAFACCECFFBFCD9B2BC7E /* Pods-WalletInformationWidgetExtension.release.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
@ -744,6 +751,7 @@
B40D4E31225841EC00428FCC /* BlueWalletWatch */ = {
isa = PBXGroup;
children = (
6D203C2025D4ED2500493AD1 /* BlueWalletWatch.entitlements */,
B40D4E32225841EC00428FCC /* Interface.storyboard */,
B40D4E35225841ED00428FCC /* Assets.xcassets */,
B40D4E37225841ED00428FCC /* Info.plist */,
@ -834,6 +842,7 @@
2130DE983D1D45AC8FC45F7E /* Upload Debug Symbols to Sentry */,
3271B0B6236E2E0700DA766F /* Embed App Extensions */,
C18D00A61007A84C9887DEDE /* [CP] Copy Pods Resources */,
68CD4C52AC5B27E333599B5C /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@ -942,7 +951,6 @@
isa = PBXNativeTarget;
buildConfigurationList = 6DEB4ABB254FB59E00E9F9AA /* Build configuration list for PBXNativeTarget "WalletInformationWidgetExtension" */;
buildPhases = (
ACD6FC5C1476108D882D6B61 /* [CP] Check Pods Manifest.lock */,
6DEB4AA9254FB59B00E9F9AA /* Sources */,
6DEB4AAA254FB59B00E9F9AA /* Frameworks */,
6DEB4AAB254FB59B00E9F9AA /* Resources */,
@ -1034,13 +1042,12 @@
B40D4E2F225841EC00428FCC = {
CreatedOnToolsVersion = 10.2;
DevelopmentTeam = A7W54YZ4WU;
ProvisioningStyle = Manual;
LastSwiftMigration = 1240;
};
B40D4E3B225841ED00428FCC = {
CreatedOnToolsVersion = 10.2;
DevelopmentTeam = A7W54YZ4WU;
LastSwiftMigration = 1130;
ProvisioningStyle = Manual;
SystemCapabilities = {
com.apple.Keychain = {
enabled = 0;
@ -1176,6 +1183,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
6D4AF17725D211A3009DD853 /* FiatUnits.plist in Resources */,
B4EE583C226703320003363C /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1233,6 +1241,24 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
68CD4C52AC5B27E333599B5C /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-BlueWallet/Pods-BlueWallet-frameworks.sh",
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL/OpenSSL.framework/OpenSSL",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BlueWallet/Pods-BlueWallet-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
6F7747C31A9EE6DDC5108476 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -1255,28 +1281,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
ACD6FC5C1476108D882D6B61 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-WalletInformationWidgetExtension-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
C18D00A61007A84C9887DEDE /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -1369,6 +1373,7 @@
files = (
3271B0BB236E329400DA766F /* TodayAPI.swift in Sources */,
3271B0AE236E2E0700DA766F /* TodayViewController.swift in Sources */,
6D4AF18525D215D1009DD853 /* UserDefaultsExtension.swift in Sources */,
32002D9D236FAA9F00B93396 /* TodayDataStore.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1384,6 +1389,7 @@
6D6CA5292558EC52009312A5 /* PriceView.swift in Sources */,
6D2AA80B2568B8F40090B089 /* FiatUnit.swift in Sources */,
6D6CA53C2558F316009312A5 /* WidgetAPI.swift in Sources */,
6D4AF18925D215D1009DD853 /* UserDefaultsExtension.swift in Sources */,
6D6CA5332558ED54009312A5 /* Models.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1402,6 +1408,7 @@
6D99467B2555A68A000E52E8 /* MarketView.swift in Sources */,
6D9946872555A695000E52E8 /* UserDefaultsGroup.swift in Sources */,
6D9946632555A660000E52E8 /* MarketWidget.swift in Sources */,
6D4AF18625D215D1009DD853 /* UserDefaultsExtension.swift in Sources */,
6D6CA5152558EBA4009312A5 /* WidgetAPI+Electrum.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1422,6 +1429,7 @@
6DEB4BFB254FBA0E00E9F9AA /* Models.swift in Sources */,
6D641F18255226DA003792DF /* MarketView.swift in Sources */,
6D6CA5162558EBA4009312A5 /* WidgetAPI+Electrum.swift in Sources */,
6D4AF18825D215D1009DD853 /* UserDefaultsExtension.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1439,7 +1447,7 @@
6D641F3625526311003792DF /* SendReceiveButtons.swift in Sources */,
6DEB4BFC254FBA0E00E9F9AA /* Models.swift in Sources */,
6D641F19255226DA003792DF /* MarketView.swift in Sources */,
6D6CA54E2558F497009312A5 /* WidgetAPI+Electrum.swift in Sources */,
6D4AF18725D215D1009DD853 /* UserDefaultsExtension.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1448,20 +1456,25 @@
buildActionMask = 2147483647;
files = (
B43D037C225847C500FBAA95 /* Wallet.swift in Sources */,
6D4AF17825D211A3009DD853 /* FiatUnit.swift in Sources */,
B43D037A225847C500FBAA95 /* Transaction.swift in Sources */,
32F0A29A2311DBB20095C559 /* ComplicationController.swift in Sources */,
B40D4E602258425500428FCC /* SpecifyInterfaceController.swift in Sources */,
B43D0379225847C500FBAA95 /* WatchDataSource.swift in Sources */,
6D4AF16325D21185009DD853 /* WidgetDataStore.swift in Sources */,
6DFC807224EA2FA9007B8700 /* ViewQRCodefaceController.swift in Sources */,
B40D4E46225841ED00428FCC /* NotificationController.swift in Sources */,
B40D4E5D2258425500428FCC /* InterfaceController.swift in Sources */,
B43D037B225847C500FBAA95 /* TransactionTableRow.swift in Sources */,
B43D037D225847C500FBAA95 /* WalletInformation.swift in Sources */,
6D4AF15925D21172009DD853 /* WidgetAPI.swift in Sources */,
B40D4E642258425500428FCC /* WalletDetailsInterfaceController.swift in Sources */,
B40D4E44225841ED00428FCC /* ExtensionDelegate.swift in Sources */,
B40D4E682258426B00428FCC /* KeychainSwiftDistrib.swift in Sources */,
6D4AF16D25D21192009DD853 /* Models.swift in Sources */,
B40D4E632258425500428FCC /* ReceiveInterfaceController.swift in Sources */,
B43D0378225847C500FBAA95 /* WalletGradient.swift in Sources */,
6D4AF18425D215D1009DD853 /* UserDefaultsExtension.swift in Sources */,
B40D4E5E2258425500428FCC /* NumericKeypadInterfaceController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1617,7 +1630,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1660,7 +1673,7 @@
"$(inherited)",
"$(PROJECT_DIR)",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1688,8 +1701,8 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "TodayExtension/BlueWallet - Bitcoin Price.entitlements";
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
@ -1701,12 +1714,12 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
PRODUCT_NAME = "BlueWallet - Bitcoin Price";
PROVISIONING_PROFILE_SPECIFIER = io.bluewallet.bluewallet.TodayExtension;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@ -1726,8 +1739,8 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "TodayExtension/BlueWallet - Bitcoin Price.entitlements";
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@ -1740,11 +1753,11 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.TodayExtension;
PRODUCT_NAME = "BlueWallet - Bitcoin Price";
PROVISIONING_PROFILE_SPECIFIER = io.bluewallet.bluewallet.TodayExtension;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SWIFT_OPTIMIZATION_LEVEL = "-O";
@ -1772,7 +1785,7 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = Stickers/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
@ -1793,9 +1806,9 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@ -1803,11 +1816,11 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = Stickers/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = Stickers;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = "1,2";
};
@ -1826,8 +1839,8 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = PriceWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
@ -1839,14 +1852,14 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = PriceWidget;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -1867,8 +1880,8 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = PriceWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@ -1881,13 +1894,13 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.PriceWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = PriceWidget;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@ -1908,27 +1921,27 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = MarketWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "$(SRCROOT)/WalletInformationWidget/Widgets/MarketWidget/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = MarketWidget;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -1950,27 +1963,27 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = MarketWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = A7W54YZ4WU;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "$(SRCROOT)/WalletInformationWidget/Widgets/MarketWidget/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = MarketWidget;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@ -1991,28 +2004,28 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = MarketWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_EXPAND_BUILD_SETTINGS = YES;
INFOPLIST_FILE = WalletInformationWidget/Widgets/MarketWidget/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = WalletInformationAndMarketWidget;
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -2034,8 +2047,8 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = MarketWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@ -2043,20 +2056,20 @@
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_EXPAND_BUILD_SETTINGS = YES;
INFOPLIST_FILE = WalletInformationWidget/Widgets/MarketWidget/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationAndMarketWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = WalletInformationAndMarketWidget;
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@ -2065,7 +2078,6 @@
};
6DEB4AB9254FB59E00E9F9AA /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 64774910B0DBEC412995CB89 /* Pods-WalletInformationWidgetExtension.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
@ -2077,27 +2089,27 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = WalletInformationWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = WalletInformationWidget/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "Wallet Information Widget";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -2107,7 +2119,6 @@
};
6DEB4ABA254FB59E00E9F9AA /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3D9CAFACCECFFBFCD9B2BC7E /* Pods-WalletInformationWidgetExtension.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
@ -2119,27 +2130,27 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = WalletInformationWidgetExtension.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = A7W54YZ4WU;
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = WalletInformationWidget/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.WalletInformationWidget;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "Wallet Information Widget";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MACCATALYST = YES;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@ -2263,11 +2274,11 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "BlueWalletWatch Extension/BlueWalletWatch Extension.entitlements";
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "BlueWalletWatch Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
@ -2275,12 +2286,12 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
PRODUCT_NAME = "${TARGET_NAME}";
PROVISIONING_PROFILE_SPECIFIER = "BlueWallet for Apple Watch Extension Dist";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = watchos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@ -2302,12 +2313,12 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "BlueWalletWatch Extension/BlueWalletWatch Extension.entitlements";
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = A7W54YZ4WU;
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "BlueWalletWatch Extension/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
@ -2315,11 +2326,11 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
PRODUCT_NAME = "${TARGET_NAME}";
PROVISIONING_PROFILE_SPECIFIER = "BlueWallet for Apple Watch Extension Dist";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = watchos;
SKIP_INSTALL = YES;
SWIFT_COMPILATION_MODE = wholemodule;
@ -2338,26 +2349,29 @@
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_ENTITLEMENTS = BlueWalletWatch/BlueWalletWatch.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "BlueWallet for Apple Watch Distribution";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = watchos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OBJC_BRIDGING_HEADER = "WalletInformationWidget/Widgets/Shared/BlueWalletWatch-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = 4;
@ -2373,26 +2387,29 @@
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CODE_SIGN_ENTITLEMENTS = BlueWalletWatch/BlueWalletWatch.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 310;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = A7W54YZ4WU;
DEVELOPMENT_TEAM = "";
GCC_C_LANGUAGE_STANDARD = gnu11;
IBSC_MODULE = BlueWalletWatch_Extension;
INFOPLIST_FILE = BlueWalletWatch/Info.plist;
MARKETING_VERSION = 6.0.4;
MARKETING_VERSION = 6.0.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "BlueWallet for Apple Watch Distribution";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = watchos;
SKIP_INSTALL = YES;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OBJC_BRIDGING_HEADER = "WalletInformationWidget/Widgets/Shared/BlueWalletWatch-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = 4;

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6D99465D2555A660000E52E8"
BuildableName = "MarketWidgetExtension.appex"
BlueprintName = "MarketWidgetExtension"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "_XCWidgetKind"
value = ""
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetDefaultView"
value = "timeline"
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetFamily"
value = "medium"
isEnabled = "NO">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6D6CA4B7255872E3009312A5"
BuildableName = "PriceWidgetExtension.appex"
BlueprintName = "PriceWidgetExtension"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<RemoteRunnable
runnableDebuggingMode = "1"
BundleIdentifier = "com.apple.widgetkit.simulator"
RemotePath = "/System/Library/CoreServices/WidgetKit Simulator.app/Contents/MacOS/WidgetKit Simulator">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6D6CA4B7255872E3009312A5"
BuildableName = "PriceWidgetExtension.appex"
BlueprintName = "PriceWidgetExtension"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</RemoteRunnable>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</MacroExpansion>
<EnvironmentVariables>
<EnvironmentVariable
key = "_XCWidgetKind"
value = ""
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetDefaultView"
value = "timeline"
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetFamily"
value = "medium"
isEnabled = "NO">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6D2A6460258BA92C0092292B"
BuildableName = "Stickers.appex"
BlueprintName = "Stickers"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3271B0A8236E2E0700DA766F"
BuildableName = "BlueWallet - Bitcoin Price.appex"
BlueprintName = "TodayExtension"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6D9A2E01254BA347007B5B82"
BuildableName = "WalletInformationAndMarketWidgetExtension.appex"
BlueprintName = "WalletInformationAndMarketWidgetExtension"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "_XCWidgetKind"
value = ""
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetDefaultView"
value = "timeline"
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetFamily"
value = "medium"
isEnabled = "NO">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1240"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6DEB4AAC254FB59B00E9F9AA"
BuildableName = "WalletInformationWidgetExtension.appex"
BlueprintName = "WalletInformationWidgetExtension"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "_XCWidgetKind"
value = ""
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetDefaultView"
value = "timeline"
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable
key = "_XCWidgetFamily"
value = "medium"
isEnabled = "NO">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "BlueWallet.app"
BlueprintName = "BlueWallet"
ReferencedContainer = "container:BlueWallet.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -16,8 +16,6 @@
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>
<key>com.apple.security.personal-information.photos-library</key>
<true/>
</dict>

View File

@ -30,8 +30,6 @@
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>
<key>com.apple.security.personal-information.photos-library</key>
<true/>
</dict>

View File

@ -155,13 +155,13 @@
<key>NSLocationAlwaysUsageDescription</key>
<string>This alert should not show up as we do not require this data</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your authorization is required in order to provide you local offers.</string>
<string>This alert should not show up as we do not require this data</string>
<key>NSMicrophoneUsageDescription</key>
<string>This alert should not show up as we do not require this data</string>
<key>NSMotionUsageDescription</key>
<string>This alert should not show up as we do not require this data</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>This alert should not show up as we do not require this data</string>
<string>Your authorization is required to save this image.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>In order to import an image for scanning, we need your permission to access your photo library.</string>
<key>NSSpeechRecognitionUsageDescription</key>

View File

@ -10,47 +10,289 @@ import ClockKit
class ComplicationController: NSObject, CLKComplicationDataSource {
// MARK: - Timeline Configuration
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward, .backward])
// MARK: - Timeline Configuration
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([])
}
func getTimelineStartDate(for complication: CLKComplication, withHandler handler: @escaping (Date?) -> Void) {
handler(nil)
}
func getTimelineEndDate(for complication: CLKComplication, withHandler handler: @escaping (Date?) -> Void) {
handler(nil)
}
func getPrivacyBehavior(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void) {
handler(.showOnLockScreen)
}
// MARK: - Timeline Population
func getCurrentTimelineEntry(
for complication: CLKComplication,
withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void)
{
let marketData: WidgetDataStore? = UserDefaults.standard.codable(forKey: MarketData.string)
let entry: CLKComplicationTimelineEntry
let date: Date
let valueLabel: String
let currencySymbol: String
let timeLabel: String
if let price = marketData?.formattedRateForComplication, let marketDatadata = marketData?.date, let lastUpdated = marketData?.formattedDate {
date = marketDatadata
valueLabel = price
timeLabel = lastUpdated
if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
currencySymbol = preferredFiatUnit.symbol
} else {
currencySymbol = fiatUnit(currency: "USD")!.symbol
}
} else {
valueLabel = "--"
timeLabel = "--"
currencySymbol = fiatUnit(currency: "USD")!.symbol
date = Date()
}
func getTimelineStartDate(for complication: CLKComplication, withHandler handler: @escaping (Date?) -> Void) {
let line1Text = CLKSimpleTextProvider(text:valueLabel)
let line2Text = CLKSimpleTextProvider(text:currencySymbol)
switch complication.family {
case .circularSmall:
let template = CLKComplicationTemplateCircularSmallStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = line2Text
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
case .utilitarianSmallFlat:
let template = CLKComplicationTemplateUtilitarianSmallFlat()
if #available(watchOSApplicationExtension 6.0, *) {
template.textProvider = CLKTextProvider(format: "%@%@", currencySymbol, valueLabel)
} else {
handler(nil)
}
func getTimelineEndDate(for complication: CLKComplication, withHandler handler: @escaping (Date?) -> Void) {
}
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
case .utilitarianSmall:
let template = CLKComplicationTemplateUtilitarianSmallRingImage()
template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "Complication/Utilitarian")!)
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
case .graphicCircular:
if #available(watchOSApplicationExtension 6.0, *) {
let template = CLKComplicationTemplateGraphicCircularStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = line2Text
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
} else {
handler(nil)
}
func getPrivacyBehavior(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void) {
handler(.showOnLockScreen)
}
// MARK: - Timeline Population
func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
// Call the handler with the current timeline entry
}
case .modularSmall:
let template = CLKComplicationTemplateModularSmallStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = line2Text
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
case .graphicCorner:
let template = CLKComplicationTemplateGraphicCornerStackText()
if #available(watchOSApplicationExtension 6.0, *) {
template.outerTextProvider = CLKTextProvider(format: "%@", valueLabel)
template.innerTextProvider = CLKTextProvider(format: "%@", currencySymbol)
} else {
handler(nil)
}
func getTimelineEntries(for complication: CLKComplication, before date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
// Call the handler with the timeline entries prior to the given date
}
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
case .graphicBezel:
let template = CLKComplicationTemplateGraphicBezelCircularText()
if #available(watchOSApplicationExtension 6.0, *) {
template.textProvider = CLKTextProvider(format: "%@%@", currencySymbol, valueLabel)
let imageProvider = CLKFullColorImageProvider(fullColorImage: UIImage(named: "Complication/Graphic Bezel")!)
let circularTemplate = CLKComplicationTemplateGraphicCircularImage()
circularTemplate.imageProvider = imageProvider
template.circularTemplate = circularTemplate
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
} else {
handler(nil)
}
func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
// Call the handler with the timeline entries after to the given date
}
case .utilitarianLarge:
if #available(watchOSApplicationExtension 7.0, *) {
let textProvider = CLKTextProvider(format: "%@%@", currencySymbol, valueLabel)
let template = CLKComplicationTemplateUtilitarianLargeFlat(textProvider: textProvider)
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
} else {
handler(nil)
}
// MARK: - Placeholder Templates
func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
// This method will be called once per supported complication, and the results will be cached
}
case .modularLarge:
let template = CLKComplicationTemplateModularLargeStandardBody()
if #available(watchOSApplicationExtension 6.0, *) {
template.headerTextProvider = CLKTextProvider(format: "Bitcoin Price")
template.body1TextProvider = CLKTextProvider(format: "%@%@", currencySymbol, valueLabel)
template.body2TextProvider = CLKTextProvider(format: "%@", timeLabel)
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
} else {
handler(nil)
}
case .extraLarge:
let template = CLKComplicationTemplateExtraLargeStackText()
if #available(watchOSApplicationExtension 6.0, *) {
template.line1TextProvider = CLKTextProvider(format: "%@%@", currencySymbol, valueLabel)
template.line2TextProvider = CLKTextProvider(format: "%@", timeLabel)
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
} else {
handler(nil)
}
case .graphicRectangular:
let template = CLKComplicationTemplateGraphicRectangularStandardBody()
if #available(watchOSApplicationExtension 6.0, *) {
template.headerTextProvider = CLKTextProvider(format: "Bitcoin Price")
template.body1TextProvider = CLKTextProvider(format: "%@%@", currencySymbol, valueLabel)
template.body2TextProvider = CLKTextProvider(format: "%@", timeLabel)
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
} else {
handler(nil)
}
case .graphicExtraLarge:
if #available(watchOSApplicationExtension 7.0, *) {
let template = CLKComplicationTemplateGraphicExtraLargeCircularStackText()
template.line1TextProvider = CLKTextProvider(format: "%@%@", currencySymbol, valueLabel)
template.line1TextProvider = CLKTextProvider(format: "%@", timeLabel)
entry = CLKComplicationTimelineEntry(date: date, complicationTemplate: template)
handler(entry)
} else {
handler(nil)
}
@unknown default:
fatalError()
}
}
}
func getTimelineEntries(for complication: CLKComplication, before date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
// Call the handler with the timeline entries prior to the given date
handler(nil)
}
func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
// Call the handler with the timeline entries after to the given date
handler(nil)
}
// MARK: - Placeholder Templates
func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
// This method will be called once per supported complication, and the results will be cached
let line1Text = CLKSimpleTextProvider(text:"46 K")
let line2Text = CLKSimpleTextProvider(text:"$")
let lineTimeText = CLKSimpleTextProvider(text:"3:40 PM")
switch complication.family {
case .circularSmall:
let template = CLKComplicationTemplateCircularSmallStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = line2Text
handler(template)
case .utilitarianSmallFlat:
let template = CLKComplicationTemplateUtilitarianSmallFlat()
if #available(watchOSApplicationExtension 6.0, *) {
template.textProvider = CLKTextProvider(format: "%@", "$46,134")
} else {
handler(nil)
}
handler(template)
case .utilitarianSmall:
let template = CLKComplicationTemplateUtilitarianSmallRingImage()
template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "Complication/Utilitarian")!)
handler(template)
case .graphicCircular:
if #available(watchOSApplicationExtension 6.0, *) {
let template = CLKComplicationTemplateGraphicCircularStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = line2Text
handler(template)
} else {
handler(nil)
}
case .graphicCorner:
let template = CLKComplicationTemplateGraphicCornerStackText()
if #available(watchOSApplicationExtension 6.0, *) {
template.outerTextProvider = CLKTextProvider(format: "46,134")
template.innerTextProvider = CLKTextProvider(format: "$")
} else {
handler(nil)
}
handler(template)
case .modularSmall:
let template = CLKComplicationTemplateModularSmallStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = line2Text
handler(template)
case .utilitarianLarge:
if #available(watchOSApplicationExtension 7.0, *) {
let textProvider = CLKTextProvider(format: "%@%@", "$", "46,000")
let template = CLKComplicationTemplateUtilitarianLargeFlat(textProvider: textProvider)
handler(template)
} else {
handler(nil)
}
case .graphicBezel:
let template = CLKComplicationTemplateGraphicBezelCircularText()
if #available(watchOSApplicationExtension 6.0, *) {
template.textProvider = CLKTextProvider(format: "%@%@", "$S", "46,000")
let imageProvider = CLKFullColorImageProvider(fullColorImage: UIImage(named: "Complication/Graphic Bezel")!)
let circularTemplate = CLKComplicationTemplateGraphicCircularImage()
circularTemplate.imageProvider = imageProvider
template.circularTemplate = circularTemplate
handler(template)
} else {
handler(nil)
}
case .modularLarge:
let template = CLKComplicationTemplateModularLargeStandardBody()
if #available(watchOSApplicationExtension 6.0, *) {
template.headerTextProvider = CLKTextProvider(format: "Bitcoin Price")
template.body1TextProvider = CLKTextProvider(format: "%@%@", "$S", "46,000")
template.body2TextProvider = lineTimeText
handler(template)
} else {
handler(nil)
}
case .extraLarge:
let template = CLKComplicationTemplateExtraLargeStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = lineTimeText
handler(template)
case .graphicRectangular:
let template = CLKComplicationTemplateGraphicRectangularStandardBody()
if #available(watchOSApplicationExtension 6.0, *) {
template.headerTextProvider = CLKTextProvider(format: "Bitcoin Price")
template.body1TextProvider = CLKTextProvider(format: "%@%@", "$S", "46,000")
template.body2TextProvider = CLKTextProvider(format: "%@", Date().description)
handler(template)
} else {
handler(nil)
}
case .graphicExtraLarge:
if #available(watchOSApplicationExtension 7.0, *) {
let template = CLKComplicationTemplateGraphicExtraLargeCircularStackText()
template.line1TextProvider = line1Text
template.line2TextProvider = line2Text
handler(template)
} else {
handler(nil)
}
@unknown default:
fatalError()
}
}

View File

@ -7,50 +7,99 @@
//
import WatchKit
import ClockKit
class ExtensionDelegate: NSObject, WKExtensionDelegate {
func applicationDidFinishLaunching() {
// Perform any final initialization of your application.
func applicationDidFinishLaunching() {
// Perform any final initialization of your application.
scheduleNextReload()
ExtensionDelegate.preferredFiatCurrencyChanged()
}
static func preferredFiatCurrencyChanged() {
let fiatUnitUserDefaults: FiatUnit
if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
fiatUnitUserDefaults = preferredFiatUnit
} else {
fiatUnitUserDefaults = fiatUnit(currency: "USD")!
}
func applicationDidBecomeActive() {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillResignActive() {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, etc.
}
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
// Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one.
for task in backgroundTasks {
// Use a switch statement to check the task type
switch task {
case let backgroundTask as WKApplicationRefreshBackgroundTask:
// Be sure to complete the background task once youre done.
backgroundTask.setTaskCompletedWithSnapshot(false)
case let snapshotTask as WKSnapshotRefreshBackgroundTask:
// Snapshot tasks have a unique completion call, make sure to set your expiration date
snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil)
case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:
// Be sure to complete the connectivity task once youre done.
connectivityTask.setTaskCompletedWithSnapshot(false)
case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
// Be sure to complete the URL session task once youre done.
urlSessionTask.setTaskCompletedWithSnapshot(false)
case let relevantShortcutTask as WKRelevantShortcutRefreshBackgroundTask:
// Be sure to complete the relevant-shortcut task once you're done.
relevantShortcutTask.setTaskCompletedWithSnapshot(false)
case let intentDidRunTask as WKIntentDidRunRefreshBackgroundTask:
// Be sure to complete the intent-did-run task once you're done.
intentDidRunTask.setTaskCompletedWithSnapshot(false)
default:
// make sure to complete unhandled task types
task.setTaskCompletedWithSnapshot(false)
}
WidgetAPI.fetchPrice(currency: fiatUnitUserDefaults.endPointKey) { (data, error) in
if let data = data, let encodedData = try? PropertyListEncoder().encode(data) {
UserDefaults.standard.set(encodedData, forKey: MarketData.string)
UserDefaults.standard.synchronize()
let server = CLKComplicationServer.sharedInstance()
for complication in server.activeComplications ?? [] {
server.reloadTimeline(for: complication)
}
}
}
}
func nextReloadTime(after date: Date) -> Date {
let calendar = Calendar(identifier: .gregorian)
return calendar.date(byAdding: .minute, value: 10, to: date)!
}
func scheduleNextReload() {
let targetDate = nextReloadTime(after: Date())
NSLog("ExtensionDelegate: scheduling next update at %@", "\(targetDate)")
WKExtension.shared().scheduleBackgroundRefresh(
withPreferredDate: targetDate,
userInfo: nil,
scheduledCompletion: { _ in }
)
}
func reloadActiveComplications() {
let server = CLKComplicationServer.sharedInstance()
for complication in server.activeComplications ?? [] {
server.reloadTimeline(for: complication)
}
}
func applicationDidBecomeActive() {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillResignActive() {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, etc.
}
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for task in backgroundTasks {
switch task {
case let backgroundTask as WKApplicationRefreshBackgroundTask:
NSLog("ExtensionDelegate: handling WKApplicationRefreshBackgroundTask")
scheduleNextReload()
let fiatUnitUserDefaults: FiatUnit
if let preferredFiatCurrency = UserDefaults.standard.string(forKey: "preferredFiatCurrency"), let preferredFiatUnit = fiatUnit(currency: preferredFiatCurrency) {
fiatUnitUserDefaults = preferredFiatUnit
} else {
fiatUnitUserDefaults = fiatUnit(currency: "USD")!
}
WidgetAPI.fetchPrice(currency: fiatUnitUserDefaults.endPointKey) { [weak self] (data, error) in
if let data = data, let encodedData = try? PropertyListEncoder().encode(data) {
UserDefaults.standard.set(encodedData, forKey: MarketData.string)
UserDefaults.standard.synchronize()
self?.reloadActiveComplications()
backgroundTask.setTaskCompletedWithSnapshot(false)
}
}
default:
task.setTaskCompletedWithSnapshot(false)
}
}
}
}

View File

@ -25,10 +25,12 @@
<key>CLKComplicationSupportedFamilies</key>
<array>
<string>CLKComplicationFamilyCircularSmall</string>
<string>CLKComplicationFamilyExtraLarge</string>
<string>CLKComplicationFamilyGraphicBezel</string>
<string>CLKComplicationFamilyGraphicCircular</string>
<string>CLKComplicationFamilyGraphicRectangular</string>
<string>CLKComplicationFamilyGraphicCorner</string>
<string>CLKComplicationFamilyExtraLarge</string>
<string>CLKComplicationFamilyGraphicExtraLarge</string>
<string>CLKComplicationFamilyModularLarge</string>
<string>CLKComplicationFamilyModularSmall</string>
<string>CLKComplicationFamilyUtilitarianLarge</string>

View File

@ -38,8 +38,9 @@ class InterfaceController: WKInterfaceController {
if wallet.identifier == nil {
WatchDataSource.shared.wallets[index].identifier = index
}
controller.walletBalanceLabel.setHidden(wallet.hideBalance)
controller.name = wallet.label
controller.balance = wallet.balance
controller.balance = wallet.hideBalance ? "" : wallet.balance
controller.type = WalletGradient(rawValue: wallet.type) ?? .SegwitHD
}
noWalletsAvailableLabel.setHidden(!WatchDataSource.shared.wallets.isEmpty)

View File

@ -23,8 +23,9 @@ class Wallet: NSObject, NSCoding {
let receiveAddress: String
let transactions: [Transaction]
let xpub: String?
let hideBalance: Bool
init(label: String, balance: String, type: String, preferredBalanceUnit: String, receiveAddress: String, transactions: [Transaction], identifier: Int, xpub: String?) {
init(label: String, balance: String, type: String, preferredBalanceUnit: String, receiveAddress: String, transactions: [Transaction], identifier: Int, xpub: String?, hideBalance: Bool = false) {
self.label = label
self.balance = balance
self.type = type
@ -33,6 +34,7 @@ class Wallet: NSObject, NSCoding {
self.transactions = transactions
self.identifier = identifier
self.xpub = xpub
self.hideBalance = hideBalance
}
func encode(with aCoder: NSCoder) {
@ -44,6 +46,7 @@ class Wallet: NSObject, NSCoding {
aCoder.encode(transactions, forKey: "transactions")
aCoder.encode(identifier, forKey: "identifier")
aCoder.encode(xpub, forKey: "xpub")
aCoder.encode(hideBalance, forKey: "hideBalance")
}
required init?(coder aDecoder: NSCoder) {
@ -54,6 +57,7 @@ class Wallet: NSObject, NSCoding {
receiveAddress = aDecoder.decodeObject(forKey: "receiveAddress") as! String
transactions = aDecoder.decodeObject(forKey: "transactions") as? [Transaction] ?? [Transaction]()
xpub = aDecoder.decodeObject(forKey: "xpub") as? String
hideBalance = aDecoder.decodeObject(forKey: "hideBalance") as? Bool ?? false
}

View File

@ -10,7 +10,7 @@ import WatchKit
class WalletInformation: NSObject {
@IBOutlet private weak var walletBalanceLabel: WKInterfaceLabel!
@IBOutlet weak var walletBalanceLabel: WKInterfaceLabel!
@IBOutlet private weak var walletNameLabel: WKInterfaceLabel!
@IBOutlet private weak var walletGroup: WKInterfaceGroup!
static let identifier: String = "WalletInformation"

View File

@ -38,6 +38,7 @@ class WatchDataSource: NSObject, WCSessionDelegate {
guard let label = entry["label"] as? String, let balance = entry["balance"] as? String, let type = entry["type"] as? String, let preferredBalanceUnit = entry["preferredBalanceUnit"] as? String, let transactions = entry["transactions"] as? [[String: Any]] else {
continue
}
var transactionsProcessed = [Transaction]()
for transactionEntry in transactions {
guard let time = transactionEntry["time"] as? String, let memo = transactionEntry["memo"] as? String, let amount = transactionEntry["amount"] as? String, let type = transactionEntry["type"] as? String else { continue }
@ -46,7 +47,8 @@ class WatchDataSource: NSObject, WCSessionDelegate {
}
let receiveAddress = entry["receiveAddress"] as? String ?? ""
let xpub = entry["xpub"] as? String ?? ""
let wallet = Wallet(label: label, balance: balance, type: type, preferredBalanceUnit: preferredBalanceUnit, receiveAddress: receiveAddress, transactions: transactionsProcessed, identifier: index, xpub: xpub)
let hideBalance = entry["hideBalance"] as? Bool ?? false
let wallet = Wallet(label: label, balance: balance, type: type, preferredBalanceUnit: preferredBalanceUnit, receiveAddress: receiveAddress, transactions: transactionsProcessed, identifier: index, xpub: xpub, hideBalance: hideBalance)
wallets.append(wallet)
}
@ -79,12 +81,40 @@ class WatchDataSource: NSObject, WCSessionDelegate {
}
}
static func toggleWalletHideBalance(walletIdentifier: Int, hideBalance: Bool, responseHandler: @escaping (_ invoice: String) -> Void) {
guard WatchDataSource.shared.wallets.count > walletIdentifier else {
responseHandler("")
return
}
WCSession.default.sendMessage(["message": "hideBalance", "walletIndex": walletIdentifier, "hideBalance": hideBalance], replyHandler: { (reply: [String : Any]) in
responseHandler("")
}) { (error) in
print(error)
responseHandler("")
}
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext)
processData(data: applicationContext)
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
WatchDataSource.shared.processWalletsData(walletsInfo: applicationContext)
processData(data: applicationContext)
}
func processData(data: [String: Any]) {
if let preferredFiatCurrency = data["preferredFiatCurrency"] as? String, let preferredFiatCurrencyUnit = fiatUnit(currency: preferredFiatCurrency) {
UserDefaults.standard.set(preferredFiatCurrencyUnit.endPointKey, forKey: "preferredFiatCurrency")
UserDefaults.standard.synchronize()
ExtensionDelegate.preferredFiatCurrencyChanged()
} else {
WatchDataSource.shared.processWalletsData(walletsInfo: data)
}
}
func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
processData(data: userInfo)
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {

View File

@ -29,23 +29,55 @@ class WalletDetailsInterfaceController: WKInterfaceController {
pop()
return
}
let wallet = WatchDataSource.shared.wallets[identifier]
self.wallet = wallet
walletBalanceLabel.setText(wallet.balance)
walletNameLabel.setText(wallet.label)
walletBasicsGroup.setBackgroundImageNamed(WalletGradient(rawValue: wallet.type)?.imageString)
createInvoiceButton.setHidden(wallet.type != "lightningCustodianWallet")
processWalletsTable()
addMenuItems()
processInterface(identifier: identifier)
}
func processInterface(identifier: Int) {
let wallet = WatchDataSource.shared.wallets[identifier]
self.wallet = wallet
walletBalanceLabel.setHidden(wallet.hideBalance)
walletBalanceLabel.setText(wallet.hideBalance ? "" : wallet.balance)
walletNameLabel.setText(wallet.label)
walletBasicsGroup.setBackgroundImageNamed(WalletGradient(rawValue: wallet.type)?.imageString)
createInvoiceButton.setHidden(wallet.type != "lightningCustodianWallet")
processWalletsTable()
addMenuItems()
}
func addMenuItems() {
guard let wallet = wallet else {
return
}
clearAllMenuItems()
if wallet.type != "lightningCustodianWallet" && !(wallet.xpub ?? "").isEmpty {
addMenuItem(with: .share, title: "View XPub", action: #selector(viewXPubMenuItemTapped))
}
if wallet.hideBalance {
addMenuItem(with: .accept, title: "Show Balance", action: #selector(showBalanceMenuItemTapped))
}else{
addMenuItem(with: .decline, title: "Hide Balance", action: #selector(hideBalanceMenuItemTapped))
}
}
@objc func showBalanceMenuItemTapped() {
guard let identifier = wallet?.identifier else { return }
WatchDataSource.toggleWalletHideBalance(walletIdentifier: identifier, hideBalance: false) { [weak self] _ in
DispatchQueue.main.async {
WatchDataSource.postDataUpdatedNotification()
self?.processInterface(identifier: identifier)
}
}
}
@objc func hideBalanceMenuItemTapped() {
guard let identifier = wallet?.identifier else { return }
WatchDataSource.toggleWalletHideBalance(walletIdentifier: identifier, hideBalance: true) { [weak self] _ in
DispatchQueue.main.async {
WatchDataSource.postDataUpdatedNotification()
self?.processInterface(identifier: identifier)
}
}
}
@objc func viewXPubMenuItemTapped() {

View File

@ -1,48 +1,53 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"assets" : [
{
"filename" : "Circular.imageset",
"idiom" : "watch",
"role" : "circular",
"filename" : "Circular.imageset"
"role" : "circular"
},
{
"filename" : "Extra Large.imageset",
"idiom" : "watch",
"filename" : "Modular.imageset",
"role" : "modular"
"role" : "extra-large"
},
{
"idiom" : "watch",
"filename" : "Utilitarian.imageset",
"role" : "utilitarian"
},
{
"idiom" : "watch",
"role" : "extra-large",
"filename" : "Extra Large.imageset"
},
{
"role" : "graphic-corner",
"idiom" : "watch",
"filename" : "Graphic Corner.imageset"
},
{
"filename" : "Graphic Circular.imageset",
"role" : "graphic-circular",
"idiom" : "watch"
},
{
"idiom" : "watch",
"filename" : "Graphic Bezel.imageset",
"idiom" : "watch",
"role" : "graphic-bezel"
},
{
"filename" : "Graphic Circular.imageset",
"idiom" : "watch",
"role" : "graphic-large-rectangular",
"filename" : "Graphic Large Rectangular.imageset"
"role" : "graphic-circular"
},
{
"filename" : "Graphic Corner.imageset",
"idiom" : "watch",
"role" : "graphic-corner"
},
{
"filename" : "Graphic Extra Large.imageset",
"idiom" : "watch",
"role" : "graphic-extra-large"
},
{
"filename" : "Graphic Large Rectangular.imageset",
"idiom" : "watch",
"role" : "graphic-large-rectangular"
},
{
"filename" : "Modular.imageset",
"idiom" : "watch",
"role" : "modular"
},
{
"filename" : "Utilitarian.imageset",
"idiom" : "watch",
"role" : "utilitarian"
}
]
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -2,31 +2,35 @@
"images" : [
{
"filename" : "extra-large38mm@2x.png",
"screen-width" : "<=145",
"idiom" : "watch",
"scale" : "2x"
},
{
"screen-width" : ">161",
"filename" : "extra-large40mm@2x.png",
"idiom" : "watch",
"scale" : "2x"
},
{
"screen-width" : ">145",
"idiom" : "watch",
"filename" : "extra-large42mm@2x.png",
"scale" : "2x"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">183",
"filename" : "extra-large44mm@2x.png"
"screen-width" : "<=145"
},
{
"filename" : "extra-large40mm@2x.png",
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">161"
},
{
"filename" : "extra-large42mm@2x.png",
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
},
{
"filename" : "extra-large44mm@2x.png",
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">183"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"auto-scaling" : "auto",
"template-rendering-intent" : "template"
}
}
}

View File

@ -0,0 +1,28 @@
{
"images" : [
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : "<=145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">161"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">145"
},
{
"idiom" : "watch",
"scale" : "2x",
"screen-width" : ">183"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

View File

@ -12,11 +12,12 @@ target 'BlueWallet' do
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
use_flipper!
use_flipper!({ 'Flipper' => '0.74.0' })
post_install do |installer|
flipper_post_install(installer)
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
if ['React-Core-AccessibilityResources'].include? target.name
config.build_settings['CODE_SIGN_STYLE'] = "Manual"
config.build_settings['CODE_SIGN_IDENTITY'] = "Apple Distribution: Bluewallet Services, S. R. L. (A7W54YZ4WU)"
@ -35,8 +36,4 @@ end
target 'WalletInformationAndMarketWidgetExtension' do
pod 'SwiftSocket', :git => 'https://github.com/swiftsocket/SwiftSocket.git', :branch => 'master'
end
target 'WalletInformationWidgetExtension' do
pod 'SwiftSocket', :git => 'https://github.com/swiftsocket/SwiftSocket.git', :branch => 'master'
end
end

View File

@ -2,8 +2,7 @@ PODS:
- boost-for-react-native (1.63.0)
- BVLinearGradient (2.5.6):
- React
- CocoaAsyncSocket (7.6.4)
- CocoaLibEvent (1.0.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- FBLazyVector (0.63.3)
- FBReactNativeSpec (0.63.3):
@ -13,50 +12,50 @@ PODS:
- React-Core (= 0.63.3)
- React-jsi (= 0.63.3)
- ReactCommon/turbomodule/core (= 0.63.3)
- Flipper (0.54.0):
- Flipper-Folly (~> 2.2)
- Flipper-RSocket (~> 1.1)
- Flipper (0.74.0):
- Flipper-Folly (~> 2.5)
- Flipper-RSocket (~> 1.3)
- Flipper-DoubleConversion (1.1.7)
- Flipper-Folly (2.3.0):
- Flipper-Folly (2.5.1):
- boost-for-react-native
- CocoaLibEvent (~> 1.0)
- Flipper-DoubleConversion
- Flipper-Glog
- OpenSSL-Universal (= 1.0.2.20)
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.180)
- Flipper-Glog (0.3.6)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.1.0):
- Flipper-Folly (~> 2.2)
- FlipperKit (0.54.0):
- FlipperKit/Core (= 0.54.0)
- FlipperKit/Core (0.54.0):
- Flipper (~> 0.54.0)
- Flipper-RSocket (1.3.0):
- Flipper-Folly (~> 2.5)
- FlipperKit (0.74.0):
- FlipperKit/Core (= 0.74.0)
- FlipperKit/Core (0.74.0):
- Flipper (~> 0.74.0)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- FlipperKit/CppBridge (0.54.0):
- Flipper (~> 0.54.0)
- FlipperKit/FBCxxFollyDynamicConvert (0.54.0):
- Flipper-Folly (~> 2.2)
- FlipperKit/FBDefines (0.54.0)
- FlipperKit/FKPortForwarding (0.54.0):
- FlipperKit/CppBridge (0.74.0):
- Flipper (~> 0.74.0)
- FlipperKit/FBCxxFollyDynamicConvert (0.74.0):
- Flipper-Folly (~> 2.5)
- FlipperKit/FBDefines (0.74.0)
- FlipperKit/FKPortForwarding (0.74.0):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- FlipperKit/FlipperKitHighlightOverlay (0.54.0)
- FlipperKit/FlipperKitLayoutPlugin (0.54.0):
- FlipperKit/FlipperKitHighlightOverlay (0.74.0)
- FlipperKit/FlipperKitLayoutPlugin (0.74.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutTextSearchable (0.54.0)
- FlipperKit/FlipperKitNetworkPlugin (0.54.0):
- FlipperKit/FlipperKitLayoutTextSearchable (0.74.0)
- FlipperKit/FlipperKitNetworkPlugin (0.74.0):
- FlipperKit/Core
- FlipperKit/FlipperKitReactPlugin (0.54.0):
- FlipperKit/FlipperKitReactPlugin (0.74.0):
- FlipperKit/Core
- FlipperKit/FlipperKitUserDefaultsPlugin (0.54.0):
- FlipperKit/FlipperKitUserDefaultsPlugin (0.74.0):
- FlipperKit/Core
- FlipperKit/SKIOSNetworkPlugin (0.54.0):
- FlipperKit/SKIOSNetworkPlugin (0.74.0):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- Folly (2020.01.13.00):
@ -72,13 +71,12 @@ PODS:
- GCDWebServer/Core (= 3.5.4)
- GCDWebServer/Core (3.5.4)
- glog (0.3.5)
- lottie-ios (3.1.8)
- libevent (2.1.12)
- lottie-ios (3.1.9)
- lottie-react-native (3.5.0):
- lottie-ios (~> 3.1.8)
- React
- OpenSSL-Universal (1.0.2.20):
- OpenSSL-Universal/Static (= 1.0.2.20)
- OpenSSL-Universal/Static (1.0.2.20)
- OpenSSL-Universal (1.1.180)
- PasscodeAuth (1.0.0):
- React
- RCTRequired (0.63.3)
@ -251,13 +249,13 @@ PODS:
- React
- react-native-blur (0.8.0):
- React
- react-native-camera (3.40.0):
- react-native-camera (3.42.0):
- React-Core
- react-native-camera/RCT (= 3.40.0)
- react-native-camera/RN (= 3.40.0)
- react-native-camera/RCT (3.40.0):
- react-native-camera/RCT (= 3.42.0)
- react-native-camera/RN (= 3.42.0)
- react-native-camera/RCT (3.42.0):
- React-Core
- react-native-camera/RN (3.40.0):
- react-native-camera/RN (3.42.0):
- React-Core
- react-native-document-picker (3.5.4):
- React
@ -278,7 +276,7 @@ PODS:
- react-native-tcp-socket (3.7.1):
- CocoaAsyncSocket
- React
- react-native-webview (11.0.0):
- react-native-webview (11.2.0):
- React-Core
- react-native-widget-center (0.0.4):
- React
@ -342,12 +340,12 @@ PODS:
- React-Core (= 0.63.3)
- React-cxxreact (= 0.63.3)
- React-jsi (= 0.63.3)
- RealmJS (6.1.4):
- RealmJS (10.2.0):
- GCDWebServer
- React
- RemobileReactNativeQrcodeLocalImage (1.0.4):
- React
- RNCAsyncStorage (1.13.3):
- RNCAsyncStorage (1.13.4):
- React-Core
- RNCClipboard (1.5.1):
- React-Core
@ -357,7 +355,7 @@ PODS:
- React-Core
- RNDefaultPreference (1.4.3):
- React
- RNDeviceInfo (7.3.1):
- RNDeviceInfo (8.0.1):
- React-Core
- RNFS (2.16.6):
- React
@ -367,7 +365,7 @@ PODS:
- React
- RNInAppBrowser (3.5.1):
- React-Core
- RNLocalize (1.4.2):
- RNLocalize (2.0.1):
- React-Core
- RNPrivacySnapshot (1.0.0):
- React
@ -379,14 +377,14 @@ PODS:
- React-Core
- RNReanimated (1.13.1):
- React
- RNScreens (2.11.0):
- React
- RNScreens (2.17.1):
- React-Core
- RNSecureKeyStore (1.0.0):
- React
- RNSentry (1.9.0):
- React-Core
- Sentry (~> 5.2.0)
- RNShare (4.0.2):
- RNShare (5.1.3):
- React-Core
- RNSVG (12.1.0):
- React
@ -409,25 +407,25 @@ DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
- Flipper (~> 0.54.0)
- Flipper (= 0.74.0)
- Flipper-DoubleConversion (= 1.1.7)
- Flipper-Folly (~> 2.2)
- Flipper-Glog (= 0.3.6)
- Flipper-PeerTalk (~> 0.0.4)
- Flipper-RSocket (~> 1.1)
- FlipperKit (~> 0.54.0)
- FlipperKit/Core (~> 0.54.0)
- FlipperKit/CppBridge (~> 0.54.0)
- FlipperKit/FBCxxFollyDynamicConvert (~> 0.54.0)
- FlipperKit/FBDefines (~> 0.54.0)
- FlipperKit/FKPortForwarding (~> 0.54.0)
- FlipperKit/FlipperKitHighlightOverlay (~> 0.54.0)
- FlipperKit/FlipperKitLayoutPlugin (~> 0.54.0)
- FlipperKit/FlipperKitLayoutTextSearchable (~> 0.54.0)
- FlipperKit/FlipperKitNetworkPlugin (~> 0.54.0)
- FlipperKit/FlipperKitReactPlugin (~> 0.54.0)
- FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.54.0)
- FlipperKit/SKIOSNetworkPlugin (~> 0.54.0)
- FlipperKit (= 0.74.0)
- FlipperKit/Core (= 0.74.0)
- FlipperKit/CppBridge (= 0.74.0)
- FlipperKit/FBCxxFollyDynamicConvert (= 0.74.0)
- FlipperKit/FBDefines (= 0.74.0)
- FlipperKit/FKPortForwarding (= 0.74.0)
- FlipperKit/FlipperKitHighlightOverlay (= 0.74.0)
- FlipperKit/FlipperKitLayoutPlugin (= 0.74.0)
- FlipperKit/FlipperKitLayoutTextSearchable (= 0.74.0)
- FlipperKit/FlipperKitNetworkPlugin (= 0.74.0)
- FlipperKit/FlipperKitReactPlugin (= 0.74.0)
- FlipperKit/FlipperKitUserDefaultsPlugin (= 0.74.0)
- FlipperKit/SKIOSNetworkPlugin (= 0.74.0)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- lottie-ios (from `../node_modules/lottie-ios`)
@ -502,7 +500,6 @@ SPEC REPOS:
trunk:
- boost-for-react-native
- CocoaAsyncSocket
- CocoaLibEvent
- Flipper
- Flipper-DoubleConversion
- Flipper-Folly
@ -511,6 +508,7 @@ SPEC REPOS:
- Flipper-RSocket
- FlipperKit
- GCDWebServer
- libevent
- OpenSSL-Universal
- Sentry
- YogaKit
@ -668,24 +666,24 @@ CHECKOUT OPTIONS:
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: cde416483dac037923206447da6e1454df403714
FBLazyVector: 878b59e31113e289e275165efbe4b54fa614d43d
FBReactNativeSpec: 7da9338acfb98d4ef9e5536805a0704572d33c2f
Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365
Flipper: c1ad50344bffdce628b1906b48f6e7cd06724236
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
Flipper-Folly: e4493b013c02d9347d5e0cb4d128680239f6c78a
Flipper-Folly: f7a3caafbd74bda4827954fd7a6e000e36355489
Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7
FlipperKit: ab353d41aea8aae2ea6daaf813e67496642f3d7d
Flipper-RSocket: 602921fee03edacf18f5d6f3d3594ba477f456e5
FlipperKit: f42987ea58737ac0fb3fbc38f8e703452ba56940
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4
glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
lottie-ios: 48fac6be217c76937e36e340e2d09cf7b10b7f5f
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
lottie-ios: 3a3758ef5a008e762faec9c9d50a39842f26d124
lottie-react-native: 1fb4ce21d6ad37dab8343eaff8719df76035bd93
OpenSSL-Universal: ff34003318d5e1163e9529b08470708e389ffcdd
OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
PasscodeAuth: 1cc99b13d8e4de4716d7e2b4069af2f1a9de30b2
RCTRequired: 48884c74035a0b5b76dbb7a998bd93bcfc5f2047
RCTTypeSafety: edf4b618033c2f1c5b7bc3d90d8e085ed95ba2ab
@ -699,7 +697,7 @@ SPEC CHECKSUMS:
React-jsinspector: 8e68ffbfe23880d3ee9bafa8be2777f60b25cbe2
react-native-blue-crypto: 23f1558ad3d38d7a2edb7e2f6ed1bc520ed93e56
react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c
react-native-camera: 5c1fbfecf63b802b8ca4a71c60d30a71550fb348
react-native-camera: d145df27a9178041b48b839b80ad79c9ef373fbd
react-native-document-picker: c5752781fbc0c126c627c1549b037c139444a4cf
react-native-fingerprint-scanner: c68136ca57e3704d7bdf5faa554ea535ce15b1d0
react-native-idle-timer: 97b8283237d45146a7a5c25bdebe9e1e85f3687b
@ -709,7 +707,7 @@ SPEC CHECKSUMS:
react-native-safe-area-context: 01158a92c300895d79dee447e980672dc3fb85a6
react-native-slider: b733e17fdd31186707146debf1f04b5d94aa1a93
react-native-tcp-socket: 96a4f104cdcc9c6621aafe92937f163d88447c5b
react-native-webview: f0da708d7e471b60ebdbf861c114d2c5d7f7af2d
react-native-webview: c010115ea45efd0d329ac7746d0cc59579d7860c
react-native-widget-center: 0f81d17beb163e7fb5848b06754d7d277fe7d99a
React-RCTActionSheet: 53ea72699698b0b47a6421cb1c8b4ab215a774aa
React-RCTAnimation: 1befece0b5183c22ae01b966f5583f42e69a83c2
@ -721,28 +719,28 @@ SPEC CHECKSUMS:
React-RCTText: 65a6de06a7389098ce24340d1d3556015c38f746
React-RCTVibration: 8e9fb25724a0805107fc1acc9075e26f814df454
ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3
RealmJS: 899b4839a8bee46e248bc277995ad58da855e41f
RealmJS: 5195064e9aeccf94ae3756bd9d0f2301b9074b07
RemobileReactNativeQrcodeLocalImage: 57aadc12896b148fb5e04bc7c6805f3565f5c3fa
RNCAsyncStorage: 32c7cbe1d43dff5f03f3d0b9e9d2c44d8ec91a3a
RNCAsyncStorage: 0701cb7395f06d744184641241888a0eec0e2f2a
RNCClipboard: 5e299c6df8e0c98f3d7416b86ae563d3a9f768a3
RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459
RNCPushNotificationIOS: 5b1cf9ad2aaa107ecb92d5d2d7005ba521b2b97a
RNDefaultPreference: 21816c0a6f61a2829ccc0cef034392e9b509ee5f
RNDeviceInfo: 57bb2806fb7bd982a1434e9f0b4e6a6ab1f6702e
RNDeviceInfo: 54401b60514387f9120ab8265be5ed9103d842b9
RNFS: 2bd9eb49dc82fa9676382f0585b992c424cd59df
RNGestureHandler: 7a5833d0f788dbd107fbb913e09aa0c1ff333c39
RNHandoff: d3b0754cca3a6bcd9b25f544f733f7f033ccf5fa
RNInAppBrowser: 3733c1aa6699983a1c9b4963e85d5e5a48ad297e
RNLocalize: 4071198b59b461f3b74eebc5fee8c50f13e39e79
RNLocalize: dcf0fdb332b37b0d24178e876a7ce4dbbc9c838d
RNPrivacySnapshot: 71919dde3c6a29dd332115409c2aec564afee8f4
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
RNRate: 2b31dad120cd1b78e33c6034808561c386a3dddf
RNReactNativeHapticFeedback: 653a8c126a0f5e88ce15ffe280b3ff37e1fbb285
RNReanimated: dd8c286ab5dd4ba36d3a7fef8bff7e08711b5476
RNScreens: 0e91da98ab26d5d04c7b59a9b6bd694124caf88c
RNScreens: b6c9607e6fe47c1b6e2f1910d2acd46dd7ecea3a
RNSecureKeyStore: f1ad870e53806453039f650720d2845c678d89c8
RNSentry: 1adaa43b01c6a3ab5091d4d1add66b7c58558898
RNShare: 7a7277f3c313652422d9de072ac50714dff5e8a4
RNShare: d98667ee0277d9cd068041e5f316a5fe67aa8536
RNSVG: ce9d996113475209013317e48b05c21ee988d42e
RNVectorIcons: bc69e6a278b14842063605de32bec61f0b251a59
RNWatch: e4c5d19506c94506860032fb68aedd5991beb985
@ -752,6 +750,6 @@ SPEC CHECKSUMS:
Yoga: 7d13633d129fd179e01b8953d38d47be90db185a
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
PODFILE CHECKSUM: b3a4c68ed1fc7dace2357d96ad07c3e104e0afe2
PODFILE CHECKSUM: 070fb164a2dfb94605ea7862fd9b1c25e95ff046
COCOAPODS: 1.10.0

View File

@ -11,7 +11,7 @@ import SwiftUI
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), marketData: emptyMarketData)
return SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10,000", rate: 10000), allWalletsBalance: WalletData(balance: 1000000, latestTransactionTime: LatestTransaction(isUnconfirmed: false, epochValue: 1568804029000)))
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
@ -59,7 +59,9 @@ struct WalletInformationWidgetEntryView : View {
}
var body: some View {
WalletBalance.padding().background(Color.widgetBackground)
VStack(content: {
WalletBalance
}).padding().background(Color.widgetBackground)
}
}
@ -78,7 +80,7 @@ struct WalletInformationWidget: Widget {
struct WalletInformationWidget_Previews: PreviewProvider {
static var previews: some View {
WalletInformationWidgetEntryView(entry: SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10,000", rate: Double(13000)), allWalletsBalance: WalletData(balance: 10000, latestTransactionTime: LatestTransaction(isUnconfirmed: false, epochValue: 1568804029000))))
WalletInformationWidgetEntryView(entry: SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10,000", rate: Double(0)), allWalletsBalance: WalletData(balance: 10000, latestTransactionTime: LatestTransaction(isUnconfirmed: false, epochValue: 1568804029000))))
.previewContext(WidgetPreviewContext(family: .systemSmall))
}
}

View File

@ -10,72 +10,74 @@ import WidgetKit
import SwiftUI
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), marketData: emptyMarketData)
func placeholder(in context: Context) -> SimpleEntry {
return SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10 000", rate: 10000))
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
let entry: SimpleEntry
if (context.isPreview) {
entry = SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10 000", rate: 10000))
} else {
entry = SimpleEntry(date: Date(), marketData: emptyMarketData)
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
completion(entry)
}
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
let userPreferredCurrency = WidgetAPI.getUserPreferredCurrency();
let marketDataEntry = MarketData(nextBlock: "...", sats: "...", price: "...", rate: 0)
WidgetAPI.fetchMarketData(currency: userPreferredCurrency, completion: { (result, error) in
let entry: SimpleEntry
if (context.isPreview) {
entry = SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10 000", rate: 10000))
if let result = result {
entry = SimpleEntry(date: Date(), marketData: result)
} else {
entry = SimpleEntry(date: Date(), marketData: emptyMarketData)
entry = SimpleEntry(date: Date(), marketData: marketDataEntry)
}
completion(entry)
}
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
let userPreferredCurrency = WidgetAPI.getUserPreferredCurrency();
let marketDataEntry = MarketData(nextBlock: "...", sats: "...", price: "...", rate: 0)
WidgetAPI.fetchMarketData(currency: userPreferredCurrency, completion: { (result, error) in
let entry: SimpleEntry
if let result = result {
entry = SimpleEntry(date: Date(), marketData: result)
} else {
entry = SimpleEntry(date: Date(), marketData: marketDataEntry)
}
entries.append(entry)
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
})
}
entries.append(entry)
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
})
}
}
struct SimpleEntry: TimelineEntry {
let date: Date
let date: Date
let marketData: MarketData
}
struct MarketWidgetEntryView : View {
var entry: Provider.Entry
var entry: Provider.Entry
var MarketStack: some View {
MarketView(marketData: entry.marketData).padding(EdgeInsets(top: 18, leading: 11, bottom: 18, trailing: 11))
}
var body: some View {
var body: some View {
VStack(content: {
MarketStack.background(Color.widgetBackground)
}
})
}
}
@main
struct MarketWidget: Widget {
let kind: String = "MarketWidget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
MarketWidgetEntryView(entry: entry)
}
.configurationDisplayName("Market")
.description("View the current market information.").supportedFamilies([.systemSmall])
let kind: String = "MarketWidget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
MarketWidgetEntryView(entry: entry)
}
.configurationDisplayName("Market")
.description("View the current market information.").supportedFamilies([.systemSmall])
}
}
struct MarketWidget_Previews: PreviewProvider {
static var previews: some View {
MarketWidgetEntryView(entry: SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10,000", rate: 0)))
.previewContext(WidgetPreviewContext(family: .systemSmall))
}
static var previews: some View {
MarketWidgetEntryView(entry: SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10,000", rate: 0)))
.previewContext(WidgetPreviewContext(family: .systemSmall))
}
}

View File

@ -13,7 +13,7 @@ var marketData: [MarketDataTimeline: MarketData?] = [ .Current: nil, .Previous:
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), currentMarketData: nil)
return SimpleEntry(date: Date(), currentMarketData: MarketData(nextBlock: "", sats: "", price: "$10,000", rate: 10000, dateString: "2019-09-18T17:27:00+00:00"))
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
@ -71,8 +71,9 @@ struct PriceWidgetEntryView : View {
}
var body: some View {
priceView.background(Color.widgetBackground)
VStack(content: {
priceView
}).background(Color.widgetBackground)
}
}

View File

@ -0,0 +1,4 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

View File

@ -28,7 +28,7 @@ struct MarketData:Codable {
}
return nil
}
static let string = "MarketData"
}
struct WalletData {
@ -50,7 +50,10 @@ struct WalletData {
}
struct LatestTransaction {
let isUnconfirmed: Bool?
let epochValue: Int?
}
let emptyMarketData = MarketData(nextBlock: "...", sats: "...", price: "...", rate: 0)
let emptyWalletData = WalletData(balance: 0, latestTransactionTime: LatestTransaction(isUnconfirmed: false, epochValue: Int(Date().timeIntervalSince1970)))
@ -58,3 +61,14 @@ enum MarketDataTimeline: String {
case Previous = "previous"
case Current = "current"
}
enum UserDefaultsGroupKey: String {
case GroupName = "group.io.bluewallet.bluewallet"
case PreferredCurrency = "preferredCurrency"
case ElectrumSettingsHost = "electrum_host"
case ElectrumSettingsTCPPort = "electrum_tcp_port"
case ElectrumSettingsSSLPort = "electrum_ssl_port"
case AllWalletsBalance = "WidgetCommunicationAllWalletsSatoshiBalance"
case AllWalletsLatestTransactionTime = "WidgetCommunicationAllWalletsLatestTransactionTime"
case LatestTransactionIsUnconfirmed = "\"WidgetCommunicationLatestTransactionIsUnconfirmed\""
}

View File

@ -0,0 +1,18 @@
//
// UserDefaultsExtension.swift
// BlueWallet
//
// Created by Marcos Rodriguez on 2/8/21.
// Copyright © 2021 BlueWallet. All rights reserved.
//
import Foundation
extension UserDefaults {
func codable<Element: Codable>(forKey key: String) -> Element? {
guard let data = UserDefaults.standard.data(forKey: key) else { return nil }
let element = try? PropertyListDecoder().decode(Element.self, from: data)
return element
}
}

View File

@ -8,28 +8,12 @@
import Foundation
enum UserDefaultsGroupKey: String {
case GroupName = "group.io.bluewallet.bluewallet"
case PreferredCurrency = "preferredCurrency"
case ElectrumSettingsHost = "electrum_host"
case ElectrumSettingsTCPPort = "electrum_tcp_port"
case ElectrumSettingsSSLPort = "electrum_ssl_port"
case AllWalletsBalance = "WidgetCommunicationAllWalletsSatoshiBalance"
case AllWalletsLatestTransactionTime = "WidgetCommunicationAllWalletsLatestTransactionTime"
case LatestTransactionIsUnconfirmed = "\"WidgetCommunicationLatestTransactionIsUnconfirmed\""
}
struct UserDefaultsElectrumSettings {
let host: String?
let port: Int32?
let sslPort: Int32?
}
struct LatestTransaction {
let isUnconfirmed: Bool?
let epochValue: Int?
}
let DefaultElectrumPeers = [UserDefaultsElectrumSettings(host: "electrum1.bluewallet.io", port: 50001, sslPort: 443),
UserDefaultsElectrumSettings(host: "electrum2.bluewallet.io", port: 50001, sslPort: 443),
UserDefaultsElectrumSettings(host: "electrum3.bluewallet.io", port: 50001, sslPort: 443)]

View File

@ -42,7 +42,8 @@ class WidgetAPI {
}
static func getUserPreferredCurrency() -> String {
guard let userDefaults = UserDefaults(suiteName: "group.io.bluewallet.bluewallet"),
guard let userDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue),
let preferredCurrency = userDefaults.string(forKey: "preferredCurrency")
else {
return "USD"
@ -58,7 +59,7 @@ class WidgetAPI {
}
static func getUserPreferredCurrencyLocale() -> String {
guard let userDefaults = UserDefaults(suiteName: "group.io.bluewallet.bluewallet"),
guard let userDefaults = UserDefaults(suiteName: UserDefaultsGroupKey.GroupName.rawValue),
let preferredCurrency = userDefaults.string(forKey: "preferredCurrencyLocale")
else {
return "en_US"

View File

@ -8,7 +8,7 @@
import Foundation
struct WidgetDataStore {
struct WidgetDataStore: Codable {
let rate: String
let lastUpdate: String
let rateDouble: Double
@ -23,6 +23,37 @@ struct WidgetDataStore {
}
return rate
}
var formattedRateForComplication: String? {
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: WidgetAPI.getUserPreferredCurrencyLocale())
numberFormatter.numberStyle = .currency
numberFormatter.maximumFractionDigits = 0
numberFormatter.minimumFractionDigits = 0
numberFormatter.currencySymbol = ""
if let rateString = numberFormatter.string(from: NSNumber(value: rateDouble)) {
return rateString
}
return rate
}
var date: Date? {
let isoDateFormatter = ISO8601DateFormatter()
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.timeStyle = .short
return isoDateFormatter.date(from: lastUpdate)
}
var formattedDate: String? {
let isoDateFormatter = ISO8601DateFormatter()
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale.current
dateFormatter.timeStyle = .short
if let date = isoDateFormatter.date(from: lastUpdate) {
return dateFormatter.string(from: date)
}
return nil
}
}
class WidgetData {

View File

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>1</string>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>

View File

@ -11,7 +11,7 @@ import SwiftUI
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), marketData: emptyMarketData)
return SimpleEntry(date: Date(), marketData: MarketData(nextBlock: "26", sats: "9 134", price: "$10,000", rate: 10000), allWalletsBalance: WalletData(balance: 1000000, latestTransactionTime: LatestTransaction(isUnconfirmed: false, epochValue: 1568804029000)))
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {

View File

@ -1,3 +1,35 @@
v6.0.4
======
* ADD: Toggle balance visibility on watch app
* ADD: Standard wallet type Electrum JSON import
* ADD: Wallet balance hide/show on Watch app
* ADD: multisig manage keys - show alert if unsaved changes are found
* ADD: AEZEED mnemonics support (from LND; only primary native-segwit chain atm)
* ADD: Wallet txs update indicator
* ADD: Do not show notification settings if device does not support it
* ADD: Show alert if amount is less or equal 500 sats during onchain send
* OPS: Update Realm (fixes crash on iOS beta)
* FIX: locales en, fa_IR, cs_CZ, fr_FR, de_DE, nl_NL, de_DE, fi_FI
* FIX: multisig 'cant finalize input' error when sending
* FIX: Scroll on multi sig creation
* FIX: MS loading creation
* FIX: During long menmonics import, wallet panels are not scrolled to the last temporary gray wallet card
* FIX: TransactionDetails screen - displaying correct transaction data
* FIX: set fee to lower value if balance is not enough
* FIX: better fee estimation based on mempool (onchain send, not widget, yet)
* FIX: Widget now shows Pending if latest tx is unconfirmed
* FIX: Scaning invalid BC-UR qr code throws multiple alerts
* FIX: cached wallet address wouldnt change on wallet change
* FIX: 'Few seconds ago' -> 'pending'
* FIX: legacy wallet can now derive UTXO from transactions in case if fetching listUnspent from network is impossible
* FIX: Conf number reflects correct number
* FIX: Multisig import seed hangs forever
* FIX: Instructions were clipped on larger text
* FIX: Biometrics in PSBT
* REF: better support of coldcard's incorrect 'p2sh-p2wsh'
* DEL: LocalTrader (HodlHodl) starts with Global offers by default
v6.0.3
======
@ -61,29 +93,3 @@ v6.0.1
* FIX: Handle opening links if the default browser isnt Safari
* FIX: contradiction in Vaul introduction text
* FIX: localizations for CA, DE, ES, fa_IR, sl_SI, cs_CZ, pt_BR
v6.0.0
======
* ADD: Multisig
* FIX: scan multisig cosigner in formats: plain Zpub, wallet descriptor
* FIX: txs disappear and re-fetch if opened wallet too fast
* ADD: Help section and tips to Vaults
* FIX: DE language files
* ADD: Persian language, sync cs_cz, es, it and ru
* FIX: Transaction details not shown when 'display in wallets list' not set (closes #1966)
* FIX: LNURL wallet not found
v5.6.9
======
* ADD: warning text on backup screen
* ADD: CoinControl displays balances with user's preferred unit
* ADD: LBP Currency
* ADD: Verify if an address belongs to one of your wallets.
* FIX: fetch wallet transaction after broadcast
* FIX: crash on refresh button
* FIX: Don't display amount if none is passed
* REF: PSBT Multisig provide signature flow
* ADD: refresh wallet transactions for freshly imported wallets
* FIX: locales sl_SI, fi_FI

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,53 @@
Bitcoin-lompakko, jonka avulla voit tallentaa, lähettää Bitcoinia, vastaanottaa Bitcoinia ja ostaa Bitcoinia keskittyen turvallisuuteen ja yksinkertaisuuteen.
Sinulla on yksityiset avaimesi BlueWalletissa, joka on bitcoin-lompakko. Bitcoin-käyttäjien tekemä Bitcoin-lompakko yhteisölle.
Voit heti tehdä kauppaa kenen tahansa kanssa maailmassa ja muuttaa rahoitusjärjestelmän suoraan taskustasi.
Luo ilmaiseksi rajoittamaton määrä bitcoin-lompakoita tai tuo nykyinen lompakko. Se on yksinkertaista ja nopeaa.
_____
Tässä on mitä saat:
1 - Suunniteltu tietoturvalliseksi
Avoin lähdekoodi
MIT-lisensoitu, voit rakentaa sen ja käyttää sitä itsenäisesti! Valmistettu ReactNative: lla
Uskottava kiistettävyys
Salasana, joka purkaa vale bitcoin-lompakot, jos sinun on pakko paljastaa käyttöoikeutesi
Täysi salaus
IOS:n monikerroksisen salauksen lisäksi salaamme kaiken lisätyillä salasanoilla
Täysi solmu
Yhdistä Bitcoinin täyteen solmuusi Electrumin kautta
Kylmävarasto
Yhdistä laitteistolompakkoon ja säilytä kolikkosi kylmävarastossa
2 - Kohdennettu kokemukseesi
Kontrolloi itse
Yksityiset avaimet eivät koskaan poistu laitteeltasi.
Sinä hallitset yksityisiä avaimiasi
Joustavat siirtokulut
Alkaen 1 Satoshista. Käyttäjän itse määrittämä
Replace-By-Fee
(RBF) Nopeuta siirtotapahtumiasi korottamalla siirtokulua (BIP125)
Vain lukuoikeus-lompakot
Vain lukuoikeus-lompakot antavat sinun pitää silmällä kylmävarastoa koskematta laitteistoon.
Lightning-verkko
Lightning-lompakko nolla-konfiguraatiolla. Luvattoman halvat ja nopeat siirtotapahtumat parhaalla Bitcoin-käyttökokemuksella.
Osta bitcoinia
Osallistu avoimeen talouden vallankumoukseen kyvyllä ostaa bitcoinia suoraan lompakkoosi.
Paikallinen kauppias
P2p Bitcoin-vaihtoalusta, jonka avulla voit ostaa ja myydä bitcoinia suoraan muille käyttäjille ilman kolmansia osapuolia.

View File

@ -0,0 +1 @@
bitcoin,wallet,bitcoin wallet,blockchain,btc,cryptocurrency,buy bitcoin,samourai,electrum,ethereum

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
BlueWallet - Bitcoin-lompakko

View File

@ -0,0 +1 @@
http://www.bluewallet.io/privacy.txt

View File

@ -0,0 +1,8 @@
* Avoin lähdekoodi
* Täysi salaus
* Uskottava kiistettävyys
* Joustavat siirtokulut
* Replace-By-Fee (RBF)
* SegWit
* Vain lukuoikeus (Vahti)-lompakot
* Lightning-verkko

View File

@ -0,0 +1 @@
../en-US/release_notes.txt

View File

@ -0,0 +1 @@
Bitcoin & Lightning

View File

@ -0,0 +1 @@
https://github.com/BlueWallet/BlueWallet/issues

View File

@ -1,10 +1,8 @@
Features
* Open Source
* Full encryption
* Plausible deniability
* Flexible fees
* Replace-By-Fee (RBF)
* Totalmente criptografada
* Negação plausível
* Taxas flexíveis
* Replace-By-Fee
* SegWit
* Watch-only (Sentinel) wallets
* Lightning network
* Carteiras Watch-only (somente leitura)
* Lightning Network

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,53 @@
一個比特幣錢包,可讓您存儲,發送比特幣,接收比特幣併購買比特幣,並專注於安全性和簡便性。
在BlueWallet上您擁有私鑰的比特幣錢包。 比特幣用戶為社區製作的比特幣錢包。
您可以立即與世界上任何人進行交易,並從口袋裡直接轉換金融系統。
免費創建無限數量的比特幣錢包或導入您現有的錢包。 簡單,快速。
_____
這是您得到的:
1-設計安全
開源的
MIT許可您可以構建它並自己運行 用ReactNative製成
合理的可否認性
如果您被迫披露訪問權限,則該密碼可解密偽造的比特幣錢包
完全加密
在iOS多層加密的基礎上我們使用添加的密碼對所有內容進行加密
全節點
通過Electrum連接到您的比特幣完整節點
冷庫
連接到您的硬件錢包並將硬幣保存在冷庫中
2-專注於您的體驗
掌控一切
私鑰永遠不會離開您的設備。
您控制私鑰
彈性收費
從1中本聰開始。 由您定義的用戶
替換費用
RBF通過增加費用來加快交易BIP125
手錶專用錢包
手錶式錢包可以讓您隨時關注冷藏庫,而無需接觸硬件。
閃電網絡
零配置的閃電錢包。 具有最佳比特幣用戶體驗的不公平的廉價和快速交易。
購買比特幣
可以直接在您的錢包中購買比特幣,進入開放的金融革命。
當地商人
一個p2p比特幣交易平台可讓您直接將比特幣買賣給其他用戶而無需第三(3)方。

View File

@ -0,0 +1 @@
比特幣錢包比特幣錢包區塊鏈btc加密貨幣購買比特幣samourai電子以太坊

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
BlueWallet-比特幣錢包

View File

@ -0,0 +1 @@
http://www.bluewallet.io/privacy.txt

View File

@ -0,0 +1,10 @@
特性
* 開源的
* 完全加密
* 合理的可否認性
* 彈性收費
* 收費替代RBF
* 隔離見證
* 僅手錶(前哨)錢包
* 闪电网络

View File

@ -0,0 +1 @@
../en-US/release_notes.txt

View File

@ -0,0 +1 @@
Bitcoin & Lightning

View File

@ -0,0 +1 @@
https://github.com/BlueWallet/BlueWallet/issues

View File

@ -8,7 +8,12 @@
"of": "{number} من {total}",
"ok": "موافق",
"storage_is_encrypted": "وحدة التخزين الخاصة بك مشفرة. أنت بحاجة إلى كلمة المرور لفك تشفيرها",
"yes": "نعم"
"allow": "السماح",
"yes": "نعم",
"no": "لا",
"save": "حفظ",
"seed": "عبارة الاسترداد",
"wallet_key": "مفتاح المحفظة"
},
"azteco": {
"codeIs": "رمز القسيمة الخاص بك هو",
@ -65,6 +70,7 @@
"item_nooffers": "لا توجد عروض. جرِّب تغيير \"بالقرب مني\" إلى العروض الشاملة!",
"item_rating": "تداولات {rating}",
"item_rating_no": "لا يوجد تقييم",
"local_trader_new": "جديد",
"login": "تسجيل الدخول",
"mycont": "عقودي",
"offer_accept": "قبول العرض",
@ -98,6 +104,7 @@
"lndViewInvoice": {
"additional_info": "معلومة إضافية",
"for": "إلى:",
"lightning_invoice": "فاتورة Lightning",
"has_been_paid": "تم دفع هذه الفاتورة إلى",
"open_direct_channel": "فتح قناة مباشرة مع هذه العقدة:",
"please_pay": "يُرجى الدفع",
@ -180,14 +187,17 @@
"dynamic_prev": "السابق",
"dynamic_start": "البدء",
"dynamic_stop": "الإيقاف",
"fee_10m": "10 دقائق",
"fee_1d": "1ي",
"fee_3h": "3س",
"header": "الإرسال",
"input_clear": "المسح",
"input_done": "تم",
"input_paste": "اللصق",
"input_total": "الإجمالي:",
"open_settings": "فتح الإعدادات",
"permission_camera_message": "نحتاج إلى إذنك لاستخدام الكاميرا الخاصة بك",
"permission_camera_title": "إذن باستخدام الكاميرا",
"open_settings": "فتح الإعدادات",
"permission_storage_later": "اسألني لاحقًا",
"permission_storage_message": "تحتاج BlueWallet إلى إذنك للوصول إلى وحدة التخزين الخاصة بك لحفظ هذه المعاملة.",
"permission_storage_title": "إذن وصول BlueWallet إلى وحدة التخزين",
@ -304,6 +314,7 @@
"add_title": "إضافة محفظة",
"add_wallet_name": "الاسم",
"add_wallet_type": "النوع",
"clipboard_lightning": "لديك فاتورة Lightning في الحافظة. هل ترغب في استخدامها لاجراء حوالة؟",
"details_address": "العنوان",
"details_advanced": "الخيارات المتقدمة",
"details_are_you_sure": "هل أنت متأكد؟",
@ -350,12 +361,14 @@
"list_tap_here_to_buy": "شراء Bitcoin",
"list_title": "المحافظ",
"list_tryagain": "إعادة المحاولة",
"no_ln_wallet_error": "قبل دفع فاتورة Lightning ، يجب عليك أولاً إضافة محفظة Lightning.",
"reorder_title": "إعادة ترتيب المحافظ",
"select_no_bitcoin": "لا توجد محافظ Bitcoin متاحة حاليًا.",
"select_no_bitcoin_exp": "تحتاج إلى محفظة Bitcoin لإعادة تعبئة محافظ Lightning. يُرجى إنشاء محفظة أو استيراد واحدة.",
"select_wallet": "اختيار محفظة",
"take_photo": "التقاط صورة",
"xpub_copiedToClipboard": "تم النسخ إلى الحافظة.",
"add_ln_wallet_first": "يجب عليك أولاً إضافة محفظة Lightning.",
"xpub_title": "عنوان XPUB للمحفظة"
}
}

View File

@ -1,22 +1,22 @@
{
"_": {
"allow": "Permetre",
"bad_password": "Contrasenya incorrecta. Torna-ho a provar.",
"cancel": "Cancel·lar",
"continue": "Continuar",
"dont_allow": "No permetre",
"enter_password": "Introduïu la contrasenya",
"file_saved": "El fitxer ({filePath}) s'ha desat a la carpeta de descàrregues.",
"invalid_animated_qr_code_fragment": "Fragment QRCode animat no vàlid. Siusplau torna-ho a provar.",
"never": "mai",
"no": "No",
"of": "{number} de {total}",
"ok": "OK",
"storage_is_encrypted": "L'informació està xifrada. Es requereix la contrasenya per a desxifrar-la.",
"allow": "Permetre",
"dont_allow": "No permetre",
"yes": "Si",
"no": "No",
"save": "Desar",
"seed": "Llavor",
"storage_is_encrypted": "L'informació està xifrada. Es requereix la contrasenya per a desxifrar-la.",
"wallet_key": "Clau del moneder",
"yes": "Si"
"invalid_animated_qr_code_fragment": "Fragment QRCode animat no vàlid. Siusplau torna-ho a provar.",
"file_saved": "El fitxer ({filePath}) s'ha desat a la carpeta de descàrregues."
},
"azteco": {
"codeIs": "El codi del teu val és",
@ -56,6 +56,7 @@
"cont_st_in_progress_buyer": "Les monedes estan en dipòsit de garantia. Si us plau paga al venedor.",
"cont_st_paid_enought": "Els bitcoins estan en el dipòsit de garantia. Pagueu al venedor \nmitjançant el mètode de pagament acordat.",
"cont_title": "Els meus contractes",
"filter_any": "cap",
"filter_buying": "Comprant",
"filter_country_global": "Ofertes globals",
"filter_currency": "Moneda",
@ -107,24 +108,6 @@
"sats": "sats",
"wasnt_paid_and_expired": "Aquesta factura no ha estat pagada i ha caducat"
},
"multisig": {
"confirm": "Confirmar",
"create": "Crear",
"create_new_key": "Crear nou",
"fee_btc": "{number} BTC",
"header": "Enviar",
"ms_help": "Ajuda",
"multisig_vault": "Bóveda",
"of": "de",
"scan_or_open_file": "Escanejar o obrir arxiu",
"share": "Compartir",
"view": "Vista",
"view_key": "Vista",
"what_is_vault_wallet": "moneder"
},
"notifications": {
"ask_me_later": "Pregunta'm després"
},
"plausibledeniability": {
"create_fake_storage": "Crear informació xifrada falsa",
"create_password": "Crear una contrasenya",
@ -205,16 +188,22 @@
"input_done": "Fet",
"input_paste": "Enganxar",
"input_total": "Total:",
"open_settings": "Obre configuració",
"permission_camera_message": "Necessitem el vostre permís per usar la vostra càmera.",
"permission_camera_title": "Permís per usar la càmera",
"open_settings": "Obre configuració",
"permission_storage_later": "Pregunta'm després",
"permission_storage_message": "BlueWallet necessita el vostre permís per accedir al vostre emmagatzematge per desar aquest fitxer.",
"psbt_tx_export": "Exportar a arxiu",
"success_done": "Fet"
"success_done": "Fet",
"problem_with_psbt": "Problema amb PSBT"
},
"settings": {
"about": "Sobre nosaltres",
"about_backup": "Feu sempre còpies de seguretat de les vostres claus!",
"about_review": "Deixa'ns una ressenya",
"about_sm_github": "GitHub",
"about_sm_discord": "Servidor Discord",
"about_sm_telegram": "Canal de Telegram",
"about_sm_twitter": "Segueix-nos a Twitter",
"advanced_options": "Configuracions avançades",
"currency": "Moneda",
@ -222,20 +211,25 @@
"default_wallets": "Veure tots els moneders",
"electrum_connected": "Conectat",
"electrum_connected_not": "No conectat",
"electrum_port": "TCP port, generalment {example}",
"electrum_port_ssl": "SSL port, generalment {example}",
"electrum_settings": "Configuració d'Electrum",
"electrum_settings_explain": "Deixa-ho buit per usar el valor per defecte",
"electrum_status": "estat",
"encrypt_del_uninstall": "Esborrar si BlueWallet es desinstala",
"encrypt_title": "Seguretat",
"general": "General",
"general_adv_mode": "Habilitar el mode avançat",
"header": "Configuració",
"language": "Idioma",
"lightning_error_lndhub_uri": "LNDHub URI no vàlid",
"lightning_settings": "Configuració Lightning",
"lightning_settings_explain": "Per connectar-te al teu propi node LND node instala LndHub i posa la seva URL aquí. Deixa el camp buit per utilitzar el LndHub per defecte \n (lndhub.io)",
"network": "Xarxa",
"network_electrum": "Servidor Electrum",
"not_a_valid_uri": "URI no vàlida",
"notifications": "Notificacions",
"open_link_in_explorer": "Obre l'enllaç a l'explorador",
"password": "Contrasenya",
"password_explain": "Crear la contrasenya que usaràs per desxifrar l'informació dels moneders",
"passwords_do_not_match": "La contrasenya no coincideix",
@ -245,23 +239,34 @@
"save": "guardar",
"saved": "Desat"
},
"notifications": {
"ask_me_later": "Pregunta'm després"
},
"transactions": {
"cancel_title": "Cancel·lar aquesta transacció (RBF)",
"confirmations_lowercase": "{confirmations} confirmacions",
"cpfp_create": "Crear",
"details_balance_hide": "Amaga el saldo",
"details_balance_show": "Mostra el saldo",
"details_block": "Altura del bloc",
"details_copy": "Copiar",
"details_from": "De",
"details_inputs": "Entrades",
"details_outputs": "Sortides",
"details_received": "Rebut",
"transaction_note_saved": "La nota de transacció s'ha desat correctament.",
"details_show_in_block_explorer": "Mostrar en l'explorador de blocs",
"details_title": "Transacció",
"details_to": "A",
"details_transaction_details": "Detalls de la transacció",
"list_conf": "Conf: {number}",
"pending": "Pendent",
"list_title": "transaccions",
"pending": "Pendent"
"status_cancel": "Cancel·lar la Transacció"
},
"wallets": {
"add_bitcoin": "Bitcoin",
"add_bitcoin_explain": "Moneder de Bitcoin senzill i potent",
"add_create": "Crear",
"add_import_wallet": "Importar moneder",
"add_lightning": "Lightning",
@ -309,5 +314,20 @@
"select_wallet": "Seleccioni moneder",
"take_photo": "Fer una foto",
"xpub_copiedToClipboard": "Copiat al porta-retalls."
},
"multisig": {
"multisig_vault": "Bóveda",
"fee_btc": "{number} BTC",
"confirm": "Confirmar",
"header": "Enviar",
"share": "Compartir",
"view": "Vista",
"create": "Crear",
"what_is_vault_wallet": "moneder",
"of": "de",
"view_key": "Vista",
"create_new_key": "Crear nou",
"scan_or_open_file": "Escanejar o obrir arxiu",
"ms_help": "Ajuda"
}
}

View File

@ -16,7 +16,9 @@
"seed": "Seed",
"wallet_key": "Klíč peněženky",
"invalid_animated_qr_code_fragment" : "Neplatný animovaný fragment QRCode, zkuste to prosím znovu",
"file_saved": "Soubor ({filePath}) byl uložen do složky Stažené soubory."
"file_saved": "Soubor ({filePath}) byl uložen do složky Stažené soubory.",
"discard_changes": "Zrušit změny?",
"discard_changes_detail": "Máte neuložené změny. Opravdu je chcete zahodit a opustit obrazovku?"
},
"azteco": {
"codeIs": "Váš kód voucheru je",
@ -76,6 +78,7 @@
"local_trader": "Local Trader",
"local_trader_new": "Nový",
"login": "Přihlásit se",
"logout": "odhlásit se",
"mycont": "Moje kontrakty",
"offer_accept": "Přijmout nabídku",
"offer_account_finish": "Vypadá to, že jste nedokončili nastavení účtu na HodlHodl, chtěli byste dokončit nastavení hned teď?",
@ -86,7 +89,7 @@
"offer_promt_fiat": "Kolik {currency} chcete koupit?",
"offer_promt_fiat_e": "Například 100",
"offer_window": "okno",
"p2p": "P2P směnárna"
"p2p": "Nakoupit bitcoiny na p2P burze"
},
"lnd": {
"errorInvoiceExpired": "Faktura vypršela",
@ -135,8 +138,9 @@
"ok": "Dobře, přepsal jsem to!",
"ok_lnd": "Dobře, uložil jsem to.",
"text": "Věnujte prosím chvíli zápisu této mnemotechnické věty na kus papíru. Je to vaše záloha, kterou můžete použít k obnovení peněženky na jiném zařízení.",
"text_lnd": "Věnujte chvíli uložení této autentizace LNDHub. Je to vaše záloha, kterou můžete použít k obnovení peněženky na jiném zařízení.",
"title": "Vaše peněženka je vytvořena..."
"text_lnd": "Uložte si tuto zálohu peněženky. Umožňí vám obnovit peněženku v případě ztráty.",
"text_lnd2": "Tuto peněženku hostuje BlueWallet.",
"title": "Vaše peněženka je vytvořena"
},
"receive": {
"details_create": "Vytvořit",
@ -174,6 +178,7 @@
"details_adv_full_sure": "Opravdu chcete pro tuto transakci použít celý zůstatek vaší peněženky?",
"details_adv_import": "Importovat transakci",
"details_amount_field_is_not_valid": "Čáskta není správně vyplněna",
"details_amount_field_is_less_than_minimum_amount_sat": "Zadaná částka je příliš malá. Zadejte částku větší než 500 sat.",
"details_create": "Vytvořit fakturu",
"details_error_decode": "Chyba: Nelze dekódovat bitcoinovou adresu",
"details_fee_field_is_not_valid": "Poplatek není správně vyplněn",
@ -238,7 +243,7 @@
"about_sm_telegram": "Telegram kanál",
"about_sm_twitter": "Sleduj nás na Twitteru",
"advanced_options": "Pokročilé možnosti",
"biom": "biometrie",
"biometrics": "Biometrie",
"biom_10times": "Pokusili jste se zadat heslo desetkrát. Chcete obnovit své úložiště? Tím odstraníte všechny peněženky a dešifrujete úložiště.",
"biom_conf_identity": "Potvrďte prosím svoji totožnost.",
"biom_no_passcode": "Vaše zařízení nemá přístupový kód. Chcete-li pokračovat, nakonfigurujte přístupový kód v Nastavení aplikace.",
@ -261,6 +266,14 @@
"electrum_settings": "Nastavení Electrum",
"electrum_settings_explain": "Chcete-li použít výchozí, nastavte na prázdné",
"electrum_status": "Status",
"electrum_clear_alert_title": "Smazat historii?",
"electrum_clear_alert_message": "Chcete vymazat historii serverů electrum?",
"electrum_clear_alert_cancel": "Zrušit",
"electrum_clear_alert_ok": "Ok",
"electrum_select": "Vybrat",
"electrum_reset": "Obnovit do základního nastavení",
"electrum_history": "Historie serveru",
"electrum_clear": "Vymazat",
"encrypt_decrypt": "Dešifrovat úložiště",
"encrypt_decrypt_q": "Opravdu chcete dešifrovat své úložiště? To umožní přístup k vašim peněženkám bez hesla.",
"encrypt_del_uninstall": "Odstranit, pokud je BlueWallet odinstalován",
@ -344,7 +357,8 @@
"status_bump": "Poplatek za popostrčení",
"status_cancel": "Zrušit transakci",
"transactions_count": "počet transakcí",
"txid": "Txid"
"txid": "Txid",
"updating": "Aktualizace..."
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -418,7 +432,7 @@
"list_long_choose": "Vybrat fotku",
"list_long_clipboard": "Kopírovat ze schránky",
"list_long_scan": "Naskenovat QR kód",
"list_marketplace": "tržiště",
"list_marketplace": "Tržiště",
"list_tap_here_to_buy": "Koupit bitcoiny",
"list_title": "peněženky",
"list_tryagain": "Zkuste to znovu",
@ -426,6 +440,7 @@
"looks_like_bip38": "Tohle vypadá jako soukromý klíč chráněný heslem (BIP38)",
"reorder_title": "Seřadit peěženky",
"please_continue_scanning": "Pokračujte ve skenování",
"scan_error": "Chyba skenování",
"select_no_bitcoin": "V současné době nejsou k dispozici žádné bitcoinové peněženky.",
"select_no_bitcoin_exp": "Bitcoinová peněženka je vyžadována pro doplnění Lightning peněženky. Vytvořte nebo importujte jednu.",
"select_wallet": "Vyberte peněženku",
@ -434,10 +449,12 @@
"pull_to_refresh": "zatáhněte pro obnovení",
"warning_do_not_disclose": "Varování! Nezveřejňujte",
"add_ln_wallet_first": "Nejprve musíte přidat Lightning peněženku.",
"identity_pubkey": "Identity Pubkey",
"xpub_title": "XPUB peněženky"
},
"multisig": {
"multisig_vault": "Uložiště",
"default_label": "Vícepodpisové uložiště",
"multisig_vault_explain": "Nejlepší zabezpečení pro velké částky",
"provide_signature": "Poskytnout podpis",
"vault_key": "Klíč úložiště {number}",
@ -449,7 +466,9 @@
"share": "Sdílet",
"view": "Podívat se",
"manage_keys": "Spravovat klíče",
"how_many_signatures_can_bluewallet_make": "kolik podpisů může bluewallet udělat",
"how_many_signatures_can_bluewallet_make": "kolik podpisů může bluewallet vytvořit",
"signatures_required_to_spend": "Vyžadují se {number} podpisy",
"signatures_we_can_make": "může vytvořit {number}",
"scan_or_import_file": "Naskenujte nebo importujte soubor",
"export_coordination_setup": "nastavení koordinace exportu",
"cosign_this_transaction": "Spolupodepsat transakci?",
@ -475,6 +494,7 @@
"view_key": "Podívat se",
"invalid_mnemonics": "Zdá se, že tato mnemotechnická fráze není platná",
"invalid_cosigner": "Nejsou platná data spolupodepsaného",
"not_a_multisignature_xpub": "Toto není xpub z vícepodpisové peněženky!",
"invalid_cosigner_format": "Nesprávný spolupodepsaný: toto není spolupodepsaný pro {format} formát",
"create_new_key": "Vytvořit novou",
"scan_or_open_file": "Naskenujte nebo otevřete soubor",
@ -521,9 +541,11 @@
"empty": "Tato peněženka nemá v tuto chvíli žádné mince",
"freeze": "zmrazit",
"freezeLabel": "Zmrazit",
"freezeLabel_un": "Uvolnit",
"header": "Kontrola mincí",
"use_coin": "Použít minci",
"tip": "Umožňuje zobrazit, označit, zmrazit nebo vybrat mince pro lepší správu peněženky."
"use_coins": "Použít mince",
"tip": "Umožňuje zobrazit, označit, zmrazit nebo vybrat mince pro lepší správu peněženky. Klepnutím na barevné kruhy můžete vybrat více mincí."
},
"units": {
"BTC": "BTC",

View File

@ -2,7 +2,7 @@
"_": {
"bad_password": "Falsches Passwort. Bitte erneut versuchen.",
"cancel": "Abbrechen",
"continue": "Weiter",
"continue": "Fortsetzen",
"enter_password": "Passwort eingeben",
"never": "nie",
"of": "{number} von {total}",
@ -15,14 +15,16 @@
"save": "Speichern",
"seed": "Seed",
"wallet_key": "Wallet Schlüssel",
"invalid_animated_qr_code_fragment" : "Ungültig animiertes QR-Code-Fragment. Bitte erneut versuchen",
"file_saved": "Die Datei ({filePath}) wurde deinen Downloadfolder gespeichert."
"invalid_animated_qr_code_fragment" : "Ungültig animiertes QR-Code-Fragment. Bitte erneut versuchen.",
"file_saved": "Die Datei ({filePath}) wurde in deinen Downloadfolder gespeichert.",
"discard_changes": "Änderungen verwerfen?",
"discard_changes_detail": "Die nicht gespeicherten Änderungen verwerfen und den Bildschirm verlassen?"
},
"azteco": {
"codeIs": "Dein Gutscheincode lautet",
"errorBeforeRefeem": "Vor der Einlösung muss eine Bitcoin Wallet hinzugefügt werden.",
"errorSomething": "Etwas ist schiefgelaufen. Ist der Gutscheincode noch gültig?",
"redeem": "Einlösen in Wallet",
"redeem": "Einlösen in eine Wallet",
"redeemButton": "Einlösen",
"success": "Erfolg",
"title": "Azte.co Gutschein einlösen"
@ -49,7 +51,7 @@
"cont_how": "Zahlungsart",
"cont_no": "Du hast keine Aufträge in Bearbeitung.",
"cont_paid": "Markiere als bezahlt",
"cont_paid_e": "Tue dies nur, wenn Du das Geld an den Verkäufer mithilfe der abgemachten Zahlungsmethode übermittelt hast.",
"cont_paid_e": "Tue dies nur, wenn Du das Geld an den Verkäufer mithilfe der vereinbarten Zahlungsart übermittelt hast.",
"cont_paid_q": "Bist Du sicher, dass du den Auftrag als bezahlt kennzeichnen möchtest?",
"cont_selling": "verkaufen",
"cont_st_completed": "Alles erledigt!",
@ -66,7 +68,7 @@
"filter_filters": "Filter",
"filter_iambuying": "Ich kaufe Bitcoin",
"filter_iamselling": "Ich verkaufe Bitcoin",
"filter_method": "Zahlungsmethode",
"filter_method": "Zahlungsart",
"filter_search": "Suche",
"filter_selling": "verkaufen",
"item_minmax": "Min/Max",
@ -121,8 +123,8 @@
"create_fake_storage": "Erstelle verschlüsselten Speicher zur Täuschung",
"create_password": "Erstelle ein Passwort",
"create_password_explanation": "Das Passwort für den täuschenden Speicher darf nicht mit dem deines Hauptspeichers übereinstimmen",
"help": "Unter bestimmten Umständen könntest du dazu gezwungen werden, dein Passwort preiszugeben. Um deine Bitcoins zu sichern, kann BlueWallet einen weiteren verschlüsselten Speicher mit einem anderen Passwort erstellen. Unter Druck kannst du das zweite Passwort an Fremde weitergeben. Wenn eingegeben, öffnet BlueWallet einen anderen Speicher zur Täuschung. Dies wirkt auf Fremde täuschend echt und dein Hauptspeicher bleibt geheim und sicher.",
"help2": "Der andere Speicher ist voll funktional und man kann einen Minimalbetrag für die Glaubhaftigkeit hinterlegen.",
"help": "BlueWallet erlaubt die Erstellung eines zweiten verschlüsselten Speichers mit eigenem Passwort. Solltest Du gezwungen werden dein Passwort preiszugeben, kannst Du dieses anstelle des richtigen Passwortes nennen. BlueWallet öffnet dann die Wallet, welche Du im zweiten Speicher zur Täuschung angelegt hast und dein Hauptspeicher bleibt geheim und sicher.",
"help2": "Der zweite Speicher ist funktional identisch. Zahle auf die darin angelegten Wallet ein Minimalbetrag ein, um die Täuschung glaubhafter zu machen.",
"password_should_not_match": "Das Passwort für den täuschenden Speicher darf nicht mit dem deines Hauptspeichers übereinstimmen",
"passwords_do_not_match": "Passwörter stimmen nicht überein. Bitte erneut versuchen.",
"retype_password": "Passwort wiederholen",
@ -134,11 +136,11 @@
"ask_no": "Nein, habe ich nicht.",
"ask_yes": "Ja, habe ich.",
"ok": "Ja, ich habe sie aufgeschrieben!",
"ok_lnd": "Okay, ich habe sie gesichert.",
"text": "Nimm Dir Zeit die mnemonischen Wörter zur späteren Wiederherstellung des Wallets aufzuschreiben. Die Wörter sind dein einziges Backup im Fall eines Geräteverlustes.",
"text_lnd": "Zur Wiederherstellung des Wallet im Verlustfall bitte dieses Wallet-Backup speichern. ",
"ok_lnd": "Die Sicherung ist erstellt.",
"text": "Nimm Dir Zeit die mnemonischen Wörter zur späteren Wiederherstellung des Wallets auf ein Papier zu schreiben. Die Wörter sind dein einziges Backup im Fall eines Geräteverlustes.",
"text_lnd": "Zur Wiederherstellung des Wallet im Verlustfall bitte dieses Wallet-Backup sichern. ",
"text_lnd2": "Diese Wallet wird durch BlueWallet verwaltet.",
"title": "Dein Wallet ist erstellt"
"title": "Dein Wallet ist erstellt."
},
"receive": {
"details_create": "Erstelle",
@ -156,7 +158,7 @@
"confirm_header": "Bestätigen",
"confirm_sendNow": "Jetzt senden",
"create_amount": "Betrag",
"create_broadcast": "Übertragen",
"create_broadcast": "Transaktion publizieren",
"create_copy": "Kopieren und später senden",
"create_details": "Details",
"create_fee": "Gebühr",
@ -170,7 +172,7 @@
"details_add_rec_rem": "Empfänger entfernen",
"details_address": "Adresse",
"details_address_field_is_not_valid": "Adresseingabe ist nicht korrekt",
"details_adv_fee_bump": "Gebühranhebung erlauben",
"details_adv_fee_bump": "TRX-Gebührenerhöhung nach Senden ermöglichen",
"details_adv_full": "Nutze gesamtes Guthaben",
"details_adv_full_remove": "Die anderen Empfänger werden von dieser Transaktion entfernt.",
"details_adv_full_sure": "Bist Du sicher, dass Du das gesamte Guthaben für diese Transaktion verwenden willst?",
@ -182,7 +184,7 @@
"details_fee_field_is_not_valid": "Gebühreneingabe ist nicht korrekt",
"details_next": "Weiter",
"details_no_maximum": "Das maximale Guthaben kann für das gewählte Wallet nicht automatisch berechnet werden. Willst Du es trotzdem verwenden?",
"details_no_multiple": "Die ausgewählte Wallet erlaubt nicht die Sendung von Bitcoin an mehrere Empfänger. Diese Wallet benutzen?",
"details_no_multiple": "Die ausgewählte Wallet erlaubt kein Senden von bitcoin an mehrere Empfänger. Trotzdem diese Wallet benutzen?",
"details_no_signed_tx": "Die ausgewählte Datei enthält keine importierbare signierte Transaktion.",
"details_note_placeholder": "Notiz für sich selbst",
"details_scan": "Scannen",
@ -208,8 +210,9 @@
"input_done": "Fertig",
"input_paste": "Einfügen",
"input_total": "Gesamt:",
"permission_camera_message": "Wir brauchen Deine Erlaubnis um die Kamera zu nutzen.",
"permission_camera_message": "BlueWallet braucht Deine Erlaubnis, um die Kamera zu nutzen.",
"permission_camera_title": "Erlaubnis die Kamera zu benutzen",
"psbt_sign": "Transaktion signieren",
"open_settings": "Einstellungen öffnen",
"permission_storage_later": "Später beantworten",
"permission_storage_message": "BlueWallet braucht zur Speicherung dieser Datei die Erlaubnis auf den internen Speicher zuzugreifen.",
@ -329,7 +332,7 @@
"cancel_no": "Diese Transaktion ist nicht ersetzbar.",
"cancel_title": "Diese Transaktion abbrechen (RBF)",
"confirmations_lowercase": "{confirmations} Bestätigungen",
"cpfp_create": "Erzeugen",
"cpfp_create": "Erstellen",
"cpfp_exp": "BlueWallet erzeugt eine Transaktion, welche deine unbestätigte Transaktion ausgibt. Die gesetzten Gebühren werden höher als die der ursprünglichen Transaktion sein, daher sollte sie schneller zugestellt werden. Dies wird CPFP genannt - Child Pays For Parent.",
"cpfp_no_bump": "Keine TRX-Gebührenerhöhung möglich",
"cpfp_title": "TRX-Gebühr erhöhen (CPFP)",
@ -337,7 +340,7 @@
"details_balance_show": "Guthaben zeigen",
"details_block": "Blockhöhe",
"details_copy": "Kopieren",
"details_from": "Eingehend",
"details_from": "Eingang",
"details_inputs": "Eingänge",
"details_outputs": "Ausgänge",
"details_received": "Empfangen",
@ -346,7 +349,7 @@
"details_title": "Transaktion",
"details_to": "Ausgehend",
"details_transaction_details": "Transaktionsdetails",
"enable_hw": "Diese Wallet wird ohne Hardware wallet verwendet. Möchtest Du eine Hardware-Wallet aktivieren?",
"enable_offline_signing": "Diese Wallet wird ohne Offline-Signierung genutzt. Soll diese jetzt aktiviert werden?",
"list_conf": "Bestätigungen: {number}",
"pending": "Ausstehend",
"list_title": "Transaktionen",
@ -355,7 +358,8 @@
"status_bump": "TRX-Gebühr erhöhen",
"status_cancel": "Transaktion abbrechen",
"transactions_count": "Anzahl Transaktionen",
"txid": "TX-ID"
"txid": "TX-ID",
"updating": "Aktualisiere...."
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -395,7 +399,7 @@
"details_ms_ws": "{m} von {n} wrapped segwit (p2sh-p2wsh)",
"details_multisig_type": "Mehrfachsignatur",
"details_no_cancel": "Nein, abbrechnen",
"details_save": "Sichern",
"details_save": "Speichern",
"details_show_xpub": "Wallet XPUB zeigen",
"details_title": "Wallet",
"details_type": "Typ",
@ -437,6 +441,7 @@
"looks_like_bip38": "Passwortgeschützter Privatschlüssel (BIP38) erkannt.",
"reorder_title": "Wallets neu ordnen",
"please_continue_scanning": "Bitte Scanvorgang fortsetzten",
"scan_error": "Scanfehler",
"select_no_bitcoin": "Es sind momentan keine Bitcoin Wallets verfügbar.",
"select_no_bitcoin_exp": "Eine Bitcoin Wallet ist Voraussetzung dafür, um eine Lightning Wallet zu befüllen. Bitte erstelle oder importiere eines.",
"select_wallet": "Wähle eine Wallet",
@ -445,13 +450,14 @@
"pull_to_refresh": "Zum Aktualisieren ziehen",
"warning_do_not_disclose": "Warnung! Nicht veröffentlichen",
"add_ln_wallet_first": "Bitte zuerst ein Lightning-Wallet hinzufügen.",
"identity_pubkey": "Pubkey-Identität",
"xpub_title": "Wallet XPUB"
},
"multisig": {
"multisig_vault": "Tresor",
"default_label": "Multisignatur Tresor",
"multisig_vault_explain": "Höchste Sicherheit für große Beträge",
"provide_signature": "Stell die Signatur bereit",
"provide_signature": "Schlüssel eingeben",
"vault_key": "Tresor-Schlüssel: {number}",
"required_keys_out_of_total": "Erforderliche Schlüssel aus dem Total",
"fee": "Gebhür: {number}",
@ -474,7 +480,7 @@
"wrapped_segwit_title": "Größte Kompatibilität",
"legacy_title": "Altformat",
"co_sign_transaction": "Eine Transaktion signieren",
"what_is_vault": "Ein Tresor ist ein",
"what_is_vault": "Ein Tresor ist ein ",
"what_is_vault_numberOfWallets": "{m}-von-{n} Multisignatur",
"what_is_vault_wallet": "wallet",
"vault_advanced_customize": "Tresor Einstellungen",

View File

@ -9,7 +9,7 @@
"ok": "OK",
"storage_is_encrypted": "Your storage is encrypted. Password is required to decrypt it.",
"allow": "Allow",
"dont_allow": "Don't Allow",
"dont_allow": "Dont Allow",
"yes": "Yes",
"no": "No",
"save": "Save",
@ -35,67 +35,67 @@
"undo": "Undo"
},
"errors": {
"broadcast": "Broadcast failed",
"broadcast": "Broadcast failed.",
"error": "Error",
"network": "Network Error"
},
"hodl": {
"are_you_sure_you_want_to_logout": "Are you sure you want to logout from HodlHodl?",
"are_you_sure_you_want_to_logout": "Are you sure you want to log out from Hodl Hodl?",
"cont_address_escrow": "Escrow",
"cont_address_to": "To",
"cont_buying": "Buying",
"cont_cancel": "Cancel contract",
"cont_cancel_q": "Are you sure you want to cancel this contract?",
"cont_cancel_y": "Yes, cancel contract",
"cont_chat": "Open chat with counterparty",
"cont_chat": "Open chat with the counterparty",
"cont_how": "How to pay",
"cont_no": "You don't have any contracts in progress.",
"cont_paid": "Mark contract as Paid",
"cont_paid_e": "Do this only if you sent funds to the seller via agreed payment method",
"cont_no": "You dont have any contracts in progress.",
"cont_paid": "Mark contract as paid",
"cont_paid_e": "Do this only if you sent funds to the seller via the agreed payment method",
"cont_paid_q": "Are you sure you want to mark this contract as paid?",
"cont_selling": "Selling",
"cont_st_completed": "All done!",
"cont_st_in_progress_buyer": "Coins are in escrow. Please pay seller.",
"cont_st_paid_enought": "Bitcoins are in escrow. Please pay seller\nvia agreed payment method.",
"cont_st_paid_waiting": "Waiting for seller to release coins from escrow",
"cont_st_waiting": "Waiting for seller to deposit bitcoins to escrow",
"cont_title": "My contracts",
"cont_st_in_progress_buyer": "Coins are in escrow. Please pay the seller.",
"cont_st_paid_enought": "Bitcoins are in escrow. Please pay the seller\nvia the agreed payment method.",
"cont_st_paid_waiting": "Waiting for the seller to release the coins from escrow",
"cont_st_waiting": "Waiting for the seller to deposit bitcoins to escrow",
"cont_title": "My Contracts",
"filter_any": "Any",
"filter_buying": "Buying",
"filter_country_global": "Global Offers",
"filter_currency": "Currency",
"filter_detail": "Detail",
"filter_filters": "Filters",
"filter_iambuying": "I'm buying bitcoin",
"filter_iamselling": "I'm selling bitcoin",
"filter_iambuying": "Im buying bitcoin",
"filter_iamselling": "Im selling bitcoin",
"filter_method": "Payment Method",
"filter_search": "Search",
"filter_selling": "Selling",
"item_minmax": "Min/Max",
"item_nooffers": "No offers. Try to change \"Near me\" to Global offers.",
"item_nooffers": "No offers. Try to change “Near me” to “Global Offers.”",
"item_rating": "{rating} trades",
"item_rating_no": "No rating",
"local_trader": "Local Trader",
"local_trader_new": "New",
"login": "Login",
"logout": "logout",
"mycont": "My contracts",
"logout": "Logout",
"mycont": "My Contracts",
"offer_accept": "Accept offer",
"offer_account_finish": "Looks like you didn't finish setting up account on HodlHodl. Would you like to finish setup now?",
"offer_choosemethod": "Choose payment method",
"offer_account_finish": "It looks like you didnt finish setting up an account on Hodl Hodl. Would you like to finish setup now?",
"offer_choosemethod": "Choose Payment Method",
"offer_confirmations": "confirmations",
"offer_minmax": "Min/Max",
"offer_minutes": "Min",
"offer_promt_fiat": "How much {currency} do you want to buy?",
"offer_promt_fiat_e": "For example, 100",
"offer_window": "window",
"p2p": "Buy Bitcoin on a p2p exchange"
"offer_window": "Window",
"p2p": "Buy Bitcoin on a Peer-to-Peer Exchange"
},
"lnd": {
"errorInvoiceExpired": "Invoice expired",
"exchange": "Exchange",
"expired": "Expired",
"expiredLow": "expired",
"expiredLow": "Expired",
"expiresIn": "Expires: {time}",
"payButton": "Pay",
"placeholder": "Invoice",
@ -105,26 +105,26 @@
"refill_create": "In order to proceed, please create a Bitcoin wallet to refill with.",
"refill_external": "Refill with External Wallet",
"refill_lnd_balance": "Refill Lightning Wallet Balance",
"sameWalletAsInvoiceError": "You cannot pay an invoice with the same wallet used to create it.",
"sameWalletAsInvoiceError": "You cant pay an invoice with the same wallet used to create it.",
"title": "Manage Funds"
},
"lndViewInvoice": {
"additional_info": "Additional Information",
"for": "For:",
"lightning_invoice": "Lightning Invoice",
"has_been_paid": "This invoice has been paid for",
"has_been_paid": "This invoice has been paid.",
"open_direct_channel": "Open direct channel with this node:",
"please_pay": "Please pay",
"preimage": "Preimage",
"sats": "sats",
"wasnt_paid_and_expired": "This invoice was not paid for and has expired."
"sats": "sats.",
"wasnt_paid_and_expired": "This invoice was not paid and has expired."
},
"plausibledeniability": {
"create_fake_storage": "Create Encrypted Storage",
"create_password": "Create a password",
"create_password_explanation": "Password for fake storage should not match the password for your main storage.",
"help": "Under certain circumstances, you might be forced to disclose a password. To keep your coins safe, BlueWallet can create another encrypted storage with a different password. Under pressure, you can disclose this password to a 3rd party. If entered in BlueWallet, it will unlock a new “fake” storage. This will seem legit to the third party, but it will secretly keep your main storage with coins safe.",
"help2": "The new storage will be fully functional, and you can store some minimum amounts there so it looks more believable.",
"create_password_explanation": "Password for the fake storage should not match the password for your main storage.",
"help": "Under certain circumstances, you might be forced to disclose a password. To keep your coins safe, BlueWallet can create another encrypted storage with a different password. Under pressure, you may disclose this password to a third party. If entered in BlueWallet, it will unlock a new “fake” storage. This will seem legit to the third party, but it will secretly keep your main storage with coins safe.",
"help2": "The new storage will be fully functional, and you can store some minimum amounts there so that it looks more believable.",
"password_should_not_match": "Password is currently in use. Please try a different password.",
"passwords_do_not_match": "Passwords do not match. Please try again.",
"retype_password": "Re-type password",
@ -132,21 +132,21 @@
"title": "Plausible Deniability"
},
"pleasebackup": {
"ask": "Have you saved your wallet's backup phrase? This backup phrase is required to access your funds in case you lose this device. Without the backup phrase, your funds will be permanently lost.",
"ask": "Have you saved your wallets backup phrase? This backup phrase is required to access your funds in case you lose this device. Without the backup phrase, your funds will be permanently lost.",
"ask_no": "No, I have not",
"ask_yes": "Yes, I have",
"ok": "OK, I wrote this down.",
"ok_lnd": "OK, I have saved it.",
"text": "Please take a moment to write down this mnemonic phrase on a piece of paper. It's your backup you can use to restore the wallet on other device.",
"text": "Please take a moment to write down this mnemonic phrase on a piece of paper. Its your backup you can use to restore the wallet on other device.",
"text_lnd": "Please save this wallet backup. It allows you to restore the wallet in case of loss.",
"text_lnd2": "This wallet is hosted by BlueWallet.",
"title": "Your wallet is created"
"title": "Your wallet has been created."
},
"receive": {
"details_create": "Create",
"details_label": "Description",
"details_setAmount": "Receive with amount",
"details_share": "share",
"details_share": "Share",
"header": "Receive"
},
"send": {
@ -164,28 +164,28 @@
"create_fee": "Fee",
"create_memo": "Memo",
"create_satoshi_per_byte": "Satoshi per byte",
"create_this_is_hex": "This is your transaction's hex—signed and ready to be broadcasted to the network.",
"create_this_is_hex": "This is your transactions hex—signed and ready to be broadcasted to the network.",
"create_to": "To",
"create_tx_size": "Transaction Size",
"create_verify": "Verify on coinb.in",
"details_add_rec_add": "Add Recipient",
"details_add_rec_rem": "Remove Recipient",
"details_address": "Address",
"details_address_field_is_not_valid": "Address field is not valid",
"details_address_field_is_not_valid": "The address is not valid.",
"details_adv_fee_bump": "Allow Fee Bump",
"details_adv_full": "Use Full Balance",
"details_adv_full_remove": "Your other recipients will be removed from this transaction.",
"details_adv_full_sure": "Are you sure you want to use your wallet's full balance for this transaction?",
"details_adv_full_sure": "Are you sure you want to use your wallets full balance for this transaction?",
"details_adv_import": "Import Transaction",
"details_amount_field_is_not_valid": "Amount field is not valid",
"details_amount_field_is_not_valid": "The amount is not valid.",
"details_amount_field_is_less_than_minimum_amount_sat": "The specified amount is too small. Please enter an amount greater than 500 sats.",
"details_create": "Create Invoice",
"details_error_decode": "Error: Unable to decode Bitcoin address",
"details_fee_field_is_not_valid": "Fee field is not valid",
"details_fee_field_is_not_valid": "The fee is not valid.",
"details_next": "Next",
"details_no_maximum": "The selected wallet does not support automatic maximum balance calculation. Are you sure to want to select this wallet?",
"details_no_multiple": "The selected wallet does not support sending Bitcoin to multiple recipients. Are you sure to want to select this wallet?",
"details_no_signed_tx": "The selected file does not contain a transaction that can be imported.",
"details_no_maximum": "The selected wallet doesnt support automatic maximum balance calculation. Are you sure to want to select this wallet?",
"details_no_multiple": "The selected wallet doesnt support sending bitcoin to multiple recipients. Are you sure to want to select this wallet?",
"details_no_signed_tx": "The selected file doesnt contain a transaction that can be imported.",
"details_note_placeholder": "Note to Self",
"details_scan": "Scan",
"details_total_exceeds_balance": "The sending amount exceeds the available balance.",
@ -202,7 +202,7 @@
"fee_custom": "Custom",
"fee_fast": "Fast",
"fee_medium": "Medium",
"fee_replace_min": "The total fee rate (satoshi per byte) you want to pay should be higher than {min} sat/byte",
"fee_replace_min": "The total fee rate (satoshi per byte) you want to pay should be higher than {min} sat/byte.",
"fee_satbyte": "in sat/byte",
"fee_slow": "Slow",
"header": "Send",
@ -212,6 +212,7 @@
"input_total": "Total:",
"permission_camera_message": "We need your permission to use your camera.",
"permission_camera_title": "Permission to use camera",
"psbt_sign": "Sign a transaction",
"open_settings": "Open Settings",
"permission_storage_later": "Ask me later",
"permission_storage_message": "BlueWallet needs your permission to access your storage to save this file.",
@ -223,8 +224,8 @@
"no_tx_signing_in_progress": "There is no transaction signing in progress.",
"psbt_tx_open": "Open Signed Transaction",
"psbt_tx_scan": "Scan Signed Transaction",
"qr_error_no_qrcode": "The selected image does not contain a QR Code.",
"qr_error_no_wallet": "The selected file does not contain a wallet that can be imported.",
"qr_error_no_qrcode": "The selected image doesnt contain a QR Code.",
"qr_error_no_wallet": "The selected file doesnt contain a wallet that can be imported.",
"success_done": "Done",
"txSaved": "The transaction file ({filePath}) has been saved in your Downloads folder.",
"problem_with_psbt": "Problem with PSBT"
@ -238,6 +239,7 @@
"about_release_notes": "Release notes",
"about_review": "Leave us a review",
"about_selftest": "Run self-test",
"about_selftest_ok": "All internal tests have passed successfully. The wallet works well.",
"about_sm_github": "GitHub",
"about_sm_discord": "Discord Server",
"about_sm_telegram": "Telegram channel",
@ -256,15 +258,15 @@
"default_wallets": "View All Wallets",
"electrum_connected": "Connected",
"electrum_connected_not": "Not Connected",
"electrum_error_connect": "Can't connect to provided Electrum server",
"electrum_host": "Host, for example {example}",
"electrum_error_connect": "Cant connect to the provided Electrum server",
"electrum_host": "Host, for example, {example}",
"electrum_port": "TCP port, usually {example}",
"electrum_port_ssl": "SSL port, usually {example}",
"electrum_saved": "Your changes have been saved successfully. Restart may be required for changes to take effect.",
"set_electrum_server_as_default": "Set {server} as default electrum server?",
"set_lndhub_as_default": "Set {url} as default LNDHub server?",
"electrum_settings": "Electrum Settings",
"electrum_settings_explain": "Set to blank to use default",
"electrum_saved": "Your changes have been saved successfully. Restarting BlueWallet may be required for the changes to take effect.",
"set_electrum_server_as_default": "Set {server} as the default Electrum server?",
"set_lndhub_as_default": "Set {url} as the default LNDHub server?",
"electrum_settings_server": "Electrum Server Settings",
"electrum_settings_explain": "Leave blank to use the default settings.",
"electrum_status": "Status",
"electrum_clear_alert_title": "Clear history?",
"electrum_clear_alert_message": "Do you want to clear electrum servers history?",
@ -284,17 +286,17 @@
"encrypt_use_expl": "{type} will be used to confirm your identity prior to making a transaction, unlocking, exporting, or deleting a wallet. {type} will not be used to unlock an encrypted storage.",
"general": "General",
"general_adv_mode": "Advanced Mode",
"general_adv_mode_e": "When enabled, you will see advanced options such as different wallet types, the ability to specify the LNDHub instance you wish to connect to and custom entropy during wallet creation.",
"general_adv_mode_e": "When enabled, you will see advanced options such as different wallet types, the ability to specify the LNDHub instance you wish to connect to, and custom entropy during wallet creation.",
"general_continuity": "Continuity",
"general_continuity_e": "When enabled, you will be able to view selected wallets, and transactions, using your other Apple iCloud connected devices.",
"groundcontrol_explanation": "GroundControl is a free opensource push notifications server for Bitcoin wallets. You can install your own GroundControl server and put its URL here to not rely on BlueWallet's infrastructure. Leave blank to use default",
"groundcontrol_explanation": "GroundControl is a free, open-source push notifications server for Bitcoin wallets. You can install your own GroundControl server and put its URL here to not rely on BlueWallets infrastructure. Leave blank to use GroundControls default server.",
"header": "Settings",
"language": "Language",
"language_restart": "When selecting a new language, restarting BlueWallet may be required for the change to take effect.",
"lightning_error_lndhub_uri": "Not a valid LNDHub URI",
"lightning_saved": "Your changes have been saved successfully",
"lightning_saved": "Your changes have been saved successfully.",
"lightning_settings": "Lightning Settings",
"lightning_settings_explain": "To connect to your own LND node please install LNDHub and put its URL here in settings. Leave blank to use BlueWallet's LNDHub (lndhub.io). Wallets created after saving changes will connect to the specified LNDHub.",
"lightning_settings_explain": "To connect to your own LND node, please install LNDHub and put its URL here in settings. Leave blank to use BlueWallets LNDHub (lndhub.io). Wallets created after saving changes will connect to the specified LNDHub.",
"network": "Network",
"network_broadcast": "Broadcast Transaction",
"network_electrum": "Electrum Server",
@ -302,16 +304,16 @@
"notifications": "Notifications",
"open_link_in_explorer" : "Open link in explorer",
"password": "Password",
"password_explain": "Create the password you will use to decrypt the storage",
"passwords_do_not_match": "Passwords do not match",
"password_explain": "Create the password you will use to decrypt the storage.",
"passwords_do_not_match": "Passwords do not match.",
"plausible_deniability": "Plausible Deniability",
"privacy": "Privacy",
"privacy_read_clipboard": "Read Clipboard",
"privacy_read_clipboard_alert": "BlueWallet will display shortcuts for handling an invoice or address found in your clipboard.",
"privacy_system_settings": "System Settings",
"privacy_quickactions": "Wallet Shortcuts",
"privacy_quickactions_explanation": "Touch and hold the BlueWallet app icon on your Home Screen to quickly view your wallet's balance.",
"privacy_clipboard_explanation": "Provide shortcuts if an address, or invoice, is found in your clipboard.",
"privacy_quickactions_explanation": "Touch and hold the BlueWallet app icon on your Home Screen to quickly view your wallets balance.",
"privacy_clipboard_explanation": "Provide shortcuts if an address or invoice is found in your clipboard.",
"push_notifications": "Push Notifications",
"retype_password": "Re-type password",
"save": "Save",
@ -323,7 +325,7 @@
},
"notifications": {
"would_you_like_to_receive_notifications": "Would you like to receive notifications when you get incoming payments?",
"no_and_dont_ask": "No, and don't ask me again",
"no_and_dont_ask": "No, and dont ask me again",
"ask_me_later": "Ask me later"
},
"transactions": {
@ -332,8 +334,8 @@
"cancel_title": "Cancel this transaction (RBF)",
"confirmations_lowercase": "{confirmations} confirmations",
"cpfp_create": "Create",
"cpfp_exp": "We will create another transaction that spends your unconfirmed transaction. The total fee will be higher than the original transaction fee, so it should be mined faster. This is called CPFP - Child Pays For Parent.",
"cpfp_no_bump": "This transaction is not bumpable",
"cpfp_exp": "We will create another transaction that spends your unconfirmed transaction. The total fee will be higher than the original transaction fee, so it should be mined faster. This is called CPFP—Child Pays for Parent.",
"cpfp_no_bump": "This transaction is not bumpable.",
"cpfp_title": "Bump Fee (CPFP)",
"details_balance_hide": "Hide Balance",
"details_balance_show": "Show Balance",
@ -348,11 +350,11 @@
"details_title": "Transaction",
"details_to": "Output",
"details_transaction_details": "Transaction Details",
"enable_hw": "This wallet is not being used in conjunction with a hardware wallet. Would you like to enable hardware wallet use?",
"enable_offline_signing": "This wallet is not being used in conjunction with an offline signing. Would you wish to enable it now?",
"list_conf": "Conf: {number}",
"pending": "Pending",
"list_title": "Transactions",
"rbf_explain": "We will replace this transaction with the one with a higher fee, so it should be mined faster. This is called RBF - Replace By Fee.",
"rbf_explain": "We will replace this transaction with one with a higher fee, so it should be mined faster. This is called RBF—Replace by Fee.",
"rbf_title": "Bump Fee (RBF)",
"status_bump": "Bump Fee",
"status_cancel": "Cancel Transaction",
@ -371,7 +373,7 @@
"add_lightning": "Lightning",
"add_lightning_explain": "For spending with instant transactions",
"add_lndhub": "Connect to your LNDHub",
"add_lndhub_error": "The provided node address is not valid LNDHub node.",
"add_lndhub_error": "The provided node address is not a valid LNDHub node.",
"add_lndhub_placeholder": "Your Node Address",
"add_or": "or",
"add_title": "Add Wallet",
@ -384,13 +386,13 @@
"details_are_you_sure": "Are you sure?",
"details_connected_to": "Connected to",
"details_del_wb": "Wallet Balance",
"details_del_wb_err": "The provided balance amount does not match this wallet's balance. Please try again.",
"details_del_wb_q": "This wallet has a balance. Before proceeding, please be aware that you will not be able to recover the funds without this wallet's seed phrase. In order to avoid accidental removal this wallet, please enter your wallet's balance of {balance} satoshis.",
"details_del_wb_err": "The provided balance amount doesnt match this wallets balance. Please try again.",
"details_del_wb_q": "This wallet has a balance. Before proceeding, please be aware that you will not be able to recover the funds without this wallets seed phrase. In order to avoid accidental removal this wallet, please enter your wallets balance of {balance} satoshis.",
"details_delete": "Delete",
"details_delete_wallet": "Delete Wallet",
"details_derivation_path": "derivation path",
"details_display": "Display in Wallets List",
"details_export_backup": "Export / Backup",
"details_export_backup": "Export/Backup",
"details_marketplace": "Marketplace",
"details_master_fingerprint": "Master Fingerprint",
"details_ms_l": "{m} of {n} legacy (p2sh)",
@ -409,7 +411,7 @@
"export_title": "Wallet Export",
"import_do_import": "Import",
"import_error": "Failed to import. Please make sure that the provided data is valid.",
"import_explanation": "Write here your mnemonic, private key, WIF, or anything you've got. BlueWallet will do its best to guess the correct format and import your wallet.",
"import_explanation": "Write here your mnemonic, private key, WIF, or anything youve got. BlueWallet will do its best to guess the correct format and import your wallet. If a public key is entered, we will add it as a Watch-only wallet.",
"import_file": "Import File",
"import_imported": "Imported",
"import_placeholder_fail": "Wallet Import",
@ -419,14 +421,14 @@
"import_title": "Import",
"list_create_a_button": "Add now",
"list_create_a_wallet": "Add a wallet",
"list_create_a_wallet_text": "It's free and you can create \nas many as you like.",
"list_empty_txs1": "Your transactions will appear here",
"list_create_a_wallet_text": "Its free and you can create \nas many as you like.",
"list_empty_txs1": "Your transactions will appear here.",
"list_empty_txs1_lightning": "Lightning wallet should be used for your daily transactions. Fees are unfairly cheap and the speed is blazing fast.",
"list_empty_txs2": "Start with your wallet",
"list_empty_txs2_lightning": "\nTo start using it tap on “manage funds” and topup your balance.",
"list_header": "A wallet represents a pair of keys, one private and one you can share to receive coins.",
"list_empty_txs2_lightning": "\nTo start using it, tap on Manage Funds and topup your balance.",
"list_header": "A wallet represents a pair of keys: one private and one you can share to receive coins.",
"list_import_error": "An error was encountered when attempting to import this wallet.",
"list_import_problem": "There was a problem importing this wallet",
"list_import_problem": "There was a problem importing this wallet.",
"list_latest_transaction": "Latest Transaction",
"list_ln_browser": "LApp Browser",
"list_long_choose": "Choose Photo",
@ -437,9 +439,9 @@
"list_title": "Wallets",
"list_tryagain": "Try again",
"no_ln_wallet_error": "Before paying a Lightning invoice, you must first add a Lightning wallet.",
"looks_like_bip38": "This looks like a password-protected private key (BIP38)",
"reorder_title": "Reorder Wallets",
"please_continue_scanning": "Please continue scanning",
"looks_like_bip38": "This looks like a password-protected private key (BIP38).",
"reorder_title": "Re-order Wallets",
"please_continue_scanning": "Please continue scanning.",
"scan_error": "Scan Error",
"select_no_bitcoin": "There are currently no Bitcoin wallets available.",
"select_no_bitcoin_exp": "A Bitcoin wallet is required to refill Lightning wallets. Please create or import one.",
@ -447,7 +449,7 @@
"take_photo": "Take Photo",
"xpub_copiedToClipboard": "Copied to clipboard.",
"pull_to_refresh": "Pull to Refresh",
"warning_do_not_disclose": "Warning! Do not disclose",
"warning_do_not_disclose": "Warning! Do not disclose.",
"add_ln_wallet_first": "You must first add a Lightning wallet.",
"identity_pubkey": "Identity Pubkey",
"xpub_title": "Wallet XPUB"
@ -457,7 +459,7 @@
"default_label": "Multisig Vault",
"multisig_vault_explain": "Best security for large amounts",
"provide_signature": "Provide signature",
"vault_key": "Vault key {number}",
"vault_key": "Vault Key {number}",
"required_keys_out_of_total": "Required keys out of the total",
"fee": "Fee: {number}",
"fee_btc": "{number} BTC",
@ -472,7 +474,7 @@
"scan_or_import_file": "Scan or import file",
"export_coordination_setup": "Export Coordination Setup",
"cosign_this_transaction": "Co-sign this transaction?",
"lets_start": "Let's start",
"lets_start": "Lets start",
"create": "Create",
"provide_key": "Provide key",
"native_segwit_title": "Best practice",
@ -492,41 +494,41 @@
"of": "of",
"wallet_type": "Wallet Type",
"view_key": "View",
"invalid_mnemonics": "This mnemonic phrase doesnt seem to be valid",
"invalid_mnemonics": "This mnemonic phrase doesnt seem to be valid.",
"invalid_cosigner": "Not a valid cosigner data",
"not_a_multisignature_xpub": "This is not an xpub from multisignature wallet!",
"invalid_cosigner_format": "Incorrect cosigner: this is not a cosigner for {format} format",
"not_a_multisignature_xpub": "This is not an XPUB from a multisignature wallet!",
"invalid_cosigner_format": "Incorrect cosigner: This is not a cosigner for {format} format.",
"create_new_key": "Create New",
"scan_or_open_file": "Scan or open file",
"i_have_mnemonics": "I have a seed for this key...",
"please_write_down_mnemonics": "Please write down this mnemonic phrase on paper. Don't worry, you can write it down later.",
"i_wrote_it_down": "Ok, I wrote it down.",
"type_your_mnemonics": "Insert a seed to import your existing vault key",
"this_is_cosigners_xpub": "This is the cosigner's XPUB, ready to be imported into another wallet. It is safe to share it.",
"wallet_key_created": "Your vault key was created. Take a moment to safely backup your mnemonic seed",
"are_you_sure_seed_will_be_lost": "Are you sure? Your mnemonic seed will be lost if you dont have a backup",
"forget_this_seed": "Forget this seed and use XPUB",
"invalid_fingerprint": "Fingerprint for this seed doesnt match this cosigners fingerprint",
"view_edit_cosigners": "View/edit cosigners",
"i_have_mnemonics": "I have a seed for this key.",
"please_write_down_mnemonics": "Please write down this mnemonic phrase on paper. Dont worry, you can write it down later.",
"i_wrote_it_down": "OK, I wrote it down.",
"type_your_mnemonics": "Insert a seed to import your existing Vault key.",
"this_is_cosigners_xpub": "This is the cosigners XPUB—ready to be imported into another wallet. It is safe to share it.",
"wallet_key_created": "Your Vault key was created. Take a moment to safely backup your mnemonic seed.",
"are_you_sure_seed_will_be_lost": "Are you sure? Your mnemonic seed will be lost if you dont have a backup.",
"forget_this_seed": "Forget this seed and use the XPUB instead.",
"invalid_fingerprint": "Fingerprint for this seed doesnt match this cosigners fingerprint.",
"view_edit_cosigners": "View/Edit Cosigners",
"this_cosigner_is_already_imported": "This cosigner is already imported.",
"export_signed_psbt": "Export Signed PSBT",
"input_fp": "Enter fingerprint",
"input_fp_explain": "Skip to use the default one (00000000)",
"input_path": "Input derivation path",
"input_path": "Insert Derivation Path",
"input_path_explain": "Skip to use the default one ({default})",
"ms_help": "Help",
"ms_help_title": "How Multisig Vaults work. Tips and tricks",
"ms_help_text": "A wallet with multiple keys, to exponentially increase security or for shared custody.",
"ms_help_title1": "Multiple devices are advised",
"ms_help_1": "The Vault will work with other BlueWallet apps and PSBT compatible wallets, like Electrum, Specter, Coldcard, Cobo vault, etc.",
"ms_help_title": "How Multisig Vaults Work: Tips and Tricks",
"ms_help_text": "A wallet with multiple keys, for increased security or shared custody",
"ms_help_title1": "Multiple devices are advised.",
"ms_help_1": "The Vault will work with other BlueWallet apps and PSBT compatible wallets, such as Electrum, Specter, Coldcard, Cobo Vault, etc.",
"ms_help_title2": "Editing Keys",
"ms_help_2": "You can create all Vault keys in this device, and remove or edit these keys later. Having all keys on the same device has the equivalent security of a regular Bitcoin wallet.",
"ms_help_2": "You can create all Vault keys in this device and remove or edit them keys later. Having all keys on the same device has the equivalent security of a regular Bitcoin wallet.",
"ms_help_title3": "Vault Backups",
"ms_help_3": "On the wallet options you will find your Vault backup and watch-only backup. This backup is like a map to your wallet. It is essential for wallet recovery in case you lose one of your seeds.",
"ms_help_title4": "Importing Vaults",
"ms_help_4": "To import a Multisig, use your multisig backup file and use the import feature. If you only have extended keys and seeds, you can use the individual import fields on the Add Vault flow.",
"ms_help_title5": "Advanced options",
"ms_help_5": "By default BlueWallet will generate a 2of3 Vault. To create a different quorum or to change the address type, activate the advanced options in the Settings."
"ms_help_4": "To import a multisig, use your backup file and the Import feature. If you only have seeds and XPUBs, you can use the individual Import button when creating Vault keys.",
"ms_help_title5": "Advanced Mode",
"ms_help_5": "By default, BlueWallet will generate a 2-of-3 Vault. To create a different quorum or change the address type, activate Advanced Mode in the Settings."
},
"is_it_my_address": {
"title": "Is it my address?",
@ -538,18 +540,18 @@
"cc": {
"change": "Change",
"coins_selected": "Coins Selected ({number})",
"empty": "This wallet doesn't have any coins at the moment",
"empty": "This wallet doesnt have any coins at the moment.",
"freeze": "Freeze",
"freezeLabel": "Freeze",
"freezeLabel_un": "Unfreeze",
"header": "Coin Control",
"use_coin": "Use Coin",
"use_coins": "Use Coins",
"tip": "Allows you to see, label, freeze or select coins for improved wallet management. You can select multiple coins by tapping on the colored circles."
"tip": "This feature allows you to see, label, freeze or select coins for improved wallet management. You can select multiple coins by tapping on the colored circles."
},
"units": {
"BTC": "BTC",
"MAX": "MAX",
"MAX": "Max",
"sat_byte": "sat/byte",
"sats": "sats"
}

View File

@ -16,7 +16,9 @@
"seed": "سید",
"wallet_key": "کلید کیف پول",
"invalid_animated_qr_code_fragment" : "کد QR جزئی متحرک نامعتبر است. لطفاً دوباره امتحان کنید.",
"file_saved": "فایل ({filePath}) در پوشهٔ دانلودهای شما ذخیره شده است."
"file_saved": "فایل ({filePath}) در پوشهٔ دانلودهای شما ذخیره شده است.",
"discard_changes": "نادیده‌گرفتن تغییرات",
"discard_changes_detail": "شما تغییرات ذخیره‌نشده‌ای دارید. آیا از نادیده‌گرفتن آن‌ها و خروج از صفحه اطمینان دارید؟"
},
"azteco": {
"codeIs": "کد تخفیف شما عبارت است از",
@ -33,12 +35,12 @@
"undo": "بازگشت به حالت قبل"
},
"errors": {
"broadcast": "انتشار ناموفق بود",
"broadcast": "انتشار ناموفق بود.",
"error": "خطا",
"network": "خطای شبکه"
},
"hodl": {
"are_you_sure_you_want_to_logout": "آیا مطمئن هستید که می‌خواهید از HodlHodl خارج شوید؟",
"are_you_sure_you_want_to_logout": "آیا مطمئن هستید که می‌خواهید از Hodl Hodl خارج شوید؟",
"cont_address_escrow": "اسکرو",
"cont_address_to": "به",
"cont_buying": "خرید",
@ -79,7 +81,7 @@
"logout": "خروج",
"mycont": "قراردادهای من",
"offer_accept": "قبول پیشنهاد",
"offer_account_finish": "به‌نظر می‌رسد شما ثبت‌نام را در HodlHodl تکمیل نکرده‌اید. آیا می‌خواهید اکنون ساخت حساب را به‌پایان برسانید؟",
"offer_account_finish": "به‌نظر می‌رسد شما ثبت‌نام را در Hodl Hodl تکمیل نکرده‌اید. آیا می‌خواهید اکنون ساخت حساب را به‌پایان برسانید؟",
"offer_choosemethod": "انتخاب روش پرداخت",
"offer_confirmations": "تأییدها",
"offer_minmax": "حداقل/حداکثر",
@ -87,7 +89,7 @@
"offer_promt_fiat": "چه مقدار {currency} می‌خواهید بخرید؟",
"offer_promt_fiat_e": "به‌عنوان مثال، ۱۰۰",
"offer_window": "بازه",
"p2p": "تبادل همتابه‌همتا"
"p2p": "خرید بیت‌کوین از صرافی همتابه‌همتا"
},
"lnd": {
"errorInvoiceExpired": "صورت‌حساب منقضی شد",
@ -110,11 +112,11 @@
"additional_info": "اطلاعات بیشتر",
"for": "برای: ",
"lightning_invoice": "صورت‌حساب لایتنینگ",
"has_been_paid": "این صورت‌حساب پرداخت شده است",
"has_been_paid": "این صورت‌حساب پرداخت شده است.",
"open_direct_channel": "کانال مستقیمی با این گره باز کن:",
"please_pay": "لطفاً",
"preimage": "پیش‌نگاره",
"sats": "ساتوشی بپردازید",
"sats": "ساتوشی بپردازید.",
"wasnt_paid_and_expired": "این صورت‌حساب پرداخت نشده و منقضی شده است."
},
"plausibledeniability": {
@ -169,16 +171,17 @@
"details_add_rec_add": "افزودن گیرنده",
"details_add_rec_rem": "حذف گیرنده",
"details_address": "آدرس",
"details_address_field_is_not_valid": "آدرس معتبر نیست",
"details_address_field_is_not_valid": "آدرس معتبر نیست.",
"details_adv_fee_bump": "امکان افزایش کارمزد",
"details_adv_full": "از کل موجودی استفاده کن",
"details_adv_full_remove": "گیرنده‌های دیگر شما از این تراکنش حذف خواهند شد.",
"details_adv_full_sure": "آیا مطمئن هستید که می‌خواهید از کل موجودی کیف پولتان برای این تراکنش استفاده کنید؟",
"details_adv_import": "واردکردن تراکنش",
"details_amount_field_is_not_valid": "مقدار معتبر نیست",
"details_amount_field_is_not_valid": "مقدار معتبر نیست.",
"details_amount_field_is_less_than_minimum_amount_sat": "مقدار تعیین‌شده بسیار کم است. لطفاً مقداری بیشتر از ۵۰۰ ساتوشی را وارد کنید.",
"details_create": "ایجاد صورت‌حساب",
"details_error_decode": "خطا: ناموفق در رمزگشایی آدرس بیت‌کوین",
"details_fee_field_is_not_valid": "کارمزد معتبر نیست",
"details_fee_field_is_not_valid": "کارمزد معتبر نیست.",
"details_next": "بعدی",
"details_no_maximum": "کیف پول انتخاب‌شده از محاسبهٔ خودکار حداکثر موجودی پشتیبانی نمی‌کند. آیا مطمئن هستید که می‌خواهید این کیف پول را انتخاب کنید؟",
"details_no_multiple": "کیف پول انتخاب‌شده از ارسال بیت‌کوین به چند گیرنده پشتیبانی نمی‌کند. آیا مطمئن هستید که می‌خواهید این کیف پول را انتخاب کنید؟",
@ -209,6 +212,7 @@
"input_total": "مجموع:",
"permission_camera_message": "برای استفاده از دوربین به اجازهٔ شما نیاز داریم.",
"permission_camera_title": "اجازهٔ استفاده از دوربین",
"psbt_sign": "امضاکردن تراکنش",
"open_settings": "بازکردن تنظیمات",
"permission_storage_later": "بعداً از من بپرس",
"permission_storage_message": "برنامهٔ BlueWallet جهت ذخیرهٔ این فایل به اجازهٔ شما برای دسترسی به فضای ذخیره‌سازی نیاز دارد.",
@ -235,6 +239,7 @@
"about_release_notes": "یادداشت‌های انتشار",
"about_review": "برای ما یک بررسی بگذارید",
"about_selftest": "اجرای خودآزمایی",
"about_selftest_ok": "تمام بررسی‌های داخلی با موفقیت انجام شدند. کیف پول به‌درستی کار می‌کند.",
"about_sm_github": "گیت‌هاب",
"about_sm_discord": "سرور دیسکورد",
"about_sm_telegram": "کانال تلگرام",
@ -260,8 +265,8 @@
"electrum_saved": "تغییرات شما با موفقیت ذخیره شدند. ممکن است برای اعمال تغییرات به راه‌اندازی مجدد برنامه نیاز داشته باشید.",
"set_electrum_server_as_default": "آیا {server} به‌عنوان سرور پیش‌فرض الکترام تعیین شود؟",
"set_lndhub_as_default": "آیا {url} به‌عنوان سرور پیش‌فرض LNDHub تعیین شود؟",
"electrum_settings": "تنظیمات الکترام",
"electrum_settings_explain": "برای استفاده از تنظیمات پیش‌فرض خالی بگذارید",
"electrum_settings_server": "تنظیمات سرور الکترام",
"electrum_settings_explain": "برای استفاده از تنظیمات پیش‌فرض خالی بگذارید.",
"electrum_status": "وضعیت",
"electrum_clear_alert_title": "تاریخچه پاک شود؟",
"electrum_clear_alert_message": "آیا می‌خواهید تاریخچهٔ سرورهای الکترام را پاک کنید؟",
@ -299,8 +304,8 @@
"notifications": "اعلانات",
"open_link_in_explorer" : "بازکردن پیوند در مرورگر",
"password": "گذرواژه",
"password_explain": "گذرواژه‌ای را که برای رمزگشایی فضای ذخیره‌سازی استفاده خواهید کرد ایجاد کنید",
"passwords_do_not_match": "گذرواژه‌ها مطابقت ندارند",
"password_explain": "گذرواژه‌ای را که برای رمزگشایی فضای ذخیره‌سازی استفاده خواهید کرد ایجاد کنید.",
"passwords_do_not_match": "گذرواژه‌ها مطابقت ندارند.",
"plausible_deniability": "انکار موجه",
"privacy": "حریم خصوصی",
"privacy_read_clipboard": "خواندن کلیپ‌بورد",
@ -330,7 +335,7 @@
"confirmations_lowercase": "{confirmations} تأیید",
"cpfp_create": "ایجاد",
"cpfp_exp": "ما تراکنش دیگری را ایجاد خواهیم کرد که تراکنش تأییدنشدهٔ شما را خرج می‌کند. کارمزد کل بالاتر از کارمزد تراکنش اصلی خواهد بود، بنابراین سریع‌تر استخراج می‌شود. این کار Child Pays for Parent (به‌اختصار CPFP) نام دارد—فرزند به‌جای والدین می‌پردازد.",
"cpfp_no_bump": "این تراکنش قابلیت افزایش کارمزد را ندارد.",
"cpfp_no_bump": "این تراکنش قابلیت افزایش کارمزد ندارد.",
"cpfp_title": "افزایش کارمزد (CPFP)",
"details_balance_hide": "پنهان‌کردن موجودی",
"details_balance_show": "نمایش موجودی",
@ -345,7 +350,7 @@
"details_title": "تراکنش",
"details_to": "خروجی",
"details_transaction_details": "جزئیات تراکنش",
"enable_hw": "این کیف پول همراه با کیف پول سخت‌افزاری استفاده نمی‌شود. آیا می‌خواهید استفادهٔ کیف پول سخت‌افزاری را فعال کنید؟",
"enable_offline_signing": "این کیف پول در کنار امضای آفلاین استفاده نمی‌شود. آیا مایل به فعال‌کردن این امکان هستید؟",
"list_conf": "تأییدها: {number}",
"pending": "در انتظار ثبت",
"list_title": "تراکنش‌ها",
@ -354,7 +359,8 @@
"status_bump": "افزایش کارمزد",
"status_cancel": "لغو تراکنش",
"transactions_count": "تعداد تراکنش‌ها",
"txid": "شناسهٔ تراکنش"
"txid": "شناسهٔ تراکنش",
"updating": "درحال به‌روزرسانی…"
},
"wallets": {
"add_bitcoin": "بیت‌کوین",
@ -405,7 +411,7 @@
"export_title": "صادرکردن کیف پول",
"import_do_import": "واردکردن",
"import_error": "واردکردن ناموفق بود. لطفاً از معتبربودن دادهٔ ارائه‌شده اطمینان حاصل کنید.",
"import_explanation": "عبارت یادیار (mnemonic phrase)، کلید خصوصی، WIF، یا هر چیزی را که دارید اینجا بنویسید. BlueWallet تمام تلاش خود را برای حدس‌زدن قالب صحیح و واردکردن کیف پول شما انجام خواهد داد.",
"import_explanation": "عبارت یادیار (mnemonic phrase)، کلید خصوصی، WIF، یا هر چیزی را که دارید اینجا بنویسید. BlueWallet تمام تلاش خود را برای حدس‌زدن قالب صحیح و واردکردن کیف پول شما انجام خواهد داد. درصورت واردکردن کلید عمومی، ما آن را به‌صورت کیف پول watch-only اضافه خواهیم کرد.",
"import_file": "واردکردن فایل",
"import_imported": "وارد شد",
"import_placeholder_fail": "واردکردن کیف پول",
@ -415,8 +421,8 @@
"import_title": "واردکردن",
"list_create_a_button": "هم‌اکنون اضافه کن",
"list_create_a_wallet": "افزودن کیف پول",
"list_create_a_wallet_text": "مجانی است و می‌توانید هر تعداد\nکه دوست داشتید بسازید.",
"list_empty_txs1": "تراکنش‌های شما در اینجا نمایش داده خواهند شد",
"list_create_a_wallet_text": "مجانی است، و می‌توانید هر تعداد\nکه دوست داشتید بسازید.",
"list_empty_txs1": "تراکنش‌های شما در اینجا نمایش داده خواهند شد.",
"list_empty_txs1_lightning": "برای تراکنش‌های روزمره بهتر است از کیف پول لایتنینگ استفاده شود. کارمزدها به‌طرز غیرمنصفانه‌ای ارزان و سرعت فوق‌العاده بالاست.",
"list_empty_txs2": "با کیف پول خود شروع کنید",
"list_empty_txs2_lightning": "\nبرای شروع استفاده، روی «مدیریت دارایی» بزنید و موجودی خود را شارژ کنید.",
@ -435,7 +441,8 @@
"no_ln_wallet_error": "قبل از پرداخت یک صورت‌حساب لایتنینگ، ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
"looks_like_bip38": "این به کلید خصوصی محافظت‌شده با گذرواژه (BIP38) شباهت دارد.",
"reorder_title": "بازچینی کیف پول‌ها",
"please_continue_scanning": "لطفاً به اسکن‌کردن ادامه دهید",
"please_continue_scanning": "لطفاً به اسکن‌کردن ادامه دهید.",
"scan_error": "خطا در اسکن",
"select_no_bitcoin": "هیچ کیف پول بیت‌کوینی درحال‌حاضر دردسترس نیست.",
"select_no_bitcoin_exp": "یک کیف پول بیت‌کوین برای پرکردن کیف پول‌های لایتنینگ نیاز است. لطفاً یکی بسازید یا وارد کنید.",
"select_wallet": "انتخاب کیف پول",
@ -444,10 +451,12 @@
"pull_to_refresh": "برای به‌روزسانی به پایین بکشید",
"warning_do_not_disclose": "هشدار! فاش نکنید.",
"add_ln_wallet_first": "ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
"identity_pubkey": "هویت/کلید عمومی",
"xpub_title": "کلید XPUB کیف پول"
},
"multisig": {
"multisig_vault": "گاوصندوق",
"default_label": "گاوصندوق چندامضایی",
"multisig_vault_explain": "بالاترین امنیت برای مقادیر زیاد",
"provide_signature": "ارائهٔ امضا",
"vault_key": "کلید گاوصندوق {number}",
@ -487,15 +496,15 @@
"view_key": "نمایش",
"invalid_mnemonics": "به‌نظر نمی‌رسد این عبارت یادیار (mnemonic phrase) معتبر باشد.",
"invalid_cosigner": "دادهٔ امضاکنندهٔ مشترک معتبر نیست",
"not_a_multisignature_xpub": "این XPUB از یک کیف پول چندامضایی نیست.",
"invalid_cosigner_format": "امضاکنندهٔ مشترک نادرست: این یک امضاکنندهٔ مشترک برای قالب {format} نیست",
"not_a_multisignature_xpub": "این XPUB از یک کیف پول چندامضایی نیست!",
"invalid_cosigner_format": "امضاکنندهٔ مشترک نادرست: این یک امضاکنندهٔ مشترک برای قالب {format} نیست.",
"create_new_key": "جدید بسازید",
"scan_or_open_file": "اسکن یا بازکردن فایل",
"i_have_mnemonics": "من سید این کلید را دارم",
"i_have_mnemonics": "من سید این کلید را دارم.",
"please_write_down_mnemonics": "لطفاً این عبارت یادیار (mnemonic phrase) را روی کاغذ بنویسید. نگران نباشید، می‌توانید بعداً آن را یادداشت کنید.",
"i_wrote_it_down": "خب، آن را نوشتم.",
"type_your_mnemonics": "سید را بنویسید تا کلید گاوصندوق فعلی خود را وارد کنید",
"this_is_cosigners_xpub": "این XPUB امضاکنندهٔ مشترک است—آماده برای واردشدن درون یک کیف پول دیگر. به‌اشتراک‌گذاری آن بی‌خطر است.",
"type_your_mnemonics": "سید را بنویسید تا کلید گاوصندوق فعلی خود را وارد کنید.",
"this_is_cosigners_xpub": "این XPUB امضاکنندهٔ مشترک است—آماده برای واردشدن درون یک کیف پول دیگر. به‌اشتراک‌گذاری آن مانعی ندارد.",
"wallet_key_created": "کلید گاوصندوق شما ایجاد شد. لحظه‌ای درنگ کرده تا با خیال راحت از سید خود نسخهٔ پشتیبان تهیه کنید.",
"are_you_sure_seed_will_be_lost": "مطمئن هستید؟ درصورتی‌که نسخهٔ پشتیبان نداشته باشید، سید شما ازبین خواهد رفت.",
"forget_this_seed": "این سید را فراموش و به‌جای آن از XPUB استفاده کن.",
@ -510,7 +519,7 @@
"ms_help": "راهنما",
"ms_help_title": "نحوهٔ کارکرد گاوصندوق‌های چندامضایی: نکات و ترفندها",
"ms_help_text": "یک کیف پول با چندین کلید، جهت امنیت بالاتر یا داشتن حساب مشترک",
"ms_help_title1": "استفاده از چند دستگاه توصیه می‌شود",
"ms_help_title1": "استفاده از چند دستگاه توصیه می‌شود.",
"ms_help_1": "گاوصندوق با سایر برنامه‌های BlueWallet و کیف پول‌های سازگار با PSBT مانند الکترام (Electrum)، اسپکتر (Specter)، کلدکارد (Coldcard)، کوبو والت (Cobo Vault)، و غیره کار می‌کند.",
"ms_help_title2": "ویرایش کلیدها",
"ms_help_2": "شما می‌توانید تمام کلیدهای گاوصندوق را در این دستگاه ایجاد کرده و بعداً آن‌ها را ویرایش یا حذف کنید. نگهداری تمام کلیدها روی یک دستگاه امنیت مشابه یک کیف پول بیت‌کوین معمولی را داراست.",
@ -518,7 +527,7 @@
"ms_help_3": "در تنظیمات کیف پول، نسخهٔ پشتیبان گاوصندوق و نیز watch-only خود را خواهید یافت. این نسخهٔ پشتیبان مانند نقشهٔ راهی برای رسیدن به کیف پول شماست. درصورت ازدست‌دادن یکی از سیدهایتان، داشتن نسخهٔ پشتیبان جهت بازیابی کیف پول ضروری است.",
"ms_help_title4": "واردکردن گاوصندوق‌ها",
"ms_help_4": "برای واردکردن کیف پول چندامضایی، از فایل نسخهٔ پشتیبان و قابلیت واردکردن استفاده کنید. اگر فقط کلیدهای امتدادیافته (XPUB) و سیدها را دارید، می‌توانید هرکدام را جداگانه در روند افزودن کلیدهای گاوصندوق وارد کنید.",
"ms_help_title5": "گزینه‌های پیشرفته",
"ms_help_title5": "حالت پیشرفته",
"ms_help_5": "به‌صورت پیش‌فرض، BlueWallet گاوصندوق ۲ از ۳ امضایی تولید می‌کند. برای ایجاد حد نصاب متفاوت یا تغییر نوع آدرس، گزینه‌های پیشرفته را در تنظیمات فعال کنید."
},
"is_it_my_address": {
@ -538,7 +547,7 @@
"header": "مدیریت کوین",
"use_coin": "استفاده از کوین",
"use_coins": "استفاده از کوین‌ها",
"tip": "به شما اجازه می‌دهد برای مدیریت بهتر کیف پول، کوین‌ها را مشاهده، برچسب‌گذاری، مسدود، یا انتخاب کنید."
"tip": "به شما اجازه می‌دهد برای مدیریت بهتر کیف پول، کوین‌ها را مشاهده، برچسب‌گذاری، مسدود، یا انتخاب کنید. شما می‌توانید با زدن روی دایره‌های رنگی بیش از یک کوین را انتخاب کنید."
},
"units": {
"BTC": "بیت‌کوین",

View File

@ -16,7 +16,9 @@
"seed": "Siemen",
"wallet_key": "Lompakkoavain",
"invalid_animated_qr_code_fragment" : "Virheellinen animoitu QRCode-fragmentti, yritä uudelleen",
"file_saved": "Tiedosto ({filePath}) on tallennettu Lataukset-kansioon."
"file_saved": "Tiedosto ({filePath}) on tallennettu Lataukset-kansioon.",
"discard_changes": "Hylkää muutokset?",
"discard_changes_detail": "Sinulla on tallentamattomia muutoksia. Haluatko varmasti hylätä ne ja poistut näytöltä? "
},
"azteco": {
"codeIs": "Kuponkikoodisi on",
@ -87,7 +89,7 @@
"offer_promt_fiat": "Kuinka paljon {currency} haluat ostaa?",
"offer_promt_fiat_e": "Esimerkiksi 100",
"offer_window": "ikkuna",
"p2p": "P2p-vaihto"
"p2p": "Osta Bitcoinia p2p-pörssistä "
},
"lnd": {
"errorInvoiceExpired": "Lasku vanheni",
@ -210,6 +212,7 @@
"input_total": "Yhteensä:",
"permission_camera_message": "Tarvitsemme lupasi kameran käyttöön",
"permission_camera_title": "Kameran käyttölupa",
"psbt_sign": "Allekirjoita siirtotapahtuma",
"open_settings": "Avaa Asetukset",
"permission_storage_later": "Kysy Minulta Myöhemmin",
"permission_storage_message": "BlueWallet tarvitsee lupasi käyttääkseen tallennustilaasi tämän tiedoston tallentamiseksi.",
@ -346,7 +349,7 @@
"details_title": "Siirtotapahtuma",
"details_to": "Ulostulo",
"details_transaction_details": "Siirtotapahtuman tiedot",
"enable_hw": "Tätä lompakkoa ei käytetä yhdessä hardware-lompakon kanssa. Haluatko ottaa käyttöön hardware-lompakon?",
"enable_offline_signing": "Tätä lompakkoa ei käytetä offline-allekirjoituksen yhteydessä. Haluatko ottaa sen käyttöön nyt? ",
"list_conf": "conf: {number}",
"pending": "Odottaa",
"list_title": "siirtotapahtumat",
@ -355,7 +358,8 @@
"status_bump": "Nosta siirtokuluja",
"status_cancel": "Peruuta Siirtotapahtuma",
"transactions_count": "siirtotapahtumien määrä",
"txid": "Siirtotunniste"
"txid": "Siirtotunniste",
"updating": "Päivitetään..."
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -437,6 +441,7 @@
"looks_like_bip38": "Tämä näyttää salasanalla suojatulta yksityiseltä avaimelta (BIP38)",
"reorder_title": "Järjestele Lompakot",
"please_continue_scanning": "Jatka skannausta",
"scan_error": "Skannausvirhe ",
"select_no_bitcoin": "Bitcoin-lompakkoa ei tällä hetkellä ole saatavana.",
"select_no_bitcoin_exp": "Bitcoin-lompakkoa vaaditaan Lightning-lompakkojen täyttämiseksi. Luo tai tuo yksi.",
"select_wallet": "Valitse Lompakko",
@ -541,7 +546,7 @@
"header": "Kolikoiden hallinta",
"use_coin": "Käytä kolikko",
"use_coins": "Käytä kolikkoja",
"tip": "Antaa sinun nähdä, merkitä, jäädyttää tai valita kolikoita parempaan lompakon hallintaan."
"tip": "Antaa sinun nähdä, merkitä, jäädyttää tai valita kolikoita parempaan lompakon hallintaan. Voit valita useita kolikoita napauttamalla värillisiä ympyröitä. "
},
"units": {
"BTC": "BTC",

View File

@ -16,7 +16,9 @@
"seed": "Graine",
"wallet_key": "Clé de portefeuille",
"invalid_animated_qr_code_fragment" : "Fragment du QR Code animé invalide. Veuillez essayer encore.",
"file_saved": "Le fichier ({filePath}) a été enregistré dans le dossier Téléchargements."
"file_saved": "Le fichier ({filePath}) a été enregistré dans le dossier Téléchargements.",
"discard_changes": "Supprimer les changements ?",
"discard_changes_detail": "Certaines modifications n'ont pas été enregistrées. Êtes-vous sûr de vouloir les supprimer et quitter cet écran ?"
},
"azteco": {
"codeIs": "Votre code promo est",
@ -87,7 +89,7 @@
"offer_promt_fiat": "Combien de {currency} désirez-vous acheter ?",
"offer_promt_fiat_e": "Par example 100",
"offer_window": "fenêtre",
"p2p": "Un échange pair-à-pair"
"p2p": "Acheter du Bitcoin sur un échange pair à pair"
},
"lnd": {
"errorInvoiceExpired": "Requête expirée",
@ -355,7 +357,8 @@
"status_bump": "Frais de propulsion",
"status_cancel": "Annuler la transaction",
"transactions_count": "Nombre de transactions",
"txid": "Txid"
"txid": "Txid",
"updating": "Chargement..."
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -437,6 +440,7 @@
"looks_like_bip38": "Ceci ressemble a une clé privée protégée par un mot de passe (BIP38)",
"reorder_title": "Trier vos portefeuilles",
"please_continue_scanning": "Merci de continuer à scaner",
"scan_error": "Erreur de scan",
"select_no_bitcoin": "Il n'y a aucun portefeuille Bitcoin disponible pour le moment.",
"select_no_bitcoin_exp": "Un portefeuille Bitcoin est nécessaire pour approvisionner les portefeuilles Lightning. Veuillez en créer ou en importer un.",
"select_wallet": "Choix du portefeuille",
@ -445,6 +449,7 @@
"pull_to_refresh": "Tirer pour rafraichir",
"warning_do_not_disclose": "Attention! Ne pas divulguer",
"add_ln_wallet_first": "Vous devez d'abord ajouter un portefeuille Lightning.",
"identity_pubkey": "Clé publique identité",
"xpub_title": "XPUB portefeuille"
},
"multisig": {
@ -540,7 +545,7 @@
"header": "Controle de Pièces",
"use_coin": "Utiliser la pièces",
"use_coins": "Utiliser les Pièces",
"tip": "Autorise la vue, l'étiquetage, le gel ou la sélection des pièces pour une gestion améliorée du portefeuille."
"tip": "Permet de voir, étiqueter, bloquer ou sélectionner des UTXOs pour une meilleure gestion du portefeuille. Vous pouvez sélectionner plusieurs UTXOs en appuyant sur les cercles colorés."
},
"units": {
"BTC": "BTC",

View File

@ -1,22 +1,23 @@
{
"_": {
"allow": "אפשר",
"bad_password": "סיסמה שגויה, אנא נסו שוב.",
"bad_password": "סיסמה שגויה. אנא נסו שוב.",
"cancel": "ביטול",
"continue": "המשך",
"dont_allow": "אל תאפשר",
"enter_password": "הכניסו סיסמה",
"file_saved": "הקובץ ({filePath}) נשמר לתיקיית ההורדות שלך.",
"invalid_animated_qr_code_fragment": "קטע קוד QR מונפש לא תקין, אנא נסו שוב",
"never": "אף פעם",
"no": "לא",
"of": "{number} מתוך {total}",
"ok": "אישור",
"storage_is_encrypted": "האחסון שלך מוצפן, נדרשת סיסמה לפתיחה",
"allow": "אפשר",
"dont_allow": "אל תאפשר",
"yes": "כן",
"no": "לא",
"save": "שמירה",
"seed": "גרעין",
"storage_is_encrypted": "האחסון שלך מוצפן, נדרשת סיסמה לפתיחה",
"wallet_key": "מפתח ארנק",
"yes": "כן"
"invalid_animated_qr_code_fragment": "קטע קוד QR מונפש לא תקין, אנא נסו שוב",
"file_saved": "הקובץ ({filePath}) נשמר לתיקיית ההורדות שלך.",
"discard_changes": "ביטול שינויים?"
},
"azteco": {
"codeIs": "קוד השובר שלך הוא",
@ -27,15 +28,6 @@
"success": "הצלחה",
"title": "מימוש שובר Azte.co"
},
"cc": {
"coins_selected": "מטבעות נבחרו ({number})",
"empty": "בארנק זה אין מטבעות כרגע",
"freeze": "הקפאה",
"freezeLabel": "הקפאה",
"header": "שליטת מטבעות",
"tip": "מאפשר לך לראות, לתייג, להקפיא או לבחור מטבעות למען ניהול טוב יותר של הארנק.",
"use_coin": "שימוש במטבע"
},
"entropy": {
"save": "שמירה",
"title": "אנטרופיה",
@ -82,7 +74,10 @@
"item_nooffers": "אין הצעות. נסו לשנות \"לידי\" להצעות גלובליות!",
"item_rating": "{rating} החלפות",
"item_rating_no": "אין דירוג",
"local_trader": "מסחר מקומי",
"local_trader_new": "חדש",
"login": "התחברות",
"logout": "התנתקות",
"mycont": "החוזים שלי",
"offer_accept": "קבלו הצעה",
"offer_account_finish": "זה נראה שלא סיימתם לפתוח חשבון ב- HodlHodl, האם תהיו מעוניינים לסיים את התהליך עכשיו?",
@ -115,6 +110,7 @@
"lndViewInvoice": {
"additional_info": "מידע נוסף",
"for": "עבור:",
"lightning_invoice": "חשבונית ברק",
"has_been_paid": "חשבונית זו שולמה",
"open_direct_channel": "פתח ערוץ ישיר עם צומת זה:",
"please_pay": "אנא שלמו",
@ -122,62 +118,6 @@
"sats": "סאטושים",
"wasnt_paid_and_expired": "חשבונית זו לא שולמה ופגה"
},
"multisig": {
"are_you_sure_seed_will_be_lost": "האם אתם בטוחים? הגרעין המנמוני שלכם יאבד אם אין ברשותכם גיבוי",
"co_sign_transaction": "חתימה על העברה",
"confirm": "אישור",
"cosign_this_transaction": "חתום במשותף על העברה זו?",
"create": "יצירה",
"create_new_key": "צרו חדש",
"export_coordination_setup": "יצוא מערך תאום",
"export_signed_psbt": "יצוא PSBT חתום",
"fee": "עמלה: {number}",
"forget_this_seed": "שכח את גרעין זה והשתמש במפתח צפייה במקום",
"header": "שליחה",
"how_many_signatures_can_bluewallet_make": "כמה חתימות ארנק BlueWallet יכול ליצור",
"i_have_mnemonics": "יש לי גרעין למפתח זה...",
"i_wrote_it_down": "אוקיי, רשמתי את זה",
"input_fp_explain": "דלגו כדי להשתמש בברירת מחדל (00000000)",
"input_path": "נתיב גזירת קלט",
"input_path_explain": "דלגו כדי להשתמש בברירת מחדל ({default})",
"invalid_cosigner": "נתוני חותם שותף לא תקינים",
"invalid_cosigner_format": "חותם שותף שגוי: זה אינו חותם שותף לפורמט {format}",
"invalid_fingerprint": "מזהה לגרעין זה לא מתאים למזהה של השותף החותם",
"invalid_mnemonics": "צירוף מנמוני זה לא נראה תקין",
"lets_start": "בואו נתחיל",
"multisig_vault": "כספת",
"multisig_vault_explain": "ההגנה הטובה היותר לסכומים גדולים",
"native_segwit_title": "נוהג מומלץ",
"needs": "דרישות",
"of": "מתוך",
"please_write_down_mnemonics": "אנא רשמו על דף צרוף מנמוני זה. אל דאגה, תוכלו לרשום אותו גם אחר כך.",
"quorum": "קוורום {m} מתוך {n}",
"quorum_header": "קוורום",
"required_keys_out_of_total": " מפתחות נדרשים מתוך הסך הכולל",
"scan_or_import_file": "סריקה או יבוא קובץ",
"scan_or_open_file": "סריקה או פתיחת קובץ",
"share": "שיתוף",
"this_cosigner_is_already_imported": "שותף חותם זה כבר יובא",
"this_is_cosigners_xpub": "זה מפתח הצפייה של החותם השותף, מוכן ליבוא בארנק אחר. זה בטוח לשתף אותו.",
"type_your_mnemonics": "הכניסו גרעין כדי לייבא את מפתח הכספת הקיימת שלכם",
"vault_advanced_customize": "הגדרות כספת...",
"vault_key": "מפתח כספת {number}",
"view_edit_cosigners": "הצגת/עריכת שותפים חותמים",
"view_edit_cosigners_title": "עריכת שותפים חותמים",
"view_key": "הצגה",
"wallet_key_created": "מפתח הכספת שלכם נוצר. קחו רגע לגבות את הגרעין המנמוני שלכם בבטחה. ",
"wallet_type": "סוג ארנק",
"what_is_vault": "כספת היא",
"what_is_vault_description_number_of_vault_keys": "{m} מפתחות כספת",
"what_is_vault_numberOfWallets": "{m}-מתוך-{n} רב-חתימות",
"what_is_vault_wallet": "ארנק",
"wrapped_segwit_title": "תאימות גבוהה"
},
"notifications": {
"ask_me_later": "שאל אותי מאוחר יותר",
"no_and_dont_ask": "לא, ואל תשאל אותי שוב",
"would_you_like_to_receive_notifications": "האם ברצונך לקבל התראות כאשר מתקבלים תשלומים נכנסים?"
},
"plausibledeniability": {
"create_fake_storage": "צרו אחסון מוצפן",
"create_password": "צרו סיסמה",
@ -198,6 +138,7 @@
"ok_lnd": "אוקיי, שמרתי את זה.",
"text": "אנא קחו רגע כדי לכתוב על דף נייר את מילות הגיבוי האלו. זה הגיבוי איתו תוכלו לשחזר את הארנק על מכשיר אחר.",
"text_lnd": "אנא קחו רגע כדי לשמור את אימות ה- LNDHub. זה הגיבוי איתו תוכלו לשחזר את הארנק על מכשיר אחר.",
"text_lnd2": "ארנק זה מאוחסן על ידי BlueWallet.",
"title": "ארנקכם נוצר..."
},
"receive": {
@ -236,6 +177,7 @@
"details_adv_full_sure": "האם אתם בטוחים שתרצו להשתמש בכל יתרת הארנק בשביל העברה זאת?",
"details_adv_import": "יבוא העברה",
"details_amount_field_is_not_valid": "שדה סכום אינו תקין",
"details_amount_field_is_less_than_minimum_amount_sat": "הסכום המוגדר קטן מידי. אנא הכניסו סכום גדול מ- 500 סאטס.",
"details_create": "יצירת קבלה",
"details_error_decode": "שגיאה: לא ניתן לפענח כתובת ביטקוין",
"details_fee_field_is_not_valid": "שדה עמלה אינו תקין",
@ -267,37 +209,44 @@
"input_done": "בוצע",
"input_paste": "הדבק",
"input_total": "סך הכל:",
"no_tx_signing_in_progress": "אין חתימת העברה בתהליך",
"open_settings": "פתח הגדרות",
"permission_camera_message": "אנחנו צריכים את הרשאתך לשימוש במצלמה שלך",
"permission_camera_title": "הרשאה לשימוש במצלמה",
"permission_storage_denied_message": "ארנק BlueWallet אינו יכול לשמור קובץ זה. אנא פתחו את הגדרות המכשיר שלכם ואפשרו הרשאת אחסון.",
"open_settings": "פתח הגדרות",
"permission_storage_later": "שאל אותי מאוחר יותר",
"permission_storage_message": "ארנק BlueWallet צריך את הרשאתך לגשת לאחסון שלך כדי לשמור את קובץ זה.",
"permission_storage_denied_message": "ארנק BlueWallet אינו יכול לשמור קובץ זה. אנא פתחו את הגדרות המכשיר שלכם ואפשרו הרשאת אחסון.",
"permission_storage_title": "הרשאת גישת אחסון",
"problem_with_psbt": "בעיה עם PBST",
"psbt_clipboard": "העתקה ללוח",
"psbt_this_is_psbt": "זוהי העברת ביטקוין חתומה חלקית (PSBT). אנא סיימו את תהליך החתימה בארנק החומרה שלכם.",
"psbt_tx_export": "יצא לקובץ",
"no_tx_signing_in_progress": "אין חתימת העברה בתהליך",
"psbt_tx_open": "פתחו העברה חתומה",
"psbt_tx_scan": "סרקו העברה חתומה",
"qr_error_no_qrcode": "התמונה אינה מכילה קוד QR.",
"qr_error_no_wallet": "הקובץ הנבחר אינו מכיל ארנק שניתן לייבא.",
"success_done": "בוצע",
"txSaved": "קובץ ההעברה ({filePath}) נשמר בספריית ההורדות שלך."
"txSaved": "קובץ ההעברה ({filePath}) נשמר בספריית ההורדות שלך.",
"problem_with_psbt": "בעיה עם PBST"
},
"settings": {
"about": "אודות",
"about_awesome": "נבנה בעזרת",
"about_backup": "תמיד גבו את המפתחות שלכם!",
"about_free": "פרויקט BlueWallet הינו פרויקט חופשי בקוד פתוח. נוצר על ידי קהילת ביטקוין.",
"about_license": "רישיון MIT",
"about_release_notes": "הערות שחרור",
"about_review": "השאירו לנו ביקורת",
"about_selftest": "הרץ בדיקה עצמית",
"about_sm_github": "GitHub",
"about_sm_discord": "שרת דיסקורד",
"about_sm_telegram": "צ'אט טלגרם",
"about_sm_twitter": "עקבו אחרינו בטוויטר",
"advanced_options": "אפשרויות מתקדמות",
"biometrics": "ביומטריה",
"biom_10times": "ניסיתם להכניס את הסיסמה שלכם 10 פעמים. האם תרצו לאפס את האחסון שלכם? פעולה זאת תמחק את כל הארנקים ותפענח את האחסון שלכם.",
"biom_conf_identity": "אנא אמתו את הזהות שלכם.",
"biom_no_passcode": "למכשירכם אין סיסמה. במטרה להמשיך אנא הגדירו סיסמה בהגדרות המכשיר.",
"biom_remove_decrypt": "כל ארנקיכם ימחקו והאחסון יפוענח. האם אתם בטוחים שברצונכם להמשיך?",
"currency": "מטבע",
"currency_source": "ערכים מתקבלים מ- CoinDesk",
"default_desc": "כאשר מבוטל, BlueWallet יפתח אוטומטית את הארנק הנבחר בפתיחה.",
@ -308,9 +257,19 @@
"electrum_connected_not": "לא מחובר",
"electrum_error_connect": "לא ניתן להתחבר לשרת אלקטרום",
"electrum_saved": "השינויים נשמרו בהצלחה. ייתכן ותדרש הפעלה מחדש כדי שהשינויים ייכנסו לתוקף.",
"set_electrum_server_as_default": "הגדרת {server} כשרת אלקטרום ברירת מחדל?",
"set_lndhub_as_default": "הגדרת {url} כשרת LNDHub ברירת מחדל?",
"electrum_settings": "הגדרות אלקטרום",
"electrum_settings_explain": "השאירו ריק כדי להשתמש בברירת מחדל",
"electrum_status": "מצב",
"electrum_clear_alert_title": "ניקוי היסטוריה?",
"electrum_clear_alert_message": "האם ברצונך לנקות היסטורית שרתי אלקטרום?",
"electrum_clear_alert_cancel": "ביטול",
"electrum_clear_alert_ok": "אישור",
"electrum_select": "בחירה",
"electrum_reset": "איפוס ברירת מחדל",
"electrum_history": "היסטוריית שרת",
"electrum_clear": "ניקוי",
"encrypt_decrypt": "פתיחת אחסון מוצפן",
"encrypt_decrypt_q": "האם לפענח אחסון מוצפן? זה יאפשר לגשת לארנקים שלך ללא סיסמה.",
"encrypt_del_uninstall": "מחק אם BlueWallet הוסר",
@ -337,26 +296,37 @@
"network_electrum": "שרת אלקטרום",
"not_a_valid_uri": "URI לא תקני",
"notifications": "התראות",
"open_link_in_explorer": "פתיחת קישור בסייר",
"password": "סיסמה",
"password_explain": "צורו סיסמה שבה תשתמשו לפתיחת האחסון המוצפן",
"passwords_do_not_match": "סיסמאות לא תואמות",
"plausible_deniability": "הכחשה סבירה",
"privacy": "פרטיות",
"privacy_clipboard_explanation": "מספק קיצורי דרך במקרה שכתובת, או חשבונית, נמצאות בקליפבורד שלך.",
"privacy_quickactions": "קיצורי דרך ארנק",
"privacy_quickactions_explanation": "לצפייה מהירה במאזן הארנק שלכם לחצו והחזיקו את סמליל אפליקציית BlueWallet במסך הבית.",
"privacy_read_clipboard": "קריאה מקליפבורד",
"privacy_read_clipboard_alert": "ארנק BlueWallet יציג קיצורי דרך לטיפול בחשבונית או כתובת אשר נמצאות בקליפבורד שלך.",
"privacy_system_settings": "הגדרות מערכת",
"privacy_quickactions": "קיצורי דרך ארנק",
"privacy_quickactions_explanation": "לצפייה מהירה במאזן הארנק שלכם לחצו והחזיקו את סמליל אפליקציית BlueWallet במסך הבית.",
"privacy_clipboard_explanation": "מספק קיצורי דרך במקרה שכתובת, או חשבונית, נמצאות בקליפבורד שלך.",
"push_notifications": "התראות",
"retype_password": "הכניסו שוב סיסמה",
"save": "שמירה",
"saved": "נשמר"
"saved": "נשמר",
"success_transaction_broadcasted": "הצלחה! ההעברה שלך שודרה!",
"total_balance": "יתרה כוללת",
"total_balance_explanation": "הצגת היתרה הכוללת של כל הארנקים שלך ביישומונים של מסך הבית.",
"widgets": "יישומונים"
},
"notifications": {
"would_you_like_to_receive_notifications": "האם ברצונך לקבל התראות כאשר מתקבלים תשלומים נכנסים?",
"no_and_dont_ask": "לא, ואל תשאל אותי שוב",
"ask_me_later": "שאל אותי מאוחר יותר"
},
"transactions": {
"cancel_explain": "אנו נחליף את ההעברה הזאת באחת עם עמלה גבוהה יותר. פעולה זאת למעשה מבטלת את העברה. פעולה זאת נקראת RBF - Replace By Fee.",
"cancel_no": "העברה זאת אינה ניתנת להחלפה",
"cancel_title": "בטל העברה זאת (RBF)",
"confirmations_lowercase": "{confirmations} אישורים",
"cpfp_create": "צור",
"cpfp_exp": "אנו ניצור העברה נוספת שתשתמש בעודף שנשאר מההעברה הקודמת שבוצעה. סך כל העמלה יהיה גבוה יותר מעמלת ההעברה המקורית, כך שמהירות קבלת האישור אמורה לעלות. פעולה זאת נקראת CPFP - Child Pays For Parent.",
"cpfp_no_bump": "עמלת העברה זו אינה ניתנת להעלאה",
@ -369,19 +339,22 @@
"details_inputs": "קלטים",
"details_outputs": "פלטים",
"details_received": "התקבל",
"transaction_note_saved": "הערת העברה נשמרה בהצלחה.",
"details_show_in_block_explorer": "צפייה בסייר בלוקים",
"details_title": "העברה",
"details_to": "פלט",
"details_transaction_details": "פרטי העברה",
"enable_hw": "ארנק זה אינו בשימוש בצירוף ארנק חומרה. האם ברצונך לאפשר שימוש בארנק חומרה?",
"list_conf": "אישורים: {number}",
"list_title": "תנועות",
"pending": "ממתין",
"list_title": "תנועות",
"rbf_explain": "אנו נחליף את העברה זו בהעברה עם עמלה גבוהה יותר, כך שמהירות קבלת האישור אמורה לעלות. פעולה זאת נקראת CPFP - Child Pays For Parent.",
"rbf_title": "העלאת עמלה (RBF)",
"status_bump": "העלאת עמלה",
"status_cancel": "ביטול העברה",
"transactions_count": "מספר תנועות"
"transactions_count": "מספר תנועות",
"txid": "מזהה העברה",
"updating": "מעדכן..."
},
"wallets": {
"add_bitcoin": "ביטקוין",
@ -400,6 +373,7 @@
"add_title": "הוספת ארנק",
"add_wallet_name": "שם",
"add_wallet_type": "סוג",
"clipboard_bitcoin": "ישנה כתובת ביטקוין בלוח. האם תרצו להשתמש בה בשביל העברה?",
"clipboard_lightning": "ישנה חשבונית ברק בלוח שלך. האם להשתמש בה להעברה?",
"details_address": "כתובת",
"details_advanced": "מתקדם",
@ -410,10 +384,15 @@
"details_del_wb_q": "ארנק זה בעל יתרת מטבעות. לפני שתמשיכו, אנא שימו לב שלא תוכלו לשחזר את הארנק ואת הכספים בו בלי מילות הגיבוי שלו. על מנת למנוע מחיקה אקראית של ארנק זה, אנא הכניסו את סכום יתרת הארנק של {balance} סאטושים.",
"details_delete": "מחיקה",
"details_delete_wallet": "מחיקת ארנק",
"details_derivation_path": "נתיב גזירה",
"details_display": "הצג ברשימת ארנקים",
"details_export_backup": "יצוא / גיבוי",
"details_marketplace": "שוק",
"details_master_fingerprint": "טביעת אצבע ראשית",
"details_ms_l": "{m} מתוך {n} legacy (p2sh)",
"details_ms_ns": "{m} מתוך {n} native segwit (p2wsh)",
"details_ms_ws": "{m} מתוך {n} segwit עטוף (p2sh-p2wsh)",
"details_multisig_type": "רב-חתימות",
"details_no_cancel": "לא, בטל",
"details_save": "שמירה",
"details_show_xpub": "הצג מפתח צפייה של הארנק",
@ -429,6 +408,8 @@
"import_explanation": "כתבו כאן את מילות הגיבוי, המפתח הפרטי, WIF או כל דבר אחר שברשותכם. BlueWallet ישתדל לנחש את הפורמט הנכון וייבא את ארנק.",
"import_file": "יבוא קובץ",
"import_imported": "יובא",
"import_placeholder_fail": "יבוא ארנק",
"import_placeholder_inprogress": "מייבא ארנק...",
"import_scan_qr": "סריקה או יבוא קובץ",
"import_success": "ארנקך יובא בהצלחה.",
"import_title": "יבוא",
@ -443,20 +424,120 @@
"list_import_error": "התרחשה שגיאה בניסיון לייבא ארנק זה.",
"list_import_problem": "לא ניתן לייבא ארנק הזה",
"list_latest_transaction": "העברה אחרונה",
"list_ln_browser": "דפדפן LApp",
"list_long_choose": "בחר תמונה",
"list_long_clipboard": "העתקה מלוח",
"list_long_scan": "סריקת קוד QR",
"list_tap_here_to_buy": "קניית ביטקוין",
"list_title": "ארנקים",
"list_tryagain": "נסו שוב",
"no_ln_wallet_error": "לפני תשלום חשבונית ברק, עלייך להוסיף ארנק ברק.",
"looks_like_bip38": "זה נראה כמו מפתח פרטי מוגן בסיסמה (BIP38)",
"pull_to_refresh": "משכו כדי לרענן",
"reorder_title": "ארגון ארנקים מחדש ",
"please_continue_scanning": "אנא המשיכו בסריקה.",
"scan_error": "שגיאת סריקה",
"select_no_bitcoin": "אין ארנקי ביטקוין זמינים.",
"select_no_bitcoin_exp": "דרוש ארנק ביטקוין בכדי לטעון את ארנקי הברק. צרו או יבאו אחד.",
"select_wallet": "בחירת ארנק",
"take_photo": "צילום תמונה",
"xpub_copiedToClipboard": "הועתק ללוח.",
"pull_to_refresh": "משכו כדי לרענן",
"warning_do_not_disclose": "אזהרה! אין לחשוף.",
"add_ln_wallet_first": "עלייך להוסיף ארנק ברק קודם.",
"identity_pubkey": "מפתח זהות ציבורי",
"xpub_title": "מפתח צפייה של הארנק"
},
"multisig": {
"multisig_vault": "כספת",
"default_label": "כספת Multisig",
"multisig_vault_explain": "ההגנה הטובה היותר לסכומים גדולים",
"vault_key": "מפתח כספת {number}",
"required_keys_out_of_total": " מפתחות נדרשים מתוך הסך הכולל",
"fee": "עמלה: {number}",
"confirm": "אישור",
"header": "שליחה",
"share": "שיתוף",
"manage_keys": "ניהול מפתחות",
"how_many_signatures_can_bluewallet_make": "כמה חתימות ארנק BlueWallet יכול ליצור",
"signatures_required_to_spend": "חתימות דרושות {number}",
"signatures_we_can_make": "יכול לייצר {number}",
"scan_or_import_file": "סריקה או יבוא קובץ",
"export_coordination_setup": "יצוא מערך תאום",
"cosign_this_transaction": "חתום במשותף על העברה זו?",
"lets_start": "בואו נתחיל",
"create": "יצירה",
"provide_key": "ספקו מפתח",
"native_segwit_title": "נוהג מומלץ",
"wrapped_segwit_title": "תאימות גבוהה",
"co_sign_transaction": "חתימה על העברה",
"what_is_vault": "כספת היא",
"what_is_vault_numberOfWallets": "{m}-מתוך-{n} רב-חתימות",
"what_is_vault_wallet": "ארנק",
"vault_advanced_customize": "הגדרות כספת...",
"needs": "דרישות",
"what_is_vault_description_number_of_vault_keys": "{m} מפתחות כספת",
"what_is_vault_description_to_spend": "לבזבוז ובשלישי תוכלו \nלהשתמש כגיבוי.",
"what_is_vault_description_to_spend_other": "לבזבוז.",
"quorum": "קוורום {m} מתוך {n}",
"quorum_header": "קוורום",
"of": "מתוך",
"wallet_type": "סוג ארנק",
"view_key": "הצגה",
"invalid_mnemonics": "צירוף מנמוני זה לא נראה תקין",
"invalid_cosigner": "נתוני חותם שותף לא תקינים",
"not_a_multisignature_xpub": "זה אינו מפתח תצוגה מארנק רב-חתימות!",
"invalid_cosigner_format": "חותם שותף שגוי: זה אינו חותם שותף לפורמט {format}",
"create_new_key": "צרו חדש",
"scan_or_open_file": "סריקה או פתיחת קובץ",
"i_have_mnemonics": "יש לי גרעין למפתח זה...",
"please_write_down_mnemonics": "אנא רשמו על דף צרוף מנמוני זה. אל דאגה, תוכלו לרשום אותו גם אחר כך.",
"i_wrote_it_down": "אוקיי, רשמתי את זה",
"type_your_mnemonics": "הכניסו גרעין כדי לייבא את מפתח הכספת הקיימת שלכם",
"this_is_cosigners_xpub": "זה מפתח הצפייה של החותם השותף, מוכן ליבוא בארנק אחר. זה בטוח לשתף אותו.",
"wallet_key_created": "מפתח הכספת שלכם נוצר. קחו רגע לגבות את הגרעין המנמוני שלכם בבטחה. ",
"are_you_sure_seed_will_be_lost": "האם אתם בטוחים? הגרעין המנמוני שלכם יאבד אם אין ברשותכם גיבוי",
"forget_this_seed": "שכח את גרעין זה והשתמש במפתח צפייה במקום",
"invalid_fingerprint": "מזהה לגרעין זה לא מתאים למזהה של השותף החותם",
"view_edit_cosigners": "הצגת/עריכת שותפים חותמים",
"this_cosigner_is_already_imported": "שותף חותם זה כבר יובא",
"export_signed_psbt": "יצוא PSBT חתום",
"input_fp": "הכנסת טביעת אצבע",
"input_fp_explain": "דלגו כדי להשתמש בברירת מחדל (00000000)",
"input_path": "נתיב גזירת קלט",
"input_path_explain": "דלגו כדי להשתמש בברירת מחדל ({default})",
"ms_help": "עזרה",
"ms_help_title": "כיצד כספות רבות-חתימה עובדות: עצות וטריקים",
"ms_help_text": "ארנק מרובה מפתחות, למען אבטחה משופרת או משמורת משותפת",
"ms_help_title1": "ריבוי מכשירים מומלץ.",
"ms_help_1": "הכספת תעבוד עם ישומי BlueWallet אחרים וארנקים תואמי PSBT, כגון אלקטרום, Specter, Cobo vault, וכו'.",
"ms_help_title2": "עריכת מפתחות",
"ms_help_title3": "גיבויי כספת",
"ms_help_title4": "מייבא כספות",
"ms_help_title5": "מצב מתקדם",
"ms_help_5": "כברירת מחדל, BlueWallet יצור כספת 2-מתוך-3. כדי ליצור קוורום שונה או לשנות סוג כתובת, הפעילו מצב מתקדם בהגדרות."
},
"is_it_my_address": {
"title": "האם זאת הכתובת שלי?",
"owns": "הכתובת {address} שייכת לארנק {label} ",
"enter_address": "הכנסת כתובת",
"check_address": "בדיקת כתובת",
"no_wallet_owns_address": "הכתובת שסופקה אינה שייכת לאחד מהארנקים הזמינים."
},
"cc": {
"change": "עודף",
"coins_selected": "מטבעות נבחרו ({number})",
"empty": "בארנק זה אין מטבעות כרגע",
"freeze": "הקפאה",
"freezeLabel": "הקפאה",
"freezeLabel_un": "הפשרה",
"header": "שליטת מטבעות",
"use_coin": "שימוש במטבע",
"use_coins": "שימוש במטבעות",
"tip": "מאפשר לך לראות, לתייג, להקפיא או לבחור מטבעות למען ניהול טוב יותר של הארנק."
},
"units": {
"MAX": "מקס'",
"sat_byte": "סאט/בייט",
"sats": "סאטס"
}
}

View File

@ -1,22 +1,22 @@
{
"_": {
"allow": "許可",
"bad_password": "パスワードが正しくありません。もう一度試してください。",
"cancel": "中止",
"continue": "続行",
"dont_allow": "許可しない",
"enter_password": "パスワードを入力",
"file_saved": "ファイル ({filePath}) はダウンロードフォルダに保存されました。",
"invalid_animated_qr_code_fragment": "無効なアニメーションQRCodeフラグメントです。再度お試しください。",
"never": "データなし",
"no": "いいえ",
"of": "{number} / {total}",
"ok": "OK",
"storage_is_encrypted": "ウォレットは暗号化されています。復号にはパスワードが必要です。",
"allow": "許可",
"dont_allow": "許可しない",
"yes": "はい",
"no": "いいえ",
"save": "保存",
"seed": "シード",
"storage_is_encrypted": "ウォレットは暗号化されています。復号にはパスワードが必要です。",
"wallet_key": "ウォレットキー",
"yes": "はい"
"invalid_animated_qr_code_fragment": "無効なアニメーションQRCodeフラグメントです。再度お試しください。",
"file_saved": "ファイル ({filePath}) はダウンロードフォルダに保存されました。"
},
"azteco": {
"codeIs": "あなたのバウチャーコードは",
@ -27,13 +27,6 @@
"success": "成功",
"title": "Azte.co バウチャーを交換"
},
"cc": {
"change": "チェンジ",
"freeze": "フリーズ",
"freezeLabel": "フリーズ",
"header": "コイン管理",
"use_coin": "コインを利用"
},
"entropy": {
"save": "保存",
"title": "エントロピー",
@ -80,6 +73,8 @@
"item_nooffers": "オファーがありません。\"近くで探す\"に変更してグローバルオファーを試して下さい。",
"item_rating": "{rating} トレード",
"item_rating_no": "レーティングなし",
"local_trader": "ローカルトレーダー",
"local_trader_new": "New",
"login": "ログイン",
"mycont": "マイコントラクト",
"offer_accept": "オファーを受ける",
@ -113,6 +108,7 @@
"lndViewInvoice": {
"additional_info": "追加情報",
"for": "メモ:",
"lightning_invoice": "ライトニングインボイス",
"has_been_paid": "この請求書は支払い完了しました",
"open_direct_channel": "このノードの直接チャネルを作成:",
"please_pay": "支払う額",
@ -120,39 +116,6 @@
"sats": "sats",
"wasnt_paid_and_expired": "この請求書は支払いが行われなかったため無効になりました"
},
"multisig": {
"co_sign_transaction": "トランザクションに署名",
"confirm": "承認",
"cosign_this_transaction": "このトランザクションに共同署名しますか?",
"create": "作成",
"create_new_key": "新規作成",
"export_coordination_setup": "エクスポート調整設定",
"fee": "費用: {number}",
"fee_btc": "{number} BTC",
"forget_this_seed": "このシードではなくxpubを代わりに利用する",
"header": "送る",
"how_many_signatures_can_bluewallet_make": "Bluewalletが何人分の署名を作ることができるか",
"i_have_mnemonics": "この鍵のシードを持っています...",
"i_wrote_it_down": "はい、書き取りました",
"legacy_title": "レガシー",
"lets_start": "さあ、始めましょう",
"multisig_vault": "金庫",
"native_segwit_title": "ベストプラクティス",
"please_write_down_mnemonics": "このニーモニック・フレーズを紙に書き取ってください。大丈夫、あとで行うこともできます。",
"provide_key": "プロバイドキー",
"provide_signature": "署名を提供",
"scan_or_import_file": "スキャンまたはファイルインポート",
"scan_or_open_file": "スキャンまたはファイルを開く",
"share": "共有",
"this_cosigner_is_already_imported": "共同署名者がすでにインポートされています",
"vault_key": "ヴォールトキー {number}",
"what_is_vault_wallet": "ウォレット"
},
"notifications": {
"ask_me_later": "あとで",
"no_and_dont_ask": "いいえ。もう聞かないでください。",
"would_you_like_to_receive_notifications": "支払いを受けた際に通知を受け取りますか?"
},
"plausibledeniability": {
"create_fake_storage": "ダミーの暗号化ウォレットの作成",
"create_password": "パスワードの作成",
@ -173,6 +136,7 @@
"ok_lnd": "はい、書きとめました",
"text": "すべてのニモニックを別紙に書きとめてください。他のデバイスへウォレットをリストアする際にニモニックが必要になります。デスクトップ用ウォレットの Electrum wallet (https://electrum.org/) へニモニックを使用してウォレットをリストアすることが可能です。",
"text_lnd": "このLNDHub認証を保存しておいてください。これはあなたのバックアップであり、他のデバイス上でウォレットを復元するために使用できます。",
"text_lnd2": "このウォレットはBlueWalletによりホストされています。",
"title": "ウォレットを作成しています..."
},
"receive": {
@ -242,35 +206,42 @@
"input_done": "完了",
"input_paste": "ペースト",
"input_total": "合計:",
"open_settings": "設定を開く",
"permission_camera_message": "カメラを使用するのに許可が必要です",
"permission_camera_title": "カメラの使用許可",
"open_settings": "設定を開く",
"permission_storage_later": "後で聞く",
"permission_storage_message": "BlueWalletがこのファイルを保存するためストレージへのアクセス権を求めています。",
"permission_storage_denied_message": "BlueWalletはファイルを保存できませんでした。デバイス設定を開いてストレージ許可を有効にしてください。",
"permission_storage_title": "ストレージアクセス許可",
"problem_with_psbt": "PSBTに問題",
"psbt_clipboard": "クリップボードにコピー",
"psbt_this_is_psbt": "これは部分的に署名されたビットコイントランザクションPSBTです。ハードウェアウォレットで署名を完了させてください。",
"psbt_tx_export": "ファイルにエクスポート",
"no_tx_signing_in_progress": "処理中のトランザクション署名はありません。",
"psbt_tx_open": "署名トランザクションを開く",
"psbt_tx_scan": "署名トランザクションをスキャン",
"qr_error_no_qrcode": "選択された画像はQRコードを含んでいません。",
"qr_error_no_wallet": "選択されたファイルにはインポートできるウォレットが含まれていません。",
"success_done": "完了",
"txSaved": "トランザクションファイル ({filePath}) はダウンロードフォルダに保存されました。"
"txSaved": "トランザクションファイル ({filePath}) はダウンロードフォルダに保存されました。",
"problem_with_psbt": "PSBTに問題"
},
"settings": {
"about": "BlueWallet について",
"about_awesome": "Built with the awesome",
"about_backup": "常に秘密鍵はバックアップしましょう!",
"about_free": "BlueWalletはフリーでオープンソースのプロジェクトです。ビットコインユーザーによって作られています。",
"about_license": "MIT ライセンス",
"about_release_notes": "リリースノート",
"about_review": "レビューを書く",
"about_selftest": "セルフテストを実行",
"about_sm_github": "GitHub",
"about_sm_discord": "Discord サーバー",
"about_sm_telegram": "テレグラムチャット",
"about_sm_twitter": "Twitterでフォロー",
"advanced_options": "上級設定",
"biometrics": "生体認証",
"biom_10times": "パスワードを10回入力しようとしました。ストレージをリセットしますかこれにより全てのウォレットが削除され、ストレージが復号化されます。",
"biom_conf_identity": "個人情報を確認して下さい。",
"currency": "通貨",
"currency_source": "価格参照元:",
"default_desc": "無効にすれば、BlueWalletは起動時に選択したウォレットをすぐに開きます。",
@ -287,6 +258,14 @@
"electrum_settings": "Electrum 設定",
"electrum_settings_explain": "ブランクに設定してデフォルトを使用",
"electrum_status": "ステータス",
"electrum_clear_alert_title": "履歴を削除しますか?",
"electrum_clear_alert_message": "Electrumサーバーヒストリーをクリアしますか",
"electrum_clear_alert_cancel": "キャンセル",
"electrum_clear_alert_ok": "Ok",
"electrum_select": "選択",
"electrum_reset": "デフォルトの設定に戻す",
"electrum_history": "サーバーヒストリー",
"electrum_clear": "クリア",
"encrypt_decrypt": "ストレージ復号化",
"encrypt_decrypt_q": "本当にストレージを復号化しますか?これによりウォレットがパスワードなしでアクセス可能になります。",
"encrypt_del_uninstall": "BlueWalletをアンインストールしたら削除",
@ -313,26 +292,35 @@
"network_electrum": "Electrum サーバー",
"not_a_valid_uri": "有効なURIではありません",
"notifications": "通知",
"open_link_in_explorer": "エクスプローラで開く",
"password": "パスワード",
"password_explain": "ウォレットの復号に使用するパスワードを作成",
"passwords_do_not_match": "パスワードが一致しません",
"plausible_deniability": "隠匿設定...",
"privacy": "プライバシー",
"privacy_clipboard_explanation": "アドレスやインボイスがクリップボードにあった場合、ショートカットを提供する。",
"privacy_quickactions": "ウォレットショートカット",
"privacy_quickactions_explanation": "ホーム画面でBlueWalletアプリのアイコンをタッチして長押しすると、ウォレットの残高を素早く確認することができます。",
"privacy_read_clipboard": "クリップボードを読む",
"privacy_read_clipboard_alert": "クリップボードからインボイスまたはアドレスが見つかりました。",
"privacy_system_settings": "システム設定",
"privacy_quickactions": "ウォレットショートカット",
"privacy_quickactions_explanation": "ホーム画面でBlueWalletアプリのアイコンをタッチして長押しすると、ウォレットの残高を素早く確認することができます。",
"privacy_clipboard_explanation": "アドレスやインボイスがクリップボードにあった場合、ショートカットを提供する。",
"push_notifications": "プッシュ通知",
"retype_password": "パスワードの再入力",
"save": "保存",
"saved": "保存済"
"saved": "保存済",
"total_balance": "合計残高",
"widgets": "ウィジェット"
},
"notifications": {
"would_you_like_to_receive_notifications": "支払いを受けた際に通知を受け取りますか?",
"no_and_dont_ask": "いいえ。もう聞かないでください。",
"ask_me_later": "あとで"
},
"transactions": {
"cancel_explain": "このトランザクションを、最初の支払い時より高い手数料を持つものに置き換えます。これは事実上、最初のトランザクションをキャンセルします。これはReplace By Fee - RBFと呼ばれています。",
"cancel_no": "このトランザクションは交換可能ではありません",
"cancel_title": "このトランザクションをキャンセル (RBF)",
"confirmations_lowercase": "{confirmations} コンファメーション",
"cpfp_create": "作成",
"cpfp_exp": "あなたの未承認トランザクションを消費する別のトランザクションを作成します。元のトランザクションの手数料よりも合計金額が高くなるため、より早くマイニングされます。これはCPFP - Child Pays For Parentと呼ばれています。",
"cpfp_no_bump": "このトランザクションはバンプ可能ではありません",
@ -345,18 +333,20 @@
"details_inputs": "インプット",
"details_outputs": "アウトプット",
"details_received": "受取り済",
"transaction_note_saved": "トランザクションノートが正常に保存されました。",
"details_show_in_block_explorer": "Block Explorer で表示",
"details_title": "取引",
"details_to": "送り先",
"details_transaction_details": "取引詳細",
"list_conf": "コンファメーション: {number}",
"list_title": "取引",
"pending": "保留中",
"list_title": "取引",
"rbf_explain": "このトランザクションを手数料の高いものに置き換えるので、マイニングが早くなるはずです。これをRBF - Replace By Feeといいます。",
"rbf_title": "手数料をバンプ (RBF)",
"status_bump": "手数料をバンプ",
"status_cancel": "トランザクションをキャンセル",
"transactions_count": "トランザクションカウント"
"transactions_count": "トランザクションカウント",
"txid": "Txid"
},
"wallets": {
"add_bitcoin": "ビットコイン",
@ -417,9 +407,11 @@
"list_import_error": "ウォレットのインポート時にエラーが起こりました。",
"list_import_problem": "このウォレットのインポートに問題が生じました",
"list_latest_transaction": "最新の取引",
"list_ln_browser": "Lapp Browser",
"list_long_choose": "写真選択",
"list_long_clipboard": "クリップボードからコピー",
"list_long_scan": "QRコードをスキャン",
"list_marketplace": "Marketplace",
"list_tap_here_to_buy": "Bitcoin を購入するにはここをタップ",
"list_title": "ウォレット",
"list_tryagain": "再度試す",
@ -431,5 +423,64 @@
"take_photo": "写真撮影",
"xpub_copiedToClipboard": "クリップボードにコピーしました。",
"xpub_title": "ウォレット XPUB"
},
"multisig": {
"multisig_vault": "金庫",
"multisig_vault_explain": "大きな資産にベストなセキュリティ",
"provide_signature": "署名を提供",
"vault_key": "ヴォールトキー {number}",
"fee": "費用: {number}",
"fee_btc": "{number} BTC",
"confirm": "承認",
"header": "送る",
"share": "共有",
"view": "表示",
"manage_keys": "管理キー",
"how_many_signatures_can_bluewallet_make": "Bluewalletが何人分の署名を作ることができるか",
"scan_or_import_file": "スキャンまたはファイルインポート",
"export_coordination_setup": "エクスポート調整設定",
"cosign_this_transaction": "このトランザクションに共同署名しますか?",
"lets_start": "さあ、始めましょう",
"create": "作成",
"provide_key": "プロバイドキー",
"native_segwit_title": "ベストプラクティス",
"legacy_title": "レガシー",
"co_sign_transaction": "トランザクションに署名",
"what_is_vault_wallet": "ウォレット",
"wallet_type": "ウォレットタイプ",
"view_key": "表示",
"invalid_cosigner": "有効な共同署名データではありません",
"create_new_key": "新規作成",
"scan_or_open_file": "スキャンまたはファイルを開く",
"i_have_mnemonics": "この鍵のシードを持っています...",
"please_write_down_mnemonics": "このニーモニック・フレーズを紙に書き取ってください。大丈夫、あとで行うこともできます。",
"i_wrote_it_down": "はい、書き取りました",
"forget_this_seed": "このシードではなくxpubを代わりに利用する",
"this_cosigner_is_already_imported": "共同署名者がすでにインポートされています",
"export_signed_psbt": "署名済PSBTをエクスポート",
"input_fp": "フィンガープリント入力",
"ms_help": "ヘルプ",
"ms_help_title2": "編集キー",
"ms_help_title3": "ヴォールトバックアップ"
},
"is_it_my_address": {
"title": "これは自分のアドレス?",
"enter_address": "アドレス入力",
"check_address": "アドレスチェック"
},
"cc": {
"change": "チェンジ",
"coins_selected": "選択済コイン ({number})",
"freeze": "フリーズ",
"freezeLabel": "フリーズ",
"freezeLabel_un": "解凍",
"header": "コイン管理",
"use_coin": "コインを利用",
"use_coins": "コインを利用"
},
"units": {
"BTC": "BTC",
"sat_byte": "sat/byte",
"sats": "sats"
}
}

View File

@ -16,7 +16,9 @@
"seed": "Seed",
"wallet_key": "Wallet sleutel",
"invalid_animated_qr_code_fragment" : "Ongeldig geanimeerde QRCode, probeer het opnieuw",
"file_saved": "Bestand ({filePath}) is opgeslagen in uw gedownloade bestanden."
"file_saved": "Bestand ({filePath}) is opgeslagen in uw gedownloade bestanden.",
"discard_changes": "Veranderingen ongedaan maken?",
"discard_changes_detail": "U heeft onopgeslagen veranderingen. Weet u zeker dat u ze ongedaan wilt maken en het scherm verlaten?"
},
"azteco": {
"codeIs": "De code van uw tegoedbon is",
@ -38,7 +40,7 @@
"network": "Netwerkfout"
},
"hodl": {
"are_you_sure_you_want_to_logout": "Weet u zeker dat u wilt uitloggen van HodlHodl?",
"are_you_sure_you_want_to_logout": "Weet u zeker dat u wilt uitloggen van Hodl Hodl?",
"cont_address_escrow": "Escrow",
"cont_address_to": "Naar",
"cont_buying": "kopen",
@ -210,6 +212,7 @@
"input_total": "Totaal:",
"permission_camera_message": "We hebben toestemming nodig om uw camera te gebruiken",
"permission_camera_title": "Toestemming om camera te gebruiken",
"psbt_sign": "Onderteken een transactie",
"open_settings": "Open instellingen",
"permission_storage_later": "Vraag mij later",
"permission_storage_message": "BlueWallet heeft u toestemming nodig om toegang te krijgen tot uw opslag om deze transactie op te slaan.",
@ -236,6 +239,7 @@
"about_release_notes": "Release-opmerkingen",
"about_review": "Laat een review achter",
"about_selftest": "Voer een zelftest uit",
"about_selftest_ok": "Alle interne tests zijn geslaagd. De wallet werkt.",
"about_sm_github": "GitHub",
"about_sm_discord": "Discord server",
"about_sm_telegram": "Telegram kanaal",
@ -261,7 +265,7 @@
"electrum_saved": "Uw veranderingen zijn succesvol opgeslagen. Opnieuw opstarten kan nodig zijn om de wijzigingen door te voeren.",
"set_electrum_server_as_default": "{server} instellen als de standaard electrum server?",
"set_lndhub_as_default": "{url} instellen als de standaard LNDHub server?",
"electrum_settings": "Electrum instellingen",
"electrum_settings_server": "Electrum Server Instellingen",
"electrum_settings_explain": "Laat leeg om standaardinstelling te gebruiken",
"electrum_status": "Status",
"electrum_clear_alert_title": "Geschiedenis verwijderen?",
@ -346,7 +350,7 @@
"details_title": "Transacties",
"details_to": "Uitvoer",
"details_transaction_details": "Transactie details",
"enable_hw": "Deze wallet wordt niet gebruikt in combinatie met een hardware wallet. Wilt u het gebruik van een hardware wallet inschakelen?",
"enable_offline_signing": "Deze wallet wordt niet gebruikt in combinatie met een hardware wallet. Wilt u het gebruik inschakelen?",
"list_conf": "conf: {number}",
"pending": "In afwachting",
"list_title": "Transacties",
@ -355,7 +359,8 @@
"status_bump": "Bumb fee",
"status_cancel": "Annuleer transactie",
"transactions_count": "Transactieteller",
"txid": "Txid"
"txid": "Txid",
"updating": "Updaten..."
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -406,7 +411,7 @@
"export_title": "Wallet exporteren",
"import_do_import": "Importeren",
"import_error": "Importeren mislukt. Zorg ervoor dat de verstrekte gegevens geldig zijn.",
"import_explanation": "Schrijf hier je mnemonic phrase, private key, WIF of wat je maar hebt. BlueWallet zal zijn best doen om het juiste formaat te raden en uw wallet te importeren",
"import_explanation": "Schrijf hier uw mnemonic phrase, private key, WIF of wat je maar hebt. BlueWallet zal zijn best doen om het juiste formaat te raden en uw wallet te importeren. Als u een public key invoert, zal BlueWallet deze toevoegen als Watch-only wallet.",
"import_file": "Importeer bestand",
"import_imported": "Geïmporteerd",
"import_placeholder_fail": "Wallet Importeren",
@ -437,6 +442,7 @@
"looks_like_bip38": "Dit lijkt op een met een wachtwoord beveiligde private key (BIP38)",
"reorder_title": "Wallets opnieuw ordenen",
"please_continue_scanning": "Ga door met scannen",
"scan_error": "Scan Fout",
"select_no_bitcoin": "Er is momenteel geen Bitcoin-wallet beschikbaar",
"select_no_bitcoin_exp": "Een Bitcoin-wallet is vereist om Lightning-wallets opnieuw te vullen. Maak of importeer er een.",
"select_wallet": "Selecteer wallet",
@ -445,6 +451,7 @@
"pull_to_refresh": "Pull om te refreshen.",
"warning_do_not_disclose": "Waarschuwing! Niet bekendmaken",
"add_ln_wallet_first": "U moet eerst een Lightning-wallet toevoegen.",
"identity_pubkey": "Identiteit PubKey",
"xpub_title": "Wallet XPUB"
},
"multisig": {

View File

@ -15,7 +15,7 @@
"save": "Salvar",
"seed": "Seed",
"wallet_key": "Wallet key",
"invalid_animated_qr_code_fragment" : "Código QR animado inválido, tente novamente",
"invalid_animated_qr_code_fragment": "Código QR animado inválido, tente novamente",
"file_saved": "O arquivo ({filePath}) foi salvo na pasta Downloads."
},
"azteco": {
@ -73,6 +73,8 @@
"item_nooffers": "Sem ofertas. Tente mudar \"Perto de mim\" para ofertas globais.",
"item_rating": "{rating} negócios",
"item_rating_no": "Sem negócios",
"local_trader": "Local Trader",
"local_trader_new": "Nova",
"login": "Entrar",
"mycont": "Meus contratos",
"offer_accept": "Aceitar oferta",
@ -227,13 +229,19 @@
"about_awesome": "Construído com os incríveis ",
"about_backup": "Sempre faça backup de suas chaves!",
"about_free": "BlueWallet é um projeto de código aberto e gratuito. Criado por usuários de Bitcoin.",
"about_license": "Licença MIT",
"about_release_notes": "Notas de lançamento",
"about_review": "Deixe-nos uma review",
"about_selftest": "Run self test",
"about_sm_github": "GitHub",
"about_sm_discord": "Servidor Discord",
"about_sm_telegram": "Chat do Telegram",
"about_sm_twitter": "Siga-nos no Twitter",
"advanced_options": "Opções avançadas",
"biom_10times": "Você tentou digitar sua senha 10 vezes. Você gostaria de resetar seu armazenamento? Isso irá remover todas suas carteiras e descriptografar seu armazenamento.",
"biom_conf_identity": "Por favor, confirme sua identidade.",
"biom_no_passcode": "Seu dispositivo não possui uma senha. Para proceder, por favor configure uma senha no app de Configurações.",
"biom_remove_decrypt": "Todas suas carteiras serão removidas e seu armazenamento será descritptografado. Você tem certeza que deseja proceder?",
"currency": "Moeda",
"currency_source": "Os preços são obtidos da",
"default_desc": "Quando desativado, o BlueWallet abrirá imediatamente a carteira selecionada no lançamento.",
@ -250,6 +258,14 @@
"electrum_settings": "Configurações Electrum",
"electrum_settings_explain": "Deixe em branco para usar o padrão",
"electrum_status": "Estado",
"electrum_clear_alert_title": "Limpar histórico?",
"electrum_clear_alert_message": "Você deseja limpar o histórico de servidores Electrum?",
"electrum_clear_alert_cancel": "Cancelar",
"electrum_clear_alert_ok": "Ok",
"electrum_select": "Selecionar",
"electrum_reset": "Resetar para o padrão.",
"electrum_history": "Histórico do servidor",
"electrum_clear": "Limpar",
"encrypt_decrypt": "Descriptografar armazenamento",
"encrypt_decrypt_q": "Tem certeza de que deseja descriptografar seu armazenamento? Isso permitirá que suas carteiras sejam acessadas sem uma senha.",
"encrypt_del_uninstall": "Remover se a BlueWallet for desinstalada",
@ -276,7 +292,7 @@
"network_electrum": "Servidor Electrum",
"not_a_valid_uri": "Não é um URI válido",
"notifications": "Notificações",
"open_link_in_explorer" : "Abrir link no explorador",
"open_link_in_explorer": "Abrir link no explorador",
"password": "Senha",
"password_explain": "Definir a senha para descriptografar os arquivos",
"passwords_do_not_match": "Senhas não conferem",
@ -292,7 +308,10 @@
"retype_password": "Inserir senha novamente",
"save": "Salvar",
"saved": "Salvo",
"success_transaction_broadcasted" : "Sucesso! Sua transação foi transmitida!"
"success_transaction_broadcasted": "Sucesso! Sua transação foi transmitida!",
"total_balance": "Saldo Total",
"total_balance_explanation": "Exibir o saldo total de todas suas carteiras nos seus widgets da tela inicial.",
"widgets": "Widgets"
},
"notifications": {
"would_you_like_to_receive_notifications": "Gostaria de receber notificações quando receber pagamentos?",
@ -316,7 +335,7 @@
"details_inputs": "Inputs",
"details_outputs": "Outputs",
"details_received": "Recebido",
"transaction_note_saved":"Anotação da transação salva com sucesso.",
"transaction_note_saved": "Anotação da transação salva com sucesso.",
"details_show_in_block_explorer": "Mostrar num navegador",
"details_title": "Transação",
"details_to": "Para",
@ -329,7 +348,8 @@
"rbf_title": "Aumento de taxa (RBF)",
"status_bump": "Aumento de taxa",
"status_cancel": "Cancelar Transação",
"transactions_count": "contagem de transações"
"transactions_count": "contagem de transações",
"txid": "Txid"
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -359,10 +379,15 @@
"details_del_wb_q": "Esta carteira tem um saldo. Antes de prosseguir, esteja ciente de que você não poderá recuperar os fundos sem a frase de backup desta carteira. Para evitar a remoção acidental desta carteira, insira o saldo de {balance} satoshis da carteira.",
"details_delete": "Apagar",
"details_delete_wallet": "Deletar carteira",
"details_derivation_path": "path de derivação",
"details_display": "exibir na lista de carteiras",
"details_export_backup": "Exportar / backup",
"details_marketplace": "Mercado",
"details_master_fingerprint": "Master fingerprint",
"details_ms_l": "{m} de {n} legacy (p2sh)",
"details_ms_ns": "{m} de {n} segwit nativo (p2wsh)",
"details_ms_ws": "{m} de {n} wrapped segwit (p2sh-p2wsh)",
"details_multisig_type": "multisig",
"details_no_cancel": "Não, cancelar",
"details_save": "Salvar",
"details_show_xpub": "Ver XPUB",
@ -378,6 +403,8 @@
"import_explanation": "Escreva aqui sua frase mnemônica, chave privada, WIF, ou o que você tiver. Faremos nosso melhor para adivinhar o formato e importar sua carteira",
"import_file": "Importar arquivo",
"import_imported": "Importada",
"import_placeholder_fail": "Importar Carteira",
"import_placeholder_inprogress": "Importando Carteira...",
"import_scan_qr": "Ler um código QR ou arquivo",
"import_success": "Sucesso",
"import_title": "importar",
@ -392,13 +419,15 @@
"list_import_error": "Foi encontrado um erro ao tentar importar esta carteira.",
"list_import_problem": "Ocorreu um problema ao importar esta carteira",
"list_latest_transaction": "última transação",
"list_ln_browser": "LApp Browser",
"list_long_choose": "Escolher Foto",
"list_long_clipboard": "Copiar da área de transferência",
"list_long_scan": "Ler QR Code",
"list_marketplace": "Mercado",
"list_tap_here_to_buy": "Comprar Bitcoin",
"no_ln_wallet_error": "Antes de pagar uma fatura Lightning você deve adicionar uma carteira Lightning.",
"list_title": "carteiras",
"list_tryagain": "Tente Novamente",
"no_ln_wallet_error": "Antes de pagar uma fatura Lightning você deve adicionar uma carteira Lightning.",
"looks_like_bip38": "Parece uma chave privada protegida por senha (BIP38)",
"reorder_title": "Reordenar carteiras",
"select_no_bitcoin": "No momento, não há carteiras Bitcoin disponíveis.",
@ -442,6 +471,7 @@
"needs": "Necessita",
"what_is_vault_description_number_of_vault_keys": "{m} chaves do cofre",
"what_is_vault_description_to_spend": "para gastar e um terceiro você\npode usar como backup.",
"what_is_vault_description_to_spend_other": "para gastar.",
"quorum": "{m} de {n} quorum",
"quorum_header": "Quorum",
"of": "de",
@ -498,5 +528,10 @@
"header": "Controle de moedas",
"use_coin": "Usar moeda",
"tip": "Permite que você veja, marque, congele ou selecione moedas para gerenciar melhor sua carteira."
},
"units": {
"BTC": "BTC",
"sat_byte": "sat/byte",
"sats": "sats"
}
}

View File

@ -8,7 +8,15 @@
"of": "6\n{number} de {total}",
"ok": "OK",
"storage_is_encrypted": "O armazenamento está encriptado. Uma password é necessária para desencriptar",
"yes": "Sim"
"allow": "Permitir",
"yes": "Sim",
"no": "Não",
"save": "Salvar",
"seed": "Seed",
"wallet_key": "Chave da carteira",
"file_saved": "O arquivo ({filePath}) foi salvo na sua pasta Downloads.",
"discard_changes": "Descartar alterações?",
"discard_changes_detail": "Tem alterações por guardar. Tem a certeza que deseja descartar e sair do ecrã?"
},
"azteco": {
"codeIs": "O seu código é",
@ -65,6 +73,8 @@
"item_nooffers": "Sem ofertas. Tente mudar \"Perto de mim\" para ofertas globais!",
"item_rating": "{rating} negócios",
"item_rating_no": "Sem negócios",
"local_trader": "Local Trader",
"local_trader_new": "Nova",
"login": "Login",
"mycont": "Meus contractos",
"offer_accept": "Aceitar oferta",
@ -163,6 +173,7 @@
"details_adv_full_sure": "Tem a certeza de que deseja usar o saldo total da sua carteira para esta transacção?",
"details_adv_import": "Importar transação",
"details_amount_field_is_not_valid": "Campo de quantia não é válido",
"details_amount_field_is_less_than_minimum_amount_sat": "A quantidade indicada é muito pequena. Por favor, indique uma quantidade superior a 500 sats.",
"details_create": "Criar",
"details_error_decode": "Erro: Não é possível decodificar o endereço Bitcoin",
"details_fee_field_is_not_valid": "Campo de taxa não é válido",
@ -194,34 +205,43 @@
"input_done": "Feito",
"input_paste": "Colar",
"input_total": "Total:",
"open_settings": "Abrir configurações",
"permission_camera_message": "Precisamos da sua permissão para usar sua câmera",
"permission_camera_title": "Permissão para usar a câmera",
"open_settings": "Abrir configurações",
"permission_storage_later": "Perguntar mais tarde",
"permission_storage_message": "A BlueWallet precisa da sua permissão para aceder ao seu armazenamento para guardar esta transação.",
"permission_storage_denied_message": "BlueWallet não pôde salvar esse arquivo. Por favor, acesse as configurações do seu dispositivo e habilite a Permissão de Armazenamento.",
"permission_storage_title": "Permissão de acesso ao armazenamento",
"psbt_clipboard": "Copiar para área de transferência",
"psbt_this_is_psbt": "Esta é uma transação bitcoin parcialmente assinada (PSBT). Conclua a assinatura com a sua carteira de hardware.",
"psbt_tx_export": "Exportar para ficheiro",
"no_tx_signing_in_progress": "Nenhuma assinatura de transação em progresso.",
"psbt_tx_open": "Abrir transacção assinada",
"psbt_tx_scan": "Scan transacção assinada",
"qr_error_no_qrcode": "A imagem selecionada não contém um código QR.",
"qr_error_no_wallet": "O ficheiro seleccionado não contém uma carteira que possa ser importada.",
"success_done": "Feito",
"txSaved": "O ficheiro de transacção ({filePath}) foi guardado na pasta Downloads."
"txSaved": "O ficheiro de transacção ({filePath}) foi guardado na pasta Downloads.",
"problem_with_psbt": "Problema com PSBT"
},
"settings": {
"about": "Sobre",
"about_awesome": "Construído com o incríveis",
"about_backup": "Faça sempre backup das suas chaves!",
"about_free": "BlueWallet é um projeto gratuito e de código aberto. Criado por utilizadores de Bitcoin.",
"about_license": "Licença MIT",
"about_release_notes": "Release notes",
"about_review": "Deixa-nos uma review",
"about_selftest": "Run self test",
"about_sm_github": "GitHub",
"about_sm_discord": "Servidor Discord",
"about_sm_telegram": "Chat Telegram",
"about_sm_twitter": "Segue-nos no Twitter",
"advanced_options": "Opções Avançadas",
"biom_10times": "Você tentou digitar sua senha 10 vezes. Você gostaria de resetar seu armazenamento? Isso irá remover todas suas carteiras e descriptografar seu armazenamento.",
"biom_conf_identity": "Por favor, confirme sua identidade.",
"biom_no_passcode": "Seu dispositivo não possui uma palavra-passe. Para proceder, por favor configure uma palavra-passe no app de Configurações.",
"biom_remove_decrypt": "Todas suas carteiras serão removidas e seu armazenamento será descriptografado. Tem certeza que deseja proceder?",
"currency": "Moeda",
"currency_source": "Os preços são obtidos no",
"default_desc": "Quando desactivado, a BlueWallet abrirá imediatamente a carteira seleccionada no lançamento.",
@ -238,6 +258,14 @@
"electrum_settings": "Definições do Electrum",
"electrum_settings_explain": "Deixe em branco para usar o valor por omissão",
"electrum_status": "Estado",
"electrum_clear_alert_title": "Limpar histórico?",
"electrum_clear_alert_message": "Você realmente deseja limpar o histórico de servidores electrum?",
"electrum_clear_alert_cancel": "Cancelar",
"electrum_clear_alert_ok": "Ok",
"electrum_select": "Selecionar",
"electrum_reset": "Resetar para o padrão",
"electrum_history": "Histórico do servidor",
"electrum_clear": "Limpar",
"encrypt_decrypt": "Desencriptar armazenamento",
"encrypt_decrypt_q": "Tem certeza de que deseja desencriptar o seu armazenamento? Isso permitirá que suas carteiras sejam acessadas sem uma senha.",
"encrypt_del_uninstall": "Apagar se a BlueWallet for desinstalada",
@ -264,49 +292,69 @@
"network_electrum": "Electrum server",
"not_a_valid_uri": "Não é um URI válido",
"notifications": "Notificações",
"open_link_in_explorer": "Abrir link no explorador",
"password": "Password",
"password_explain": "Definir a password para desencriptar o armazenamento",
"passwords_do_not_match": "Passwords não coincidem",
"plausible_deniability": "Negação plausível...",
"privacy": "Privacidade",
"privacy_system_settings": "Configurações do Sistema",
"privacy_quickactions": "Atalhos da Carteira",
"push_notifications": "Notificações via push",
"retype_password": "Inserir password novamente",
"save": "Guardar",
"saved": "Guardado"
"saved": "Guardado",
"success_transaction_broadcasted": "Sucesso! Sua transação foi transmitida!",
"total_balance": "Saldo Total",
"widgets": "Widgets"
},
"notifications": {
"would_you_like_to_receive_notifications": "Você gostaria de receber notificações quando você receber pagamentos?",
"ask_me_later": "Pergunte-me depois"
},
"transactions": {
"cancel_explain": "Substituiremos esta transacção por aquela que lhe paga e tem taxas mais altas. Isso efectivamente cancela a transacção. Isto é chamado de RBF - Substituir por Taxa.",
"cancel_no": "Esta transacção não é substituível",
"cancel_title": "Cancelar esta transacção (RBF)",
"confirmations_lowercase": "{confirmations} confirmações",
"cpfp_create": "Criar",
"cpfp_exp": "Criaremos outra transacção que gasta esta transação não confirmada. A taxa total será maior do que a taxa de transacção original, portanto, deve ser confirmada mais rapidamente. Isto é chamado de CPFP - Child Pays For Parent.",
"cpfp_no_bump": "A taxa desta transacção não pode ser aumentada",
"cpfp_title": "Aumento de taxa (CPFP)",
"details_balance_hide": "Esconder Saldo",
"details_balance_show": "Mostrar Saldo",
"details_block": "Block Height",
"details_copy": "Copiar",
"details_from": "De",
"details_inputs": "Inputs",
"details_outputs": "Outputs",
"details_received": "Recebido",
"transaction_note_saved": "Nota de transação salva com sucesso.",
"details_show_in_block_explorer": "Mostrar no block explorer",
"details_title": "detalhes",
"details_to": "Para",
"details_transaction_details": "Detalhes da transacção",
"enable_hw": "Esta carteira não está a ser usada em conjunto com uma carteira de hardware. Gostaria de habilitar o uso de carteira de hardware?",
"pending": "Pendente",
"list_title": "transacções",
"rbf_explain": "Substituiremos esta transacção por outra com uma taxa mais alta, portanto, ela deve ser confirmada mais rapidamente. Isto é chamado de RBF - Substituir por Taxa.",
"rbf_title": "Aumento de taxa (RBF)",
"status_bump": "Aumento de taxa",
"status_cancel": "Cancelar transacção",
"transactions_count": "contagem de transações"
"transactions_count": "contagem de transações",
"txid": "Txid",
"updating": "A atualizar..."
},
"wallets": {
"add_bitcoin": "Bitcoin",
"add_bitcoin_explain": "Carteira Bitcoin simples e poderosa",
"add_create": "Adicionar",
"add_entropy_generated": "{gen} bytes de entropia gerada",
"add_entropy_provide": "Entropia através de dados",
"add_entropy_remain": "{gen} bytes de entropia gerada. Os bytes {rem} restantes serão obtidos do gerador de números aleatórios do sistema.",
"add_import_wallet": "Importar wallet",
"add_lightning": "Lightning",
"add_lightning_explain": "Para gastar com transações instantâneas",
"add_lndhub": "Conecte-se ao seu LNDHub",
"add_lndhub_error": "O endereço de nó fornecido não é um nó LNDHub válido.",
"add_lndhub_placeholder": "seu endereço de nó",

View File

@ -16,7 +16,9 @@
"seed": "Сид-фраза",
"wallet_key": "Ключ кошелька",
"invalid_animated_qr_code_fragment" : "Ошибочный фрагмент QRCode, попробуйте снова",
"file_saved": "Файл ({filePath}) сохранён в папке Загрузки."
"file_saved": "Файл ({filePath}) сохранён в папке Загрузки.",
"discard_changes": "Отменить изменения?",
"discard_changes_detail": "У вас есть несохраненные изменения. Вы уверены, что хотите отменить их?"
},
"azteco": {
"codeIs": "Код вашего ваучера",
@ -176,6 +178,7 @@
"details_adv_full_sure": "Ты уверен что хочешь использоавать весь баланс кошелька для этой транзакции?",
"details_adv_import": "Импортировать транзакцию",
"details_amount_field_is_not_valid": "Введенная сумма неверна",
"details_amount_field_is_less_than_minimum_amount_sat": "Сумма слишком мала. Пожалуйста, введите сумму больше 500 сатоши.",
"details_create": "Создать",
"details_error_decode": "Ошибка: Нельзя декодировать Bitcoin адрес",
"details_fee_field_is_not_valid": "Введенная комиссия неверна",
@ -209,6 +212,7 @@
"input_total": "Всего:",
"permission_camera_message": "Нужно ваше разрешение на использование камеры",
"permission_camera_title": "Разрешите пользоваться камерой",
"psbt_sign": "Подписать транзакцию",
"open_settings": "Открыть настройки",
"permission_storage_later": "Спроси меня позже",
"permission_storage_message": "BlueWallet нужно ваше разрешение для доступа к хранилищу, чтобы сохранить этот файл.",
@ -345,7 +349,7 @@
"details_title": "Детали транзакци",
"details_to": "Кому",
"details_transaction_details": "Детали транзакции",
"enable_hw": "Кошелек не используется вместе с аппаратным. Вы хотите включить поддержку аппаратного кошелека?",
"enable_offline_signing": "Этот кошелек не используется вместе с оффлайн подписью. Хотите включить это сейчас?",
"list_conf": "{number} подтв.",
"pending": "В процессе",
"list_title": "Мои транзакции",
@ -354,7 +358,8 @@
"status_bump": "Повысить комиссию",
"status_cancel": "Отменить транзакцию",
"transactions_count": "кол-во транзакций",
"txid": "Txid"
"txid": "Txid",
"updating": "Обновление..."
},
"wallets": {
"add_bitcoin": "Bitcoin",
@ -436,6 +441,7 @@
"looks_like_bip38": "Это похоже на закрытый ключ, защищенный паролем (BIP38)",
"reorder_title": "Отсортировать кошельки",
"please_continue_scanning": "Продолжайте сканировать",
"scan_error": "Ошибка сканирования",
"select_no_bitcoin": "В настоящее время нет доступных биткойн-кошельков.",
"select_no_bitcoin_exp": "Биткойн-кошелек необходим для пополнения Lightning кошельков. Пожалуйста, создайте или импортируйте его.",
"select_wallet": "Выбрать кошелек",
@ -444,10 +450,12 @@
"pull_to_refresh": "потяните, чтобы обновить",
"warning_do_not_disclose": "Внимание! Не разглашать",
"add_ln_wallet_first": "Сначала добавьте Лайтнинг кошелёк.",
"identity_pubkey": "Identity Pubkey",
"xpub_title": "XPUB кошелька"
},
"multisig": {
"multisig_vault": "Хранилище",
"default_label": "Мультисиг Хранилище",
"multisig_vault_explain": "Лучшая безопасность для больших сумм",
"provide_signature": "Предоставить подпись",
"vault_key": "Ключ хранилища {number}",

View File

@ -1,29 +1,32 @@
{
"_": {
"allow": "Tillåt",
"bad_password": "Felaktigt lösenord, försök igen.",
"cancel": "Avbryt",
"continue": "Fortsätt",
"dont_allow": "Tillåt inte",
"enter_password": "Ange lösenord",
"never": "aldrig",
"no": "Nej",
"of": "{number} av {total}",
"ok": "OK",
"save": "Spara",
"storage_is_encrypted": "Lagringen är krypterad. Lösenords krävs för att dekryptera",
"allow": "Tillåt",
"dont_allow": "Tillåt inte",
"yes": "Ja",
"no": "Nej",
"save": "Spara",
"seed": "Frö",
"wallet_key": "Nyckel till plånbok",
"yes": "Ja"
"invalid_animated_qr_code_fragment": "Felaktig animerad QR-kod. Vänligen försök igen.",
"file_saved": "Filen ({filePath}) har sparats i din Sparade Filer folder"
},
"azteco": {
"codeIs": "Din kupong är",
"errorBeforeRefeem": "Innan inlösen måste du först skapa en Bitcoin plånbok.",
"errorSomething": "Något gick fel. Är din kupong fortfarande giltig?",
"redeem": "Lös in till en plånbok",
"redeemButton": "Lös in",
"success": "Framgång",
"title": "Lös in Azte.co kupong"
},
"cc": {
"change": "ändra"
},
"entropy": {
"save": "Spara",
"title": "Entropi",
@ -43,12 +46,16 @@
"cont_cancel_q": "Är du säker på att du vill avbryta detta kontraktet?",
"cont_cancel_y": "Ja, avbryt kontrakt",
"cont_chat": "Öppna chatt med motpart",
"cont_how": "Hur du betalar",
"cont_paid": "Markera kontrakt som betalad",
"cont_paid_q": "Är du säker att du vill markera detta kontrakt som betalt?",
"cont_selling": "Säljer",
"cont_st_completed": "Klart!",
"cont_st_paid_enought": "Bitcoin hålls som säkerhet! Betala säljaren\nvia överenskommen betalmetod.",
"cont_title": "Mina kontrakt",
"filter_any": "Valfri",
"filter_buying": "Köper",
"filter_country_global": "Globala erbjudanden",
"filter_currency": "Valuta",
"filter_detail": "Detaljer",
"filter_filters": "Filtrera",
@ -56,7 +63,13 @@
"filter_iamselling": "Jag säljer bitcoin",
"filter_method": "Betalnings metod",
"filter_search": "Sök",
"filter_selling": "Säljer",
"item_minmax": "Min/Max",
"item_rating": "{rating} köp",
"item_rating_no": "Inga betyg",
"local_trader": "Lokal säljare",
"local_trader_new": "Ny",
"login": "Logga in",
"mycont": "Mina kontrakt",
"offer_accept": "Acceptera bud",
"offer_account_finish": "Det verkar som om du inte är klar med att skapa ett HodlHodl konto. Vill du fortsätta med att skapa ditt konto nu?",
@ -71,6 +84,7 @@
},
"lnd": {
"errorInvoiceExpired": "Fakturan har förfallit",
"exchange": "Börs",
"expired": "Förfallen",
"expiredLow": "förfallen",
"expiresIn": "Förfaller om: {tid}",
@ -88,18 +102,12 @@
"lndViewInvoice": {
"additional_info": "Ytterligare information",
"for": "För:",
"lightning_invoice": "Lightning faktura",
"has_been_paid": "Denna faktura är betald",
"open_direct_channel": "Öppna en direkt kanal med denna nod:",
"please_pay": "Var god betala",
"sats": "sats"
},
"multisig": {
"create": "Skapa"
},
"notifications": {
"ask_me_later": "Fråga mig senare",
"no_and_dont_ask": "Nej och fråga mig inte igen"
},
"plausibledeniability": {
"create_fake_storage": "Skapa fejkad lagringsyta",
"create_password": "Skapa ett lösenord",
@ -150,8 +158,11 @@
"details_add_rec_rem": "Ta bort mottagare",
"details_address": "adress",
"details_address_field_is_not_valid": "Angiven adress är inte giltig",
"details_adv_full": "Andvänd hela beloppet",
"details_adv_full_remove": "Dina andra mottagare kommer att tas bort från denna transaktion.",
"details_adv_import": "Importera Transaction",
"details_amount_field_is_not_valid": "Angivet belopp är inte giltigt",
"details_amount_field_is_less_than_minimum_amount_sat": "Det angivna beloppet är för litet. Vänligen ange ett belopp som är större än 500 sats.",
"details_create": "Skapa",
"details_fee_field_is_not_valid": "Angiven avgift är inte giltig",
"details_next": "Nästa",
@ -169,9 +180,9 @@
"input_done": "Klart",
"input_paste": "Klistra in",
"input_total": "Totalt:",
"open_settings": "Öppna inställningar",
"permission_camera_message": "Vi behöver ditt godkännande för att använda kameran",
"permission_camera_title": "Tillåtelse för att använda kameran",
"open_settings": "Öppna inställningar",
"permission_storage_later": "Fråga mig senare",
"psbt_tx_export": "Exportera till fil",
"qr_error_no_qrcode": "Bilden innehåller inte en QR kod",
@ -203,6 +214,10 @@
"retype_password": "Ange lösenord igen",
"save": "Spara"
},
"notifications": {
"no_and_dont_ask": "Nej och fråga mig inte igen",
"ask_me_later": "Fråga mig senare"
},
"transactions": {
"cpfp_create": "Skapa",
"details_balance_hide": "Göm saldo",
@ -256,5 +271,11 @@
"select_wallet": "Välj plånbok",
"xpub_copiedToClipboard": "Kopierad till urklipp",
"xpub_title": "plånbokens XPUB"
},
"multisig": {
"create": "Skapa"
},
"cc": {
"change": "ändra"
}
}

View File

@ -8,7 +8,12 @@
"of": "{number} จาก {total}",
"ok": "ตกลง",
"storage_is_encrypted": "ที่เก็บข้อมูลของคุณถูกเข้ารหัส. ต้องการรหัสผ่านเพื่อถอดรหัส",
"yes": "ถูกต้อง"
"allow": "อนุญาติ",
"yes": "ถูกต้อง",
"no": "ไม่",
"save": "บันทึก",
"seed": "ซีด",
"wallet_key": "กุญแจกระเป๋าเงิน"
},
"azteco": {
"codeIs": "รหัสบัตรกำนัลของท่านคือ",
@ -63,6 +68,8 @@
"item_nooffers": "ไม่มีข้อเสนอ ท่านสามารถใช้ Global offer ได้",
"item_rating": "{rating} เทรด",
"item_rating_no": "ไม่มีการจัดอันดับ",
"local_trader": "เทรดเดอร์ท้องถิ่น",
"local_trader_new": "ใหม่",
"login": "เข้าระบบ",
"mycont": "สัญญาของฉัน",
"offer_accept": "ยอมรับข้อเสนอ",
@ -95,6 +102,7 @@
"lndViewInvoice": {
"additional_info": "ข้อมูลเพิ่มเติม",
"for": "สำหรับ:",
"lightning_invoice": "ใบแจ้งหนี้ไลท์นิง",
"has_been_paid": "ใบวางบิลล์ถูกจ่ายเพื่อ",
"open_direct_channel": "เปิดช่องโดยตรงไปที่โหนดนี้",
"please_pay": "กรุณาจ่าย",
@ -159,6 +167,7 @@
"details_adv_full_sure": "ท่านแน่ใจหรือไม่ว่า ต้องการใช้ยอดเต็ม?",
"details_adv_import": "นำเข้าธุรกรรม",
"details_amount_field_is_not_valid": "จำนวนเงินไม่ถูกต้อง",
"details_amount_field_is_less_than_minimum_amount_sat": "ท่านใส่จำนวนเงินน้อยเกินไป กรุณาใส่มากกว่า 500 แซท (sat)",
"details_create": "สร้าง",
"details_error_decode": "ผิดพลาด: ไม่สามารถถอดรหัสบิตคอยน์แอ๊ดเดรสได้",
"details_fee_field_is_not_valid": "ค่าธรรมเนียมไม่ถูกต้อง",
@ -173,14 +182,22 @@
"dynamic_prev": "ก่อนหน้า",
"dynamic_start": "เริ่ม",
"dynamic_stop": "หยุด",
"fee_10m": "10นาที",
"fee_1d": "1วัน",
"fee_3h": "3ชั่วโมง",
"fee_custom": "กำหนดเอง",
"fee_fast": "เร็ว",
"fee_medium": "ปานกลาง",
"fee_satbyte": "ด้วยแซทต่อไบท์",
"fee_slow": "ช้า",
"header": "ส่ง",
"input_clear": "ลบ",
"input_done": "เสร็จแล้ว",
"input_paste": "วาง",
"input_total": "ยอดรวม:",
"open_settings": "เปิดการตั้งค่า",
"permission_camera_message": "ต้องการคำอนุญาตในการใช้กล้อง",
"permission_camera_title": "อนุญาตในการใช้กล้อง",
"open_settings": "เปิดการตั้งค่า",
"permission_storage_later": "ถามฉันภายหลัง",
"psbt_clipboard": "คัดลอกไปที่คลิ๊ปบอร์ด",
"psbt_tx_export": "ส่งไปที่ไฟล์",
@ -202,7 +219,10 @@
"about_sm_telegram": "เทเลแกรมแช็ท",
"about_sm_twitter": "ติดตามเราในทวิตเตอร์",
"advanced_options": "ตัวเลือกขั้นสูง",
"biometrics": "Biometrics",
"biom_conf_identity": "กรุณายืนยันตัวตนของท่าน",
"currency": "สกุลเงิน",
"currency_source": "ราคาได้มาจาก",
"default_desc": "เมื่อปิดการใช้งาน บูลวอลเล็ทจะเปิดกระเป๋าสตางค์ที่เลือกเมื่อท่านเปิดแอ๊พ",
"default_title": "เมื่อเปิดตัว",
"default_wallets": "ดูกระเป๋าสตางค์ทุกอัน",
@ -216,6 +236,14 @@
"electrum_settings": "ตั้งค่า Electrum",
"electrum_settings_explain": "ปล่อยว่างไว้เพื่อใช้ค่าเริ่มต้น",
"electrum_status": "สถานะ",
"electrum_clear_alert_title": "ท่านต้องการลบประวัติการรใช้งานหรือไม่?",
"electrum_clear_alert_message": "ท่านต้องการลบประวัติการใช้งานของ electrum server หรือไม่?",
"electrum_clear_alert_cancel": "ยกเลิก",
"electrum_clear_alert_ok": "ตกลง",
"electrum_select": "เลือก",
"electrum_reset": "รีเซ็ตเป็นค่าเริ่มต้น",
"electrum_history": "ประวัติของเซิร์ฟเวอร์",
"electrum_clear": "ลบ",
"encrypt_decrypt": "เข้ารหัสที่เก็บข้อมูล",
"encrypt_del_uninstall": "ลบเมื่อถอนการติดตั้งบูลวอลเล็ท",
"encrypt_title": "ความปลอดภัย",
@ -235,21 +263,33 @@
"network_electrum": "เซิร์ฟเวอร์ Electrum",
"not_a_valid_uri": "๊URI ไม่ถูกต้อง",
"notifications": "แจ้งเตือน",
"open_link_in_explorer": "ไปที่เอ๊กโพเลอร์",
"password": "รหัสผ่าน",
"password_explain": "สร้างรหัสผ่านที่จะใช้ในการเข้ารหัสที่เก็บข้อมูล",
"passwords_do_not_match": "รหัสผ่านไม่ตรงกัน",
"plausible_deniability": "การปฏิเสธที่เป็นไปได้...",
"privacy": "ความเป็นส่วนตัว",
"privacy_read_clipboard": "อ่านค่าจากคลิปบอร์ด",
"privacy_system_settings": "ตั้งค่าระบบ",
"push_notifications": "การแจ้งเตือนแบบ Push",
"retype_password": "ใส่รหัสผ่านอีกครั้ง",
"save": "บันทึก",
"saved": "บันทึกแล้ว"
"saved": "บันทึกแล้ว",
"success_transaction_broadcasted": "สำเร็จ! รายการของท่านบอร์ดคาสต์แล้ว!",
"total_balance": "ยอดรวม"
},
"notifications": {
"ask_me_later": "ถามฉันภายหลัง"
},
"transactions": {
"cancel_no": "ธุรกรรมนี้ไม่สามารทเปลี่ยนแทนได้",
"cancel_title": "ยกเลิกธุรกรรม (RBF)",
"confirmations_lowercase": "{confirmations} ยืนยัน",
"cpfp_create": "สร้าง",
"cpfp_no_bump": "ธุรกรรมนี้ไม่สามารทเพิ่มค่าธรรมเนียมได้",
"cpfp_title": "เพิ่มค่าธรรมเนียม (CPFP)",
"details_balance_hide": "ซ่อนยอดคงเหลือ",
"details_balance_show": "แสดงยอดคงเหลือ",
"details_block": "บล็อกไฮต์",
"details_copy": "ก๊อปปี้",
"details_from": "อินพุท",
@ -260,6 +300,7 @@
"details_title": "ธุรกรรม",
"details_to": "เอ้าพุท",
"details_transaction_details": "รายละเอียดธุรกรรม",
"pending": "รอดำเนินการ",
"list_title": "ธุรกรรม",
"rbf_title": "เพิ่มค่าธรรมเนียม (RBF)",
"status_bump": "เพิ่มค่าธรรมเนียม",
@ -268,6 +309,7 @@
},
"wallets": {
"add_bitcoin": "บิตคอยน์",
"add_bitcoin_explain": "กระเป๋าเงินบิตคอยน์ที่เรียบง่ายและทรงพลัง",
"add_create": "สร้าง",
"add_import_wallet": "นำเข้ากระเป๋าสตางค์",
"add_lightning": "ไลท์นิง",
@ -298,12 +340,15 @@
"details_use_with_hardware_wallet": "ใช้ด้วยกระเป๋าฮาร์ดแวร์",
"details_wallet_updated": "อัพเดทกระเป๋าสตางค์แล้ว",
"details_yes_delete": "ใช่, ลบเลย",
"enter_bip38_password": "ใส่รหัสผ่านเพื่อถอดรหัส",
"export_title": "ส่งออกกระเป๋าสตางค์",
"import_do_import": "นำเข้า",
"import_error": "ไม่สามารถนำเข้าได้. กรุณาตรวจสอบข้อมูลให้ถูกต้อง.",
"import_explanation": "บันทึกนีโมนิค(สิ่งที่ช่วยให้จำได้), ไพร์เวทคีย์, WIF, และทุกๆอย่าง. บูลวอลเล็ทจะพยายามนำเข้ากระเป๋าสตางค์ของคุณ",
"import_file": "นำเข้าไฟล์",
"import_imported": "นำเข้าแล้ว",
"import_placeholder_fail": "นำเข้ากระเป๋าสตางค์",
"import_placeholder_inprogress": "กำลังนำเข้ากระเป๋าสตางค์...",
"import_scan_qr": "หรือสแกนรหัสคิวอาร์แทน?",
"import_success": "สำเร็จ",
"import_title": "นำเข้า",
@ -328,6 +373,69 @@
"select_wallet": "เลือกกระเป๋าสตางค์",
"take_photo": "ถ่ายรูป",
"xpub_copiedToClipboard": "ก๊อปปี้ไปที่คลิปบอร์ดแล้ว.",
"pull_to_refresh": "ดึงเพื่อรีเฟรช",
"add_ln_wallet_first": "คุณต้องเพิ่มกระเป๋าเงินไลท์นิงก่อน",
"xpub_title": "XPUB ของกระเป๋าสตางค์"
},
"multisig": {
"multisig_vault": "ห้องนิรภัย",
"default_label": "ห้องนิรภัยหลายลายเซ็น",
"multisig_vault_explain": "ความปลอดภัยที่ดีที่สุดสำหรับเงินจำนวนมาก",
"provide_signature": "ใส่ลายเซ็น",
"required_keys_out_of_total": "กุญแจที่ต้องการจากทั้งหมด",
"fee": "ค่าธรรมเนียม: {number}",
"fee_btc": "{number} บิตคอยน์",
"confirm": "ยืนยัน",
"header": "ส่ง",
"share": "แชร์",
"view": "ดู",
"manage_keys": "จัดการกุญแจ",
"how_many_signatures_can_bluewallet_make": "จำนวนลายเซ็นที่บูลวอลเล็ทสามารถสร้าง",
"signatures_required_to_spend": "ต้องมีลายเซ็น {number}",
"signatures_we_can_make": "สามารถสร้าง {number}",
"scan_or_import_file": "สแกนหรือนำเข้าไฟล์",
"cosign_this_transaction": "ร่วมลงชื่อในธุรกรรมนี้หรือไม่",
"create": "สร้าง",
"provide_key": "ใส่กุญแจ",
"co_sign_transaction": "ลงชื่อในธุรกรรม",
"what_is_vault": "ห้องนิรภัยคือ",
"what_is_vault_numberOfWallets": " {m}-จาก-{n} ลายเซ็น",
"what_is_vault_wallet": "กระเป๋าสตางค์",
"vault_advanced_customize": "การตั้งค่าห้องนิรภัย",
"needs": "ต้องการ",
"what_is_vault_description_number_of_vault_keys": "กุญแจห้องนิรภัย {m} อัน",
"what_is_vault_description_to_spend_other": "ใช้",
"quorum": "{m} จาก {n} องค์ประชุม",
"quorum_header": "องค์ประชุม",
"of": "จาก",
"wallet_type": "ชนืดของกระเป๋าสตางค์",
"view_key": "ดู",
"create_new_key": "สร้างใหม่",
"scan_or_open_file": "สแกนหรือเปิดไฟล์",
"ms_help": "ความช่วยเหลือ",
"ms_help_title2": "แก้ไขกุญแจ",
"ms_help_title3": "สำรองห้องนิรภัย",
"ms_help_title4": "นำเข้าห้องนิรภัย"
},
"is_it_my_address": {
"title": "ใช่แอดเดรสของฉันหรือไม่?",
"owns": "{label} เป็นเจ้าของ {address}",
"enter_address": "ใส่แอดเดรส",
"check_address": "ตรวจสอบแอดเดรส"
},
"cc": {
"change": "เงินทอน",
"coins_selected": "เหรียญที่เลือก ({number})",
"freeze": "ระงับ",
"freezeLabel": "ระงับ",
"freezeLabel_un": "ยกเลิกการระงับ",
"header": "ควบคุมเหรียญ",
"use_coin": "ใช้เหรียญ",
"use_coins": "ใช้เหรียญ"
},
"units": {
"BTC": "บิตคอยน์",
"sat_byte": "แซทต่อไบท์",
"sats": "แซท"
}
}

View File

@ -1,20 +1,29 @@
{
"_": {
"allow": "允许",
"bad_password": "密码无效,请重试",
"cancel": "取消",
"continue": "继续",
"enter_password": "输入密码",
"invalid_animated_qr_code_fragment": "无效的动态二维码,请重试",
"never": "不",
"of": "{number}的{total} ",
"ok": "好的",
"storage_is_encrypted": "你的信息已经被加密, 请输入密码解密",
"allow": "允许",
"dont_allow": "不允许",
"yes": "是的",
"no": "不",
"save": "保存",
"seed": "种子",
"storage_is_encrypted": "你的信息已经被加密, 请输入密码解密",
"yes": "是的"
"wallet_key": "钱包钥匙",
"invalid_animated_qr_code_fragment": "无效的动态二维码,请重试",
"file_saved": "文件({filePath})已保存在“下载”文件夹中。",
"discard_changes": "放弃更改?",
"discard_changes_detail": "您尚未保存更改。 您确定要丢弃它们并离开屏幕吗?"
},
"azteco": {
"codeIs": "您的优惠券代码为",
"errorBeforeRefeem": "你需先添加一个Bitcoin钱包",
"errorSomething": "出了些问题。 此凭证仍然有效吗?",
"success": "成功"
},
"entropy": {
@ -62,7 +71,7 @@
},
"lndViewInvoice": {
"please_pay": "请支付",
"sats": "sats"
"sats": ""
},
"plausibledeniability": {
"create_fake_storage": "创建虚拟加密存储",
@ -110,6 +119,7 @@
"details_address": "地址",
"details_address_field_is_not_valid": "地址内容无效",
"details_amount_field_is_not_valid": "金额格式无效",
"details_amount_field_is_less_than_minimum_amount_sat": "指定的数量太小。 请输入大于500聰 的量。",
"details_create": "创建",
"details_fee_field_is_not_valid": "费用格式无效",
"details_note_placeholder": "消息",
@ -154,6 +164,7 @@
"add_wallet_type": "类型",
"details_address": "地址",
"details_are_you_sure": "你确认么?",
"details_del_wb_q": "这个钱包有余额。 在继续操作之前,请注意,没有此钱包的种子短语,您将无法取回资金。 为了避免意外取出该钱包,请输入您的钱包余额{balance} 聰。",
"details_delete": "删除",
"details_export_backup": "导出备份",
"details_no_cancel": "不,取消",
@ -181,5 +192,37 @@
"select_wallet": "选择钱包",
"xpub_copiedToClipboard": "复制到粘贴板.",
"xpub_title": "钱包 XPUB"
},
"multisig": {
"fee_btc": "{数} 比特幣",
"quorum_header": "法定人数",
"wallet_type": "钱包类型",
"create_new_key": "创建新的",
"i_have_mnemonics": "我有这个钥匙的种子。",
"ms_help_2": "您可以在此设备中创建所有保险柜密钥,以后再删除或编辑它们。 将所有密钥都放在同一设备上具有与常规比特币钱包相同的安全性。",
"ms_help_3": "在钱包选项中,您将找到保管库备份和仅监视备份。 此备份就像到您的钱包的地图。 如果丢失一颗种子,备份对于钱包恢复至关重要。",
"ms_help_title4": "导入保管库",
"ms_help_4": "要导入多重签名,请使用您的备份文件和导入功能。 如果只有种子和XPUB则可以在创建保管库密钥时使用单独的“导入”按钮。",
"ms_help_title5": "高级模式",
"ms_help_5": "默认情况下BlueWallet 将生成 2-of-3 保险柜。 要创建其他仲裁或更改地址类型,请在“设置”中激活“高级模式”。"
},
"is_it_my_address": {
"no_wallet_owns_address": "没有可用的钱包拥有提供的地址。"
},
"cc": {
"empty": "该钱包目前没有硬币。",
"freeze": "冻结",
"freezeLabel": "冻结",
"freezeLabel_un": "解冻",
"header": "投币控制",
"use_coin": "使用硬币",
"use_coins": "使用硬币",
"tip": "此功能使您可以查看,标记,冻结或选择硬币,以改善钱包管理。 您可以通过点击彩色圆圈选择多个硬币。"
},
"units": {
"BTC": "比特幣",
"MAX": "最大",
"sat_byte": "聰/字节 ",
"sats": "聰"
}
}

Some files were not shown because too many files have changed in this diff Show More