Merge branch 'master' into renovate/ngraveio-bc-ur-1.x

This commit is contained in:
Overtorment 2024-03-19 20:53:13 +00:00 committed by GitHub
commit d7d138dab5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
100 changed files with 1332 additions and 841 deletions

25
App.js
View file

@ -254,36 +254,23 @@ const App = () => {
BlueClipboard()
.getClipboardContent()
.then(clipboard => {
if (Platform.OS === 'ios' || Platform.OS === 'macos') {
ActionSheet.showActionSheetWithOptions(
{
options: [loc._.cancel, loc._.continue],
title: loc._.clipboard,
message: contentType === ClipboardContentType.BITCOIN ? loc.wallets.clipboard_bitcoin : loc.wallets.clipboard_lightning,
options: [loc._.cancel, loc._.continue],
cancelButtonIndex: 0,
},
buttonIndex => {
if (buttonIndex === 1) {
switch (buttonIndex) {
case 0: // Cancel
break;
case 1:
handleOpenURL({ url: clipboard });
break;
}
},
);
} else {
ActionSheet.showActionSheetWithOptions({
buttons: [
{ text: loc._.cancel, style: 'cancel', onPress: () => {} },
{
text: loc._.continue,
style: 'default',
onPress: () => {
handleOpenURL({ url: clipboard });
},
},
],
title: loc._.clipboard,
message: contentType === ClipboardContentType.BITCOIN ? loc.wallets.clipboard_bitcoin : loc.wallets.clipboard_lightning,
});
}
});
};

View file

@ -34,8 +34,6 @@ const createHash = require('create-hash');
let usedBucketNum = false;
let savingInProgress = 0; // its both a flag and a counter of attempts to write to disk
const prompt = require('./helpers/prompt');
const BlueElectrum = require('./blue_modules/BlueElectrum');
BlueElectrum.connectMain();
class AppStorage {
static FLAG_ENCRYPTED = 'data_encrypted';

View file

@ -36,42 +36,6 @@ if (aspectRatio > 1.6) {
isIpad = true;
}
export const SecondButton = forwardRef((props, ref) => {
const { colors } = useTheme();
let backgroundColor = props.backgroundColor ? props.backgroundColor : colors.buttonBlueBackgroundColor;
let fontColor = colors.buttonTextColor;
if (props.disabled === true) {
backgroundColor = colors.buttonDisabledBackgroundColor;
fontColor = colors.buttonDisabledTextColor;
}
return (
<TouchableOpacity
accessibilityRole="button"
style={{
borderWidth: 0.7,
borderColor: 'transparent',
backgroundColor,
minHeight: 45,
height: 45,
maxHeight: 45,
borderRadius: 25,
justifyContent: 'center',
alignItems: 'center',
paddingHorizontal: 16,
flexGrow: 1,
}}
{...props}
ref={ref}
>
<View style={{ flexDirection: 'row', justifyContent: 'center', alignItems: 'center' }}>
{props.icon && <Icon name={props.icon.name} type={props.icon.type} color={props.icon.color} />}
{props.title && <Text style={{ marginHorizontal: 8, fontSize: 16, color: fontColor }}>{props.title}</Text>}
</View>
</TouchableOpacity>
);
});
export const BitcoinButton = props => {
const { colors } = useTheme();
return (

View file

@ -1,6 +1,6 @@
import { DrawerNavigationOptions, createDrawerNavigator } from '@react-navigation/drawer';
import { NativeStackNavigationOptions, createNativeStackNavigator } from '@react-navigation/native-stack';
import React, { useMemo } from 'react';
import React, { useContext, useMemo } from 'react';
import { Dimensions, I18nManager, Platform, useWindowDimensions } from 'react-native';
import PlausibleDeniability from './screen/PlausibleDeniability';
@ -66,7 +66,7 @@ import PsbtMultisigQRCode from './screen/send/psbtMultisigQRCode';
import PsbtWithHardwareWallet from './screen/send/psbtWithHardwareWallet';
import Success from './screen/send/success';
import UnlockWith from './UnlockWith';
import UnlockWith from './screen/UnlockWith';
import { isDesktop, isHandset, isTablet } from './blue_modules/environment';
import navigationStyle from './components/navigationStyle';
import { useTheme } from './components/themes';
@ -83,10 +83,11 @@ import LnurlPay from './screen/lnd/lnurlPay';
import LnurlPaySuccess from './screen/lnd/lnurlPaySuccess';
import ScanLndInvoice from './screen/lnd/scanLndInvoice';
import SettingsPrivacy from './screen/settings/SettingsPrivacy';
import DrawerList from './screen/wallets/drawerList';
import DrawerList from './screen/wallets/DrawerList';
import LdkViewLogs from './screen/wallets/ldkViewLogs';
import PaymentCode from './screen/wallets/paymentCode';
import PaymentCodesList from './screen/wallets/paymentCodesList';
import { BlueStorageContext } from './blue_modules/storage-context';
const WalletsStack = createNativeStackNavigator();
@ -359,7 +360,10 @@ const ScanQRCodeRoot = () => (
const UnlockWithScreenStack = createNativeStackNavigator();
const UnlockWithScreenRoot = () => (
<UnlockWithScreenStack.Navigator id="UnlockWithScreenRoot" screenOptions={{ headerShown: false, statusBarStyle: 'auto' }}>
<UnlockWithScreenStack.Navigator
id="UnlockWithScreenRoot"
screenOptions={{ headerShown: false, statusBarStyle: 'auto', autoHideHomeIndicator: true }}
>
<UnlockWithScreenStack.Screen name="UnlockWithScreen" component={UnlockWith} />
</UnlockWithScreenStack.Navigator>
);
@ -379,12 +383,17 @@ const ReorderWalletsStackRoot = () => {
);
};
const DrawerListContent = (props: any) => {
return <DrawerList {...props} />;
};
const Drawer = createDrawerNavigator();
const DrawerRoot = () => {
const dimensions = useWindowDimensions();
const isLargeScreen = useMemo(() => {
return Platform.OS === 'android' ? isTablet() : (dimensions.width >= Dimensions.get('screen').width / 2 && isTablet()) || isDesktop;
}, [dimensions.width]);
const drawerStyle: DrawerNavigationOptions = useMemo(
() => ({
drawerPosition: I18nManager.isRTL ? 'right' : 'left',
@ -395,7 +404,7 @@ const DrawerRoot = () => {
);
return (
<Drawer.Navigator screenOptions={drawerStyle} drawerContent={DrawerList}>
<Drawer.Navigator screenOptions={drawerStyle} drawerContent={DrawerListContent}>
<Drawer.Screen
name="Navigation"
component={Navigation}
@ -481,25 +490,22 @@ const LappBrowserStackRoot = () => {
};
const InitStack = createNativeStackNavigator();
const InitRoot = () => (
<InitStack.Navigator initialRouteName="UnlockWithScreenRoot">
const InitRoot = () => {
const { walletsInitialized } = useContext(BlueStorageContext);
return (
<InitStack.Navigator initialRouteName="UnlockWithScreenRoot" screenOptions={{ animationTypeForReplace: 'push' }}>
{!walletsInitialized ? (
<InitStack.Screen name="UnlockWithScreenRoot" component={UnlockWithScreenRoot} options={{ headerShown: false }} />
<InitStack.Screen
name="ReorderWallets"
component={ReorderWalletsStackRoot}
options={{
headerShown: false,
gestureEnabled: false,
presentation: 'modal',
}}
/>
) : (
<InitStack.Screen
name={isHandset ? 'Navigation' : 'DrawerRoot'}
component={isHandset ? Navigation : DrawerRoot}
options={{ headerShown: false, animationTypeForReplace: 'push' }}
options={{ headerShown: false }}
/>
)}
</InitStack.Navigator>
);
);
};
export type ViewEditMultisigCosignersStackParamsList = {
ViewEditMultisigCosigners: { walletId: string };
@ -594,7 +600,7 @@ const Navigation = () => {
<RootStack.Screen
name="ViewEditMultisigCosignersRoot"
component={ViewEditMultisigCosignersRoot}
options={{ ...NavigationDefaultOptions, ...StatusBarLightOptions }}
options={{ ...NavigationDefaultOptions, ...StatusBarLightOptions, gestureEnabled: false, fullScreenGestureEnabled: false }}
/>
<RootStack.Screen
name="WalletXpubRoot"
@ -623,6 +629,15 @@ const Navigation = () => {
/>
<RootStack.Screen name="PaymentCodeRoot" component={PaymentCodeStackRoot} options={NavigationDefaultOptions} />
<InitStack.Screen
name="ReorderWallets"
component={ReorderWalletsStackRoot}
options={{
headerShown: false,
gestureEnabled: false,
presentation: 'modal',
}}
/>
</RootStack.Navigator>
);
};

View file

@ -23,6 +23,6 @@ where `76ed479` is a latest commit in this version. replace the version as well.
* test the build on a real device. We have accounts with browserstack where you can do so.
* its imperative that you run selftest and it gives you OK. note which build you are testing
* go to appcenter.ms, find this exact build under `master` builds, and press `Distribute` -> `Store` -> `Production`.
in `Release notes` write the release, this field is to smaller than iOS, so you need to keep it bellow 500 characters.
* now just wait till appcenter displays a message that it is succesfully distributed
in `Release notes` write the release, this field is smaller than iOS, so you need to keep it bellow 500 characters.
* now just wait till appcenter displays a message that it is successfully distributed
* noice!

View file

@ -4,7 +4,6 @@ export const startIfNotStarted = jest.fn(async (key, value, callback) => {
return 666;
});
export const get = jest.fn();
export const post = jest.fn();
export const deleteMock = jest.fn();

View file

@ -79,7 +79,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "6.5.8"
versionName "6.6.0"
testBuildType System.getProperty('testBuildType', 'debug')
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}

View file

@ -40,7 +40,6 @@ A.ENUM = {
CREATED_WALLET: 'CREATED_WALLET',
CREATED_LIGHTNING_WALLET: 'CREATED_LIGHTNING_WALLET',
APP_UNSUSPENDED: 'APP_UNSUSPENDED',
NAVIGATED_TO_WALLETS_HODLHODL: 'NAVIGATED_TO_WALLETS_HODLHODL',
};
A.setOptOut = value => {

View file

@ -5,8 +5,8 @@ import { getApplicationName, getVersion, getSystemName, getSystemVersion, hasGms
import AsyncStorage from '@react-native-async-storage/async-storage';
import loc from '../loc';
import { requestNotifications } from 'react-native-permissions';
import PushNotification from 'react-native-push-notification';
const PushNotification = require('react-native-push-notification');
const constants = require('./constants');
const PUSH_TOKEN = 'PUSH_TOKEN';
const GROUNDCONTROL_BASE_URI = 'GROUNDCONTROL_BASE_URI';
@ -245,7 +245,9 @@ function Notifications(props) {
},
}),
);
Notifications.abandonPermissions();
console.log('Abandoning notifications Permissions...');
PushNotification.abandonPermissions();
console.log('Abandoned notifications Permissions...');
return postCall;
};
@ -324,6 +326,9 @@ function Notifications(props) {
},
}),
);
console.log('Abandoning notifications Permissions...');
PushNotification.abandonPermissions();
console.log('Abandoned notifications Permissions...');
} catch (_) {}
};

View file

@ -34,6 +34,12 @@ export const BlueStorageProvider = ({ children }) => {
BlueElectrum.isDisabled().then(setIsElectrumDisabled);
}, []);
useEffect(() => {
if (walletsInitialized) {
BlueElectrum.connectMain();
}
}, [walletsInitialized]);
useEffect(() => {
console.log(`Privacy blur: ${isPrivacyBlurEnabled}`);
if (!isPrivacyBlurEnabled) {
@ -211,15 +217,11 @@ export const BlueStorageProvider = ({ children }) => {
const startAndDecrypt = BlueApp.startAndDecrypt;
const encryptStorage = BlueApp.encryptStorage;
const sleep = BlueApp.sleep;
const setHodlHodlApiKey = BlueApp.setHodlHodlApiKey;
const getHodlHodlApiKey = BlueApp.getHodlHodlApiKey;
const createFakeStorage = BlueApp.createFakeStorage;
const decryptStorage = BlueApp.decryptStorage;
const isPasswordInUse = BlueApp.isPasswordInUse;
const cachedPassword = BlueApp.cachedPassword;
const setIsAdvancedModeEnabled = BlueApp.setIsAdvancedModeEnabled;
const getHodlHodlSignatureKey = BlueApp.getHodlHodlSignatureKey;
const addHodlHodlContract = BlueApp.addHodlHodlContract;
const setDoNotTrack = BlueApp.setDoNotTrack;
const isDoNotTrackEnabled = BlueApp.isDoNotTrackEnabled;
const getItem = BlueApp.getItem;
@ -247,20 +249,16 @@ export const BlueStorageProvider = ({ children }) => {
fetchWalletTransactions,
fetchAndSaveWalletTransactions,
isStorageEncrypted,
getHodlHodlSignatureKey,
encryptStorage,
startAndDecrypt,
cachedPassword,
addHodlHodlContract,
getBalance,
walletsInitialized,
setWalletsInitialized,
refreshAllWalletTransactions,
sleep,
setHodlHodlApiKey,
createFakeStorage,
resetWallets,
getHodlHodlApiKey,
decryptStorage,
isPasswordInUse,
setIsAdvancedModeEnabled,

View file

@ -1,8 +1,6 @@
import { Linking, Alert } from 'react-native';
import { getSystemName } from 'react-native-device-info';
import loc from '../loc';
const isDesktop: boolean = getSystemName() === 'Mac OS X';
import { isDesktop } from '../blue_modules/environment';
export const openPrivacyDesktopSettings = () => {
if (isDesktop) {

View file

@ -97,7 +97,7 @@ export class HDSegwitBech32Transaction {
/**
* Checks that tx belongs to a wallet and also
* tx value is < 0, which means its a spending transaction
* definately initiated by us, can be RBF'ed.
* definitely initiated by us, can be RBF'ed.
*
* @returns {Promise<boolean>}
*/

View file

@ -75,7 +75,7 @@ export default class PayjoinTransaction {
if (result === '') {
// TODO: Improve the wording of this error message
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
presentAlert({ message: 'Something was wrong with the payjoin transaction, the original transaction sucessfully broadcast.' });
presentAlert({ message: 'Something was wrong with the payjoin transaction, the original transaction successfully broadcast.' });
}
});
}

View file

@ -167,10 +167,6 @@ export class AbstractWallet {
return false;
}
allowHodlHodlTrading(): boolean {
return false;
}
allowPayJoin(): boolean {
return false;
}

View file

@ -175,10 +175,6 @@ export class HDAezeedWallet extends AbstractHDElectrumWallet {
return true;
}
allowHodlHodlTrading() {
return true;
}
allowRBF() {
return true;
}

View file

@ -15,10 +15,6 @@ export class HDSegwitBech32Wallet extends AbstractHDElectrumWallet {
return true;
}
allowHodlHodlTrading() {
return true;
}
allowRBF() {
return true;
}

View file

@ -31,10 +31,6 @@ export class HDSegwitP2SHWallet extends AbstractHDElectrumWallet {
return true;
}
allowHodlHodlTrading() {
return true;
}
allowMasterFingerprint() {
return true;
}

View file

@ -235,10 +235,6 @@ export class WatchOnlyWallet extends LegacyWallet {
return this.getAddress() === address;
}
allowHodlHodlTrading() {
return this.isHd();
}
allowMasterFingerprint() {
return this.getSecret().startsWith('zpub');
}

View file

@ -28,6 +28,7 @@ interface BottomModalProps {
avoidKeyboard?: boolean;
allowBackdropPress?: boolean;
isVisible: boolean;
coverScreen?: boolean;
}
const BottomModal: React.FC<BottomModalProps> = ({
@ -40,6 +41,7 @@ const BottomModal: React.FC<BottomModalProps> = ({
isVisible,
avoidKeyboard = false,
allowBackdropPress = true,
coverScreen = true,
...props
}) => {
const { height: valueWindowHeight, width: valueWindowWidth } = useWindowDimensions();
@ -60,6 +62,7 @@ const BottomModal: React.FC<BottomModalProps> = ({
onBackButtonPress={handleBackButtonPress}
onBackdropPress={handleBackdropPress}
isVisible={isVisible}
coverScreen={coverScreen}
{...props}
accessibilityViewIsModal
avoidKeyboard={avoidKeyboard}

View file

@ -60,8 +60,8 @@ const styles = StyleSheet.create({
button: {
borderWidth: 0.7,
minHeight: 45,
height: 45,
maxHeight: 45,
height: 48,
maxHeight: 48,
borderRadius: 25,
justifyContent: 'center',
alignItems: 'center',
@ -76,7 +76,7 @@ const styles = StyleSheet.create({
text: {
marginHorizontal: 8,
fontSize: 16,
fontWeight: '500',
fontWeight: '600',
},
});

View file

@ -1,9 +1,11 @@
import React from 'react';
import React, { useRef } from 'react';
import { View, StyleSheet, Text, TouchableOpacity, ActivityIndicator } from 'react-native';
import { View, StyleSheet, Text, TouchableOpacity, ActivityIndicator, findNodeHandle } from 'react-native';
import PropTypes from 'prop-types';
import { Icon } from 'react-native-elements';
import { useTheme } from './themes';
import ActionSheetOptions from '../screen/ActionSheet.common';
import ActionSheet from '../screen/ActionSheet';
export const MultipleStepsListItemDashType = Object.freeze({ none: 0, top: 1, bottom: 2, topAndBottom: 3 });
export const MultipleStepsListItemButtohType = Object.freeze({ partial: 0, full: 1 });
@ -15,6 +17,8 @@ const MultipleStepsListItem = props => {
circledText = '',
leftText = '',
checked = false,
useActionSheet = false,
actionSheetOptions = null, // Default to null or appropriate default
} = props;
const stylesHook = StyleSheet.create({
provideKeyButton: {
@ -36,6 +40,29 @@ const MultipleStepsListItem = props => {
color: colors.alternativeTextColor,
},
});
const selfRef = useRef(null); // Create a ref for the component itself
const handleOnPressForActionSheet = () => {
if (useActionSheet && actionSheetOptions) {
// Clone options to modify them
let modifiedOptions = { ...actionSheetOptions };
// Use 'selfRef' if the component uses its own ref, or 'ref' if it's using forwarded ref
const anchor = findNodeHandle(selfRef.current);
if (anchor) {
// Attach the anchor only if it exists
modifiedOptions = { ...modifiedOptions, anchor };
}
ActionSheet.showActionSheetWithOptions(modifiedOptions, buttonIndex => {
// Call the original onPress function, if provided, and not cancelled
if (buttonIndex !== -1 && props.button.onPress) {
props.button.onPress(buttonIndex);
}
});
}
};
const renderDashes = () => {
switch (dashes) {
@ -106,11 +133,12 @@ const MultipleStepsListItem = props => {
{props.button.buttonType === undefined ||
(props.button.buttonType === MultipleStepsListItemButtohType.full && (
<TouchableOpacity
ref={useActionSheet ? selfRef : null}
testID={props.button.testID}
accessibilityRole="button"
disabled={props.button.disabled}
style={[styles.provideKeyButton, stylesHook.provideKeyButton, buttonOpacity]}
onPress={props.button.onPress}
onPress={useActionSheet ? handleOnPressForActionSheet : props.button.onPress}
>
<Text style={[styles.provideKeyButtonText, stylesHook.provideKeyButtonText]}>{props.button.text}</Text>
</TouchableOpacity>
@ -157,6 +185,8 @@ MultipleStepsListItem.propTypes = {
checked: PropTypes.bool,
leftText: PropTypes.string,
showActivityIndicator: PropTypes.bool,
useActionSheet: PropTypes.bool,
actionSheetOptions: PropTypes.shape(ActionSheetOptions),
dashes: PropTypes.number,
button: PropTypes.shape({
text: PropTypes.string,

View file

@ -0,0 +1,64 @@
import React, { forwardRef } from 'react';
import { useTheme } from './themes';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { Icon } from 'react-native-elements';
type IconProps = {
name: string;
type: string;
color: string;
};
type SecondButtonProps = {
backgroundColor?: string;
disabled?: boolean;
icon?: IconProps;
title?: string;
};
export const SecondButton = forwardRef<TouchableOpacity, SecondButtonProps>((props, ref) => {
const { colors } = useTheme();
let backgroundColor = props.backgroundColor ? props.backgroundColor : colors.buttonGrayBackgroundColor;
let fontColor = colors.secondButtonTextColor;
if (props.disabled === true) {
backgroundColor = colors.buttonDisabledBackgroundColor;
fontColor = colors.buttonDisabledTextColor;
}
return (
<TouchableOpacity accessibilityRole="button" style={[styles.button, { backgroundColor }]} {...props} ref={ref}>
<View style={styles.view}>
{props.icon && <Icon name={props.icon.name} type={props.icon.type} color={props.icon.color} />}
{props.title && <Text style={[styles.text, { color: fontColor }]}>{props.title}</Text>}
</View>
</TouchableOpacity>
);
});
const styles = StyleSheet.create({
button: {
minHeight: 45,
height: 48,
maxHeight: 48,
borderRadius: 7,
justifyContent: 'center',
alignItems: 'center',
paddingHorizontal: 16,
flexGrow: 1,
},
content: {
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
},
text: {
marginHorizontal: 8,
fontSize: 16,
fontWeight: '600',
},
view: {
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
},
});

View file

@ -1,13 +1,13 @@
import React, { useRef, useEffect, forwardRef } from 'react';
import PropTypes from 'prop-types';
import { TouchableOpacity } from 'react-native';
import { Pressable } from 'react-native';
import showPopupMenu from '../blue_modules/showPopupMenu';
const ToolTipMenu = (props, ref) => {
const menuRef = useRef();
const disabled = props.disabled ?? false;
const isMenuPrimaryAction = props.isMenuPrimaryAction ?? false;
const enableAndroidRipple = props.enableAndroidRipple ?? true;
const buttonStyle = props.buttonStyle ?? {};
const handleToolTipSelection = selection => {
props.onPressMenuItem(selection.id);
@ -39,19 +39,21 @@ const ToolTipMenu = (props, ref) => {
};
return (
<TouchableOpacity
style={buttonStyle}
<Pressable
{...(enableAndroidRipple ? { android_ripple: { color: 'lightgrey' } } : {})}
ref={menuRef}
disabled={disabled}
style={buttonStyle}
{...(isMenuPrimaryAction ? { onPress: showMenu } : { onPress: props.onPress, onLongPress: showMenu })}
>
{props.children}
</TouchableOpacity>
</Pressable>
);
};
export default forwardRef(ToolTipMenu);
ToolTipMenu.propTypes = {
enableAndroidRipple: PropTypes.bool,
actions: PropTypes.object.isRequired,
children: PropTypes.node.isRequired,
onPressMenuItem: PropTypes.func.isRequired,

View file

@ -55,10 +55,9 @@ const ToolTipMenu = (props, ref) => {
menuTitle,
menuItems,
}}
style={buttonStyle}
>
{props.onPress ? (
<TouchableOpacity accessibilityRole="button" onPress={props.onPress}>
<TouchableOpacity accessibilityRole="button" style={buttonStyle} onPress={props.onPress}>
{props.children}
</TouchableOpacity>
) : (

View file

@ -166,6 +166,7 @@ const TransactionsNavigationHeader: React.FC<TransactionsNavigationHeaderProps>
{wallet.getLabel()}
</Text>
<ToolTipMenu
enableAndroidRipple={false}
onPress={changeWalletBalanceUnit}
ref={menuRef}
title={`${loc.wallets.balance} (${

View file

@ -14,6 +14,7 @@ export const BlueDefaultTheme = {
borderTopColor: 'rgba(0, 0, 0, 0.1)',
buttonBackgroundColor: '#ccddf9',
buttonTextColor: '#0c2550',
secondButtonTextColor: '#50555C',
buttonAlternativeTextColor: '#2f5fb3',
buttonDisabledBackgroundColor: '#eef0f4',
buttonDisabledTextColor: '#9aa0aa',
@ -22,6 +23,7 @@ export const BlueDefaultTheme = {
alternativeTextColor: '#9aa0aa',
alternativeTextColor2: '#0f5cc0',
buttonBlueBackgroundColor: '#ccddf9',
buttonGrayBackgroundColor: '#EEEEEE',
incomingBackgroundColor: '#d2f8d6',
incomingForegroundColor: '#37c0a1',
outgoingBackgroundColor: '#f8d2d2',

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -83,8 +83,8 @@
B4A29A322B55C990002A67DF /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B468CC34D5B41F3950078EF /* libsqlite3.0.tbd */; };
B4A29A352B55C990002A67DF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6DF25A9E249DB97E001D06F5 /* LaunchScreen.storyboard */; };
B4A29A372B55C990002A67DF /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
B4A29A3A2B55C990002A67DF /* BlueWalletWatch.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = B40D4E30225841EC00428FCC /* BlueWalletWatch.app */; };
B4A29A3C2B55C990002A67DF /* Stickers.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6D2A6461258BA92C0092292B /* Stickers.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
B4A29A3A2B55C990002A67DF /* BlueWalletWatch.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = B40D4E30225841EC00428FCC /* BlueWalletWatch.app */; platformFilter = ios; };
B4A29A3C2B55C990002A67DF /* Stickers.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6D2A6461258BA92C0092292B /* Stickers.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
B4A29A3D2B55C990002A67DF /* WidgetsExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6DD4109C266CADF10087DE03 /* WidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
B4AB21072B61D8CA0080440C /* SplashScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AB21062B61D8CA0080440C /* SplashScreen.swift */; };
B4AB21092B61DC3F0080440C /* SplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = B4AB21082B61DC3F0080440C /* SplashScreen.m */; };
@ -92,7 +92,7 @@
B4AB225E2B02AD12001F4328 /* XMLParserDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AB225C2B02AD12001F4328 /* XMLParserDelegate.swift */; };
B4EE583C226703320003363C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B40D4E35225841ED00428FCC /* Assets.xcassets */; };
C59F90CE0D04D3E4BB39BC5D /* libPods-BlueWalletUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F02C2F7CA3591E4E0B06EBA /* libPods-BlueWalletUITests.a */; };
C978A716948AB7DEC5B6F677 /* (null) in Frameworks */ = {isa = PBXBuildFile; };
C978A716948AB7DEC5B6F677 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
E5D4794B26781FC0007838C1 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = 6DD410AD266CAF1F0087DE03 /* fiatUnits.json */; };
E5D4794C26781FC1007838C1 /* fiatUnits.json in Resources */ = {isa = PBXBuildFile; fileRef = 6DD410AD266CAF1F0087DE03 /* fiatUnits.json */; };
/* End PBXBuildFile section */
@ -407,7 +407,7 @@
files = (
782F075B5DD048449E2DECE9 /* libz.tbd in Frameworks */,
764B49B1420D4AEB8109BF62 /* libsqlite3.0.tbd in Frameworks */,
C978A716948AB7DEC5B6F677 /* (null) in Frameworks */,
C978A716948AB7DEC5B6F677 /* BuildFile in Frameworks */,
773E382FE62E836172AAB98B /* libPods-BlueWallet.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1031,7 +1031,7 @@
);
mainGroup = 83CBB9F61A601CBA00E9B192;
packageReferences = (
6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode" */,
6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode.git" */,
B41B76832B66B2FF002C48D5 /* XCRemoteSwiftPackageReference "bugsnag-cocoa" */,
);
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
@ -1536,6 +1536,7 @@
};
B4A29A222B55C990002A67DF /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
platformFilter = ios;
target = B40D4E2F225841EC00428FCC /* BlueWalletWatch */;
targetProxy = B4A29A232B55C990002A67DF /* PBXContainerItemProxy */;
};
@ -1545,6 +1546,7 @@
};
B4A29A262B55C990002A67DF /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
platformFilter = ios;
target = 6D2A6460258BA92C0092292B /* Stickers */;
targetProxy = B4A29A272B55C990002A67DF /* PBXContainerItemProxy */;
};
@ -1600,7 +1602,7 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = A7W54YZ4WU;
@ -1625,7 +1627,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1660,7 +1662,7 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = A7W54YZ4WU;
@ -1680,7 +1682,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -1712,12 +1714,11 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1703112830;
CURRENT_PROJECT_VERSION = 1703112840;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
@ -1730,14 +1731,14 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development io.bluewallet.bluewallet.Stickers";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore io.bluewallet.bluewallet.Stickers";
SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
@ -1755,13 +1756,12 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1703112830;
CURRENT_PROJECT_VERSION = 1703112840;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
@ -1774,7 +1774,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.Stickers;
@ -1799,14 +1799,13 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1703112830;
CURRENT_PROJECT_VERSION = 1703112840;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
@ -1825,7 +1824,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
@ -1855,7 +1854,6 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)";
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
@ -1863,7 +1861,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1703112830;
CURRENT_PROJECT_VERSION = 1703112840;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
@ -1882,7 +1880,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.MarketWidget;
@ -2035,7 +2033,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
@ -2052,7 +2050,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
@ -2085,7 +2083,7 @@
"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
@ -2102,7 +2100,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch.extension;
@ -2134,7 +2132,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
@ -2147,7 +2145,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
@ -2182,7 +2180,7 @@
"CODE_SIGN_IDENTITY[sdk=watchos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
@ -2195,7 +2193,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
MTL_FAST_MATH = YES;
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
PRODUCT_BUNDLE_IDENTIFIER = io.bluewallet.bluewallet.watch;
@ -2223,11 +2221,10 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1703112830;
CURRENT_PROJECT_VERSION = 1703112840;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = A7W54YZ4WU;
@ -2274,12 +2271,11 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1703112830;
CURRENT_PROJECT_VERSION = 1703112840;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = A7W54YZ4WU;
@ -2318,7 +2314,7 @@
CODE_SIGN_ENTITLEMENTS = BlueWallet/BlueWallet.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = A7W54YZ4WU;
ENABLE_BITCODE = NO;
@ -2342,7 +2338,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -2372,7 +2368,7 @@
CODE_SIGN_ENTITLEMENTS = BlueWallet/BlueWalletRelease.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1703115000;
CURRENT_PROJECT_VERSION = 1703116000;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = A7W54YZ4WU;
ENABLE_BITCODE = NO;
@ -2391,7 +2387,7 @@
"$(SDKROOT)/System/iOSSupport/usr/lib/swift",
"$(inherited)",
);
MARKETING_VERSION = 6.5.8;
MARKETING_VERSION = 6.6.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@ -2489,7 +2485,7 @@
/* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode" */ = {
6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode.git" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/EFPrefix/EFQRCode.git";
requirement = {
@ -2510,7 +2506,7 @@
/* Begin XCSwiftPackageProductDependency section */
6DFC806F24EA0B6C007B8700 /* EFQRCode */ = {
isa = XCSwiftPackageProductDependency;
package = 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode" */;
package = 6DFC806E24EA0B6C007B8700 /* XCRemoteSwiftPackageReference "EFQRCode.git" */;
productName = EFQRCode;
};
B41B76842B66B2FF002C48D5 /* Bugsnag */ = {

View file

@ -48,7 +48,7 @@
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Release"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"

View file

@ -20,7 +20,17 @@
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Set the appType based on the current platform
#if TARGET_OS_MACCATALYST
BugsnagConfiguration *config = [BugsnagConfiguration loadConfig];
config.appType = @"macOS";
// Start Bugsnag with the configuration
[Bugsnag startWithConfiguration:config];
#else
[Bugsnag start];
#endif
[self copyDeviceUID];
[[NSUserDefaults standardUserDefaults] addObserver:self
@ -134,8 +144,10 @@
[builder removeMenuForIdentifier:UIMenuToolbar];
// File -> Add Wallet (Command + A)
UIKeyCommand *addWalletCommand = [UIKeyCommand keyCommandWithInput:@"A" modifierFlags:UIKeyModifierCommand action:@selector(addWalletAction:)];
[addWalletCommand setTitle:@"Add Wallet"];
UIKeyCommand *addWalletCommand = [UIKeyCommand keyCommandWithInput:@"A"
modifierFlags:UIKeyModifierCommand | UIKeyModifierShift
action:@selector(addWalletAction:)];
[addWalletCommand setTitle:@"Add Wallet"];
// File -> Import Wallet
UIKeyCommand *importWalletCommand = [UIKeyCommand keyCommandWithInput:@"I" modifierFlags:UIKeyModifierCommand action:@selector(importWalletAction:)];

View file

@ -77,9 +77,6 @@ post_install do |installer|
installer,
:mac_catalyst_enabled => true
)
pod 'Bugsnag'
plugin 'cocoapods-bugsnag'
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'

View file

@ -1,6 +1,6 @@
PODS:
- boost (1.76.0)
- BugsnagReactNative (7.22.5):
- BugsnagReactNative (7.22.6):
- React-Core
- BVLinearGradient (2.8.3):
- React-Core
@ -21,8 +21,8 @@ PODS:
- hermes-engine/Pre-built (0.72.11)
- libevent (2.1.12)
- lottie-ios (4.4.1)
- lottie-react-native (6.6.0):
- lottie-ios (~> 4.4.0)
- lottie-react-native (6.7.0):
- lottie-ios (~> 4.4.1)
- React-Core
- PasscodeAuth (1.0.0):
- React
@ -336,7 +336,7 @@ PODS:
- React-Core
- react-native-idle-timer (2.1.6):
- React-Core
- react-native-image-picker (7.1.0):
- react-native-image-picker (7.1.1):
- RCT-Folly (= 2021.07.22.00)
- React-Core
- react-native-ios-context-menu (1.15.3):
@ -469,7 +469,7 @@ PODS:
- React-perflogger (= 0.72.11)
- ReactNativeCameraKit (13.0.0):
- React-Core
- RealmJS (12.6.0):
- RealmJS (12.6.2):
- React
- rn-ldk (0.8.4):
- React-Core
@ -504,7 +504,7 @@ PODS:
- React-Core
- RNReactNativeHapticFeedback (2.2.0):
- React-Core
- RNReanimated (3.7.2):
- RNReanimated (3.8.0):
- RCT-Folly (= 2021.07.22.00)
- React-Core
- ReactCommon/turbomodule/core
@ -525,7 +525,6 @@ PODS:
DEPENDENCIES:
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- Bugsnag
- "BugsnagReactNative (from `../node_modules/@bugsnag/react-native`)"
- BVLinearGradient (from `../node_modules/react-native-linear-gradient`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
@ -783,7 +782,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: 7dcd2de282d72e344012f7d6564d024930a6a440
BugsnagReactNative: 2f3550f37f30b9701e3517bf17743b676b5a2fb1
BugsnagReactNative: 366a7e11c0bcf34842e54f40b15dd937cb267aa7
BVLinearGradient: 880f91a7854faff2df62518f0281afb1c60d49a3
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
@ -794,7 +793,7 @@ SPEC CHECKSUMS:
hermes-engine: c22b4cc0bb1d1603b9e4faf83732be227baa55bc
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
lottie-ios: e047b1d2e6239b787cc5e9755b988869cf190494
lottie-react-native: 00ac19344296ae018260aabd14d6b36dd816b0e2
lottie-react-native: e3205322282d72e23efb3bff3287d0bd16fb1b01
PasscodeAuth: 3e88093ff46c31a952d8b36c488240de980517be
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
RCTRequired: 4a524af1769a10608bf423aa8c0804b10f84aec8
@ -816,7 +815,7 @@ SPEC CHECKSUMS:
react-native-bw-file-access: b232fd1d902521ca046f3fc5990ab1465e1878d7
react-native-document-picker: 3599b238843369026201d2ef466df53f77ae0452
react-native-idle-timer: f7f651542b39dce9b9473e4578cb64a255075f17
react-native-image-picker: 5e076db26cd81660cfb6db5bcf517cfa12054d45
react-native-image-picker: 76bf9cf742bebbaac4ee4c0385be374c034a556c
react-native-ios-context-menu: e529171ba760a1af7f2ef0729f5a7f4d226171c5
react-native-qrcode-local-image: 35ccb306e4265bc5545f813e54cc830b5d75bcfc
react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846
@ -843,7 +842,7 @@ SPEC CHECKSUMS:
React-utils: cc09672a1517d768cfc545f245c78a1cae87fd49
ReactCommon: cadee954951b13f7550766c0074dd38af2da3575
ReactNativeCameraKit: 9d46a5d7dd544ca64aa9c03c150d2348faf437eb
RealmJS: a62dc7a1f94b888fe9e8712cd650167ad97dc636
RealmJS: 385df5ee940d96f1de26b1dab153e325633d3052
rn-ldk: 0d8749d98cc5ce67302a32831818c116b67f7643
RNCAsyncStorage: 10591b9e0a91eaffee14e69b3721009759235125
RNCClipboard: 60fed4b71560d7bfe40e9d35dea9762b024da86d
@ -860,7 +859,7 @@ SPEC CHECKSUMS:
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
RNRate: ef3bcff84f39bb1d1e41c5593d3eea4aab2bd73a
RNReactNativeHapticFeedback: ec56a5f81c3941206fd85625fa669ffc7b4545f9
RNReanimated: ab1295f59541cb26000d394b4b4aea72cb7ca448
RNReanimated: 5afba582037b0dae040a5f927dec7fdd18e430c3
RNScreens: 3c5b9f4a9dcde752466854b6109b79c0e205dad3
RNShare: 859ff710211285676b0bcedd156c12437ea1d564
RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396
@ -869,6 +868,6 @@ SPEC CHECKSUMS:
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
Yoga: 76b2d5677fc9694bae53c80d0cccfc55719064a3
PODFILE CHECKSUM: e0fda52578c203cfa975067c3570c97082471d84
PODFILE CHECKSUM: d43800c8d806b1d14ba325886c4b71fff2938408
COCOAPODS: 1.14.3

View file

@ -15,8 +15,6 @@
"seed": "عبارة الاسترداد",
"success": "نجاح",
"wallet_key": "مفتاح المحفظة",
"file_saved": "تم حفظ الملف {filePath} في {destination}.",
"downloads_folder": "مجلد التنزيلات",
"close": "اغلاق",
"change_input_currency": "تغيير عملة الادخال",
"refresh": "تحديث",
@ -431,7 +429,6 @@
"no_ln_wallet_error": "قبل دفع البرقية، يجب عليك أولاً إضافة محفظة برق.",
"looks_like_bip38": "يبدوا ان هذا مفتاح خاص محمي بكلمة مرور (BIP38).",
"reorder_title": "إعادة ترتيب المحافظ",
"reorder_instructions": "اضغط باستمرار على اي محفظة لتحريكها عبر القائمة",
"please_continue_scanning": "الرجاء متابعة الفحص.",
"select_no_bitcoin": "لا توجد محافظ بتكوين متاحة حاليًا.",
"select_no_bitcoin_exp": "تحتاج إلى محفظة بتكوين لإعادة تعبئة محافظ البرق. يُرجى إنشاء محفظة أو استيراد واحدة.",

View file

@ -14,10 +14,7 @@
"save": "Захаваць",
"seed": "Семя",
"success": "Посьпех",
"wallet_key": "Ключ ад кашалька",
"invalid_animated_qr_code_fragment": "Несапраўдны фрагмент аніміраванага QR-коду. Калі ласка, паспрабуйце яшчэ раз.",
"file_saved": "Файл {filePath} быў захаваны ў вашым месцы {destination}.",
"downloads_folder": "Папка Запамповак"
"wallet_key": "Ключ ад кашалька"
},
"alert": {
"default": "Папярэджанне"
@ -46,7 +43,6 @@
"no_channels": "Няма каналаў",
"close_channel": "Зачыніць канал",
"new_channel": "Новы канал",
"errorInvoiceExpired": "Тэрмін дзеяння рахункі скончыўся",
"expired": "Скончыўся",
"open_channel": "Адкрыць Канал"
},

View file

@ -13,9 +13,7 @@
"save": "Запази",
"seed": "Сиид",
"success": "Успех",
"wallet_key": "Парола на портфейла",
"file_saved": "Файлът {filePath} беше запазен в {destination}.",
"downloads_folder": "Папка с изтегляния"
"wallet_key": "Парола на портфейла"
},
"azteco": {
"codeIs": "Цода на вашият ваучър е",

View file

@ -2,8 +2,10 @@
"_": {
"bad_password": "رزم زبال نؽ. زه نۊ تفره کو.",
"cancel": "لقو",
"continue": "ادامه",
"clipboard": "ویرگه",
"enter_password": "رزمته بزن",
"of": "{number} زه {total}",
"ok": "هری",
"yes": "هری",
"no": "نه",
@ -11,22 +13,29 @@
"success": "سر ٱنجوم گرهڌ",
"wallet_key": "کیلیت کیف پیل",
"close": "بستن",
"change_input_currency": "آلشتکاری ارز وۊرۊڌی",
"refresh": "وانۊ کردن",
"more": "بیشتر",
"pick_image": "پسند شؽوات ز شؽوات مال",
"pick_file": "پسند فایل"
"pick_file": "پسند فایل",
"enter_amount": "مقدار نه بزن",
"qr_custom_input_button": "سی زیڌن وۊرۊڌی سفارشی، 10 کرت ریس بزن"
},
"alert": {
"default": "هوشتار"
},
"azteco": {
"codeIs": "کوڌ تخفیف ایسا",
"redeem": "ازاف کردن وه کیف پیل",
"success": "سر ٱنجوم گرهڌ"
},
"entropy": {
"save": "زفت کردن"
"save": "زفت کردن",
"title": "آنتروپی",
"undo": "وورگشتن به هالت پؽشی"
},
"errors": {
"broadcast": "انتشار ٱنجوم نوابی.",
"error": "ختا",
"network": "ختا شبکه"
},
@ -35,16 +44,25 @@
"inactive": "قیر فعال",
"channels": "تورگیل",
"no_channels": "بؽ تورگه",
"claim_balance": "تسویه مۉجۊڌی {balance}",
"close_channel": "بستن تورگه",
"new_channel": "تورگه نۊ",
"errorInvoiceExpired": "سۊرت هساو مونقزی وابیڌه.",
"force_close_channel": "بستن اجباری تورگه؟",
"expired": "مونقزی وابیڌه",
"node_alias": "نوم موستعار گره",
"payButton": "پرداخت",
"payment": "پرداخت",
"placeholder": "سۊرت هساو یا آدرس",
"open_channel": "گۊشیڌن تورگه",
"are_you_sure_open_channel": "زه گۊشیڌن ای تورگه اتمینۉ داری؟",
"potentialFee": "کارمزد ائتمالی: {fee}",
"remote_host": "میزبۉ ره دیر",
"refill": "پور کردن",
"reconnect_peer": "منپیز دوارته به همتا",
"refill_create": "سی ادامه، یه کیف پیل بیت کوین سی پور کردن وورکل کۊنین.",
"refill_external": "پور کردن وا کیف پیل خارجی",
"refill_lnd_balance": "پور کردن موجۊڌی کیف پیل لایتنینگ",
"refill_lnd_balance": "پور کردن مۉجۊڌی کیف پیل لایتنینگ",
"title": "دؽوۉداری دارایی",
"can_send": "تره فشنه",
"can_receive": "تره گره",
@ -54,45 +72,76 @@
"additional_info": "دۉسمندیا بیشتر",
"for": "سی:",
"lightning_invoice": "سۊرت هساو لایتنینگ",
"open_direct_channel": "تورگه موستقیمی وا ای گره واز کو:"
"open_direct_channel": "تورگه موستقیمی وا ای گره بوگوش:",
"sats": "ساتۊشی پرداخت کو.",
"wasnt_paid_and_expired": "ای سۊرت هساو پرداخت نوابیڌه ۉ مونقزی وابیڌه."
},
"plausibledeniability": {
"create_fake_storage": "وورکل جاگه رزم ناڌه وابیڌه سی زفت کردن",
"create_password": "یه رزم وورکل کۊنین",
"password_should_not_match": "رزم هونی به کار اروه. یه رزم دیری نه به کار بگر.",
"passwords_do_not_match": "رزمات جۊر یک نؽڌن، زه نۊ امتهانسۉ کو.",
"retype_password": "رزمنه زه نۊ هؽل کو",
"success": "سر ٱنجوم گرهڌ"
},
"pleasebackup": {
"ok": "خا، هو ناْ هؽل کردوم.",
"ok_lnd": "خا، هونه زفت کردوم."
"ask_no": "نه، مو نڌاروم.",
"ask_yes": "هری، مو داروم.",
"ok": "خا، هو نه هؽل کردوم.",
"ok_lnd": "خا، هونه زفت کردوم.",
"title": "کیف پیل ایسا وورکل وابی."
},
"receive": {
"details_create": "ورکل",
"details_create": "وورکل",
"details_setAmount": "گرؽڌن وا مقدار",
"details_share": "یک رسۊوی",
"header": "گرؽڌن"
"header": "گرؽڌن",
"maxSats": "بیشترین مقدار {max} ساتۊشی هڌ.",
"maxSatsFull": "بیشترین مقدار {max} ساتۊشی یا {currency} هڌ.",
"minSats": "کمترین مقدار {min} ساتۊشی هڌ.",
"minSatsFull": "کمترین مقدار {min} ساتۊشی یا {currency} هڌ."
},
"send": {
"broadcastButton": "انتشار",
"broadcastError": "ختا",
"broadcastNone": "هگزادسیمال تراکونش نه بزن",
"broadcastPending": "مندیر سی زفت",
"broadcastSuccess": "سر ٱنجوم گرهڌ",
"confirm_header": "تاییڌ",
"confirm_sendNow": "هیم سکو بفشن",
"create_amount": "مقدار",
"create_broadcast": "انتشار",
"create_copy": "لف گیری وو دیندا مونتشر کو",
"create_fee": "کارمزد",
"create_memo": "ویرداشت",
"create_satoshi_per_vbyte": "ساتۊشی سی هر بایت مجازی",
"create_to": "وه",
"create_tx_size": "هندا تراکونش",
"details_address": "آدرس",
"details_adv_full": "زه پوی موجۊڌی استفاڌه کو",
"details_adv_full_sure": "اخۊی زه پوی موجۊڌی کیف پیلت سی ای تراکونش استفاڌه کۊنی؟",
"details_create": "ورکل سۊرت هساو",
"details_adv_full": "زه پوی مۉجۊڌی استفاڌه کو",
"details_adv_full_sure": "اخۊی زه پوی مۉجۊڌی کیف پیلت سی ای تراکونش استفاڌه کۊنی؟",
"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": "کارمزد زبال نؽ.",
"details_next": "نیایی",
"details_note_placeholder": "ویرداشت به خوت",
"details_scan": "اسکن",
"details_scan_hint": "سی اسکن یا به من اوردن مقسد، دو کرت بزن ریس",
"details_unrecognized_file_format": "قالو فایل نشناخته",
"dynamic_init": "هونی رئس اونه",
"dynamic_next": "نیایی",
"dynamic_prev": "دیندایی",
"dynamic_stop": "واڌاشتن",
"fee_10m": "10 دؽقه",
"fee_1d": "1 رۊز",
"fee_3h": "3 ساعت",
"fee_custom": "سفارشی",
"fee_fast": "زل",
"fee_medium": "منجا",
"fee_slow": "کوند",
"header": "فشناڌن",
"input_clear": "روفتن",
"input_done": "ٱنجوم وابی",
"input_paste": "جا وندن",
@ -100,24 +149,31 @@
"psbt_sign": "امزا کردن تراکونش",
"open_settings": "گۊشیڌن سامووا",
"permission_storage_later": "دینداتر زوم بپورس.",
"permission_storage_title": "موجوز دسرسی به جاگه زفت کردن",
"psbt_clipboard": "لف گیری منه ویرگه",
"psbt_tx_export": "گرؽڌن جۊر فایل",
"psbt_tx_open": "گۊشیڌن تراکونش امزا وابیڌه",
"psbt_tx_scan": "اسکن تراکونش امزا وابیڌه",
"reset_amount": "وورنشۊوی مقدار",
"reset_amount_confirm": "اخۊی مقدار نه وورنشۊوی؟",
"success_done": "ٱنجوم وابی"
},
"settings": {
"about": "زبار",
"about_awesome": "ورکل وابیڌه وا بؽڌرینا",
"about_backup": "همیشه زه کیلیتا خوتۉ نوخسه لادرار بگیرین!",
"about_license": "پروانه ام آی تی",
"about_release_notes": "ویرداشتا انتشار",
"about_review": "سی ایما یه واجۊری بنین",
"performance_score": "امتیاز کارکرد: {num}",
"run_performance_test": "واجۊری کارکرد",
"about_selftest": "ره وندن خوس آزمایی",
"about_selftest_electrum_disabled": "خوس آزمایی منه هالت آفلاین منه دسرس نؽ. هالت آفلاین نه قیر فعال کو و زه نۊ تفره کو.",
"about_selftest_electrum_disabled": "خوس آزمایی منه هالت آفلاین منه دسرس نؽ. هالت آفلاین نه قیر فعال کو ۉ زه نۊ تفره کو.",
"about_selftest_ok": "پوی واجۊریا منی به خۊوی ٱنجوم وابین. کیف پیل به خۊوی کار اکونه.",
"about_sm_github": "گیت هاب",
"about_sm_discord": "سرور دیسکورد",
"about_sm_telegram": "تورگه تلگرام",
"about_sm_twitter": "ایما نه منه توییتر وه دین کنین",
"about_sm_twitter": "ایما نه منه توییتر وه دین کۊنین",
"advanced_options": "گۊزینیل پؽش رئڌه",
"biometrics": "بیومتریک",
"biom_conf_identity": "هۊویته خوته تاییڌ کو.",
@ -126,11 +182,17 @@
"currency_fetch_error": "منه گرؽڌن نرخ سی واهڌ پیل پسند بیڌه یه ختا پؽش اووڌ.",
"default_info": "دۉسمندیا پؽش فرز",
"default_title": "موقه ره وندن",
"default_wallets": "نیشتن پوی کیفا پیل",
"electrum_connected": "منپیز",
"electrum_connected_not": "بؽ منپیز",
"lndhub_uri": "سی نمووه، {example}",
"electrum_host": "سی نمووه، {example}",
"electrum_offline_mode": "هالت آفلاین",
"use_ssl": "SSL نه به کار بگر",
"set_electrum_server_as_default": "{server} سی سرور پؽش فرز الکترام ساموو بۊوه؟",
"set_lndhub_as_default": "{server} سی سرور پؽش فرز LNDHub ساموو بۊوه؟",
"electrum_settings_server": "سرور الکترام",
"electrum_settings_explain": "سی استفاڌه زه سامووا پؽش فرز، بؽلین پتی بمهنه.",
"electrum_status": "وزیت",
"electrum_clear_alert_title": "ویرگار پاک بۊ؟",
"electrum_clear_alert_message": "اخۊی ویرگار سرورا الکترام نه پاک کۊنی؟",
@ -138,11 +200,14 @@
"electrum_clear_alert_ok": "هری",
"electrum_select": "پسند",
"electrum_reset": "ورگندن به پؽش فرز",
"electrum_unable_to_connect": "نا مۉفق منه منپیز به {server}",
"electrum_history": "ویرگار سرور",
"electrum_reset_to_default": "الن اخۊی سامووا الکترام نه به هالت پؽش فرز وورنشۊوی کۊنی؟",
"electrum_clear": "روفتن",
"encrypt_decrypt": "رزم گوشایی جاگه زفت کردن",
"encrypt_title": "امنیت",
"encrypt_use": "{type} نه وه کار بگر",
"general": "پوی ولاتی",
"encrypt_use": "{type} نه به کار بگر",
"general": "پوی وولاتی",
"general_adv_mode": "هالت پؽش رئڌه",
"header": "سامووا",
"language": "زۉ",
@ -165,22 +230,25 @@
"ask_me_later": "دینداتر زوم بپورس."
},
"transactions": {
"copy_link": "لف گیری لینک",
"cpfp_create": رکل",
"copy_link": "لف گیری لینگ",
"cpfp_create": ورکل",
"details_copy": "لف گیری",
"date": "ویرگار",
"details_received": "گرؽڌه وابیڌه",
"pending": "مندیر سی زفت"
"pending": "مندیر سی زفت",
"open_url_error": "نا مۉفق منه گۊشیڌن لینگ وا مۊرۊرگر پؽش فرز. مۊرۊرگر پؽش فرز خوته آلشت کو ۉ زه نۊ تفره کو."
},
"wallets": {
"add_bitcoin": "بیت کوین",
"add_create": رکل",
"add_create": ورکل",
"details_address": "آدرس",
"details_save": "زفت کردن"
},
"multisig": {
"confirm": "تاییڌ",
"header": "فشناڌن",
"share": "یک رسۊوی",
"create": "ورکل",
"create": ورکل",
"co_sign_transaction": "امزا کردن تراکونش",
"ms_help_title5": "هالت پؽش رئڌه"
},

View file

@ -15,8 +15,6 @@
"seed": "Llavor",
"success": "Èxit",
"wallet_key": "Clau del moneder",
"file_saved": "Fitxer {filePath} s'ha guardat al teu {destination}.",
"downloads_folder": "Carpeta de descàrregues",
"close": "Tancar",
"change_input_currency": "Canviar moneda d'entrada",
"refresh": "Refresca",

View file

@ -15,6 +15,7 @@
"seed": "Seed",
"success": "Úspěch",
"wallet_key": "Klíč peněženky",
"invalid_animated_qr_code_fragment": "Neplatný animovaný fragment QRCode, zkuste to prosím znovu.",
"close": "Zavřít",
"change_input_currency": "Změnit vstupní měnu",
"refresh": "Obnovit",
@ -54,6 +55,7 @@
"claim_balance": "Požadovat zůstatek {balance}",
"close_channel": "Zavřít kanál",
"new_channel": "Nový kanál",
"errorInvoiceExpired": "Faktura vypršela.",
"force_close_channel": "Vynutit uzavření kanálu?",
"expired": "Expirováno",
"node_alias": "Alias uzlu",
@ -61,6 +63,7 @@
"payButton": "Zaplatit",
"placeholder": "Faktura nebo adresa",
"open_channel": "Otevřít kanál",
"funding_amount_placeholder": "Výše financování, např. 0.001",
"opening_channnel_for_from": "Otevření kanálu pro peněženku {forWalletLabel}, financováním z {fromWalletLabel}",
"are_you_sure_open_channel": "Jste si jisti, že chcete tento kanál otevřít?",
"potentialFee": "Potenciální poplatek: {fee}",
@ -83,6 +86,7 @@
"open_direct_channel": "Otevřít přímý kanál s tímto uzlem:",
"please_pay_between_and": "Zaplaťte prosím mezi {min} a {max}.",
"please_pay": "Prosím zaplaťte",
"preimage": "Předobraz",
"sats": "sats.",
"wasnt_paid_and_expired": "Tato faktura nebyla zaplacena a její platnost vypršela."
},
@ -100,6 +104,8 @@
},
"pleasebackup": {
"ask": "Uložili jste záložní větu vaší peněženky? Tato záložní věta je vyžadována pro přístup k vašim finančním prostředkům pro případ ztráty tohoto zařízení. Bez záložní věty budou vaše prostředky trvale ztraceny.",
"ask_no": "Ne, neuložil.",
"ask_yes": "Ano, uložil.",
"ok": "Dobře, napsal jsem ji",
"ok_lnd": "Dobře, uložil jsem to.",
"text": "Věnujte prosím chvíli zapsaní si této mnemotechnické fráze na kousek papíru.\nJe to vaše záloha a můžete ji použít k obnovení peněženky.",
@ -152,6 +158,7 @@
"details_create": "Vytvořit fakturu",
"details_error_decode": "Bitcoinovou adresu nelze dekódovat",
"details_fee_field_is_not_valid": "Poplatek není správně vyplněn",
"details_frozen": "{amount} BTC je zmraženo.",
"details_next": "Další",
"details_no_signed_tx": "Vybraný soubor neobsahuje transakci, kterou lze importovat.",
"details_note_placeholder": "Poznámka pro sebe",
@ -183,6 +190,7 @@
"permission_camera_message": "K použití fotoaparátu potřebujeme vaše povolení",
"psbt_sign": "Podepsat transakci",
"open_settings": "Otevřít nastavení",
"permission_storage_later": "Zeptejte se mě později.",
"permission_storage_message": "BlueWallet potřebuje vaše oprávnění k přístupu k vašemu úložišti, aby mohl tento soubor uložit.",
"permission_storage_denied_message": "BlueWallet nemůže tento soubor uložit. Otevřete prosím nastavení zařízení a povolte funkci Oprávnění k ukládání.",
"permission_storage_title": "Povolení k přístupu do úložiště",
@ -193,6 +201,7 @@
"outdated_rate": "Kurz byl naposledy aktualizován: {date}",
"psbt_tx_open": "Otevřít podepsanou transakci",
"psbt_tx_scan": "Skenovat podepsanou transakci",
"qr_error_no_qrcode": "Ve vybraném obrázku se nám nepodařilo najít kód QR. Ujistěte se, že obrázek obsahuje pouze QR kód a žádný další obsah, například text nebo tlačítka.",
"reset_amount": "Resetovat částku",
"reset_amount_confirm": "Chcete částku vynulovat?",
"success_done": "Hotovo",
@ -231,6 +240,7 @@
"default_wallets": "Zobrazit všechny peněženky",
"electrum_connected": "Připojeno",
"electrum_connected_not": "Nepřipojeno",
"electrum_error_connect": "Nelze se připojit k poskytovanému serveru Electrum",
"lndhub_uri": "Např. {example}",
"electrum_host": "Např. {example}",
"electrum_offline_mode": "Offline režim",
@ -288,6 +298,7 @@
"privacy_read_clipboard": "Kopírovat ze schránky",
"privacy_system_settings": "Systémová nastavení",
"privacy_quickactions": "Zástupci peněženky",
"privacy_quickactions_explanation": "Dlouhý stisk ikony BlueWallet na vaší výchozí obrazovce zobrazí váš zůstatek.",
"privacy_clipboard_explanation": "Pokud se ve vaší schránce nachází adresa nebo faktura, zadejte zástupce.",
"privacy_do_not_track": "Zakázat Analytiku",
"privacy_do_not_track_explanation": "Informace o výkonu a spolehlivosti nebudou odeslány k analýze.",
@ -297,13 +308,16 @@
"selfTest": "Autotest",
"save": "Uložit",
"saved": "Uloženo",
"success_transaction_broadcasted": "Úspěch! Vaše transakce byla odvysílána!",
"total_balance": "Celkový zůstatek",
"total_balance_explanation": "Zobrazte celkový zůstatek všech vašich peněženek na widgetech na domovské obrazovce.",
"widgets": "Widgety",
"tools": "Nástroje"
},
"notifications": {
"would_you_like_to_receive_notifications": "Chcete dostávat oznámení o příchozích platbách?"
"would_you_like_to_receive_notifications": "Chcete dostávat oznámení o příchozích platbách?",
"no_and_dont_ask": "Ne, a už se mě znovu neptejte.",
"ask_me_later": "Zeptejte se mě později."
},
"transactions": {
"cancel_explain": "Tuto transakci nahradíme takovou, která vám zaplatí a bude mít vyšší poplatky. Tím se zruší aktuální transakce. Toto se nazývá RBF Replace by Fee.",
@ -376,6 +390,7 @@
"details_advanced": "Pokročilé",
"details_are_you_sure": "Jste si jistý?",
"details_connected_to": "Připojeno k",
"details_del_wb_err": "Poskytnutá částka zůstatku neodpovídá zůstatku této peněženky. Prosím zkuste to znovu.",
"details_del_wb_q": "Tato peněženka má zůstatek. Než budete pokračovat, uvědomte si, že bez přístupové fráze této peněženky nebudete moci získat prostředky zpět. Abyste se vyhnuli náhodnému odstranění, zadejte prosím zůstatek peněženky ve výši {balance} satoshi.",
"details_delete": "Smazat",
"details_delete_wallet": "Smazat peněženku",
@ -412,9 +427,16 @@
"import_discovery_subtitle": "Zvolte si objevenou peněženku",
"import_discovery_derivation": "Použít vlastní derivační cestu",
"import_discovery_no_wallets": "Nebyly nalezeny žádné peněženky.",
"import_derivation_found": "Nalezeno",
"import_derivation_found_not": "Nenalezeno",
"import_derivation_loading": "Načítání...",
"import_derivation_subtitle": "Zadejte vlastní derivační cestu a my se pokusíme objevit vaši peněženku.",
"import_derivation_title": "Derivační cesta",
"import_derivation_unknown": "Neznámá",
"import_wrong_path": "Špatná derivační cesta",
"list_create_a_button": "Přidat nyní",
"list_create_a_wallet": "Přidat peněženku",
"list_create_a_wallet_text": "Je to zdarma a můžete jich vytvořit \nkolik budete chtít.",
"list_empty_txs1": "Zde budou zobrazeny vaše transakce,",
"list_empty_txs1_lightning": "Lightning peněženka by měla být použita pro vaše každodenní transakce. Poplatky jsou nespravedlivě levné a rychlost je vysoká.",
"list_empty_txs2": "Začněte s peněženkou.",
@ -429,7 +451,6 @@
"no_ln_wallet_error": "Před zaplacením Lightning faktury musíte nejprve přidat Lightning peněženku.",
"looks_like_bip38": "Tohle vypadá jako soukromý klíč chráněný heslem (BIP38)",
"reorder_title": "Seřadit peěženky",
"reorder_instructions": "Klepněte a podržte peněženku a přetáhněte ji po seznamu.",
"please_continue_scanning": "Pokračujte ve 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.",
@ -479,14 +500,20 @@
"quorum_header": "Kvorum",
"of": "z",
"wallet_type": "Typ peněženky",
"invalid_mnemonics": "Zdá se, že tato mnemotechnická fráze není platná.",
"invalid_cosigner": "Neplatná data spolupodepisující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",
"i_have_mnemonics": "Mám seed pro tento klíč...",
"type_your_mnemonics": "Vložte seed k importu stávajícího klíče uložiště",
"this_is_cosigners_xpub": "Toto je xpub spolupodepisujícího připravený k importu do jiné peněženky. Je bezpečné ho sdílet.",
"wallet_key_created": "Klíč k uložišti byl vytvořen. Udělejte si chvíli a bezpečně zálohujte svůj mnemotechnický seed",
"are_you_sure_seed_will_be_lost": "Opravdu? Vaš mnemotechnický seed budou ztracen, pokud nemáte zálohu",
"forget_this_seed": "Zapomeňte na tento seed a použijte XPUB",
"view_edit_cosigners": "Zobrazit/upravit spolupodepisující",
"this_cosigner_is_already_imported": "Tento spolupodepisující je již importován.",
"export_signed_psbt": "Exportovat podepsanou PSBT",
"input_fp": "Zadejte otisk prstu",
"input_fp_explain": "Přeskočit a použít výchozí (00000000)",
@ -511,12 +538,14 @@
"owns": "{label} vlastní {address}",
"enter_address": "Zadat adresu",
"check_address": "Zkontrolovat adresu",
"no_wallet_owns_address": "Žádná z dostupných peněženek nevlastní uvedenou adresu."
"no_wallet_owns_address": "Žádná z dostupných peněženek nevlastní uvedenou adresu.",
"view_qrcode": "Zobrazit QR kód"
},
"cc": {
"change": "Změnit",
"coins_selected": "Vybrané mince ({number})",
"selected_summ": "{value} vybráno",
"empty": "Na této peněžence nejsou v tuto chvíli žádné mince.",
"freeze": "Zmrazit",
"freezeLabel": "Zmrazit",
"freezeLabel_un": "Uvolnit",

View file

@ -15,6 +15,7 @@
"seed": "Seed",
"success": "Erfolg",
"wallet_key": "Wallet Schlüssel",
"invalid_animated_qr_code_fragment": "Ungültig animiertes QR-Code-Fragment. Bitte erneut versuchen.",
"close": "Schließen",
"change_input_currency": "Eingangswährung ändern",
"refresh": "Aktualisieren",
@ -54,6 +55,7 @@
"claim_balance": "Saldo von {balance} beanspruchen",
"close_channel": "Kanal schließen",
"new_channel": "Neuer Kanal",
"errorInvoiceExpired": "Rechnung verfallen.",
"force_close_channel": "Kanal zwangsweise schließen?",
"expired": "Abgelaufen",
"node_alias": "Knoten-Alias",
@ -61,6 +63,7 @@
"payButton": "Zahlen",
"placeholder": "Rechnung oder Adresse",
"open_channel": "Kanal öffnen",
"funding_amount_placeholder": "Finanzierungsbetrag, z.B. 0.001",
"opening_channnel_for_from": "Kanal für Wallet {forWalletLabel} finanziert durch Wallet {fromWalletLabel} eröffnen.",
"are_you_sure_open_channel": "Diesen Kanal definitiv eröffnen?",
"potentialFee": "Geschätzte Gebühr: {fee}",
@ -83,6 +86,7 @@
"open_direct_channel": "Direkten Kanal zu diesem Knoten eröffnen:",
"please_pay_between_and": "Zahlen Sie zwischen {min} und {max}",
"please_pay": "Bitte zahle",
"preimage": "Urbild",
"sats": "sats",
"wasnt_paid_and_expired": "Diese Rechnung ist unbezahlt abgelaufen."
},
@ -100,6 +104,8 @@
},
"pleasebackup": {
"ask": "Hast du die Wiederherstellungs-Phrase deines Wallets gesichert? Ohne Sie kannst du nicht mehr auf deine bitcoin zugreifen und sie wären für immer verloren, sollte dein Gerät verloren oder kaputt gehen.",
"ask_no": "Nein, habe ich nicht.",
"ask_yes": "Ja, habe ich.",
"ok": "Ok, ich habe sie notiert.",
"ok_lnd": "Die Sicherung ist erstellt.",
"text": "Nimm Dir Zeit die mnemonischen Wörter auf ein Papier zu schreiben.\nDie Wörter sind dein Backup zur Wallet-Wiederherstellung.",
@ -152,6 +158,7 @@
"details_create": "Erstellen",
"details_error_decode": "Bitcoin-Adresse kann nicht dekodiert werden",
"details_fee_field_is_not_valid": "Gebühreneingabe ist nicht korrekt",
"details_frozen": "{amount} BTC ist eingefroren.",
"details_next": "Weiter",
"details_no_signed_tx": "Die ausgewählte Datei enthält keine importierbare signierte Transaktion.",
"details_note_placeholder": "Eigene Bezeichnung",
@ -183,6 +190,7 @@
"permission_camera_message": "BlueWallet braucht Deine Erlaubnis, um die Kamera zu nutzen.",
"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.",
"permission_storage_denied_message": "BlueWallet kann die Datei nicht speichern. Dazu in den Systemeinstellungen der App BlueWallet das Recht erteilen, den internen Speicher zu verwenden.",
"permission_storage_title": "Speicherzugriffsrecht",
@ -193,6 +201,7 @@
"outdated_rate": "Kurs zuletzt aktualisiert: {date}",
"psbt_tx_open": "Öffne signierte Transaktion.",
"psbt_tx_scan": "Signierte Transaktion scannen",
"qr_error_no_qrcode": "Der QR-Code konnte nicht ausgelesen werden. Achte darauf, dass er ohne zusätzliche Inhalte wie Text, Grafiken oder Bilder vorliegt.",
"reset_amount": "Betrag zurücksetzen",
"reset_amount_confirm": "Möchten Du den Betrag zurücksetzen?",
"success_done": "Fertig",
@ -231,6 +240,7 @@
"default_wallets": "Alle Wallets anzeigen",
"electrum_connected": "Verbunden",
"electrum_connected_not": "Nicht verbunden",
"electrum_error_connect": "Keine Verbindung zum angegebenen Electrum-Server möglich.",
"lndhub_uri": "Z.b., {example}",
"electrum_host": "Z.b., {example}",
"electrum_offline_mode": "Offline-Modus",
@ -288,6 +298,7 @@
"privacy_read_clipboard": "Zwischenablage lesen",
"privacy_system_settings": "Systemeinstellungen",
"privacy_quickactions": "Walletverknüpfungen",
"privacy_quickactions_explanation": "Halte auf dem Startbildschirm das BlueWallet App-Symbol gedrückt, um rasch deinen Saldo zu sehen.",
"privacy_clipboard_explanation": "Nutzt Rechnungen und Adressen in der Zwischenablage zum Senden.",
"privacy_do_not_track": "Diagnosedaten ausschalten",
"privacy_do_not_track_explanation": "Leistungs- und Zuverlässigkeitsinformationen nicht zur Analyse einreichen.",
@ -297,13 +308,16 @@
"selfTest": "Selbsttest",
"save": "Speichern",
"saved": "Gespeichert",
"success_transaction_broadcasted": "Erfolg! Diene Transaktion wurde übertragen.",
"total_balance": "Gesamtes Guthaben",
"total_balance_explanation": "Zeigt das Wallet Guthaben auf dem Widget deiner Homepage",
"widgets": "Widgets",
"tools": "Werkzeuge"
},
"notifications": {
"would_you_like_to_receive_notifications": "Möchten Sie bei Zahlungseingängen eine Benachrichtigung erhalten?"
"would_you_like_to_receive_notifications": "Möchten Sie bei Zahlungseingängen eine Benachrichtigung erhalten?",
"no_and_dont_ask": "Nein und nicht erneut fragen.",
"ask_me_later": "Später beantworten."
},
"transactions": {
"cancel_explain": "BlueWallet ersetzt diese Transaktion durch eine mit höherer Gebühr, welche den Betrag an Dich zurücküberweist. Die aktuelle Transaktion wird dadurch effektiv abgebrochen. Dieses Verfahren wird RBF - Replace By Fee - genannt.",
@ -376,6 +390,7 @@
"details_advanced": "Fortgeschritten",
"details_are_you_sure": "Bist du dir sicher?",
"details_connected_to": "Verbunden mit",
"details_del_wb_err": "Das angegebene Guthaben deckt sich nicht mit dem Guthaben des Wallet. Bitte versuche es erneut.",
"details_del_wb_q": "Dieses Wallet enthält noch bitcoin. Ohne vorhandenes Backup der mnemonischen Phrase sind diese unwiederbringlich verloren. Um ein versehentliches Löschen zu vermeiden, gib bitte das Wallet-Guthaben von {balance} Satoshis ein.",
"details_delete": "Löschen",
"details_delete_wallet": "Wallet löschen",
@ -412,9 +427,16 @@
"import_discovery_subtitle": "Wallet aus Trefferliste wählen",
"import_discovery_derivation": "Eigener Ableitungspfad wählen",
"import_discovery_no_wallets": "Es wurden keine Wallets gefunden.",
"import_derivation_found": "Gefunden",
"import_derivation_found_not": "Nicht gefunden",
"import_derivation_loading": "Lade...",
"import_derivation_subtitle": "Eigener Ableitungspfad zur Ermittlung der genutzten Wallet eingeben.",
"import_derivation_title": "Ableitungspfad",
"import_derivation_unknown": "Unbekannt",
"import_wrong_path": "Falscher Ableitungspfad",
"list_create_a_button": "Jetzt hinzufügen",
"list_create_a_wallet": "Wallet hinzufügen",
"list_create_a_wallet_text": "Wallets sind kostenlos. \nErstelle so viel du magst.",
"list_empty_txs1": "Deine Transaktionen erscheinen hier",
"list_empty_txs1_lightning": "Verwende das Lightning Wallet für Deine täglichen Bezahlungen. Lightning Transaktionen sind konkurrenzlos günstig und verblüffend schnell.",
"list_empty_txs2": "Beginne mit deinem Wallet.",
@ -429,7 +451,6 @@
"no_ln_wallet_error": "Vor Bezahlung einer Lightning Rechnung zuerst ein Lightning Wallet eröffnen.",
"looks_like_bip38": "Passwortgeschützter Privatschlüssel (BIP38) erkannt.",
"reorder_title": "Wallets neu ordnen",
"reorder_instructions": "Tippen und halten Sie eine Wallet, um sie umzuplatzieren.",
"please_continue_scanning": "Bitte Scanvorgang fortsetzten",
"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.",
@ -479,14 +500,20 @@
"quorum_header": "Signaturfähigkeit",
"of": "von",
"wallet_type": "Typ des Wallets",
"invalid_mnemonics": "Ungültige mnemonische Phrase.",
"invalid_cosigner": "Die Mitsignierer Daten sind ungültig",
"not_a_multisignature_xpub": "Dies ist keine XPUB eines Multisignatur-Wallet!",
"invalid_cosigner_format": "Falscher Mitsignierer: Dies ist kein Mitsignierer für das Format {format}.",
"create_new_key": "Neuerstellen",
"scan_or_open_file": "Datei scannen oder öffnen",
"i_have_mnemonics": "Seed des Schlüssels importieren",
"type_your_mnemonics": "Seed zum Import deines Tresorschlüssels eingeben",
"this_is_cosigners_xpub": "Dies ist der xPub für Mitsigierer zum Import in ein anderes Wallet. Er kann sicher mit anderen geteilt werden.",
"wallet_key_created": "Dein Tresorschlüssel wurde erstellt. Nimm dir Zeit ein sicheres Backup des mnemonischen Seeds herzustellen. ",
"are_you_sure_seed_will_be_lost": "Bist du sicher? Dein mnemonischer Seed ist ohne Backup verloren!",
"forget_this_seed": "Seed vergessen und xPub verwenden.",
"view_edit_cosigners": "Mitsignierer Anzeigen/Bearbeiten",
"this_cosigner_is_already_imported": "Dieser Mitsignierer ist schon vorhanden.",
"export_signed_psbt": "Signierte PSBT exportieren",
"input_fp": "Fingerabdruckkennung eingeben",
"input_fp_explain": "Überspringen, um den Standard zu verwenden (00000000)",
@ -511,12 +538,14 @@
"owns": "{label} besitzt {address}",
"enter_address": "Adresse eingeben",
"check_address": "Adresse prüfen",
"no_wallet_owns_address": "Keines der verfügbaren Wallet besitzt die eingegebene Adresse."
"no_wallet_owns_address": "Keines der verfügbaren Wallet besitzt die eingegebene Adresse.",
"view_qrcode": "QR-Code anzeigen"
},
"cc": {
"change": "Ändern",
"coins_selected": "Anz. gewählte Münzen ({number})",
"selected_summ": "{value} ausgewählt",
"empty": "Dieses Wallet hat aktuell keine Münzen.",
"freeze": "einfrieren",
"freezeLabel": "Einfrieren",
"freezeLabel_un": "Entblocken",

View file

@ -326,7 +326,8 @@
"wallet_type": "Τύπος πορτοφολιου",
"create_new_key": "Δημιουργία νέου",
"scan_or_open_file": "Σάρωση ή άνοιγμα αρχείου",
"ms_help": "Βοήθεια"
"ms_help": "Βοήθεια",
"ms_help_title5": "Enable advanced mode"
},
"is_it_my_address": {
"title": "Είναι δική μου διεύθυνση;",

View file

@ -4,6 +4,8 @@
"cancel": "Cancel",
"continue": "Continue",
"clipboard": "Clipboard",
"discard_changes": "Discard changes?",
"discard_changes_explain": "You have unsaved changes. Are you sure you want to discard them and leave the screen?",
"enter_password": "Enter password",
"never": "Never",
"of": "{number} of {total}",
@ -23,7 +25,8 @@
"pick_image": "Choose image from library",
"pick_file": "Choose a file",
"enter_amount": "Enter amount",
"qr_custom_input_button": "Tap 10 times to enter custom input"
"qr_custom_input_button": "Tap 10 times to enter custom input",
"unlock": "Unlock"
},
"alert": {
"default": "Alert"
@ -228,6 +231,7 @@
"about_sm_twitter": "Follow us on Twitter",
"advanced_options": "Advanced Options",
"biometrics": "Biometrics",
"biometrics_no_longer_available": "Your device settings have changed and no longer match the selected security settings in the app. Please re-enable biometrics or passcode, then restart the app to apply these changes.",
"biom_10times": "You have attempted to enter your password 10 times. Would you like to reset your storage? This will remove all wallets and decrypt your storage.",
"biom_conf_identity": "Please confirm your identity.",
"biom_no_passcode": "Your device does not have a passcode. In order to proceed, please configure a passcode in the Settings app.",

View file

@ -14,10 +14,7 @@
"save": "Guardar",
"seed": "Semilla",
"success": "Completado",
"wallet_key": "Llave de la cartera",
"invalid_animated_qr_code_fragment" : "Fragmento de código QR inválido. Por favor inténtalo de nuevo.",
"file_saved": "El archivo {filePath} se ha guardado en tu {destination}.",
"downloads_folder": "Carpeta de descargas"
"wallet_key": "Llave de la cartera"
},
"alert": {
"default": "Atención"
@ -42,23 +39,20 @@
"network": "Error de red"
},
"lnd": {
"active":"Activo",
"inactive":"Inactivo",
"active": "Activo",
"inactive": "Inactivo",
"channels": "Canales",
"no_channels": "Sin canales",
"claim_balance": "Reclamar saldo {balance}",
"close_channel": "Cerrar canal",
"new_channel" : "Nuevo canal",
"errorInvoiceExpired": "Factura expirada",
"new_channel": "Nuevo canal",
"force_close_channel": "¿Forzar el cierre del canal?",
"expired": "Expirado",
"node_alias": "Alias del nodo",
"expiresIn": "Expira en {time} minutos",
"payButton": "Pagar",
"placeholder": "Factura o dirección",
"open_channel": "Abrir canal",
"funding_amount_placeholder": "Importe de la financiación, por ejemplo 0,001",
"opening_channnel_for_from":"Abrir canal para la cartera {forWalletLabel}, financiado desde {fromWalletLabel}",
"opening_channnel_for_from": "Abrir canal para la cartera {forWalletLabel}, financiado desde {fromWalletLabel}",
"are_you_sure_open_channel": "¿Estás seguro de que quieres abrir este canal?",
"potentialFee": "Comisión estimada: {fee}",
"remote_host": "Host remoto",
@ -80,7 +74,6 @@
"open_direct_channel": "Abrir un canal directo con este nodo:",
"please_pay_between_and": "Paga entre {min} y {max}",
"please_pay": "Por favor, pague",
"preimage": "Preimage",
"sats": "sats.",
"wasnt_paid_and_expired": "Esta factura no fue pagada y ha expirado."
},
@ -98,10 +91,8 @@
},
"pleasebackup": {
"ask": "¿Has guardado la frase de respaldo de tu cartera? Esta frase de respaldo es necesaria para acceder a tus fondos si pierdes este dispositivo. Sin la frase de respaldo, tus fondos se perderán permanentemente.",
"ask_no": "No, no lo he hecho",
"ask_yes": "Sí, lo he hecho",
"ok": "OK, ya lo he anotado",
"ok_lnd": "OK, lo he guardado",
"ok": "OK, ya la he anotado.",
"ok_lnd": "OK, lo he guardado.",
"text": "Por favor, apunta esta frase mnemotécnica en un papel. Será tu copia de seguridad y te permitirá restaurar la cartera en otro dispositivo.",
"text_lnd": "Por favor guarda la copia de seguridad de esta cartera. Te permitirá restaurarla en caso de pérdida.",
"title": "Tu cartera ha sido creada"
@ -152,7 +143,6 @@
"details_create": "Crear factura",
"details_error_decode": "No se ha podido decodificar la dirección de Bitcoin",
"details_fee_field_is_not_valid": "La comisión introducida no es válida",
"details_frozen": "{amount} de BTC está congelado",
"details_next": "Siguiente",
"details_no_signed_tx": "El archivo seleccionado no contiene una transacción que se pueda importar.",
"details_note_placeholder": "Nota personal",
@ -184,7 +174,6 @@
"permission_camera_message": "Necesitamos permiso para usar tu cámara.",
"psbt_sign": "Firmar una transacción",
"open_settings": "Abrir configuración",
"permission_storage_later": "Pregúntame luego",
"permission_storage_message": "BlueWallet necesita permiso de acceso a tu almacenamiento para guardar este archivo.",
"permission_storage_denied_message": "BlueWallet no puede guardar este archivo. Por favor, abre los ajustes de tu dispositivo y permite el acceso al almacenamiento.",
"permission_storage_title": "Permiso de acceso al almacenamiento",
@ -195,7 +184,6 @@
"outdated_rate": "Fecha de la última actualización de la tarifa de cambio: {date}",
"psbt_tx_open": "Abrir transacción firmada",
"psbt_tx_scan": "Escanear transacción firmada",
"qr_error_no_qrcode": "No hemos podido encontrar un código QR en la imagen seleccionada. Por favor asegúrate de que la imagen solo contiene un código QR y no otro tipo de contendido, como texto o botones.",
"reset_amount": "Cantidad predeterminada",
"reset_amount_confirm": "¿Quieres volver a la cantidad predeterminada?",
"success_done": "Completado",
@ -232,7 +220,6 @@
"default_wallets": "Ver todas las carteras",
"electrum_connected": "Conectado",
"electrum_connected_not": "Desconectado",
"electrum_error_connect": "No se ha podido conectar al servidor de Electrum",
"lndhub_uri": "Ej.: {example}",
"electrum_host": "Ej.: {example}",
"electrum_offline_mode": "Modo offline",
@ -275,13 +262,12 @@
"lightning_error_lndhub_uri": "LndHub URI no válida",
"lightning_saved": "Tus cambios se han guardado correctamente",
"lightning_settings": "Configuración de Lightning",
"lightning_settings_explain": "Para conectar a tu propio nodo LND, por favor instala LndHub y escribe su URL aquí, en la pantalla de configuración. Las carteras creadas tras guardar los cambios se conectarán al LNDHub especificado.",
"network": "Red",
"network_broadcast": "Emitir transacción",
"network_electrum": "Servidor Electrum",
"not_a_valid_uri": "URI no válida",
"notifications": "Notificaciones",
"open_link_in_explorer" : "Abrir enlace en el navegador",
"open_link_in_explorer": "Abrir enlace en el navegador",
"password": "Contraseña",
"password_explain": "Crea la contraseña que usarás para descifrar el almacenamiento",
"passwords_do_not_match": "Contraseñas deben ser iguales",
@ -290,7 +276,6 @@
"privacy_read_clipboard": "Leer portapapeles",
"privacy_system_settings": "Configuración del sistema",
"privacy_quickactions": "Atajos para tus carteras",
"privacy_quickactions_explanation": "Toca y mantén pulsado el icono de BlueWallet en tu pantalla de inicio para ver rápidamente el balance de tu cartera.",
"privacy_clipboard_explanation": "Muestra atajos si encuentra direcciones o facturas en tu portapapeles.",
"privacy_do_not_track": "Desabilitar Analytics",
"privacy_do_not_track_explanation": "Los datos sobre funcionamiento y fiabilidad no serán enviados para ser analizados.",
@ -300,16 +285,13 @@
"selfTest": "Self-Test",
"save": "Guardar",
"saved": "Guardado",
"success_transaction_broadcasted" : "¡Listo! ¡Tu transacción ha sido emitida!",
"total_balance": "Balance total",
"total_balance_explanation": "Muestra el balance total de todas tus carteras en los widgets de tu pantalla principal.",
"widgets": "Widgets",
"tools": "Herramientas"
},
"notifications": {
"would_you_like_to_receive_notifications": "¿Quires recibir notificaciones cuando detectemos transferencias entrantes?",
"no_and_dont_ask": "No, y no vuelvas a preguntarme",
"ask_me_later": "Pregúntame después"
"would_you_like_to_receive_notifications": "¿Quires recibir notificaciones cuando detectemos transferencias entrantes?"
},
"transactions": {
"cancel_explain": "Reemplazaremos esta transacción con una que te pague y tenga tarifas más altas. Esto cancela efectivamente la transacción actual. Esto se llama RBF—Reemplazo por comisión.",
@ -382,7 +364,6 @@
"details_advanced": "Avanzado",
"details_are_you_sure": "¿Estás seguro?",
"details_connected_to": "Conectado a",
"details_del_wb_err": "El balance introducido no coincide con el balance de esta cartera. Por favor, inténtelo de nuevo.",
"details_del_wb_q": "Esta cartera tiene saldo. Antes de proceder, ten en cuenta que no podrás recuperar los fondos sin la semilla de esta cartera. Para evitar el borrado accidental, por favor introduce los {balance} satoshis que contiene esta cartera.",
"details_delete": "Eliminar",
"details_delete_wallet": "Borrar cartera",
@ -418,16 +399,9 @@
"import_discovery_subtitle": "Elige una cartera descubierta",
"import_discovery_derivation": "Utilizar una ruta de derivación personalizada",
"import_discovery_no_wallets": "No se encontraron carteras.",
"import_derivation_found": "encontrada",
"import_derivation_found_not": "no encontrada",
"import_derivation_loading": "cargando...",
"import_derivation_subtitle": "Introduce la ruta de derivación personalizada e intentaremos de descubrir tu cartera",
"import_derivation_title": "Ruta de derivación",
"import_derivation_unknown": "desconocida",
"import_wrong_path": "ruta de derivación incorrecta",
"list_create_a_button": "Añadir",
"list_create_a_wallet": "Añadir cartera",
"list_create_a_wallet_text": "Es gratis y puedes crear\ntodas las que quieras",
"list_empty_txs1": "Tus transacciones aparecerán aquí",
"list_empty_txs1_lightning": "Usa carteras Lightning para tus transacciones diarias. Tienen comisiones muy bajas y una velocidad de vértigo.",
"list_empty_txs2": "Empieza con tu cartera.",
@ -442,7 +416,6 @@
"no_ln_wallet_error": "Antes de pagar una factura Lightning, primero debe agregar una cartera Lightning.",
"looks_like_bip38": "Parece que esto es una llave privada protegida con contraseña (BIP38).",
"reorder_title": "Reorganizar carteras",
"reorder_instructions": "Toca y arrastra una wallet a lo largo de la lista.",
"please_continue_scanning": "Por favor, continúa escaneando.",
"select_no_bitcoin": "No hay carteras de Bitcoin disponibles.",
"select_no_bitcoin_exp": "Una cartera de Bitcoin es necesaria para recargar una cartera Lightning. Por favor, cree o importe una.",
@ -492,20 +465,14 @@
"quorum_header": "quórum",
"of": "de",
"wallet_type": "Tipo de cartera",
"invalid_mnemonics": "Esta frase mnemotécnica no es válida",
"invalid_cosigner": "Los datos del co-firmante no son válidos",
"not_a_multisignature_xpub": "¡Esto no es el XPUB de una cartera multifirma!",
"invalid_cosigner_format": "Co-firmante incorrecto: no es un co-firmante de {format}.",
"create_new_key": "Crear una nueva",
"scan_or_open_file": "Escanear o abrir archivo",
"i_have_mnemonics": "Tengo una semilla para esta llave.",
"type_your_mnemonics": "Introduce una semilla para importar la llave de tu Vault",
"this_is_cosigners_xpub": "Este es el XPUB del co-firmante, listo para ser importado en otra cartera. Es seguro compartirla.",
"wallet_key_created": "La clave de tu Vault ha sido creada. Tómate un momento para anotar la semilla mnemotécnica.",
"are_you_sure_seed_will_be_lost": "¿Estás seguro? Tu semilla mnemotécnica se perderá si no tienes una copia de seguridad",
"forget_this_seed": "Olvida esta semilla y usa XPUB",
"view_edit_cosigners": "Ver/editar co-firmantes",
"this_cosigner_is_already_imported": "Este co-firmante ya ha sido importado",
"export_signed_psbt": "Exportar PSBT firmado",
"input_fp": "introduce la huella dactilar",
"input_fp_explain": "Déjalo en blanco para usar el predeterminado (00000000)",
@ -530,14 +497,12 @@
"owns": "{address} pertenece a {label}",
"enter_address": "Introduce la dirección",
"check_address": "Comprobar dirección",
"no_wallet_owns_address": "Ninguna de las carteras disponibles posee la dirección proporcionada.",
"view_qrcode": "Ver código QR"
"no_wallet_owns_address": "Ninguna de las carteras disponibles posee la dirección proporcionada."
},
"cc": {
"change": "Cambio",
"coins_selected": "({number}) monedas (coins) seleccionadas",
"selected_summ": "{value} seleccionado",
"empty": "Esta cartera no tiene fondos en este momento",
"freeze": "Congelar",
"freezeLabel": "Congelar",
"freezeLabel_un": "Descongelar",

View file

@ -4,6 +4,8 @@
"cancel": "Cancelar",
"continue": "Continúa",
"clipboard": "Portapapeles",
"discard_changes": "¿Descartar cambios?",
"discard_changes_explain": "Tienes cambios sin guardar. ¿Estás seguro de que quieres descartarlos y salir de la pantalla?",
"enter_password": "Ingresar contraseña",
"never": "Nunca",
"of": "{number} de {total}",
@ -23,7 +25,8 @@
"pick_image": "Elegir imagen de la biblioteca",
"pick_file": "Escoge un archivo",
"enter_amount": "Ingresa la cantidad",
"qr_custom_input_button": "Pulsa 10 veces para ingresar una entrada personalizada"
"qr_custom_input_button": "Pulsa 10 veces para ingresar una entrada personalizada",
"unlock": "Desbloquear"
},
"alert": {
"default": "Alerta"
@ -228,6 +231,7 @@
"about_sm_twitter": "Siguenos en Twitter",
"advanced_options": "Opciones Avanzadas",
"biometrics": "Biometría",
"biometrics_no_longer_available": "La configuración de tu dispositivo cambió y ya no coincide con la configuración de seguridad seleccionada en la aplicación. Vuelve a habilitar los datos biométricos o el código de acceso, luego reinicia la aplicación para aplicar estos cambios.",
"biom_10times": "Has intentado ingresar tu contraseña 10 veces. ¿Te gustaría restablecer tu almacenamiento? Esto eliminará todas las billeteras y descifrará tu almacenamiento.",
"biom_conf_identity": "Por favor confirma tu identidad.",
"biom_no_passcode": "Tu dispositivo no tiene un código de acceso. Para continuar, configura un código de acceso en la aplicación Configuración.",

View file

@ -13,8 +13,7 @@
"save": "Salvesta",
"seed": "Seeme",
"success": "Toiming õnnestus",
"wallet_key": "Rahakoti võti",
"invalid_animated_qr_code_fragment": "Vale animeeritud QR-koodi fragment. Palun proovi uuesti."
"wallet_key": "Rahakoti võti"
},
"azteco": {
"codeIs": "Sinu vautšeri kood on",

View file

@ -15,9 +15,6 @@
"seed": "سید",
"success": "موفقیت‌آمیز بود",
"wallet_key": "کلید کیف پول",
"invalid_animated_qr_code_fragment": "کد QR جزئی متحرک نامعتبر است. لطفاً دوباره امتحان کنید.",
"file_saved": "فایل {filePath} در {destination} شما ذخیره شد.",
"downloads_folder": "پوشهٔ دانلودها",
"close": "بستن",
"change_input_currency": "ویرایش ارز ورودی",
"refresh": "تازه‌سازی",
@ -57,7 +54,6 @@
"claim_balance": "تسویهٔ موجودی {balance}",
"close_channel": "بستن کانال",
"new_channel": "کانال جدید",
"errorInvoiceExpired": "صورت‌حساب منقضی شد",
"force_close_channel": "بستن اجباری کانال؟",
"expired": "منقضی‌شده",
"node_alias": "نام مستعار گره",
@ -66,7 +62,6 @@
"payment": "پرداخت",
"placeholder": "صورت‌حساب یا آدرس",
"open_channel": "بازکردن کانال",
"funding_amount_placeholder": "مقدار تأمین وجه، برای مثال، ۰٫۰۰۱",
"opening_channnel_for_from": "درحال بازکردن کانال برای کیف پول {forWalletLabel}، با تأمین وجه از {fromWalletLabel}",
"are_you_sure_open_channel": "آیا از بازکردن این کانال اطمینان دارید؟",
"potentialFee": "کارمزد احتمالی: {fee}",
@ -89,7 +84,6 @@
"open_direct_channel": "کانال مستقیمی با این گره باز کن:",
"please_pay_between_and": "لطفاً بین {min} و {max} بپردازید",
"please_pay": "لطفاً",
"preimage": "پیش‌نگاره",
"sats": "ساتوشی بپردازید.",
"wasnt_paid_and_expired": "این صورت‌حساب پرداخت نشده و منقضی شده است."
},
@ -107,8 +101,6 @@
},
"pleasebackup": {
"ask": "آیا کلمه‌های پشتیبان کیف پول خود را ذخیره کرده‌اید؟ درصورت ازدست‌دادن این دستگاه، این کلمه‌های پشتیبان برای دسترسی به دارایی شما لازم هستند. بدون کلمه‌های پشتیبان، دارایی شما برای همیشه ازدست خواهد رفت.",
"ask_no": "خیر، نکرده‌ام",
"ask_yes": "بله، کرده‌ام",
"ok": "خب، آن را نوشتم.",
"ok_lnd": "خب، آن را ذخیره کردم.",
"text": "لطفاً درنگ کرده و این عبارت یادیار (mnemonic phrase) را روی یک تکه کاغذ یادداشت کنید. این کلمه‌ها نسخهٔ پشتیبان شما هستند، و می‌توانید از آن‌ها برای بازیابی کیف پول در دستگاه دیگری استفاده کنید.",
@ -161,7 +153,6 @@
"details_create": "ایجاد صورت‌حساب",
"details_error_decode": "ناموفق در رمزگشایی آدرس بیت‌کوین",
"details_fee_field_is_not_valid": "کارمزد معتبر نیست.",
"details_frozen": "{amount} بیت‌کوین مسدود شده است.",
"details_next": "بعدی",
"details_no_signed_tx": "فایل انتخاب‌شده حاوی تراکنشی نیست که بتوان آن را وارد کرد.",
"details_note_placeholder": "یادداشت به خود",
@ -193,7 +184,6 @@
"permission_camera_message": "برای استفاده از دوربین به اجازهٔ شما نیاز داریم.",
"psbt_sign": "امضاکردن تراکنش",
"open_settings": "بازکردن تنظیمات",
"permission_storage_later": "بعداً از من بپرس",
"permission_storage_message": "برنامهٔ BlueWallet جهت ذخیرهٔ این فایل به اجازهٔ شما برای دسترسی به فضای ذخیره‌سازی نیاز دارد.",
"permission_storage_denied_message": "برنامهٔ BlueWallet قادر به ذخیرهٔ این فایل نیست. لطفاً تنظیمات دستگاه خود را باز کرده و «اجازهٔ ذخیره‌سازی» (Storage Permission) را فعال کنید.",
"permission_storage_title": "مجوز دسترسی به فضای ذخیره‌سازی",
@ -204,7 +194,6 @@
"outdated_rate": "آخرین به‌روزرسانی نرخ: {date}",
"psbt_tx_open": "بازکردن تراکنش امضاشده",
"psbt_tx_scan": "اسکن تراکنش امضاشده",
"qr_error_no_qrcode": "قادر به یافتن کد QR در تصویر انتخاب‌شده نبودیم. اطمینان حاصل کنید که تصویر تنها حاوی کد QR بوده و محتوای اضافی‌ای همچون متن یا دکمه درون آن وجود ندارد.",
"reset_amount": "بازنشانی مقدار",
"reset_amount_confirm": "آیا می‌خواهید مقدار را بازنشانی کنید؟",
"success_done": "انجام شد",
@ -243,7 +232,6 @@
"default_wallets": "مشاهدهٔ همهٔ کیف پول‌ها",
"electrum_connected": "متصل",
"electrum_connected_not": "عدم اتصال",
"electrum_error_connect": "نمی‌توان به سرور الکترام ارائه‌شده متصل شد",
"lndhub_uri": "به‌عنوان مثال، {example}",
"electrum_host": "به‌عنوان مثال، {example}",
"electrum_offline_mode": "حالت آفلاین",
@ -311,16 +299,13 @@
"selfTest": "خودآزمایی",
"save": "ذخیره",
"saved": "ذخیره شد",
"success_transaction_broadcasted": "موفقیت‌آمیز بود! تراکنش شما منتشر شد!",
"total_balance": "موجودی کل",
"total_balance_explanation": "نمایش موجودی کل تمام کیف پول‌های شما در ابزارک‌های صفحهٔ اصلی",
"widgets": "ابزارک‌ها",
"tools": "ابزارها"
},
"notifications": {
"would_you_like_to_receive_notifications": "آیا می‌خواهید هنگام دریافت وجه اعلان دریافت کنید؟",
"no_and_dont_ask": "نه، و دیگر از من نپرس",
"ask_me_later": "بعداً از من بپرس"
"would_you_like_to_receive_notifications": "آیا می‌خواهید هنگام دریافت وجه اعلان دریافت کنید؟"
},
"transactions": {
"cancel_explain": "ما این تراکنش را با تراکنشی که گیرندهٔ آن شما هستید و کارمزد بیشتری دارد جایگزین خواهیم کرد. این درعمل تراکنش کنونی را لغو می‌کند. این کار Replace by Fee (به‌اختصار RBF) نام دارد—جایگزینی با کارمزد.",
@ -393,7 +378,6 @@
"details_advanced": "پیشرفته",
"details_are_you_sure": "مطمئن هستید؟",
"details_connected_to": "متصل به",
"details_del_wb_err": "مقدار موجودی ارائه‌شده با موجودی این کیف پول مطابقت ندارد. لطفاً دوباره تلاش کنید.",
"details_del_wb_q": "این کیف پول دارای موجودی است. قبل از ادامه، لطفاً توجه داشته باشید که بدون عبارت سید این کیف پول، قادر به بازیابی دارایی آن نخواهید بود. به‌منظور جلوگیری از حذف تصادفی این کیف پول، لطفاً موجودی کیف پول خود معادل {balance} ساتوشی را وارد کنید.",
"details_delete": "حذف",
"details_delete_wallet": "حذف کیف پول",
@ -430,16 +414,9 @@
"import_discovery_subtitle": "کیف پول پیداشده را انتخاب کنید",
"import_discovery_derivation": "استفاده از مسیر اشتقاق دلخواه",
"import_discovery_no_wallets": "کیف پولی یافت نشد.",
"import_derivation_found": "پیدا شد",
"import_derivation_found_not": "پیدا نشد",
"import_derivation_loading": "درحال‌بارگذاری…",
"import_derivation_subtitle": "مسیر اشتقاق دلخواه را وارد کرده، و ما تلاش خواهیم کرد کیف پول شما را پیدا کنیم.",
"import_derivation_title": "مسیر اشتقاق",
"import_derivation_unknown": "نامشخص",
"import_wrong_path": "مسیر اشتقاق نادرست",
"list_create_a_button": "هم‌اکنون اضافه کن",
"list_create_a_wallet": "افزودن کیف پول",
"list_create_a_wallet_text": "مجانی است، و می‌توانید هر تعداد\nکه دوست داشتید بسازید.",
"list_empty_txs1": "تراکنش‌های شما در اینجا نمایش داده خواهند شد.",
"list_empty_txs1_lightning": "برای تراکنش‌های روزمره بهتر است از کیف پول لایتنینگ استفاده شود. کارمزدها به‌طرز غیرمنصفانه‌ای ارزان و سرعت فوق‌العاده بالاست.",
"list_empty_txs2": "با کیف پول خود شروع کنید.",
@ -454,7 +431,6 @@
"no_ln_wallet_error": "قبل از پرداخت یک صورت‌حساب لایتنینگ، ابتدا باید یک کیف پول لایتنینگ اضافه کنید.",
"looks_like_bip38": "این به کلید خصوصی محافظت‌شده با گذرواژه (BIP38) شباهت دارد.",
"reorder_title": "بازچینی کیف پول‌ها",
"reorder_instructions": "روی یک کیف پول بزنید و نگه دارید تا آن را در لیست جابه‌جا کنید.",
"please_continue_scanning": "لطفاً به اسکن‌کردن ادامه دهید.",
"select_no_bitcoin": "هیچ کیف پول بیت‌کوینی درحال‌حاضر دردسترس نیست.",
"select_no_bitcoin_exp": "یک کیف پول بیت‌کوین برای پرکردن کیف پول‌های لایتنینگ نیاز است. لطفاً یکی بسازید یا وارد کنید.",
@ -479,8 +455,6 @@
"header": "ارسال",
"share": "اشتراک‌گذاری",
"view": "مشاهده",
"shared_key_detected": "امضاکنندهٔ مشترک",
"shared_key_detected_question": "یک امضاکنندهٔ با شما به اشتراک گذاشته شده، آیا می‌خواهید واردش کنید؟",
"manage_keys": "مدیریت کلیدها",
"how_many_signatures_can_bluewallet_make": "امضاهایی که BlueWallet می‌تواند ایجاد کند",
"signatures_required_to_spend": "امضاهای موردنیاز: {number}",
@ -506,20 +480,14 @@
"quorum_header": "حد نصاب",
"of": "از",
"wallet_type": "نوع کیف پول",
"invalid_mnemonics": "به‌نظر نمی‌رسد این عبارت یادیار (mnemonic phrase) معتبر باشد.",
"invalid_cosigner": "دادهٔ امضاکنندهٔ مشترک غیرمعتبر",
"not_a_multisignature_xpub": "این XPUB از یک کیف پول چندامضایی نیست!",
"invalid_cosigner_format": "امضاکنندهٔ مشترک نادرست: این یک امضاکنندهٔ مشترک برای قالب {format} نیست.",
"create_new_key": "جدید بسازید",
"scan_or_open_file": "اسکن یا بازکردن فایل",
"i_have_mnemonics": "من سید این کلید را دارم.",
"type_your_mnemonics": "سید را بنویسید تا کلید گاوصندوق فعلی خود را وارد کنید.",
"this_is_cosigners_xpub": "این XPUB امضاکنندهٔ مشترک است—آماده برای واردشدن درون یک کیف پول دیگر. به‌اشتراک‌گذاری آن مانعی ندارد.",
"wallet_key_created": "کلید گاوصندوق شما ایجاد شد. لحظه‌ای درنگ کرده تا با خیال راحت از سید خود نسخهٔ پشتیبان تهیه کنید.",
"are_you_sure_seed_will_be_lost": "مطمئن هستید؟ درصورتی‌که نسخهٔ پشتیبان نداشته باشید، سید شما ازبین خواهد رفت.",
"forget_this_seed": "این سید را فراموش و به‌جای آن از XPUB استفاده کن.",
"view_edit_cosigners": "مشاهده/ویرایش امضاکنندگان مشترک",
"this_cosigner_is_already_imported": "این امضاکنندهٔ مشترک قبلاً وارد شده است.",
"export_signed_psbt": "صادرکردن PSBT امضاشده",
"input_fp": "اثر انگشت را وارد کنید",
"input_fp_explain": "جهت استفاده از تنظیمات پیش‌فرض (۰۰۰۰۰۰۰۰) رد کنید",
@ -544,20 +512,12 @@
"owns": "آدرس {address} متعلق به «{label}» است.",
"enter_address": "آدرس را وارد کنید",
"check_address": "بررسی آدرس",
"no_wallet_owns_address": "آدرس ارائه‌شده متعلق به هیچ‌کدام از کیف پول‌های موجود نیست.",
"view_qrcode": "مشاهدهٔ کد QR"
},
"autofill_word": {
"title": "تولید کلمهٔ یادیار (mnemonic) آخر",
"enter": "عبارت یادیار (mnemonic phrase) ناقص را وارد کنید",
"generate_word": "تولید کلمهٔ آخر",
"error": "متن واردشده یک عبارت یادیار (mnemonic phrase) ناقص ۱۱ یا ۲۳ کلمه‌ای نیست!"
"no_wallet_owns_address": "آدرس ارائه‌شده متعلق به هیچ‌کدام از کیف پول‌های موجود نیست."
},
"cc": {
"change": "باقی‌مانده (change)",
"coins_selected": "کوین‌های انتخاب‌شده ({number})",
"selected_summ": "انتخاب‌شده: {value}",
"empty": "این کیف پول درحال‌حاضر هیچ کوینی ندارد.",
"freeze": "مسدود",
"freezeLabel": "مسدودکردن",
"freezeLabel_un": "عدم مسدودسازی",

View file

@ -14,7 +14,8 @@
"save": "Tallenna",
"seed": "Siemen",
"success": "Onnistui",
"wallet_key": "Lompakkoavain"
"wallet_key": "Lompakkoavain",
"invalid_animated_qr_code_fragment": "Virheellinen animoitu QRCode-fragmentti, yritä uudelleen."
},
"alert": {
"default": "Hälytys"
@ -46,12 +47,15 @@
"claim_balance": "Lunasta saldo {balance}",
"close_channel": "Sulje kanava",
"new_channel": "Uusi kanava",
"errorInvoiceExpired": "Lasku vanheni.",
"force_close_channel": "Pakota kanavan sulku?",
"expired": "Erääntynyt",
"node_alias": "Solmun lempinimi",
"expiresIn": "Vanhenee {time} minuutissa",
"payButton": "Maksa",
"placeholder": "Lasku",
"open_channel": "Avaa kanava",
"funding_amount_placeholder": "Rahoitettava määrä, esimerkiksi 0.001",
"opening_channnel_for_from": "Ota rahoitus {fromWalletLabel}:sta kanavan avaamiseksi lompakkoon {forWalletLabel}",
"are_you_sure_open_channel": "Oletko varma että haluat avata tämän kanavan?",
"potentialFee": "Mahdollinen siirtokulu: {fee}",
@ -74,6 +78,7 @@
"open_direct_channel": "Avaa suora kanava tällä solmulla:",
"please_pay_between_and": "Maksa vähintään {min} ja enintään {max}",
"please_pay": "Ole hyvä ja maksa",
"preimage": "Alkukuva",
"sats": "sattia",
"wasnt_paid_and_expired": "Tätä laskua ei maksettu, ja se on vanhentunut."
},
@ -91,6 +96,8 @@
},
"pleasebackup": {
"ask": "Oletko tallentanut lompakon varmuuskopion? Tämä varmuuskopio vaaditaan varojen käyttämiseen, jos kadotat tämän laitteen. Ilman varmuuskopiota varat menetetään lopullisesti.",
"ask_no": "Ei, en ole.",
"ask_yes": "Kyllä, olen.",
"ok": "Ok, kirjoitin sen ylös",
"ok_lnd": "OK, olen tallentanut sen.",
"text": "Varaa hetki aikaa ja kirjoita palautuslause (mnemonic) talteen paperille.\nSe on varmuuskopiosi ja voit käyttää sitä lompakon palauttamiseen.",
@ -143,6 +150,7 @@
"details_create": "Luo Lasku",
"details_error_decode": "Bitcoin-osoitetta ei voida dekoodata ",
"details_fee_field_is_not_valid": "Siirtomaksu ei ole pätevä",
"details_frozen": "{amount} BTC on jäädytetty.",
"details_next": "Seuraava",
"details_no_signed_tx": "Valittu tiedosto ei sisällä tuotavaa siirtotapahtumaa.",
"details_note_placeholder": "muistiinpano itselle",
@ -174,6 +182,7 @@
"permission_camera_message": "Tarvitsemme lupasi kameran käyttöön",
"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.",
"permission_storage_denied_message": "BlueWallet ei voinut tallettaa tätä tiedostoa. Aseta laitteesi sallimaan tallentaminen kyttkemällä Storage Permission päälle.",
"permission_storage_title": "Tallennustilan käyttöoikeus",
@ -184,6 +193,7 @@
"outdated_rate": "Vaihtokurssi päivitettiin viimeksi: {date}",
"psbt_tx_open": "Avaa allekirjoitettu siirtotapahtuma",
"psbt_tx_scan": "Skannaa allekirjoitettu siirtotapahtuma",
"qr_error_no_qrcode": "Kuvasta ei löytynyt QR-koodia. Varmista että kuva sisältää ainoastaan QR-koodin eikä muita tietoja kuten tekstia tai nappeja.",
"reset_amount": "Nollaa määrä",
"reset_amount_confirm": "Haluaisitko nollata määrän?",
"success_done": "Valmis",
@ -222,6 +232,7 @@
"default_wallets": "Näytä Kaikki Lompakot",
"electrum_connected": "Yhdistetty",
"electrum_connected_not": "Ei yhteyttä",
"electrum_error_connect": "Ei voida yhdistää tarjottuun Electrum-palvelimeen",
"lndhub_uri": "esim, {example}",
"electrum_host": "esim, {example}",
"electrum_offline_mode": "Offline-tila",
@ -279,6 +290,7 @@
"privacy_read_clipboard": "Lue Leikepöytä",
"privacy_system_settings": "Järjestelmäasetukset",
"privacy_quickactions": "Lompakon Pikanäppäimet",
"privacy_quickactions_explanation": "Kosketa ja pidä Aloitusnäytön BlueWallet-sovelluskuvaketta nähdäksesi nopeasti lompakon saldon.",
"privacy_clipboard_explanation": "Toimita pikakuvakkeet, jos leikepöydältä löytyy osoite tai lasku.",
"privacy_do_not_track": "Poista analytiikka käytöstä",
"privacy_do_not_track_explanation": "Suorituskyky- ja luotettavuustietoja ei lähtetä analysoitavaksi.",
@ -288,13 +300,16 @@
"selfTest": "Itsetestaus ",
"save": "Tallenna",
"saved": "Tallennettu",
"success_transaction_broadcasted": "Siirtotapahtumasi on lähetetty onnistuneesti!",
"total_balance": "Kokonaissaldo",
"total_balance_explanation": "Näytä kaikkien lompakoiden kokonaissaldo aloitusnäytön widgeteissä.",
"widgets": "Widgetit",
"tools": "Työkalut"
},
"notifications": {
"would_you_like_to_receive_notifications": "Haluatko saada ilmoituksia, kun saat saapuvia maksuja?"
"would_you_like_to_receive_notifications": "Haluatko saada ilmoituksia, kun saat saapuvia maksuja?",
"no_and_dont_ask": "En, ja Älä Kysy Minulta Uudelleen.",
"ask_me_later": "Kysy Minulta Myöhemmin."
},
"transactions": {
"cancel_explain": "Korvaamme tämän siirtotapahtuman sellaisella, joka maksaa sinulle ja jossa on korkeammat siirtomaksut. Tämä käytännössä peruuttaa nykyisen siirtotapahtuman. Tätä kutsutaan nimellä RBF-Replace by Fee.",
@ -367,6 +382,7 @@
"details_advanced": "Edistynyt",
"details_are_you_sure": "Oletko varma?",
"details_connected_to": "Yhdistetty",
"details_del_wb_err": "Annettu saldo ei vastaa tämän lompakon saldoa. Yritä uudelleen.",
"details_del_wb_q": "Lompakossa on varoja. Ennenkuin jatkat, ymmärrä että tarvitset lompakon palautukseen tulevaisuudeessa palautuslauseen. Varmistaaksemme ettet tuhoa lompakkoa vahingossa, tulee sinun syöttää saldosi {balance} satosheina.",
"details_delete": "Poista",
"details_delete_wallet": "Poista lompakko",
@ -403,9 +419,16 @@
"import_discovery_subtitle": "Valitse löydetty lompakko",
"import_discovery_derivation": "Vaihtoehtoinen derivation path",
"import_discovery_no_wallets": "Lompakkoja ei löytynyt",
"import_derivation_found": "löytyi",
"import_derivation_found_not": "Ei löytynyt",
"import_derivation_loading": "Ladataan...",
"import_derivation_subtitle": "Syötä vaihtoehtoinen derivation path, niin yritämme etsiä lompakkosi.",
"import_derivation_title": "Derivation path",
"import_derivation_unknown": "Tuntematon",
"import_wrong_path": "Väärä derivation path",
"list_create_a_button": "Lisää nyt",
"list_create_a_wallet": "Lisää lompakko",
"list_create_a_wallet_text": "Se on ilmainen ja voit luoda\nniin monta kuin haluat.",
"list_empty_txs1": "Siirtotapahtumasi näkyvät tässä,",
"list_empty_txs1_lightning": "Salamalompakkoa voit käyttää päivittäisiin siirtoihin. Siirtomaksut ovat kohtuuttoman halvat ja se toimii todella nopeasti.",
"list_empty_txs2": "Aloita lompakostasi. ",
@ -420,7 +443,6 @@
"no_ln_wallet_error": "Ennen kuin maksat Salamalaskun, sinun on ensin lisättävä Salamalompakko.",
"looks_like_bip38": "Tämä näyttää salasanalla suojatulta yksityiseltä avaimelta (BIP38)",
"reorder_title": "Järjestele Lompakot",
"reorder_instructions": "Siirrä listalla, ensin napauttamalla ja pitämällä, sitten vetäen.",
"please_continue_scanning": "Jatka skannausta",
"select_no_bitcoin": "Bitcoin-lompakkoa ei tällä hetkellä ole saatavana.",
"select_no_bitcoin_exp": "Bitcoin-lompakkoa vaaditaan Salamalompakkojen täyttämiseksi. Luo tai tuo yksi.",
@ -470,14 +492,20 @@
"quorum_header": "Quorum",
"of": "n",
"wallet_type": "Lompakon tyyppi",
"invalid_mnemonics": "Tämä muistilauseke ei näytä olevan pätevä.",
"invalid_cosigner": "Virheellinen kanssa-allekirjoittajan tieto",
"not_a_multisignature_xpub": "Tämä ei ole xpub multisignature-lompakosta!",
"invalid_cosigner_format": "Virheellinen allekirjoittaja: tämä ei ole muodon {format} allekirjoittaja.",
"create_new_key": "Luo Uusi",
"scan_or_open_file": "Skannaa tai avaa tiedosto",
"i_have_mnemonics": "Minulla on siemen tälle avaimelle...",
"type_your_mnemonics": "Lisää siemen tuodaksesi Vault-avaimesi",
"this_is_cosigners_xpub": "Tämä on allekirjoittajan xpub, joka on valmis tuotavaksi toiseen lompakkoon. On turvallista jakaa se.",
"wallet_key_created": "Vault-avaimesi luotiin. Käytä hetki muistisanojen turvalliseen varmuuskopioimiseen",
"are_you_sure_seed_will_be_lost": "Oletko varma? Muistisiemenesi menetetään, jos sinulla ei ole varmuuskopiota",
"forget_this_seed": "Unohda tämä siemen ja käytä XPUB:ia",
"view_edit_cosigners": "Tarkastele/Muokkaa allekirjoittajia",
"this_cosigner_is_already_imported": "Tämä allekirjoittaja on jo tuotu.",
"export_signed_psbt": "Vie Allekirjoitettu PSBT",
"input_fp": "Syötä sormenjälki",
"input_fp_explain": "ohita käyttääksesi oletusarvoa (00000000)",
@ -502,12 +530,14 @@
"owns": "{label} omistaa {address}",
"enter_address": "Syötä osoite",
"check_address": "Tarkista osoite",
"no_wallet_owns_address": "Mikään käytettävissä olevista lompakoista ei omista annettua osoitetta."
"no_wallet_owns_address": "Mikään käytettävissä olevista lompakoista ei omista annettua osoitetta.",
"view_qrcode": "Näytä QR-koodi"
},
"cc": {
"change": "vaihto",
"coins_selected": "Kolikot valittu ({number})",
"selected_summ": "{value} valittuna",
"empty": "Tässä lompakossa ei ole tällä hetkellä kolikoita.",
"freeze": "jäädytä",
"freezeLabel": "Jäädytä",
"freezeLabel_un": "Vapauta",

View file

@ -15,6 +15,7 @@
"seed": "Graine",
"success": "Succès",
"wallet_key": "Clé du portefeuille",
"invalid_animated_qr_code_fragment": "Fragment du QR Code animé invalide. Veuillez réessayer.",
"pick_file": "Choisir un fichier",
"enter_amount": "Entrer un montant"
},
@ -48,6 +49,7 @@
"claim_balance": "Réclamer le solde {balance}",
"close_channel": "Fermer le canal",
"new_channel": "Nouveau canal",
"errorInvoiceExpired": "Requête expirée.",
"force_close_channel": "Forcer la fermeture du canal ?",
"expired": "Expiré",
"node_alias": "Alias du node",
@ -55,6 +57,7 @@
"payButton": "Payer",
"placeholder": "Facture ou adresse",
"open_channel": "Ouverture canal",
"funding_amount_placeholder": "Montant financement, par exemple 0,001",
"opening_channnel_for_from": "Canal d'ouverture pour le portefeuille {forWalletLabel}, financement depuis {fromWalletLabel}",
"are_you_sure_open_channel": "Etes vous sûre de vouloir ouvrir ce canal?",
"potentialFee": "Frais potentiels : {fee}",
@ -77,6 +80,7 @@
"open_direct_channel": "Ouvrir un canal direct avec ce noeud :",
"please_pay_between_and": "Veuillez payer entre {min} et {max}",
"please_pay": "Veuillez payer",
"preimage": "Préimage",
"sats": "sats",
"wasnt_paid_and_expired": "Cette requête n'a pas été réglée et a expiré"
},
@ -94,6 +98,8 @@
},
"pleasebackup": {
"ask": "Avez-vous noté la phrase de sauvegarde de votre portefeuille ? Cette phrase de sauvegarde est nécessaire pour accéder à vos fonds en cas de perte de votre appareil. Sans ce backup, vos fonds pourraient être perdus pour toujours.",
"ask_no": "Non.",
"ask_yes": "Oui.",
"ok": "Ok, Je l'ai écrite sur un papier.",
"ok_lnd": "OK, je l'ai sauvegardée.",
"text": "Veuillez prendre un moment pour noter cette phrase de sauvegarde sur papier.\nC'est votre backup et vous pouvez l'utiliser pour restaurer votre portefeuille.",
@ -146,6 +152,7 @@
"details_create": "Créer la requête",
"details_error_decode": "Impossible de décoder l'adresse bitcoin",
"details_fee_field_is_not_valid": "Champ frais invalide",
"details_frozen": "{amount} BTC est gelé.",
"details_next": "Suivant",
"details_no_signed_tx": "Le fichier sélectionné ne contient pas de transaction pouvant être importée.",
"details_note_placeholder": "note à moi même (optionnelle)",
@ -177,6 +184,7 @@
"permission_camera_message": "Nous avons besoin de votre permission pour utiliser l'appareil photo",
"psbt_sign": "Signer une transaction",
"open_settings": "Ouvrir les paramètres",
"permission_storage_later": "Redemander Plus Tard.",
"permission_storage_message": "BlueWallet a besoin de votre permission pour accéder a votre stockage pour enregistrer ce fichier.",
"permission_storage_denied_message": "BlueWallet est incapable d'enregistrer ce fichier. Veuillez ouvrir les paramètres de votre appareil et activer les autorisation de stockage.",
"permission_storage_title": "Permission d'accès au stockage pour BlueWallet",
@ -187,6 +195,7 @@
"outdated_rate": "Les taux ont été mis a jour: {date}",
"psbt_tx_open": "Ouvrir la transaction signée",
"psbt_tx_scan": "Scanner la transaction signée",
"qr_error_no_qrcode": "Impossible de trouver un QR code dans l'image sélectionnée. Assurez-vous que l'image contienne uniquement un QR code et pas de contenu additionnel comme du texte ou des boutons.",
"reset_amount": "Annuler le montant",
"reset_amount_confirm": "Voulez vous réinitialiser le montant ?",
"success_done": "Terminé",
@ -223,6 +232,7 @@
"default_wallets": "Voir tous les portefeuilles",
"electrum_connected": "Connecté",
"electrum_connected_not": "Déconnecté",
"electrum_error_connect": "Impossible de se connecter au serveur Electrum fourni",
"lndhub_uri": "Par exemple, {example}",
"electrum_host": "Par exemple, {example}",
"electrum_offline_mode": "Mode hors-ligne",
@ -280,6 +290,7 @@
"privacy_read_clipboard": "Lecture du presse-papier ",
"privacy_system_settings": "Paramètres système",
"privacy_quickactions": "Raccourci Portefeuille",
"privacy_quickactions_explanation": "Touchez et maintenez l'icone BlueWallet sur votre écran d'accueil pour voir rapidement le solde de vos portefeuilles.",
"privacy_clipboard_explanation": "Fourni un raccourci si une adresse ou une facture est trouvée dans le presse-papier.",
"privacy_do_not_track": "Désactiver l'analyse des données",
"privacy_do_not_track_explanation": "Les informations de performance et de fiabilité ne seront pas soumises pour analyse.",
@ -289,13 +300,16 @@
"selfTest": "Auto-test",
"save": "Enregistrer",
"saved": "Enregistré",
"success_transaction_broadcasted": "Succès! Votre transaction a été diffusée!",
"total_balance": "Solde total",
"total_balance_explanation": "Afficher le solde total de tous vos portefeuilles sur l'écran d'accueil.",
"widgets": "Widgets",
"tools": "Outils"
},
"notifications": {
"would_you_like_to_receive_notifications": "Voulez vous recevoir les notifications quand vous recevez des paiements entrants ?"
"would_you_like_to_receive_notifications": "Voulez vous recevoir les notifications quand vous recevez des paiements entrants ?",
"no_and_dont_ask": "Non, et ne pas me redemander.",
"ask_me_later": "Redemander Plus Tard."
},
"transactions": {
"cancel_explain": "Nous allons remplacer cette transaction par celle où les fonds vous reviennent, avec de plus hauts frais. Cela annulera la transaction. On parle de RBF - Replace By Fee.",
@ -367,6 +381,7 @@
"details_advanced": "Avancé",
"details_are_you_sure": "Êtes vous sur?",
"details_connected_to": "Connecté à",
"details_del_wb_err": "Le solde ne correspond pas à celui du portefeuille. Veuillez réessayer.",
"details_del_wb_q": "Ce portefeuille a un solde non nul. Avant de continuer, veuillez noter que vous ne serez pas en mesure de récupérer vos fonds sans la phrase mnémonique du portefeuille. Pour éviter toute suppression accidentelle du portefeuille, veuillez entrer son solde de {balance} satoshis.",
"details_delete": "Supprimer",
"details_delete_wallet": "Supprimer le portefeuille",
@ -401,9 +416,16 @@
"import_discovery_subtitle": "Choisissez un portefeuille trouvé",
"import_discovery_derivation": "Utiliser un chemin de dérivation personnalisé",
"import_discovery_no_wallets": "Aucaun portefeuille trouvé.",
"import_derivation_found": "Trouvé",
"import_derivation_found_not": "Non trouvé",
"import_derivation_loading": "Chargement...",
"import_derivation_subtitle": "Entrez le chemin de dérivation personnalisé et nous essaierons de découvrir votre portefeuille",
"import_derivation_title": "Chemin de dérivation",
"import_derivation_unknown": "Inconnu",
"import_wrong_path": "Chemin de dérivation erroné",
"list_create_a_button": "Ajouter maintenant",
"list_create_a_wallet": "Ajouter un portefeuille",
"list_create_a_wallet_text": "Cest gratuit et vous pouvez en créer \nautant que vous voulez.",
"list_empty_txs1": "Vos transactions apparaîtront ici,",
"list_empty_txs1_lightning": "Un portefeuille Lightning devrait être utilisé pour les transactions quotidiennes. Les frais sont très bas et la vitesse est étourdissante.",
"list_empty_txs2": "Commencez avec votre portefeuille.",
@ -418,7 +440,6 @@
"no_ln_wallet_error": "Avant de payer une facture Ligthning, vous devez créer un portefeuille Ligthning.",
"looks_like_bip38": "Ceci ressemble a une clé privée protégée par un mot de passe (BIP38)",
"reorder_title": "Trier vos portefeuilles",
"reorder_instructions": "Appuyez et maintenez un portefeuille pour le déplacer à travers la liste.",
"please_continue_scanning": "Merci de continuer à scaner",
"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.",
@ -468,14 +489,20 @@
"quorum_header": "Quorum",
"of": "de",
"wallet_type": "Type portefeuille",
"invalid_mnemonics": "Cette phrase mnémonique ne semble pas valide.",
"invalid_cosigner": "Données de cosigner invalides",
"not_a_multisignature_xpub": "Ceci n'est pas un xpub provenant d'un portefeuille multisig",
"invalid_cosigner_format": "Co-signeur incorrecte: Ceci nest pas un co-signeur au {format} format.",
"create_new_key": "Créer nouveau",
"scan_or_open_file": "Scanner ou ouvrir fichier",
"i_have_mnemonics": "J'ai une graine pour cette clé...",
"type_your_mnemonics": "Insérez une graine pour importer votre clé de coffre existante",
"this_is_cosigners_xpub": "Ceci est l'XPUB du co-signeur, prêt a être importé dans un autre portefeuille. C'est sure de le partager.",
"wallet_key_created": "Votre clé de coffre a été créé. Prenez un moment pour sauvegarder votre graine sous forme de mnémonique ",
"are_you_sure_seed_will_be_lost": "Etes Vous sûr? ",
"forget_this_seed": "Oublier cette graine et utiliser l'XPUB à la place",
"view_edit_cosigners": "Voir/Editer les co-signeurs",
"this_cosigner_is_already_imported": "Ce co-signeur a été déjà importé.",
"export_signed_psbt": "Exporter la PSBT signée",
"input_fp": "Entrer l'empreinte",
"input_fp_explain": "Passer pour utiliser celle par défaut (00000000)",
@ -500,12 +527,14 @@
"owns": "{label} possède {address}",
"enter_address": "Entrez l'adresse",
"check_address": "Vérifiez l'adresse",
"no_wallet_owns_address": "Aucun des portefeuilles ne possède l'adresse fournie."
"no_wallet_owns_address": "Aucun des portefeuilles ne possède l'adresse fournie.",
"view_qrcode": "Voir QRCode"
},
"cc": {
"change": "monnaie rendu",
"coins_selected": "UTXO sélectionnées ({number})",
"selected_summ": "{value} sélectionnée ",
"empty": "Ce portefeuille ne possède aucune pièces en ce moment.",
"freeze": "Geler",
"freezeLabel": "Gelé",
"freezeLabel_un": "Dégeler",

View file

@ -15,8 +15,6 @@
"seed": "גרעין",
"success": "הצלחה",
"wallet_key": "מפתח ארנק",
"file_saved": "הקובץ {filePath} נשמר בתיקיית {destination} שלך.",
"downloads_folder": "תיקיית הורדות",
"close": "סגירה",
"change_input_currency": "שינוי מטבע קלט",
"refresh": "רענון",
@ -427,7 +425,6 @@
"no_ln_wallet_error": "לפני תשלום חשבונית ברק, עלייך להוסיף ארנק ברק.",
"looks_like_bip38": "זה נראה כמו מפתח פרטי מוגן בסיסמה (BIP38)",
"reorder_title": "ארגון ארנקים מחדש ",
"reorder_instructions": "לחצו והחזיקו ארנק כדי לגרור אותו לאורך הרשימה.",
"please_continue_scanning": "אנא המשיכו בסריקה.",
"select_no_bitcoin": "אין ארנקי ביטקוין זמינים.",
"select_no_bitcoin_exp": "דרוש ארנק ביטקוין בכדי לטעון את ארנקי הברק. צרו או יבאו אחד.",

View file

@ -14,7 +14,8 @@
"save": "Mentés",
"seed": "jelszó sorozat",
"success": "Sikeres",
"wallet_key": "Tárca kulcs"
"wallet_key": "Tárca kulcs",
"invalid_animated_qr_code_fragment": "Érvénytelen animált QR kód részlet, próbáld újra!"
},
"alert": {
"default": "Figyelem"
@ -46,12 +47,15 @@
"claim_balance": "Egyenleg lefoglalása {balance}",
"close_channel": "Csatorna zárása",
"new_channel": "Új csatorna",
"errorInvoiceExpired": "A számla lejárt.",
"force_close_channel": "Csatorna erőltetett zárása?",
"expired": "Lejárt",
"node_alias": "Node aliasz",
"expiresIn": "{time} percen belül elévül",
"payButton": "Fizess",
"placeholder": "Számla",
"open_channel": "Csatorna nyitása",
"funding_amount_placeholder": "Feltöltési mennyiség, például 0.001",
"opening_channnel_for_from": "Csatornanyitás a {forWalletLabel} tárca számára, {fromWalletLabel} által finanszírozva.",
"are_you_sure_open_channel": "Biztosan meg akarja nyitni ezt a csatornát?",
"potentialFee": "Várható díj: {fee}",
@ -74,6 +78,7 @@
"open_direct_channel": "Közvetlen csatorna nyitása erre a csomópontra:",
"please_pay_between_and": "Kérem fizessen {min} és {max} közötti összeget",
"please_pay": "Kérlek fizess",
"preimage": "Pre-image (hashlock feloldáshoz)",
"sats": "satoshi",
"wasnt_paid_and_expired": "Ezt a számlát nem fizették ki és lejárt"
},
@ -91,6 +96,8 @@
},
"pleasebackup": {
"ask": "Készítettél másolatot a tárca visszaállításához szükséges jelszó sorozatról? Ez az elmentett jelszó sorozat nélkülözhetetlen ha elveszik ez az eszközt. A jelszó sorozat nélkül a pénzed végleg elveszik.",
"ask_no": "Nem, nincs.",
"ask_yes": "Igen, van.",
"ok": "Rendben, leírtam!",
"ok_lnd": "OK, elmentettem.",
"text": "Kérlek írd le az alábbi biztonsági szavakat egy papírlapra. \nEz egy biztonsági mentés, amellyel helyreállíthatod a tárcádat.",
@ -119,6 +126,7 @@
"create_details": "Részletek",
"create_fee": "Díj",
"create_memo": "megjegyzés",
"create_satoshi_per_vbyte": "Satoshi vbájtonként",
"create_this_is_hex": "Tranzakció hexadecimális formátumban, aláírva és küldésre készen.",
"create_to": "Címzett",
"create_tx_size": "Tranzakció mérete",
@ -138,12 +146,14 @@
"details_create": "Készíts számlát",
"details_error_decode": "Nem lehet dekódolni a bitcoin címet",
"details_fee_field_is_not_valid": "Èrvénytelen tranzakciós díj",
"details_frozen": "{amount} BTC fagyasztva áll.",
"details_next": "Következő",
"details_no_signed_tx": "A kiválasztott fájl nem tartalmaz importálható tranzakciót.",
"details_note_placeholder": "saját megjegyzés",
"details_scan": "Szkennelés",
"details_scan_hint": "Dupla érintéssel szkennelhet, vagy betölthet uticélt",
"details_total_exceeds_balance": "A megadott összeg nagyobb, mint a tárca elérhető egyenlege",
"details_total_exceeds_balance_frozen": "A küldeni kívánt össze meghaladja az elérhető egyenlegét. Lefagyasztott érmék nem voltak használva.",
"details_unrecognized_file_format": "Nemismert fálj formátum",
"details_wallet_before_tx": "Tranzakció előtt, először adj meg egy Bitcoin tárcát.",
"dynamic_init": "Előkészítés",
@ -157,6 +167,7 @@
"fee_custom": "beállított",
"fee_fast": "Gyors",
"fee_medium": "Közepes",
"fee_replace_minvb": "A fizetendő teljes díj mértékének (satoshi per vbyte) magasabbnak kell lennie, mint {min} sat/vbyte.",
"fee_satvbyte": "sat/vByte-ban",
"fee_slow": "Lassú",
"header": "Küldés",
@ -167,6 +178,7 @@
"permission_camera_message": "Kamera használat engedélyezése",
"psbt_sign": "Egy tranzakció aláírása",
"open_settings": "Beállítások megnyitása",
"permission_storage_later": "Később.",
"permission_storage_message": "A fájl elmentéséhez engedélyezned kell a BlueWallet hozzáférését a háttértárhoz.",
"permission_storage_denied_message": "BlueWallet nem képes elmenteni ezt a fájlt. Kérem nyissa meg a beállításokat és engedélyezze a tárhely hozzáférést az eszközén.",
"permission_storage_title": "Háttértár hozzáférés engedélyezés",
@ -177,6 +189,7 @@
"outdated_rate": "A ráta utoljára frissítve: {date}",
"psbt_tx_open": "Aláírt tranzakció megnyitása",
"psbt_tx_scan": "Aláírt tranzakció szkennelése",
"qr_error_no_qrcode": "Nem találtunk QR kódot a kiválasztott képen. Győződjön meg arról, hogy a kép csak QR kódot tartalmaz, és nem tartalmaz további tartalmat, például szöveget vagy gombokat.",
"reset_amount": "Összeg Visszaállítása",
"reset_amount_confirm": "Valóban visszaállítja az összeget?",
"success_done": "Kész!",
@ -205,6 +218,7 @@
"biom_no_passcode": "A készülék nem rendelkezik jelszóval. A folytatáshoz kérjük, konfigurálja a jelszót a Beállítások menüpontban.",
"biom_remove_decrypt": "Minden pénztárcáját eltávolítjuk, és a tárolójáról visszafejtjük a titkosítást. Biztosan folytatja?",
"currency": "Valuta",
"currency_source": "Árak forrása",
"currency_fetch_error": "Hibatörtént a ráta lekérdezésekor a kijelölt fiat pénznél.",
"default_desc": "Ha le van tiltva, a BlueWallet azonnal megnyitja a kiválasztott tárcát indításkor. ",
"default_info": "Alapértelmezett információ",
@ -212,6 +226,7 @@
"default_wallets": "Összes tárca megtekintése",
"electrum_connected": "Kapcsolódva",
"electrum_connected_not": "Nincs kapcsolat",
"electrum_error_connect": "Nem tud csatlakozni a kiválasztott Electrum szerverhez",
"lndhub_uri": "P.l., {example}",
"electrum_host": "P.l., {example}",
"electrum_offline_mode": "Offline Mód",
@ -268,6 +283,7 @@
"privacy_read_clipboard": "Vágólap olvasása",
"privacy_system_settings": "Rendszer beállítások",
"privacy_quickactions": "tárca gyorsbillentyűk",
"privacy_quickactions_explanation": "Érintsd meg és tartsd nyomva a BlueWallet alkalmazás ikont a képernyőn a tárca egyenleg gyors megtekintéséhez.",
"privacy_clipboard_explanation": "Jelentsen meg opciókat, ha cím vagy számla található a vágólapon. ",
"privacy_do_not_track": "Analitika kikapcsolása",
"privacy_do_not_track_explanation": "A teljesítményre és a megbízhatóságra vonatkozó információk nem lessznek beküldve elemzésre.",
@ -277,15 +293,19 @@
"selfTest": "Önteszt",
"save": "Ment",
"saved": "Elmentve",
"success_transaction_broadcasted": "Sikeres! A tranzakciója továbbítva!",
"total_balance": "Teljes egyenleg",
"total_balance_explanation": "Jelenítse meg az összes pénztárca egyenlegét a kezdőképernyő moduljain.",
"widgets": "Widgetek",
"tools": "Eszközök"
},
"notifications": {
"would_you_like_to_receive_notifications": "Szeretnél értesítést a bejövő utalásokról? "
"would_you_like_to_receive_notifications": "Szeretnél értesítést a bejövő utalásokról? ",
"no_and_dont_ask": "Nem és ne kérdezd újra.",
"ask_me_later": "Később."
},
"transactions": {
"cancel_explain": "Ezt a tranzakciót lecseréljük arra, amely fizet Önnek és magasabb díjakkal rendelkezik. Ez gyakorlatilag törli a tranzakciót. Ezt RBF-nek hívják - azaz díj cserének.",
"cancel_no": "Ez a tranzakció nem helyettesíthető",
"cancel_title": "Tranzakció törlése (RBF)",
"confirmations_lowercase": "{confirmations} konfirmációk",
@ -320,6 +340,8 @@
"eta_3h": "ETA: ~3 órán belül",
"eta_1d": "ETA: ~1 napon belül",
"list_title": "tranzakciók",
"open_url_error": "Nem lehetett megnyitni a URL-t az alapértelmezett böngészővel. Kérem változtassa meg a böngészőjét és próbálkozzon meg újra.",
"rbf_explain": "Kiváltjuk ezt a tranzakciót egy magasabb tranzakciós díjjal járó tranzakcióval, így hamarabb teljesül. Ezt a megoldást Tranzakciós Díj Pótlásnak hívjuk, angolul RBF—Replace by Fee.",
"rbf_title": "Kiváltási díj (RBF)",
"status_bump": "Kiváltási díj",
"status_cancel": "Tranzakció törlése",
@ -351,6 +373,7 @@
"details_advanced": "Haladó",
"details_are_you_sure": "Biztos vagy benne?",
"details_connected_to": "Kapcsolódva: ",
"details_del_wb_err": "A megadott egyenleg összege nem egyezik a tárca egyenlegével. Próbáld újra. ",
"details_del_wb_q": "Ennek a tárcának van egyenlege. Mielőtt tovább lép, tudnia kell, hogy nem fogja tudni vissza szerezni ezen összeget ha nem rendelkezik ezen tárca biztonsági szavaival. A véletlen eltávolítások elkerülése érdekéven kérem adja meg a tárcán található {balance} egyenleget satoshiban.",
"details_delete": "Törlés",
"details_delete_wallet": "Tárca törlése",
@ -385,9 +408,16 @@
"import_discovery_subtitle": "Már felfedezett tárca választása",
"import_discovery_derivation": "Egyedi derivációs útvonal használata",
"import_discovery_no_wallets": "Nem található tárca.",
"import_derivation_found": "Megtalálva",
"import_derivation_found_not": "Nem található",
"import_derivation_loading": "Töltés...",
"import_derivation_subtitle": "Egyedi derivációs útvonal beírása és mi megpróbáljuk felfedezni a tárcáját",
"import_derivation_title": "Derivációs útvonal",
"import_derivation_unknown": "Ismeretlen",
"import_wrong_path": "Hibás derivációs útvonal",
"list_create_a_button": "add hozzá",
"list_create_a_wallet": "Új tárca",
"list_create_a_wallet_text": "Ingyenes, és annyit hozhatsz\nlétre amennyit szeretnél",
"list_empty_txs1": "A tranzakcióid itt fognak megjelenni",
"list_empty_txs1_lightning": "A Lightning tárcát a mindennapi tranzakcióidhoz használhatod. A tranzakciók azonnal végrehajtódnak, minimális átutalási díjjal.",
"list_empty_txs2": "Kezd a tárcáddal.",
@ -402,7 +432,6 @@
"no_ln_wallet_error": "Mielőtt tudnál fizetni a villámhálózaton, először egy Lightning tárcát kell létrehoznod vagy betöltened.",
"looks_like_bip38": "Ez egy jelszó védett privát kulcsnak (BIP38) tűnik",
"reorder_title": "Tárcák rendezése",
"reorder_instructions": "Érintse meg és tartsa lenyomva, hogy át húzzhassa a listán.",
"please_continue_scanning": "Kérem szkenneljen folyamatosan.",
"select_no_bitcoin": "Jelenleg nincs elérhető Bitcoin tárca.",
"select_no_bitcoin_exp": "A Lightning tárca feltöltéséhez Bitcoin tárcára van szükség. Készíts vagy importálj egy Bitcoin tárcát.",
@ -452,14 +481,20 @@
"quorum_header": "Kvórum",
"of": "/",
"wallet_type": "Tárca típusa",
"invalid_mnemonics": "Ez a biztonsági mentés nem tűnik megfelelőnek.",
"invalid_cosigner": "Helytelen másodaláíró adat",
"not_a_multisignature_xpub": "Ez nem egy multiszignaturás tárca publikus kulcsa azaz XPUBja!",
"invalid_cosigner_format": "Nem megfelelő másodaláíró: Ez a másodaláíró nem a megfelelő {format} formátumú.",
"create_new_key": "Készíts újat",
"scan_or_open_file": "Szkennelés vagy fájl megnyitása",
"i_have_mnemonics": "Megvan a jelszó sorozatom ehhez a kulcshoz...",
"type_your_mnemonics": "Jelszó sorozat megadása egy létező trezor-kulcs megadásához",
"this_is_cosigners_xpub": "Ez a másodaláíró XPUB-ja — készen áll egy másik pénztárcába történő importálásra. Megosztani biztonságos.",
"wallet_key_created": "A Vault kulcs létrehozva. Szánjon egy percet arra, hogy biztonságosan, biztonsági másolatot készítsen a titkos kulcsszavakról.",
"are_you_sure_seed_will_be_lost": "Biztos benne? A biztonsági mentése el fog veszni ha nincs létező másolata.",
"forget_this_seed": "Felejtse el ezt a kulcsot és használjon XPUB-ot inkább.",
"view_edit_cosigners": "Társ aláírok Megtekintése/Szerkesztése",
"this_cosigner_is_already_imported": "Ezen másodaláíró már importálva van.",
"export_signed_psbt": "Aláírt PSBT Exportálása",
"input_fp": "Ujjlenyomat megadása",
"input_fp_explain": "Átugrás az alapértelmezett használatához (00000000)",
@ -484,12 +519,14 @@
"owns": "{label} tulajdonolja {address}",
"enter_address": "Cím megadása",
"check_address": "Cím ellenőrzése",
"no_wallet_owns_address": "Semelyik tárca nem birtokolja ezen használt címet."
"no_wallet_owns_address": "Semelyik tárca nem birtokolja ezen használt címet.",
"view_qrcode": "QRKód megtekintése"
},
"cc": {
"change": "váltás",
"coins_selected": "Érmék kiválasztva ({number})",
"selected_summ": "{value} kijelölve",
"empty": "Ez a tárca jelenleg üres.",
"freeze": "zárolás",
"freezeLabel": "zárolás",
"freezeLabel_un": "Zárolás feloldása",
@ -505,8 +542,12 @@
"sats": "sats"
},
"addresses": {
"sign_title": "Aláíró/Hitelesíŧő üzenet",
"sign_help": "Itt létrehozhat vagy ellenőrizhet kriptográfiai aláírást egy Bitcoin-cím alapján",
"sign_sign": "Aláír",
"sign_verify": "Hitelesít",
"sign_signature_correct": "Hitelesítés sikeres!",
"sign_signature_incorrect": "Sikertelen hitelesítés!",
"sign_placeholder_address": "Cím",
"sign_placeholder_message": "Üzenet",
"sign_placeholder_signature": "Szignatúra",

View file

@ -92,6 +92,10 @@ const setDateTimeLocale = async () => {
lang = 'ko';
require('dayjs/locale/ko');
break;
case 'lrc':
lang = 'fa';
require('dayjs/locale/fa');
break;
case 'kn':
require('dayjs/locale/kn');
break;
@ -227,6 +231,7 @@ const loc = new Localization({
it: require('./it.json'),
jp_jp: require('./jp_jp.json'),
ko_kr: require('./ko_KR.json'),
lrc: require('./lrc.json'),
ms: require('./ms.json'),
kn: require('./kn.json'),
ne: require('./ne.json'),

View file

@ -427,7 +427,6 @@
"no_ln_wallet_error": "Prima di pagare una fattura Lightning, devi aggiungere un portafoglio Lightning.",
"looks_like_bip38": "Questa sembra essere una chiave privata protetta da password (BIP38).",
"reorder_title": "Riordina Portafogli",
"reorder_instructions": "Tocca e tieni premuto su un portafoglio per trascinarlo da una parte all'altra della lista.",
"please_continue_scanning": "Per favore continua ad effettuare la scansione.",
"select_no_bitcoin": "Non è disponibile alcun portafoglio Bitcoin.",
"select_no_bitcoin_exp": "È necessario un portafoglio Bitcoin per ricaricare i portafogli Lightning. Per favore creane o importane uno.",

View file

@ -271,6 +271,7 @@
"encrypt_tstorage": "ストレージ",
"encrypt_use": "{type} を使う",
"encrypt_use_expl": "{type} は、トランザクションの実行、ウォレットのロック解除、エクスポート、または削除を行う前の本人確認に使用されます。{type} は暗号化されたストレージのロック解除には使用されません。",
"biometrics_fail": "もし {type} が有効でない、または解除に失敗した場合、デバイスのパスコードを代わりに使うことができます。",
"general": "一般情報",
"general_adv_mode": "上級者モード",
"general_adv_mode_e": "この機能を有効にすると、異なるウォレットタイプ、接続先の LNDHub インスタンスの指定、ウォレット作成時のカスタムエントロピーなどの高度なオプションが表示されます。",
@ -281,6 +282,7 @@
"language": "言語",
"last_updated": "最終更新",
"language_isRTL": "言語の向きを適用するにはBlueWalletの再起動が必要です。",
"license": "ライセンス",
"lightning_error_lndhub_uri": "無効なLndHub URIです",
"lightning_saved": "変更は正常に保存されました",
"lightning_settings": "Lightning 設定",
@ -513,6 +515,7 @@
"i_have_mnemonics": "この鍵のシードを持っています...",
"type_your_mnemonics": "お持ちの金庫キーをインポートするためシードを入れてください。",
"this_is_cosigners_xpub": "これは共同署名のXPUBです。他のウォレットにインポートできます。共有しても安全です。",
"this_is_cosigners_xpub_airdrop": "AirDropで共有する場合、受信側は協調する画面を開いている必要があります。",
"wallet_key_created": "金庫キーが作成されました。少し時間を取って、ニーモニックシードを安全にバックアップしてください。",
"are_you_sure_seed_will_be_lost": "よろしいですか?バックアップを取っておかないと、ニーモニックシードは失われてしまいます。",
"forget_this_seed": "このシードではなくxpubを代わりに利用する",

View file

@ -407,7 +407,6 @@
"no_ln_wallet_error": "라이트닝 청구서를 지불하기 전 먼저 라이트닝 지갑을 추가해야 합니다.",
"looks_like_bip38": "이것은 패스워드 보호된 비밀키(BIP38)로 보입니다.",
"reorder_title": "지갑 재정렬",
"reorder_instructions": "리스트를 넘겨 끌어가려면 지갑에 계속 누르기를 하세요",
"please_continue_scanning": "계속 스캔하세요.",
"select_no_bitcoin": "현재 사용 가능한 비트코인 월렛이 없습니다.",
"select_no_bitcoin_exp": "라이트닝 지갑을 재충전하시려면 비트코인 지갑이 필요합니다. 새로 만들기 또는 들여오기를 하시기바랍니다.",

View file

@ -18,6 +18,7 @@ export const AvailableLanguages: Readonly<TLanguage[]> = Object.freeze([
{ label: 'Ελληνικά (EL)', value: 'el' },
{ label: 'فارسی (FA)', value: 'fa', isRTL: true },
{ label: 'لۊری بختیاری (BQI)', value: 'bqi', isRTL: true },
{ label: 'لٛۏری شومالی (LRC)', value: 'lrc', isRTL: true },
{ label: 'Français (FR)', value: 'fr_fr' },
{ label: 'עִברִית (HE)', value: 'he', isRTL: true },
{ label: 'Italiano (IT)', value: 'it' },

167
loc/lrc.json Normal file
View file

@ -0,0 +1,167 @@
{
"_": {
"cancel": "لقو",
"continue": "ادامه",
"enter_password": "رزمن بزݩ",
"of": "{number} د {total}",
"ok": "خو",
"yes": "ٱ",
"no": "نه",
"success": "مۏوفق بی",
"wallet_key": "کلٛیل کیف پیلٛ",
"refresh": "وانۊ کردن",
"more": "بؽشتر",
"enter_amount": "مقدارن بزݩ"
},
"azteco": {
"codeIs": "کود تخفیف شما",
"redeem": "ازاف کردن وه کیف پیلٛ",
"success": "مۏوفق بی"
},
"entropy": {
"title": "آنتروپی"
},
"errors": {
"error": "ختا",
"network": "ختا شبکه"
},
"lnd": {
"active": "فعال",
"inactive": "قیر فعال",
"channels": "تورگیا",
"no_channels": "بؽ تورگه",
"claim_balance": "تسویه مۉجۊدی {balance}",
"close_channel": "بستن تورگه",
"new_channel": "تورگه نۊ",
"errorInvoiceExpired": "سۊرت هساو مونقزی بیه.",
"force_close_channel": "بستن اجباری تورگه؟",
"expired": "مونقزی بیه",
"node_alias": "نوم موستعار گره",
"payButton": "پرداخت",
"payment": "پرداخت",
"placeholder": "سۊرت هساو یا آدرس",
"open_channel": "واز کردن تورگه",
"potentialFee": "کارمزد ائتمالی: {fee}",
"refill": "پور کردن",
"refill_external": "پور کردن وا کیف پیلٛ خارجی",
"refill_lnd_balance": "پور کردن مۉجۊدی کیف پیلٛ لایتنینگ",
"can_send": "مؽتونه کلٛ بکه",
"can_receive": "مؽتونه بگره"
},
"lndViewInvoice": {
"additional_info": "دونسمنیا بؽشتر",
"for": "سی:",
"lightning_invoice": "سۊرت هساو لایتنینگ",
"open_direct_channel": "تورگه موستقیمی وا اؽ گره واز بکو:",
"sats": "ساتۊشی پرداخت بکو.",
"wasnt_paid_and_expired": "اؽ سۊرت هساو پرداخت نبیه ۉ مونقزی بیه."
},
"plausibledeniability": {
"password_should_not_match": "رزم ها وه کار مؽره. یه رزم هنی نه وه کار بیر.",
"passwords_do_not_match": "رزمیات چی یک نؽسن، دۏورته امتهانشو بکو.",
"retype_password": "رزمن دۏورته هؽل بکو",
"success": "مۏوفق بی"
},
"pleasebackup": {
"ask_no": "نه، مه نارم.",
"ask_yes": "ٱ، مه دارم."
},
"receive": {
"details_setAmount": "گرؽتن وا مقدار",
"details_share": "یک رسونی",
"header": "گرتن"
},
"send": {
"broadcastError": "ختا",
"broadcastSuccess": "مۏوفق بی",
"confirm_header": "تایید",
"confirm_sendNow": "هه ایسه کلٛ بکو",
"create_amount": "مقدار",
"create_copy": "لٛف گری ۉ دماتر مونتشر بکو",
"create_fee": "کارمزد",
"create_memo": "ویرداشت",
"create_satoshi_per_vbyte": "ساتۊشی سی هر بایت مجازی",
"create_to": "وه",
"details_address": "آدرس",
"details_note_placeholder": "ویرداشت وه خوت",
"details_scan": "اسکن",
"details_unrecognized_file_format": "قالو فایل نشناخته",
"dynamic_init": "ها ره موفته",
"fee_10m": "10 دیقه",
"fee_1d": "1 رۊز",
"fee_3h": "3 ساعت",
"fee_fast": "زلٛ",
"fee_medium": "مؽنجا",
"header": "کلٛ کردن",
"psbt_sign": "امزا کردن تراکونش",
"permission_storage_later": "دماتر دم بپورس."
},
"settings": {
"about_selftest": "ره ونن خوش آزمایی",
"about_selftest_electrum_disabled": "خوش آزمایی د هالت آفلاین د دسرس نؽ. هالت آفلاینن قیر فعال بکو ۉ دۏورته تفره بکو.",
"about_sm_github": "گیت هاب",
"about_sm_discord": "سرور دیسکورد",
"about_sm_telegram": "تورگه تلگرام",
"advanced_options": "گژکیا پؽش رته",
"biometrics": "بیومتریک",
"biom_conf_identity": "هوویت خوتونه تایید بکؽت.",
"currency": "واهد پیلٛ",
"currency_source": "قیمت گرته بیه د",
"default_info": "دونسمنیا پؽش فرز",
"default_title": "موقه ره ونن",
"electrum_offline_mode": "هالت آفلاین",
"use_ssl": "SSL نه وه کار بییر",
"set_electrum_server_as_default": "{server} سی سرور پؽش فرز الکترام ساموݩ بۊئه؟",
"set_lndhub_as_default": "{server} سی سرور پؽش فرز LNDHub ساموݩ بۊئه؟",
"electrum_settings_server": "سرور الکترام",
"electrum_status": "وزیت",
"electrum_clear_alert_title": "ویرگار پاک بۊئه؟",
"electrum_clear_alert_message": "مؽهای ویرگار سرور الکترامن پاک بکی؟",
"electrum_clear_alert_cancel": "لقو",
"electrum_clear_alert_ok": "خو",
"electrum_history": "ویرگار سرور",
"encrypt_title": "امنیت",
"encrypt_use": "{type} نه وه کار بییر",
"general_adv_mode": "هالت پؽش رته",
"header": "سامونیا",
"language": "زوݩ",
"lightning_settings": "سامونیا لایتنینگ",
"network": "شبکه",
"network_electrum": "سرور الکترام",
"notifications": "وارسونیا",
"password": "رزم",
"privacy": "سی خومی",
"privacy_read_clipboard": "ونن ویرگه",
"privacy_system_settings": "سامونیا دسگا",
"rate": "نرخ",
"retype_password": "رزمن دۏورته هؽل بکو",
"widgets": "اوزارکیا",
"tools": "اوزاریا"
},
"notifications": {
"ask_me_later": "دماتر دم بپورس."
},
"transactions": {
"copy_link": "لٛف گری لینگ",
"details_copy": "لٛف گری",
"date": "ویرگار",
"details_received": "گرته بیه"
},
"wallets": {
"add_bitcoin": "بیت کوین",
"details_address": "آدرس",
"details_advanced": "پؽش رته"
},
"multisig": {
"confirm": "تایید",
"header": "کلٛ کردن",
"share": "یک رسونی",
"co_sign_transaction": "امزا کردن تراکونش",
"of": "د",
"ms_help_title5": "هالت پؽش رته"
},
"addresses": {
"sign_placeholder_address": "آدرس",
"type_receive": "گرتن"
}
}

View file

@ -410,7 +410,6 @@
"no_ln_wallet_error": "Før du betaler en Lightning-faktura, må du først legge til en Lightning-lommebok.",
"looks_like_bip38": "Dette ser ut som en passordbeskyttet privat nøkkel (BIP38).",
"reorder_title": "Omorganisere Lommebøker",
"reorder_instructions": "Trykk og hold en lommebok for å dra den rundt på listen.",
"please_continue_scanning": "Vennligst fortsett å skanne.",
"select_no_bitcoin": "Det er for øyeblikket ingen tilgjengelige Bitcoin-lommebøker.",
"select_no_bitcoin_exp": "En Bitcoin-lommebok kreves for å fylle Lightning-lommebøker. Opprett eller importer en.",

View file

@ -8,13 +8,21 @@
"never": "Nooit",
"of": "{number} van {total}",
"ok": "Oké",
"storage_is_encrypted": "Uw opslag is versleuteld. Wachtwoord is vereist om het te ontcijferen",
"storage_is_encrypted": "Uw opslag is versleuteld. Wachtwoord is vereist om te ontcijferen.",
"yes": "Ja",
"no": "Nee",
"save": "Opslaan",
"seed": "Seed",
"success": "Succes",
"wallet_key": "Wallet sleutel"
"wallet_key": "Wallet sleutel",
"close": "Sluit",
"change_input_currency": "Verandere invoer valuta",
"refresh": "Vernieuw",
"more": "Meer",
"pick_image": "Kies afbeelding uit bilbiotheek.",
"pick_file": "Kies een bestand.",
"enter_amount": "Voer bedrag in",
"qr_custom_input_button": "Tik 10 keer om aangepaste invoer in te geven"
},
"alert": {
"default": "Melding"
@ -46,6 +54,7 @@
"claim_balance": "Saldo claimen {balance}",
"close_channel": "Sluit kanaal",
"new_channel": "Nieuw kanaal",
"errorInvoiceExpired": "Factuur verlopen.",
"force_close_channel": "Het sluiten van een kanaal forceren?",
"expired": "Verlopen",
"node_alias": "Node alias",

View file

@ -4,6 +4,8 @@
"cancel": "Anuluj",
"continue": "Kontynuuj",
"clipboard": "Schowek",
"discard_changes": "Odrzucić zmiany?",
"discard_changes_explain": "Masz niezapisane zmiany. Czy na pewno chcesz je porzucić i opuścić ten ekran?",
"enter_password": "Wprowadź hasło",
"never": "Nigdy",
"of": "{number} z {total}",
@ -23,7 +25,8 @@
"pick_image": "Wybierz obrazek z biblioteki",
"pick_file": "Wybierz plik",
"enter_amount": "Wprowadź kwotę",
"qr_custom_input_button": "Tapnij 10 razy aby wprowadzić własne dane"
"qr_custom_input_button": "Tapnij 10 razy aby wprowadzić własne dane",
"unlock": "Odblokuj"
},
"alert": {
"default": "Powiadomienie"
@ -228,6 +231,7 @@
"about_sm_twitter": "Obserwuj nas na Twitterze",
"advanced_options": "Opcje Zaawansowane",
"biometrics": "Biometria",
"biometrics_no_longer_available": "Ustawienia Twojego urządzenia zostały zmienione i nie są już zgodne z wybranymi ustawieniami bezpieczeństwa w aplikacji. Proszę ponownie włączyć biometrię lub kod dostępu, a następnie uruchomić ponownie aplikację, aby zastosować te zmiany.",
"biom_10times": "Próbowałeś podać hasło 10 razy. Czy chcesz zresetować magazyn danych? To usunie wszystkie portfele i odszyfruje dane.",
"biom_conf_identity": "Proszę potwierdź swoją tożsamość",
"biom_no_passcode": "Twoje urządzenie nie ma hasła. Aby przejść dalej, skonfiguruj hasło w Ustawieniach aplikacji.",
@ -271,6 +275,7 @@
"encrypt_tstorage": "Schowek",
"encrypt_use": "Użyj {type}",
"encrypt_use_expl": "{type} będzie użyty w celu potwierdzenia Twojej tożsamości przed wykonaniem transakcji, odblokowaniem, eksportem lub usunięciem portfela. {type} nie będzie użyty do odblokowanie danych zaszyfrowanych.",
"biometrics_fail": "Jeśli {type} nie jest włączony lub nie udaje się odblokować, możesz alternatywnie użyć kodu dostępu swojego urządzenia.",
"general": "Ogólne",
"general_adv_mode": "Tryb zaawansowany",
"general_adv_mode_e": "Gdy włączone, zobaczysz zaawansowane ustawienia takie jak np. różne typy portfeli, zdolność do określenia instancji LNDHub, z którą chcesz się połączyć oraz niestandardowej entropii w trakcie tworzenia portfela.",
@ -514,6 +519,7 @@
"i_have_mnemonics": "Mam ziarno dla tego klucza",
"type_your_mnemonics": "Wprowadź ziarno by zaimportować Twój istniejący klucz Skarbca.",
"this_is_cosigners_xpub": "To jest XPUB współsygnatariusza — gotowy do zaimportowania do innego portfela. Udostępniaine go jest bezpieczne.",
"this_is_cosigners_xpub_airdrop": "Jeśli udostępniasz za pomocą AirDrop, odbiorcy muszą znajdować się na ekranie koordynacji.",
"wallet_key_created": "Twój klucz Skarbca został utworzony. Poświęć chwilę by zrobić kopię bezpieczeństwa Twojego wyrażenia mnemonicznego.",
"are_you_sure_seed_will_be_lost": "Czy na pewno? Twoje wyrażenie mnemoniczne zostanie utracone jeśli nie masz kopii bezpieczeństwa.",
"forget_this_seed": "Zapomnij to ziarno i w zamian użyj XPUB.",

View file

@ -271,6 +271,7 @@
"encrypt_tstorage": "Armazenamento",
"encrypt_use": "Usar {type}",
"encrypt_use_expl": "{type} será usado para confirmar sua identidade antes de fazer uma transação, desbloquear, exportar ou deletar uma carteira. {type} não será usado para desbloquear armazenamento encriptado.",
"biometrics_fail": "Se {type} não estiver habilitado ou falhar ao desbloquear, você pode usar o código de acesso do seu dispositivo como alternativa.",
"general": "Geral",
"general_adv_mode": "Modo Avançado",
"general_adv_mode_e": "Quando ativado, você verá opções avançadas, como diferentes tipos de carteira, a capacidade de especificar a instância do LNDHub à qual deseja se conectar e a entropia personalizada durante a criação da carteira.",
@ -281,6 +282,7 @@
"language": "Idioma",
"last_updated": "Última Atualização",
"language_isRTL": "É necessário reiniciar a BlueWallet para que a nova orientação linguística seja ativada.",
"license": "Licença",
"lightning_error_lndhub_uri": "URI LNDHub inválida",
"lightning_saved": "Suas alterações foram salvas com sucesso.",
"lightning_settings": "Configurações Lightning",
@ -513,6 +515,7 @@
"i_have_mnemonics": "Eu tenho uma seed para esta chave...",
"type_your_mnemonics": "Insira uma seed para importar a sua chave do Cofre",
"this_is_cosigners_xpub": "Este é o XPUB da coassinatura—pronto para ser importado para outra carteira. É seguro compartilhá-la .",
"this_is_cosigners_xpub_airdrop": "Se você compartilhar via AirDrop, os recebedores devem estar na tela de coordenação.",
"wallet_key_created": "Sua chave do Cofre foi criada. Reserve um momento para fazer backup com segurança de sua seed.",
"are_you_sure_seed_will_be_lost": "Você tem certeza? Sua seed mnemônica será perdida se você não tiver um backup",
"forget_this_seed": "Esquecer esta seed e usar a XPUB no lugar.",

View file

@ -87,7 +87,6 @@
"open_direct_channel": "Открыть канал с этой нодой:",
"please_pay_between_and": "Оплатите от {min} до {max}",
"please_pay": "Пожалуйста, оплатите",
"preimage": "",
"sats": "sats",
"wasnt_paid_and_expired": "Этот инвойс не был оплачен и просрочен"
},
@ -477,8 +476,6 @@
"header": "Отправить",
"share": "Поделиться",
"view": "Посмотреть",
"shared_key_detected": "",
"shared_key_detected_question": "",
"manage_keys": "Управление ключами",
"how_many_signatures_can_bluewallet_make": "количество подписей, которое может сделать BlueWallet",
"signatures_required_to_spend": "Необходимо {number} подписей ",
@ -548,8 +545,7 @@
"autofill_word": {
"title": "Сгенерировать финальное мнемоническое слово",
"enter": "Введите вашу неполную мнемоническую фразу",
"generate_word": "Сгенерируйте финальное слово",
"error": ""
"generate_word": "Сгенерируйте финальное слово"
},
"cc": {
"change": "Сдача",
@ -572,7 +568,6 @@
},
"addresses": {
"copy_private_key": "Копировать приватный ключ",
"sensitive_private_key": "",
"sign_title": "Подписать/Проверить сообщение",
"sign_help": "Здесь вы можете создать или проверить криптографическую подпись на основе адреса Bitcoin.",
"sign_sign": "Подписать",

View file

@ -405,7 +405,6 @@
"no_ln_wallet_error": "අකුණු ඉන්වොයිසියක් ගෙවීමට පෙර, ඔබ මුලින්ම අකුණු පසුම්බියක් එකතු කළ යුතුය.",
"looks_like_bip38": "මෙය මුරපදයකින් ආරක්‍ෂිත පුද්ගලික යතුරක් ලෙස පෙනේ (BIP38).",
"reorder_title": "පසුම්බි නැවත ඇණවුම් කරන්න",
"reorder_instructions": "ලැයිස්තුව හරහා ඇදගෙන යාමට පසුම්බියක් මත තට්ටු කර අල්ලාගෙන සිටින්න.",
"please_continue_scanning": "කරුණාකර ස්කෑන් කිරීම දිගටම කරගෙන යන්න.",
"select_no_bitcoin": "දැනට බිට්කොයින් පසුම්බි නොමැත.",
"select_no_bitcoin_exp": "ලයිට්නින් පසුම්බි නැවත පිරවීම සඳහා බිට්කොයින් පසුම්බියක් අවශ්‍ය වේ. කරුණාකර එකක් සාදා හෝ ආයාත කරන්න.",

View file

@ -414,7 +414,6 @@
"no_ln_wallet_error": "Za plačilo Lightning računa, morate najprej dodati Lightning denarnico.",
"looks_like_bip38": "Zasebni ključ je verjetno zaščiten z geslom (BIP38)",
"reorder_title": "Preureditev Denarnic",
"reorder_instructions": "Tapnite in pridržite denarnico, da jo povlečete po seznamu.",
"please_continue_scanning": "Nadaljujte s skeniranjem",
"select_no_bitcoin": "Trenutno ni na voljo nobena Bitcoin denarnica.",
"select_no_bitcoin_exp": "Za napolnitev Lightning denarnic je potrebna Bitcoin denarnica. Ustvarite ali uvozite denarnico.",

View file

@ -429,7 +429,6 @@
"no_ln_wallet_error": "Innan du betalar en Lightning-faktura måste du först lägga till en Lightning-plånbok.",
"looks_like_bip38": "Detta ser ut som en lösenordsskyddad privat nyckel (BIP38).",
"reorder_title": "Sortera plånböcker",
"reorder_instructions": "Tryck och håll kvar en plånbok för att dra den över listan.",
"please_continue_scanning": "Fortsätt att skanna.",
"select_no_bitcoin": "Det finns för närvarande inga tillgängliga Bitcoin-plånböcker.",
"select_no_bitcoin_exp": "En Bitcoin-plånbok krävs för att fylla på Lightning-plånböcker. Vänligen skapa eller importera en.",

View file

@ -423,7 +423,6 @@
"no_ln_wallet_error": "Trước khi thanh toán hoá đơn Lightning, đầu tiên bạn phải thêm một ví Lightning.",
"looks_like_bip38": "Cái này trông giống một khoá cá nhân được bảo vệ bằng mật khẩu (BIP38).",
"reorder_title": "Sắp xếp lại các vị",
"reorder_instructions": "Chạm và giữ một ví để kéo nó trong danh sách.",
"please_continue_scanning": "Vui lòng quét tiếp.",
"select_no_bitcoin": "Hiện tại không có ví Bitcoin có sẵn.",
"select_no_bitcoin_exp": "Bạn phải sử dụng ví Bitcoin đễ nạp tiền vào ví Lightning. Hãy tạo hoặc nhập một ví Bitcoin.",

222
package-lock.json generated
View file

@ -1,27 +1,27 @@
{
"name": "bluewallet",
"version": "6.5.8",
"version": "6.6.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "bluewallet",
"version": "6.5.8",
"version": "6.6.0",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@babel/preset-env": "^7.20.0",
"@bugsnag/react-native": "7.22.5",
"@bugsnag/source-maps": "2.3.1",
"@bugsnag/react-native": "7.22.6",
"@bugsnag/source-maps": "2.3.2",
"@keystonehq/bc-ur-registry": "0.6.4",
"@ngraveio/bc-ur": "1.1.6",
"@noble/secp256k1": "1.6.3",
"@react-native-async-storage/async-storage": "1.22.3",
"@react-native-clipboard/clipboard": "1.13.2",
"@react-native-community/push-notification-ios": "1.11.0",
"@react-navigation/drawer": "6.6.11",
"@react-navigation/native": "6.1.14",
"@react-navigation/native-stack": "6.9.22",
"@react-navigation/drawer": "6.6.13",
"@react-navigation/native": "6.1.15",
"@react-navigation/native-stack": "6.9.24",
"@remobile/react-native-qrcode-local-image": "https://github.com/BlueWallet/react-native-qrcode-local-image",
"@spsina/bip47": "github:BlueWallet/bip47#0a2f02c90350802f2ec93afa4e6c8843be2d687c",
"aezeed": "0.0.5",
@ -49,7 +49,7 @@
"events": "3.3.0",
"frisbee": "3.1.0",
"junderw-crc32c": "1.2.0",
"lottie-react-native": "6.6.0",
"lottie-react-native": "6.7.0",
"metro-react-native-babel-preset": "0.77.0",
"path-browserify": "1.0.1",
"payjoin-client": "1.0.1",
@ -72,7 +72,7 @@
"react-native-handoff": "https://github.com/BlueWallet/react-native-handoff#31d005f93d31099d0e564590a3bbd052b8a02b39",
"react-native-haptic-feedback": "2.2.0",
"react-native-idle-timer": "https://github.com/BlueWallet/react-native-idle-timer#8587876d68ab5920e79619726aeca9e672beaf2b",
"react-native-image-picker": "7.1.0",
"react-native-image-picker": "7.1.1",
"react-native-ios-context-menu": "github:BlueWallet/react-native-ios-context-menu#v1.15.3",
"react-native-keychain": "8.2.0",
"react-native-linear-gradient": "2.8.3",
@ -88,7 +88,7 @@
"react-native-quick-actions": "0.3.13",
"react-native-randombytes": "3.6.1",
"react-native-rate": "1.2.12",
"react-native-reanimated": "3.7.2",
"react-native-reanimated": "3.8.0",
"react-native-safe-area-context": "4.9.0",
"react-native-screens": "3.29.0",
"react-native-secure-key-store": "https://github.com/BlueWallet/react-native-secure-key-store#2076b48",
@ -100,7 +100,7 @@
"react-native-webview": "13.8.1",
"react-native-widget-center": "https://github.com/BlueWallet/react-native-widget-center#a128c38",
"readable-stream": "3.6.2",
"realm": "12.6.0",
"realm": "12.6.2",
"rn-ldk": "github:BlueWallet/rn-ldk#v0.8.4",
"rn-nodeify": "10.3.0",
"scryptsy": "2.1.0",
@ -1509,20 +1509,6 @@
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-object-assign": {
"version": "7.23.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.23.3.tgz",
"integrity": "sha512-TPJ6O7gVC2rlQH2hvQGRH273G1xdoloCj9Pc07Q7JbIZYDi+Sv5gaE2fu+r5E7qK4zyt6vj0FbZaZTRU5C3OMA==",
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
@ -2260,9 +2246,9 @@
}
},
"node_modules/@bugsnag/react-native": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.22.5.tgz",
"integrity": "sha512-ZEDVfSZBxVTloFP3zkMW4xd3bEHD0R7/UNfsqTAYm2mAWLlNpMIcn6xKFdUSoMKFk0LUGwEy+7a0T2IUThL4ow==",
"version": "7.22.6",
"resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.22.6.tgz",
"integrity": "sha512-0TVul4cN0VVNzKkiiZTmmSNtFoOC5SGCW2ncikdF1sijc5IsavXDRemVMfLGg1xm0w3BWNsUjujmrmGCvkLxLA==",
"dependencies": {
"@bugsnag/core": "^7.19.0",
"@bugsnag/delivery-react-native": "^7.22.3",
@ -2284,9 +2270,9 @@
"integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA=="
},
"node_modules/@bugsnag/source-maps": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.1.tgz",
"integrity": "sha512-9xJTcf5+W7+y1fQBftSOste/3ORi+d5EeCCMdvaHSX69MKQP0lrDiSYpLwX/ErcXrTbvu7nimGGKJP2vBdF7zQ==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.2.tgz",
"integrity": "sha512-FGkGHWzX+W8T5FebBqGTBEPyfVJn4yr0o605mzt0gHVr1OO9i/JeceYZKSCHt116BmuBnwkckUKMH9ABUZ3kaw==",
"dependencies": {
"command-line-args": "^5.1.1",
"command-line-usage": "^6.1.0",
@ -6362,9 +6348,9 @@
}
},
"node_modules/@react-navigation/core": {
"version": "6.4.13",
"resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.13.tgz",
"integrity": "sha512-RBUpNG11SEYfvvWefJPxz8Xu/feWuPxln7ddRSY92aKs7u6fj/Z694Jun76Gmmw/RIHW6xcu3PH2v3Wm8nbumg==",
"version": "6.4.14",
"resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.14.tgz",
"integrity": "sha512-9DemQVmztRspTH4CRexLNfbJSOhiv6DHumH8enqiXUTgUEYfQUu2qCsEuc/ui08kuYLtoRTdH9P1ovE2xTScbg==",
"dependencies": {
"@react-navigation/routers": "^6.1.9",
"escape-string-regexp": "^4.0.0",
@ -6378,11 +6364,11 @@
}
},
"node_modules/@react-navigation/drawer": {
"version": "6.6.11",
"resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.6.11.tgz",
"integrity": "sha512-UTrgz5HJjpLt8aHZFH1mETEazwUEEVV8bJ+jaOpTl/FgwCHLCkQHZAydnZETK7fPiik3lmu2lJO1Nasl0LwZoA==",
"version": "6.6.13",
"resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.6.13.tgz",
"integrity": "sha512-fMHucgHqY+n8cOR/GgIK6sYs/L1jnaOEiDcH4lmmPJYSDwKy+Srjl32Z5v1/OG2dzgtMyKFxz2/QfMPas8PQaA==",
"dependencies": {
"@react-navigation/elements": "^1.3.26",
"@react-navigation/elements": "^1.3.28",
"color": "^4.2.3",
"warn-once": "^0.1.0"
},
@ -6397,9 +6383,9 @@
}
},
"node_modules/@react-navigation/elements": {
"version": "1.3.26",
"resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.26.tgz",
"integrity": "sha512-9rSY7MD6etU3M3j/OYUvtg4eBqABlkS39iJwwQheE89pSa9QyvXbJSsz/bUBEjFWwsOYxTVzj27bc7ulrDVWgw==",
"version": "1.3.28",
"resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.28.tgz",
"integrity": "sha512-pLKI8RsCuBAXaeTVjJo/ZeOFdZLiJXsnT5DoSpRUCq+B10b53kAI+F1sHhMShB8ALaNPD6RvB45zL8aCBwpuyA==",
"peerDependencies": {
"@react-navigation/native": "^6.0.0",
"react": "*",
@ -6408,11 +6394,11 @@
}
},
"node_modules/@react-navigation/native": {
"version": "6.1.14",
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.14.tgz",
"integrity": "sha512-nCrVi4cHXx6VnXV8fj+lLb8zjLt1LZkpxudhfV/i1KstgaoGzh9FgFDIvbWONGE8f403FIsYUnZxKHvN7asp1w==",
"version": "6.1.15",
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.15.tgz",
"integrity": "sha512-NOZH+uCZk3l+Uiy5/RKMyl+JI+OVBrrQ2SAK2Br8o2MsElPqe96TtvzeKzOAoiHfoHnwCyjdD7D66ODNYPSwDw==",
"dependencies": {
"@react-navigation/core": "^6.4.13",
"@react-navigation/core": "^6.4.14",
"escape-string-regexp": "^4.0.0",
"fast-deep-equal": "^3.1.3",
"nanoid": "^3.1.23"
@ -6423,11 +6409,11 @@
}
},
"node_modules/@react-navigation/native-stack": {
"version": "6.9.22",
"resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.22.tgz",
"integrity": "sha512-1GGztUWXY+lbsIYkGV3HCYBF7qIOHnx663csgXArzunk8CcWNsUYwM7k1/Ql8e2LyvJtdjE3OS4fjLh+d72/YA==",
"version": "6.9.24",
"resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.24.tgz",
"integrity": "sha512-+UpruwDcaELmd8cGk8XUDVKFrTMN0x+FbtwNQ7if/hJKbaMg6c43rPtjtiMFX/ycYW7J3owwJ8rcCmU4M7S4Aw==",
"dependencies": {
"@react-navigation/elements": "^1.3.26",
"@react-navigation/elements": "^1.3.28",
"warn-once": "^0.1.0"
},
"peerDependencies": {
@ -6446,6 +6432,14 @@
"nanoid": "^3.1.23"
}
},
"node_modules/@realm/fetch": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@realm/fetch/-/fetch-0.1.1.tgz",
"integrity": "sha512-hkTprw79RXGv54Je0DrjpQPLaz4QID2dO3FmthAQQWAkqwyrqMzrCGzJzLlmTKWZFsgLrN8KQyNewod27P+nJg==",
"engines": {
"node": ">=18"
}
},
"node_modules/@remobile/react-native-qrcode-local-image": {
"version": "1.0.4",
"resolved": "git+ssh://git@github.com/BlueWallet/react-native-qrcode-local-image.git#31b0113110fbafcf5a5f3ca4183a563550f5c352",
@ -17140,9 +17134,9 @@
}
},
"node_modules/lottie-react-native": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.6.0.tgz",
"integrity": "sha512-ttS8qrtjrWc/tmAbCLjvqWpC+cfbwSPLZIWpNdiW2Z1WwqA653JSSJSPxf4c/ut2rwoIuKSBBkeaY2IvmCAQAg==",
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.7.0.tgz",
"integrity": "sha512-doiF/36LaKkzo0XkgUIK8egxALNY6jGjCI4szpRuwop15LTW3DFtIA2L3pusNdaH7oM797aSH5UylIJw2k+Hgw==",
"peerDependencies": {
"@dotlottie/react-player": "^1.6.1",
"@lottiefiles/react-lottie-player": "^3.5.3",
@ -19702,9 +19696,9 @@
"license": "MIT"
},
"node_modules/react-native-image-picker": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-7.1.0.tgz",
"integrity": "sha512-An0hn2mwqjGAA2mbsXdHRTyoMMklGPT9stIjE2zvkegU7CdoFhowqvVHfnELJNZnfAiSQuIaeY//z0r1R0lsgw==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-7.1.1.tgz",
"integrity": "sha512-8zQS8RJkGq+jV6bzmIQ560QL2tccXUwouDWktJt7typfNu/QpuDm9pnESeLkdA5MHGTMm8YR09tcV1qtBD+0fg==",
"peerDependencies": {
"react": "*",
"react-native": "*"
@ -19881,22 +19875,21 @@
}
},
"node_modules/react-native-reanimated": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.7.2.tgz",
"integrity": "sha512-3KpTmYEcmHhkZeTqgWtioqnljpd4TLxKHClvarYsA3UXU2Tv+O1gqlRhVhfHBZuiDngVu436gWkde9+/VQVMFQ==",
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.8.0.tgz",
"integrity": "sha512-xoG4+nf+lSmzv37mjTUIT0gYNEIr2Mb8WXgmqR8deCJk8CC6lXT0HRpshTPVAF00LvdzrD2W/rCpiBdHN5FW2w==",
"dependencies": {
"@babel/plugin-transform-object-assign": "^7.16.7",
"@babel/plugin-transform-arrow-functions": "^7.0.0-0",
"@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0",
"@babel/plugin-transform-optional-chaining": "^7.0.0-0",
"@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
"@babel/plugin-transform-template-literals": "^7.0.0-0",
"@babel/preset-typescript": "^7.16.7",
"convert-source-map": "^2.0.0",
"invariant": "^2.2.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0-0",
"@babel/plugin-proposal-optional-chaining": "^7.0.0-0",
"@babel/plugin-transform-arrow-functions": "^7.0.0-0",
"@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
"@babel/plugin-transform-template-literals": "^7.0.0-0",
"react": "*",
"react-native": "*"
}
@ -20321,14 +20314,16 @@
"integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="
},
"node_modules/realm": {
"version": "12.6.0",
"resolved": "https://registry.npmjs.org/realm/-/realm-12.6.0.tgz",
"integrity": "sha512-lwixjVE8uiHXqRggJ9DwCxy3P1I0SUGBFG3dLQnXT20o6PdDVpXsTgE82m0svviKyDLs8yb5hLim5HRcHkH5rA==",
"version": "12.6.2",
"resolved": "https://registry.npmjs.org/realm/-/realm-12.6.2.tgz",
"integrity": "sha512-6ICUaKHNeiEAwVIKC3AkCDTCVEtpkFAVeWvmUVdmVIUjcY/+2cMLe/tgFpLcY7pEB/n1EUg3pVyUBcVuMvwdqg==",
"hasInstallScript": true,
"dependencies": {
"@realm/fetch": "^0.1.1",
"bson": "^4.7.2",
"debug": "^4.3.4",
"node-machine-id": "^1.1.12",
"path-browserify": "^1.0.1",
"prebuild-install": "^7.1.1"
},
"engines": {
@ -23703,14 +23698,6 @@
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
}
},
"@babel/plugin-transform-object-assign": {
"version": "7.23.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.23.3.tgz",
"integrity": "sha512-TPJ6O7gVC2rlQH2hvQGRH273G1xdoloCj9Pc07Q7JbIZYDi+Sv5gaE2fu+r5E7qK4zyt6vj0FbZaZTRU5C3OMA==",
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-object-rest-spread": {
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
@ -24220,9 +24207,9 @@
"integrity": "sha512-+XDk0OoeM6MZhBh7kEalbRwFuhCZST6Y1jOostfz0fhrmT4FdgQYi1FWcPNsUTcjqv7M48pOFZNx8yWI0lGaYg=="
},
"@bugsnag/react-native": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.22.5.tgz",
"integrity": "sha512-ZEDVfSZBxVTloFP3zkMW4xd3bEHD0R7/UNfsqTAYm2mAWLlNpMIcn6xKFdUSoMKFk0LUGwEy+7a0T2IUThL4ow==",
"version": "7.22.6",
"resolved": "https://registry.npmjs.org/@bugsnag/react-native/-/react-native-7.22.6.tgz",
"integrity": "sha512-0TVul4cN0VVNzKkiiZTmmSNtFoOC5SGCW2ncikdF1sijc5IsavXDRemVMfLGg1xm0w3BWNsUjujmrmGCvkLxLA==",
"requires": {
"@bugsnag/core": "^7.19.0",
"@bugsnag/delivery-react-native": "^7.22.3",
@ -24244,9 +24231,9 @@
"integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA=="
},
"@bugsnag/source-maps": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.1.tgz",
"integrity": "sha512-9xJTcf5+W7+y1fQBftSOste/3ORi+d5EeCCMdvaHSX69MKQP0lrDiSYpLwX/ErcXrTbvu7nimGGKJP2vBdF7zQ==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.2.tgz",
"integrity": "sha512-FGkGHWzX+W8T5FebBqGTBEPyfVJn4yr0o605mzt0gHVr1OO9i/JeceYZKSCHt116BmuBnwkckUKMH9ABUZ3kaw==",
"requires": {
"command-line-args": "^5.1.1",
"command-line-usage": "^6.1.0",
@ -27338,9 +27325,9 @@
}
},
"@react-navigation/core": {
"version": "6.4.13",
"resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.13.tgz",
"integrity": "sha512-RBUpNG11SEYfvvWefJPxz8Xu/feWuPxln7ddRSY92aKs7u6fj/Z694Jun76Gmmw/RIHW6xcu3PH2v3Wm8nbumg==",
"version": "6.4.14",
"resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.14.tgz",
"integrity": "sha512-9DemQVmztRspTH4CRexLNfbJSOhiv6DHumH8enqiXUTgUEYfQUu2qCsEuc/ui08kuYLtoRTdH9P1ovE2xTScbg==",
"requires": {
"@react-navigation/routers": "^6.1.9",
"escape-string-regexp": "^4.0.0",
@ -27351,37 +27338,37 @@
}
},
"@react-navigation/drawer": {
"version": "6.6.11",
"resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.6.11.tgz",
"integrity": "sha512-UTrgz5HJjpLt8aHZFH1mETEazwUEEVV8bJ+jaOpTl/FgwCHLCkQHZAydnZETK7fPiik3lmu2lJO1Nasl0LwZoA==",
"version": "6.6.13",
"resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.6.13.tgz",
"integrity": "sha512-fMHucgHqY+n8cOR/GgIK6sYs/L1jnaOEiDcH4lmmPJYSDwKy+Srjl32Z5v1/OG2dzgtMyKFxz2/QfMPas8PQaA==",
"requires": {
"@react-navigation/elements": "^1.3.26",
"@react-navigation/elements": "^1.3.28",
"color": "^4.2.3",
"warn-once": "^0.1.0"
}
},
"@react-navigation/elements": {
"version": "1.3.26",
"resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.26.tgz",
"integrity": "sha512-9rSY7MD6etU3M3j/OYUvtg4eBqABlkS39iJwwQheE89pSa9QyvXbJSsz/bUBEjFWwsOYxTVzj27bc7ulrDVWgw=="
"version": "1.3.28",
"resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.28.tgz",
"integrity": "sha512-pLKI8RsCuBAXaeTVjJo/ZeOFdZLiJXsnT5DoSpRUCq+B10b53kAI+F1sHhMShB8ALaNPD6RvB45zL8aCBwpuyA=="
},
"@react-navigation/native": {
"version": "6.1.14",
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.14.tgz",
"integrity": "sha512-nCrVi4cHXx6VnXV8fj+lLb8zjLt1LZkpxudhfV/i1KstgaoGzh9FgFDIvbWONGE8f403FIsYUnZxKHvN7asp1w==",
"version": "6.1.15",
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.15.tgz",
"integrity": "sha512-NOZH+uCZk3l+Uiy5/RKMyl+JI+OVBrrQ2SAK2Br8o2MsElPqe96TtvzeKzOAoiHfoHnwCyjdD7D66ODNYPSwDw==",
"requires": {
"@react-navigation/core": "^6.4.13",
"@react-navigation/core": "^6.4.14",
"escape-string-regexp": "^4.0.0",
"fast-deep-equal": "^3.1.3",
"nanoid": "^3.1.23"
}
},
"@react-navigation/native-stack": {
"version": "6.9.22",
"resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.22.tgz",
"integrity": "sha512-1GGztUWXY+lbsIYkGV3HCYBF7qIOHnx663csgXArzunk8CcWNsUYwM7k1/Ql8e2LyvJtdjE3OS4fjLh+d72/YA==",
"version": "6.9.24",
"resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.24.tgz",
"integrity": "sha512-+UpruwDcaELmd8cGk8XUDVKFrTMN0x+FbtwNQ7if/hJKbaMg6c43rPtjtiMFX/ycYW7J3owwJ8rcCmU4M7S4Aw==",
"requires": {
"@react-navigation/elements": "^1.3.26",
"@react-navigation/elements": "^1.3.28",
"warn-once": "^0.1.0"
}
},
@ -27393,6 +27380,11 @@
"nanoid": "^3.1.23"
}
},
"@realm/fetch": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@realm/fetch/-/fetch-0.1.1.tgz",
"integrity": "sha512-hkTprw79RXGv54Je0DrjpQPLaz4QID2dO3FmthAQQWAkqwyrqMzrCGzJzLlmTKWZFsgLrN8KQyNewod27P+nJg=="
},
"@remobile/react-native-qrcode-local-image": {
"version": "git+ssh://git@github.com/BlueWallet/react-native-qrcode-local-image.git#31b0113110fbafcf5a5f3ca4183a563550f5c352",
"from": "@remobile/react-native-qrcode-local-image@https://github.com/BlueWallet/react-native-qrcode-local-image"
@ -35456,9 +35448,9 @@
}
},
"lottie-react-native": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.6.0.tgz",
"integrity": "sha512-ttS8qrtjrWc/tmAbCLjvqWpC+cfbwSPLZIWpNdiW2Z1WwqA653JSSJSPxf4c/ut2rwoIuKSBBkeaY2IvmCAQAg=="
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.7.0.tgz",
"integrity": "sha512-doiF/36LaKkzo0XkgUIK8egxALNY6jGjCI4szpRuwop15LTW3DFtIA2L3pusNdaH7oM797aSH5UylIJw2k+Hgw=="
},
"lru-cache": {
"version": "5.1.1",
@ -37489,9 +37481,9 @@
"from": "react-native-idle-timer@https://github.com/BlueWallet/react-native-idle-timer#8587876d68ab5920e79619726aeca9e672beaf2b"
},
"react-native-image-picker": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-7.1.0.tgz",
"integrity": "sha512-An0hn2mwqjGAA2mbsXdHRTyoMMklGPT9stIjE2zvkegU7CdoFhowqvVHfnELJNZnfAiSQuIaeY//z0r1R0lsgw=="
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-7.1.1.tgz",
"integrity": "sha512-8zQS8RJkGq+jV6bzmIQ560QL2tccXUwouDWktJt7typfNu/QpuDm9pnESeLkdA5MHGTMm8YR09tcV1qtBD+0fg=="
},
"react-native-ios-context-menu": {
"version": "git+ssh://git@github.com/BlueWallet/react-native-ios-context-menu.git#e5c1217cd220bfab6e6d9a7c65838545082e3f8e",
@ -37608,11 +37600,15 @@
}
},
"react-native-reanimated": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.7.2.tgz",
"integrity": "sha512-3KpTmYEcmHhkZeTqgWtioqnljpd4TLxKHClvarYsA3UXU2Tv+O1gqlRhVhfHBZuiDngVu436gWkde9+/VQVMFQ==",
"version": "3.8.0",
"resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.8.0.tgz",
"integrity": "sha512-xoG4+nf+lSmzv37mjTUIT0gYNEIr2Mb8WXgmqR8deCJk8CC6lXT0HRpshTPVAF00LvdzrD2W/rCpiBdHN5FW2w==",
"requires": {
"@babel/plugin-transform-object-assign": "^7.16.7",
"@babel/plugin-transform-arrow-functions": "^7.0.0-0",
"@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0",
"@babel/plugin-transform-optional-chaining": "^7.0.0-0",
"@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
"@babel/plugin-transform-template-literals": "^7.0.0-0",
"@babel/preset-typescript": "^7.16.7",
"convert-source-map": "^2.0.0",
"invariant": "^2.2.4"
@ -37836,13 +37832,15 @@
"integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="
},
"realm": {
"version": "12.6.0",
"resolved": "https://registry.npmjs.org/realm/-/realm-12.6.0.tgz",
"integrity": "sha512-lwixjVE8uiHXqRggJ9DwCxy3P1I0SUGBFG3dLQnXT20o6PdDVpXsTgE82m0svviKyDLs8yb5hLim5HRcHkH5rA==",
"version": "12.6.2",
"resolved": "https://registry.npmjs.org/realm/-/realm-12.6.2.tgz",
"integrity": "sha512-6ICUaKHNeiEAwVIKC3AkCDTCVEtpkFAVeWvmUVdmVIUjcY/+2cMLe/tgFpLcY7pEB/n1EUg3pVyUBcVuMvwdqg==",
"requires": {
"@realm/fetch": "^0.1.1",
"bson": "^4.7.2",
"debug": "^4.3.4",
"node-machine-id": "^1.1.12",
"path-browserify": "^1.0.1",
"prebuild-install": "^7.1.1"
}
},

View file

@ -1,6 +1,6 @@
{
"name": "bluewallet",
"version": "6.5.8",
"version": "6.6.0",
"license": "MIT",
"repository": {
"type": "git",
@ -10,7 +10,7 @@
"@babel/core": "^7.20.0",
"@babel/runtime": "^7.20.0",
"@jest/reporters": "^27.5.1",
"@react-native/eslint-config": "^0.72.2",
"@react-native/eslint-config": "^0.74.0",
"@react-native/metro-config": "^0.73.0",
"@tsconfig/react-native": "^3.0.2",
"@types/bip38": "^3.1.2",
@ -97,17 +97,17 @@
},
"dependencies": {
"@babel/preset-env": "^7.20.0",
"@bugsnag/react-native": "7.22.5",
"@bugsnag/source-maps": "2.3.1",
"@bugsnag/react-native": "7.22.6",
"@bugsnag/source-maps": "2.3.2",
"@keystonehq/bc-ur-registry": "0.6.4",
"@ngraveio/bc-ur": "1.1.12",
"@noble/secp256k1": "1.6.3",
"@react-native-async-storage/async-storage": "1.22.3",
"@react-native-clipboard/clipboard": "1.13.2",
"@react-native-community/push-notification-ios": "1.11.0",
"@react-navigation/drawer": "6.6.11",
"@react-navigation/native": "6.1.14",
"@react-navigation/native-stack": "6.9.22",
"@react-navigation/drawer": "6.6.15",
"@react-navigation/native": "6.1.17",
"@react-navigation/native-stack": "6.9.26",
"@remobile/react-native-qrcode-local-image": "https://github.com/BlueWallet/react-native-qrcode-local-image",
"@spsina/bip47": "github:BlueWallet/bip47#0a2f02c90350802f2ec93afa4e6c8843be2d687c",
"aezeed": "0.0.5",
@ -135,7 +135,7 @@
"events": "3.3.0",
"frisbee": "3.1.0",
"junderw-crc32c": "1.2.0",
"lottie-react-native": "6.6.0",
"lottie-react-native": "6.7.0",
"metro-react-native-babel-preset": "0.77.0",
"path-browserify": "1.0.1",
"payjoin-client": "1.0.1",
@ -150,7 +150,7 @@
"react-native-crypto": "2.2.0",
"react-native-default-preference": "1.4.4",
"react-native-device-info": "10.13.1",
"react-native-document-picker": "https://github.com/BlueWallet/react-native-document-picker#27fddb9d9a88fff09a41ce654f7008cfd33cb4c4",
"react-native-document-picker": "https://github.com/BlueWallet/react-native-document-picker#6033c4e1b0dd0a6760b5f5a5a2c3b2e5d07f2ae4",
"react-native-draggable-flatlist": "github:BlueWallet/react-native-draggable-flatlist#ebfddc4",
"react-native-elements": "3.4.3",
"react-native-fs": "2.20.0",
@ -158,7 +158,7 @@
"react-native-handoff": "https://github.com/BlueWallet/react-native-handoff#31d005f93d31099d0e564590a3bbd052b8a02b39",
"react-native-haptic-feedback": "2.2.0",
"react-native-idle-timer": "https://github.com/BlueWallet/react-native-idle-timer#8587876d68ab5920e79619726aeca9e672beaf2b",
"react-native-image-picker": "7.1.0",
"react-native-image-picker": "7.1.1",
"react-native-ios-context-menu": "github:BlueWallet/react-native-ios-context-menu#v1.15.3",
"react-native-keychain": "8.2.0",
"react-native-linear-gradient": "2.8.3",
@ -174,7 +174,7 @@
"react-native-quick-actions": "0.3.13",
"react-native-randombytes": "3.6.1",
"react-native-rate": "1.2.12",
"react-native-reanimated": "3.7.2",
"react-native-reanimated": "3.8.1",
"react-native-safe-area-context": "4.9.0",
"react-native-screens": "3.29.0",
"react-native-secure-key-store": "https://github.com/BlueWallet/react-native-secure-key-store#2076b48",
@ -186,7 +186,7 @@
"react-native-webview": "13.8.1",
"react-native-widget-center": "https://github.com/BlueWallet/react-native-widget-center#a128c38",
"readable-stream": "3.6.2",
"realm": "12.6.0",
"realm": "12.6.2",
"rn-ldk": "github:BlueWallet/rn-ldk#v0.8.4",
"rn-nodeify": "10.3.0",
"scryptsy": "2.1.0",

View file

@ -0,0 +1,11 @@
// ActionSheet.common.ts
export interface ActionSheetOptions {
title?: string;
message?: string;
options: string[]; // Array of button labels.
destructiveButtonIndex?: number;
cancelButtonIndex?: number;
anchor?: number;
}
export type CompletionCallback = (buttonIndex: number) => void;

View file

@ -1,10 +0,0 @@
import { ActionSheetIOS, InteractionManager } from 'react-native';
export default class ActionSheet {
static showActionSheetWithOptions(options, completion) {
ActionSheetIOS.dismissActionSheet();
InteractionManager.runAfterInteractions(() => {
ActionSheetIOS.showActionSheetWithOptions(options, completion);
});
}
}

15
screen/ActionSheet.ios.ts Normal file
View file

@ -0,0 +1,15 @@
// ActionSheet.ios.ts
import { ActionSheetIOS, InteractionManager } from 'react-native';
import { ActionSheetOptions, CompletionCallback } from './ActionSheet.common';
export default class ActionSheet {
static showActionSheetWithOptions(options: ActionSheetOptions, completion: CompletionCallback): void {
InteractionManager.runAfterInteractions(() => {
const iosOptions = {
...options,
anchor: options.anchor,
};
ActionSheetIOS.showActionSheetWithOptions(iosOptions, completion);
});
}
}

View file

@ -1,9 +0,0 @@
import { Alert, InteractionManager } from 'react-native';
export default class ActionSheet {
static showActionSheetWithOptions(options) {
InteractionManager.runAfterInteractions(() => {
Alert.alert(options.title, options.message, options.buttons, { cancelable: true });
});
}
}

26
screen/ActionSheet.ts Normal file
View file

@ -0,0 +1,26 @@
// ActionSheet.ts
import { Alert, InteractionManager } from 'react-native';
import { ActionSheetOptions, CompletionCallback } from './ActionSheet.common';
export default class ActionSheet {
static showActionSheetWithOptions(options: ActionSheetOptions, completion: CompletionCallback): void {
InteractionManager.runAfterInteractions(() => {
const alertOptions = options.options.map((option, index) => {
let style: 'default' | 'cancel' | 'destructive' = 'default';
if (index === options.destructiveButtonIndex) {
style = 'destructive';
} else if (index === options.cancelButtonIndex) {
style = 'cancel';
}
return {
text: option,
onPress: () => completion(index),
style,
};
});
Alert.alert(options.title || '', options.message || '', alertOptions, { cancelable: !!options.cancelButtonIndex });
});
}
}

View file

@ -1,17 +1,18 @@
import React, { useCallback, useContext, useEffect, useReducer, useRef } from 'react';
import { View, Image, TouchableOpacity, ActivityIndicator, useColorScheme, NativeModules, StyleSheet } from 'react-native';
import { Icon } from 'react-native-elements';
import Biometric, { BiometricType } from './class/biometrics';
import { StackActions, useNavigation } from '@react-navigation/native';
import { BlueStorageContext } from './blue_modules/storage-context';
import { isHandset } from './blue_modules/environment';
import triggerHapticFeedback, { HapticFeedbackTypes } from './blue_modules/hapticFeedback';
import SafeArea from './components/SafeArea';
import { View, Image, ActivityIndicator, NativeModules, StyleSheet } from 'react-native';
import Biometric, { BiometricType } from '../class/biometrics';
import { BlueStorageContext } from '../blue_modules/storage-context';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../blue_modules/hapticFeedback';
import SafeArea from '../components/SafeArea';
import { BlueTextCentered } from '../BlueComponents';
import loc from '../loc';
import Button from '../components/Button';
enum AuthType {
Encrypted,
Biometrics,
None,
BiometricsUnavailable,
}
type State = {
@ -54,14 +55,12 @@ const UnlockWith: React.FC = () => {
const [state, dispatch] = useReducer(reducer, initialState);
const isUnlockingWallets = useRef(false);
const { setWalletsInitialized, isStorageEncrypted, startAndDecrypt } = useContext(BlueStorageContext);
const navigation = useNavigation();
const colorScheme = useColorScheme();
const successfullyAuthenticated = useCallback(() => {
setWalletsInitialized(true);
navigation.dispatch(StackActions.replace(isHandset ? 'Navigation' : 'DrawerRoot'));
isUnlockingWallets.current = false;
}, [setWalletsInitialized, navigation]);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const unlockWithBiometrics = useCallback(async () => {
if (isUnlockingWallets.current || state.isAuthenticating) return;
@ -98,6 +97,7 @@ const UnlockWith: React.FC = () => {
const storageIsEncrypted = await isStorageEncrypted();
const isBiometricUseCapableAndEnabled = await Biometric.isBiometricUseCapableAndEnabled();
const biometricType = isBiometricUseCapableAndEnabled ? await Biometric.biometricType() : undefined;
const biometricsUseEnabled = await Biometric.isBiometricUseEnabled();
if (storageIsEncrypted) {
dispatch({ type: SET_AUTH, payload: { type: AuthType.Encrypted, detail: undefined } });
@ -105,6 +105,9 @@ const UnlockWith: React.FC = () => {
} else if (isBiometricUseCapableAndEnabled) {
dispatch({ type: SET_AUTH, payload: { type: AuthType.Biometrics, detail: biometricType } });
unlockWithBiometrics();
} else if (biometricsUseEnabled && biometricType === undefined) {
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
dispatch({ type: SET_AUTH, payload: { type: AuthType.BiometricsUnavailable, detail: undefined } });
} else {
dispatch({ type: SET_AUTH, payload: { type: AuthType.None, detail: undefined } });
unlockWithKey();
@ -115,36 +118,24 @@ const UnlockWith: React.FC = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const onUnlockPressed = () => {
if (state.auth.type === AuthType.Biometrics) {
unlockWithBiometrics();
} else {
unlockWithKey();
}
};
const renderUnlockOptions = () => {
const color = colorScheme === 'dark' ? '#FFFFFF' : '#000000';
if (state.isAuthenticating) {
return <ActivityIndicator />;
} else {
switch (state.auth.type) {
case AuthType.Biometrics:
if (state.auth.detail === 'TouchID' || state.auth.detail === 'Biometrics') {
return (
<TouchableOpacity accessibilityRole="button" disabled={state.isAuthenticating} onPress={unlockWithBiometrics}>
<Icon name="fingerprint" size={64} type="font-awesome5" color={color} />
</TouchableOpacity>
);
} else if (state.auth.detail === 'FaceID') {
return (
<TouchableOpacity accessibilityRole="button" disabled={state.isAuthenticating} onPress={unlockWithBiometrics}>
<Image
source={colorScheme === 'dark' ? require('./img/faceid-default.png') : require('./img/faceid-dark.png')}
style={styles.icon}
/>
</TouchableOpacity>
);
}
return null;
case AuthType.Encrypted:
return (
<TouchableOpacity accessibilityRole="button" disabled={state.isAuthenticating} onPress={unlockWithKey}>
<Icon name="lock" size={64} type="font-awesome5" color={color} />
</TouchableOpacity>
);
return <Button onPress={onUnlockPressed} title={loc._.unlock} />;
case AuthType.BiometricsUnavailable:
return <BlueTextCentered>{loc.settings.biometrics_no_longer_available}</BlueTextCentered>;
default:
return null;
}
@ -154,7 +145,7 @@ const UnlockWith: React.FC = () => {
return (
<SafeArea style={styles.root}>
<View style={styles.container}>
<Image source={require('./img/icon.png')} style={styles.logoImage} resizeMode="contain" />
<Image source={require('../img/icon.png')} style={styles.logoImage} resizeMode="contain" />
</View>
<View style={styles.biometricRow}>{renderUnlockOptions()}</View>
</SafeArea>
@ -174,14 +165,11 @@ const styles = StyleSheet.create({
biometricRow: {
justifyContent: 'center',
flexDirection: 'row',
width: 64,
height: 64,
width: 300,
height: 60,
alignSelf: 'center',
marginBottom: 20,
},
icon: {
width: 64,
height: 64,
paddingHorizontal: 20,
},
logoImage: {
width: 100,

View file

@ -161,7 +161,7 @@ const ReceiveDetails = () => {
const balanceToShow = balance.confirmed - initialConfirmed;
if (balanceToShow > 0) {
// address has actually more coins then initially, so we definately gained something
// address has actually more coins than initially, so we definitely gained something
setShowConfirmedBalance(true);
setShowPendingBalance(false);
setShowAddress(false);

View file

@ -1,6 +1,5 @@
import React, { useEffect, useRef, useState } from 'react';
import { ActivityIndicator, findNodeHandle, ScrollView, StyleSheet, View } from 'react-native';
import { getSystemName } from 'react-native-device-info';
import { useNavigation, useRoute, useIsFocused } from '@react-navigation/native';
import { BlueSpacing20 } from '../../BlueComponents';
@ -13,11 +12,10 @@ import presentAlert from '../../components/Alert';
import { requestCameraAuthorization } from '../../helpers/scan-qr';
import { useTheme } from '../../components/themes';
import SafeArea from '../../components/SafeArea';
import { isDesktop } from '../../blue_modules/environment';
const bitcoin = require('bitcoinjs-lib');
const fs = require('../../blue_modules/fs');
const isDesktop = getSystemName() === 'Mac OS X';
const PsbtMultisigQRCode = () => {
const { navigate } = useNavigation();
const { colors } = useTheme();

View file

@ -6,7 +6,7 @@ import { useNavigation, useRoute, useIsFocused } from '@react-navigation/native'
import RNFS from 'react-native-fs';
import Biometric from '../../class/biometrics';
import { SecondButton, BlueText, BlueCard, BlueSpacing20, BlueCopyToClipboardButton } from '../../BlueComponents';
import { BlueText, BlueCard, BlueSpacing20, BlueCopyToClipboardButton } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
@ -17,6 +17,7 @@ import { requestCameraAuthorization } from '../../helpers/scan-qr';
import { useTheme } from '../../components/themes';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
import SafeArea from '../../components/SafeArea';
import { SecondButton } from '../../components/SecondButton';
const BlueElectrum = require('../../blue_modules/BlueElectrum');
const bitcoin = require('bitcoinjs-lib');
const fs = require('../../blue_modules/fs');

View file

@ -136,7 +136,6 @@ const EncryptStorage = () => {
return isCapable ? (
<>
<BlueText />
<BlueText>{loc.formatString(loc.settings.biometrics_fail, { type: biometrics.biometricsType })}</BlueText>
</>
) : null;

View file

@ -10,6 +10,7 @@ import { BlueStorageContext } from '../../blue_modules/storage-context';
import ToolTipMenu from '../../components/TooltipMenu';
import presentAlert from '../../components/Alert';
import { useTheme } from '../../components/themes';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
const dayjs = require('dayjs');
function onlyUnique(value, index, self) {
@ -113,27 +114,33 @@ const TransactionsDetails = () => {
const handleOnSaveButtonTapped = () => {
Keyboard.dismiss();
txMetadata[tx.hash] = { memo };
saveToDisk().then(_success => presentAlert({ message: loc.transactions.transaction_note_saved }));
saveToDisk().then(_success => {
triggerHapticFeedback(HapticFeedbackTypes.Success);
presentAlert({ message: loc.transactions.transaction_note_saved });
});
};
const handleOnOpenTransactionOnBlockExporerTapped = () => {
const handleOnOpenTransactionOnBlockExplorerTapped = () => {
const url = `https://mempool.space/tx/${tx.hash}`;
Linking.canOpenURL(url)
.then(supported => {
if (supported) {
Linking.openURL(url).catch(e => {
console.log('openURL failed in handleOnOpenTransactionOnBlockExporerTapped');
console.log('openURL failed in handleOnOpenTransactionOnBlockExplorerTapped');
console.log(e.message);
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
presentAlert({ message: e.message });
});
} else {
console.log('canOpenURL supported is false in handleOnOpenTransactionOnBlockExporerTapped');
console.log('canOpenURL supported is false in handleOnOpenTransactionOnBlockExplorerTapped');
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
presentAlert({ message: loc.transactions.open_url_error });
}
})
.catch(e => {
console.log('canOpenURL failed in handleOnOpenTransactionOnBlockExporerTapped');
console.log('canOpenURL failed in handleOnOpenTransactionOnBlockExplorerTapped');
console.log(e.message);
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
presentAlert({ message: e.message });
});
};
@ -311,11 +318,10 @@ const TransactionsDetails = () => {
},
]}
onPressMenuItem={handleCopyPress}
onPress={handleOnOpenTransactionOnBlockExporerTapped}
onPress={handleOnOpenTransactionOnBlockExplorerTapped}
buttonStyle={[styles.greyButton, stylesHooks.greyButton]}
>
<View style={[styles.greyButton, stylesHooks.greyButton]}>
<Text style={[styles.Link, stylesHooks.Link]}>{loc.transactions.details_show_in_block_explorer}</Text>
</View>
</ToolTipMenu>
</BlueCard>
</ScrollView>

View file

@ -0,0 +1,172 @@
import React, { memo, useCallback, useContext, useEffect, useMemo, useRef, useReducer } from 'react';
import { StyleSheet, LayoutAnimation, FlatList, ViewStyle, InteractionManager } from 'react-native';
import { DrawerContentScrollView } from '@react-navigation/drawer';
import { useIsFocused, NavigationProp, ParamListBase } from '@react-navigation/native';
import { BlueHeaderDefaultMain } from '../../BlueComponents';
import WalletsCarousel from '../../components/WalletsCarousel';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
import { useTheme } from '../../components/themes';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
import { AbstractWallet } from '../../class';
enum WalletActionType {
SetWallets = 'SET_WALLETS',
SelectWallet = 'SELECT_WALLET',
SetFocus = 'SET_FOCUS',
Navigate = 'NAVIGATE',
}
interface WalletState {
wallets: AbstractWallet[];
selectedWalletID: string | null;
isFocused: boolean;
}
interface SelectWalletAction {
type: WalletActionType.SelectWallet;
walletID: string;
walletType: string;
}
interface SelectWalletAction {
type: WalletActionType.SelectWallet;
walletID: string;
}
interface NavigateAction {
type: WalletActionType.Navigate;
screen: string;
params: { [key: string]: any };
}
interface SetFocusAction {
type: WalletActionType.SetFocus;
isFocused: boolean;
}
interface SetWalletsAction {
type: WalletActionType.SetWallets;
wallets: AbstractWallet[];
}
interface SelectWalletAction {
type: WalletActionType.SelectWallet;
walletID: string;
}
type WalletAction = SetWalletsAction | SelectWalletAction | SetFocusAction | NavigateAction;
interface DrawerListProps {
navigation: NavigationProp<ParamListBase>;
}
const walletReducer = (state: WalletState, action: WalletAction): WalletState => {
switch (action.type) {
case WalletActionType.SetWallets: {
const isSelectedWalletInNewSet = action.wallets.some(wallet => wallet.getID() === state.selectedWalletID);
return {
...state,
wallets: action.wallets,
selectedWalletID: isSelectedWalletInNewSet ? state.selectedWalletID : null,
};
}
case WalletActionType.SelectWallet: {
return { ...state, selectedWalletID: action.walletID };
}
case WalletActionType.SetFocus: {
return { ...state, isFocused: action.isFocused };
}
default:
return state;
}
};
const DrawerList: React.FC<DrawerListProps> = memo(({ navigation }) => {
const initialState: WalletState = {
wallets: [],
selectedWalletID: null,
isFocused: false,
};
const [state, dispatch] = useReducer(walletReducer, initialState);
const walletsCarousel = useRef<FlatList<AbstractWallet>>(null);
const { wallets } = useContext(BlueStorageContext);
const { colors } = useTheme();
const isFocused = useIsFocused();
const stylesHook = useMemo(
() =>
StyleSheet.create({
root: { backgroundColor: colors.elevated } as ViewStyle,
}),
[colors.elevated],
);
useEffect(() => {
dispatch({ type: WalletActionType.SetWallets, wallets });
dispatch({ type: WalletActionType.SetFocus, isFocused });
}, [wallets, isFocused]);
const handleClick = useCallback(
(item: AbstractWallet) => {
if (item?.getID) {
const walletID = item.getID();
const walletType = item.type;
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
dispatch({ type: WalletActionType.SelectWallet, walletID, walletType });
InteractionManager.runAfterInteractions(() => {
navigation.navigate({
name: 'WalletTransactions',
params: { walletID, walletType },
});
});
} else {
navigation.navigate('Navigation', { screen: 'AddWalletRoot' });
}
},
[navigation],
);
const handleLongPress = useCallback(() => {
if (state.wallets.length > 1) {
navigation.navigate('ReorderWallets');
} else {
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
}
}, [state.wallets.length, navigation]);
const onNewWalletPress = useCallback(() => {
navigation.navigate('AddWalletRoot');
}, [navigation]);
return (
<DrawerContentScrollView
contentContainerStyle={[styles.root, stylesHook.root]}
contentInsetAdjustmentBehavior="automatic"
automaticallyAdjustContentInsets={true}
showsHorizontalScrollIndicator={false}
showsVerticalScrollIndicator={false}
>
<BlueHeaderDefaultMain leftText={loc.wallets.list_title} onNewWalletPress={onNewWalletPress} isDrawerList />
<WalletsCarousel
// @ts-ignore: refactor later
data={state.wallets.concat(false as any)}
extraData={[state.wallets]}
onPress={handleClick}
handleLongPress={handleLongPress}
ref={walletsCarousel}
testID="WalletsList"
selectedWallet={state.selectedWalletID}
scrollEnabled={state.isFocused}
/>
</DrawerContentScrollView>
);
});
export default DrawerList;
const styles = StyleSheet.create({
root: {
flex: 1,
},
});

View file

@ -17,7 +17,6 @@ import {
} from 'react-native';
import { Icon } from 'react-native-elements';
import { useFocusEffect, useNavigation, useRoute } from '@react-navigation/native';
import { getSystemName } from 'react-native-device-info';
import { BlueButtonLink, BlueFormMultiInput, BlueSpacing10, BlueSpacing20, BlueText, BlueTextCentered } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import { HDSegwitBech32Wallet, MultisigCosigner, MultisigHDWallet } from '../../class';
@ -38,11 +37,11 @@ import { useTheme } from '../../components/themes';
import Button from '../../components/Button';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
import usePrivacy from '../../hooks/usePrivacy';
import { isDesktop } from '../../blue_modules/environment';
const prompt = require('../../helpers/prompt');
const A = require('../../blue_modules/analytics');
const fs = require('../../blue_modules/fs');
const isDesktop = getSystemName() === 'Mac OS X';
const staticCache = {};
const WalletsAddMultisigStep2 = () => {

View file

@ -17,7 +17,7 @@ import {
ActivityIndicator,
I18nManager,
} from 'react-native';
import { BlueCard, BlueLoading, BlueSpacing10, BlueSpacing20, BlueText, SecondButton } from '../../BlueComponents';
import { BlueCard, BlueLoading, BlueSpacing10, BlueSpacing20, BlueText } from '../../BlueComponents';
import navigationStyle from '../../components/navigationStyle';
import { LightningCustodianWallet } from '../../class/wallets/lightning-custodian-wallet';
import Biometric from '../../class/biometrics';
@ -46,6 +46,8 @@ import { PERMISSIONS, RESULTS, request } from 'react-native-permissions';
import { useTheme } from '../../components/themes';
import ListItem from '../../components/ListItem';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
import Button from '../../components/Button';
import { SecondButton } from '../../components/SecondButton';
const prompt = require('../../helpers/prompt');
@ -653,7 +655,7 @@ const WalletDetails = () => {
<BlueCard style={styles.address}>
<View>
<BlueSpacing20 />
<SecondButton onPress={navigateToWalletExport} testID="WalletExport" title={loc.wallets.details_export_backup} />
<Button onPress={navigateToWalletExport} testID="WalletExport" title={loc.wallets.details_export_backup} />
{walletTransactionsLength > 0 && (
<>
<BlueSpacing20 />

View file

@ -1,99 +0,0 @@
import React, { useContext, useEffect, useRef } from 'react';
import { StyleSheet, LayoutAnimation } from 'react-native';
import { DrawerContentScrollView } from '@react-navigation/drawer';
import PropTypes from 'prop-types';
import { useIsFocused } from '@react-navigation/native';
import { BlueHeaderDefaultMain } from '../../BlueComponents';
import WalletsCarousel from '../../components/WalletsCarousel';
import loc from '../../loc';
import { BlueStorageContext } from '../../blue_modules/storage-context';
import { useTheme } from '../../components/themes';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
const DrawerList = props => {
const walletsCarousel = useRef();
const { wallets, selectedWalletID, setSelectedWalletID } = useContext(BlueStorageContext);
const { colors } = useTheme();
const walletsCount = useRef(wallets.length);
const isFocused = useIsFocused();
const stylesHook = StyleSheet.create({
root: {
backgroundColor: colors.elevated,
},
});
useEffect(() => {
if (walletsCount.current < wallets.length) {
walletsCarousel.current?.scrollToItem({ item: wallets[walletsCount.current] });
}
walletsCount.current = wallets.length;
}, [wallets]);
const handleClick = item => {
if (item?.getID) {
const walletID = item.getID();
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
setSelectedWalletID(walletID);
props.navigation.navigate({
name: 'WalletTransactions',
params: { walletID, walletType: item.type },
});
} else {
props.navigation.navigate('Navigation', { screen: 'AddWalletRoot' });
}
};
const handleLongPress = () => {
if (wallets.length > 1) {
props.navigation.navigate('ReorderWallets');
} else {
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
}
};
const onNewWalletPress = () => {
return props.navigation.navigate('AddWalletRoot');
};
return (
<DrawerContentScrollView
{...props}
drawerContentContainerStyle={[styles.root, stylesHook.root]}
contentInsetAdjustmentBehavior="automatic"
automaticallyAdjustContentInsets
showsHorizontalScrollIndicator={false}
showsVerticalScrollIndicator={false}
>
<BlueHeaderDefaultMain leftText={loc.wallets.list_title} onNewWalletPress={onNewWalletPress} isDrawerList />
<WalletsCarousel
data={wallets.concat(false)}
extraData={[wallets]}
onPress={handleClick}
handleLongPress={handleLongPress}
ref={walletsCarousel}
testID="WalletsList"
selectedWallet={selectedWalletID}
scrollEnabled={isFocused}
/>
</DrawerContentScrollView>
);
};
export default DrawerList;
const styles = StyleSheet.create({
root: {
flex: 1,
},
});
DrawerList.propTypes = {
navigation: PropTypes.shape({
navigate: PropTypes.func,
addListener: PropTypes.func,
}),
route: PropTypes.shape({
name: PropTypes.string,
params: PropTypes.object,
}),
};

View file

@ -29,6 +29,7 @@ import { TransactionListItem } from '../../components/TransactionListItem';
import { scanQrHelper } from '../../helpers/scan-qr';
import { useTheme } from '../../components/themes';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
import presentAlert from '../../components/Alert';
const A = require('../../blue_modules/analytics');
const fs = require('../../blue_modules/fs');
@ -311,51 +312,43 @@ const WalletsList = () => {
const sendButtonLongPress = async () => {
const isClipboardEmpty = (await BlueClipboard().getClipboardContent()).trim().length === 0;
if (Platform.OS === 'ios') {
const options = [loc._.cancel, loc.wallets.list_long_choose, loc.wallets.list_long_scan];
if (!isClipboardEmpty) {
options.push(loc.wallets.list_long_clipboard);
}
ActionSheet.showActionSheetWithOptions(
{ options, cancelButtonIndex: 0, anchor: findNodeHandle(walletActionButtonsRef.current) },
{
title: loc.send.header,
options,
cancelButtonIndex: 0,
anchor: findNodeHandle(walletActionButtonsRef.current),
},
buttonIndex => {
if (buttonIndex === 1) {
fs.showImagePickerAndReadImage().then(onBarScanned);
} else if (buttonIndex === 2) {
scanQrHelper(navigate, routeName, false).then(onBarScanned);
} else if (buttonIndex === 3) {
switch (buttonIndex) {
case 0:
break;
case 1:
fs.showImagePickerAndReadImage()
.then(onBarScanned)
.catch(error => {
console.log(error);
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
presentAlert({ title: loc.errors.error, message: error.message });
});
break;
case 2:
scanQrHelper(navigate, routeName, true).then(data => onBarScanned(data));
break;
case 3:
if (!isClipboardEmpty) {
copyFromClipboard();
}
break;
}
},
);
} else if (Platform.OS === 'android') {
const buttons = [
{
text: loc._.cancel,
onPress: () => {},
style: 'cancel',
},
{
text: loc.wallets.list_long_choose,
onPress: () => fs.showImagePickerAndReadImage().then(onBarScanned),
},
{
text: loc.wallets.list_long_scan,
onPress: () => scanQrHelper(navigate, routeName, false).then(onBarScanned),
},
];
if (!isClipboardEmpty) {
buttons.push({
text: loc.wallets.list_long_clipboard,
onPress: copyFromClipboard,
});
}
ActionSheet.showActionSheetWithOptions({
title: '',
message: '',
buttons,
});
}
};
const onLayout = _e => {

View file

@ -6,14 +6,13 @@ import {
FlatList,
InteractionManager,
PixelRatio,
Platform,
ScrollView,
StyleSheet,
Text,
findNodeHandle,
TouchableOpacity,
View,
I18nManager,
findNodeHandle,
} from 'react-native';
import { Icon } from 'react-native-elements';
import { useRoute, useNavigation, useFocusEffect } from '@react-navigation/native';
@ -33,8 +32,9 @@ import TransactionsNavigationHeader, { actionKeys } from '../../components/Trans
import { TransactionListItem } from '../../components/TransactionListItem';
import presentAlert from '../../components/Alert';
import PropTypes from 'prop-types';
import { requestCameraAuthorization } from '../../helpers/scan-qr';
import { scanQrHelper } from '../../helpers/scan-qr';
import { useTheme } from '../../components/themes';
import triggerHapticFeedback, { HapticFeedbackTypes } from '../../blue_modules/hapticFeedback';
const fs = require('../../blue_modules/fs');
const BlueElectrum = require('../../blue_modules/BlueElectrum');
@ -366,7 +366,13 @@ const WalletTransactions = ({ navigation }) => {
};
const choosePhoto = () => {
fs.showImagePickerAndReadImage().then(onBarCodeRead);
fs.showImagePickerAndReadImage()
.then(onBarCodeRead)
.catch(error => {
console.log(error);
triggerHapticFeedback(HapticFeedbackTypes.NotificationError);
presentAlert({ title: loc.errors.error, message: error.message });
});
};
const copyFromClipboard = async () => {
@ -404,70 +410,38 @@ const WalletTransactions = ({ navigation }) => {
const sendButtonLongPress = async () => {
const isClipboardEmpty = (await BlueClipboard().getClipboardContent()).trim().length === 0;
if (Platform.OS === 'ios') {
const options = [loc._.cancel, loc.wallets.list_long_choose, loc.wallets.list_long_scan];
const cancelButtonIndex = 0;
if (!isClipboardEmpty) {
options.push(loc.wallets.list_long_clipboard);
}
ActionSheet.showActionSheetWithOptions(
{ options, cancelButtonIndex: 0, anchor: findNodeHandle(walletActionButtonsRef.current) },
buttonIndex => {
if (buttonIndex === 1) {
choosePhoto();
} else if (buttonIndex === 2) {
requestCameraAuthorization().then(() =>
navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',
params: {
launchedBy: name,
onBarScanned: onBarCodeRead,
showFileImportButton: false,
{
title: loc.send.header,
options,
cancelButtonIndex,
anchor: findNodeHandle(walletActionButtonsRef.current),
},
}),
);
} else if (buttonIndex === 3) {
async buttonIndex => {
switch (buttonIndex) {
case 0:
break;
case 1:
choosePhoto();
break;
case 2:
scanQrHelper(navigate, name, true).then(data => onBarCodeRead(data));
break;
case 3:
if (!isClipboardEmpty) {
copyFromClipboard();
}
break;
}
},
);
} else if (Platform.OS === 'android') {
const buttons = [
{
text: loc._.cancel,
onPress: () => {},
style: 'cancel',
},
{
text: loc.wallets.list_long_choose,
onPress: choosePhoto,
},
{
text: loc.wallets.list_long_scan,
onPress: () =>
requestCameraAuthorization().then(() => {
navigate('ScanQRCodeRoot', {
screen: 'ScanQRCode',
params: {
launchedBy: name,
onBarScanned: onBarCodeRead,
showFileImportButton: false,
},
});
}),
},
];
if (!isClipboardEmpty) {
buttons.push({
text: loc.wallets.list_long_clipboard,
onPress: copyFromClipboard,
});
}
ActionSheet.showActionSheetWithOptions({
title: '',
message: '',
buttons,
});
}
};
const navigateToViewEditCosigners = () => {

View file

@ -15,6 +15,7 @@ import {
Switch,
Text,
View,
findNodeHandle,
} from 'react-native';
import { Badge, Icon } from 'react-native-elements';
import {
@ -48,6 +49,8 @@ import { useTheme } from '../../components/themes';
import { scanQrHelper } from '../../helpers/scan-qr';
import usePrivacy from '../../hooks/usePrivacy';
import loc from '../../loc';
import { isDesktop } from '../../blue_modules/environment';
import ActionSheet from '../ActionSheet';
const fs = require('../../blue_modules/fs');
const prompt = require('../../helpers/prompt');
@ -57,7 +60,7 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
const hasLoaded = useRef(false);
const { colors } = useTheme();
const { wallets, setWalletsWithNewOrder, isElectrumDisabled, isAdvancedModeEnabled } = useContext(BlueStorageContext);
const { navigate, goBack } = useNavigation();
const { navigate, goBack, dispatch, addListener } = useNavigation();
const openScannerButtonRef = useRef();
const { walletId } = route.params;
const w = useRef(wallets.find((wallet: AbstractWallet) => wallet.getID() === walletId));
@ -77,6 +80,11 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
const [askPassphrase, setAskPassphrase] = useState(false);
const [isAdvancedModeEnabledRender, setIsAdvancedModeEnabledRender] = useState(false);
const data = useRef<any[]>();
/* discardChangesRef is only so the action sheet can be shown on mac catalyst when a
user tries to leave the screen with unsaved changes.
Why the container view ? It was the easiest to get the ref for. No other reason.
*/
const discardChangesRef = useRef<View>(null);
const { enableBlur, disableBlur } = usePrivacy();
const stylesHook = StyleSheet.create({
@ -109,6 +117,53 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
color: colors.buttonTextColor,
},
});
useFocusEffect(
useCallback(() => {
const unsubscribe = addListener('beforeRemove', e => {
// Check if there are unsaved changes
if (isSaveButtonDisabled) {
// If there are no unsaved changes, let the user leave the screen
return;
}
// Prevent the default action (going back)
e.preventDefault();
// Show an alert asking the user to discard changes or cancel
if (isDesktop) {
if (!discardChangesRef.current) return dispatch(e.data.action);
const anchor = findNodeHandle(discardChangesRef.current);
if (!anchor) return dispatch(e.data.action);
ActionSheet.showActionSheetWithOptions(
{
options: [loc._.cancel, loc._.ok],
cancelButtonIndex: 0,
title: loc._.discard_changes,
message: loc._.discard_changes_explain,
anchor,
},
buttonIndex => {
if (buttonIndex === 1) {
dispatch(e.data.action);
}
},
);
} else {
Alert.alert(loc._.discard_changes, loc._.discard_changes_explain, [
{ text: loc._.cancel, style: 'cancel', onPress: () => {} },
{
text: loc._.ok,
style: 'default',
// If the user confirms, then we dispatch the action we blocked earlier
onPress: () => dispatch(e.data.action),
},
]);
}
});
return unsubscribe;
}, [isSaveButtonDisabled, addListener, dispatch]),
);
useEffect(() => {
isAdvancedModeEnabled().then(setIsAdvancedModeEnabledRender);
@ -189,7 +244,7 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
const renderMnemonicsModal = () => {
return (
<BottomModal isVisible={isMnemonicsModalVisible} onClose={hideMnemonicsModal}>
<BottomModal isVisible={isMnemonicsModalVisible} onClose={hideMnemonicsModal} coverScreen={false}>
<View style={[styles.newKeyModalContent, stylesHook.modalContent]}>
<View style={styles.itemKeyUnprovidedWrapper}>
<View style={[styles.vaultKeyCircleSuccess, stylesHook.vaultKeyCircleSuccess]}>
@ -357,21 +412,25 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
dashes={MultipleStepsListItemDashType.topAndBottom}
/>
)}
<MultipleStepsListItem
useActionSheet
actionSheetOptions={{
options: [loc._.cancel, loc.multisig.confirm],
title: loc._.seed,
message: loc.multisig.are_you_sure_seed_will_be_lost,
cancelButtonIndex: 0,
confirmButtonIndex: 1,
}}
showActivityIndicator={vaultKeyData.keyIndex === el.index + 1 && vaultKeyData.isLoading}
dashes={el.index === length - 1 ? MultipleStepsListItemDashType.top : MultipleStepsListItemDashType.topAndBottom}
button={{
text: loc.multisig.forget_this_seed,
disabled: vaultKeyData.isLoading,
buttonType: MultipleStepsListItemButtohType.full,
onPress: () => {
Alert.alert(
loc._.seed,
loc.multisig.are_you_sure_seed_will_be_lost,
[
{
text: loc._.ok,
onPress: () => {
onPress: (buttonIndex: number) => {
if (buttonIndex === 0) return;
LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
setVaultKeyData({
...vaultKeyData,
@ -391,13 +450,6 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
100,
);
},
style: 'destructive',
},
{ text: loc._.cancel, onPress: () => {}, style: 'cancel' },
],
{ cancelable: false },
);
},
}}
/>
</View>
@ -485,7 +537,7 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
// @ts-ignore weird, property exists on typedefinition. might be some ts bugs
const isPad: boolean = Platform.isPad;
return (
<BottomModal isVisible={isProvideMnemonicsModalVisible} onClose={hideProvideMnemonicsModal}>
<BottomModal isVisible={isProvideMnemonicsModalVisible} onClose={hideProvideMnemonicsModal} coverScreen={false}>
<KeyboardAvoidingView enabled={!isPad} behavior={Platform.OS === 'ios' ? 'position' : undefined}>
<View style={[styles.modalContent, stylesHook.modalContent]}>
<BlueTextCentered>{loc.multisig.type_your_mnemonics}</BlueTextCentered>
@ -519,7 +571,7 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
return (
// @ts-ignore wtf doneButton
<BottomModal isVisible={isShareModalVisible} onClose={hideShareModal} doneButton>
<BottomModal isVisible={isShareModalVisible} onClose={hideShareModal} doneButton coverScreen={false}>
<KeyboardAvoidingView enabled={!isPad} behavior={Platform.OS === 'ios' ? 'position' : undefined}>
<View style={[styles.modalContent, stylesHook.modalContent, styles.alignItemsCenter]}>
<Text style={[styles.headerText, stylesHook.textDestination]}>
@ -578,7 +630,7 @@ const ViewEditMultisigCosigners = ({ route }: Props) => {
const isPad: boolean = Platform.isPad;
return (
<View style={[styles.root, stylesHook.root]}>
<View style={[styles.root, stylesHook.root]} ref={discardChangesRef}>
<KeyboardAvoidingView
enabled={!isPad}
behavior={Platform.OS === 'ios' ? 'padding' : undefined}

View file

@ -70,8 +70,8 @@ describe('Addresses', () => {
it('Returns AddressItem object', () => {
const fakeWallet = {
_getExternalAddressByIndex: index => `external_address_${index}`,
_getInternalAddressByIndex: index => `internal_address_${index}`,
_getExternalAddressByIndex: (index: number) => `external_address_${index}`,
_getInternalAddressByIndex: (index: number) => `internal_address_${index}`,
_balances_by_external_index: [{ c: 0, u: 0 }],
_balances_by_internal_index: [{ c: 0, u: 0 }],
_txs_by_external_index: { 0: [{}] },

View file

@ -1,11 +1,11 @@
import { generateChecksumWords } from '../../blue_modules/checksumWords';
import { validateMnemonic } from '../../blue_modules/bip39';
const assert = require('assert');
import assert from 'assert';
describe('generateChecksumWords', () => {
it('generates 128 valid words for an 11 word input', () => {
const input = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon';
const result = generateChecksumWords(input);
const result = generateChecksumWords(input) as string[];
assert.ok(result);
assert.strictEqual(result.length, 128);
@ -18,7 +18,7 @@ describe('generateChecksumWords', () => {
const input =
'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon ' +
'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon';
const result = generateChecksumWords(input);
const result = generateChecksumWords(input) as string[];
assert.ok(result);
assert.strictEqual(result.length, 8);

View file

@ -6,7 +6,7 @@ import {
satoshiToLocalCurrency,
} from '../../blue_modules/currency';
import { FiatUnit } from '../../models/fiatUnit';
const assert = require('assert');
import assert from 'assert';
describe('currency', () => {
it('formats everything correctly', async () => {

View file

@ -1,8 +1,8 @@
import ecc from '../../blue_modules/noble_ecc';
import { ECPairFactory } from 'ecpair';
const assert = require('assert');
import assert from 'assert';
const h = hex => Buffer.from(hex, 'hex');
const h = (hex: string) => Buffer.from(hex, 'hex');
describe('ecc', () => {
it('ECPair accepts noble', () => {

View file

@ -1,5 +1,5 @@
const assert = require('assert');
const c = require('../../blue_modules/encryption');
import assert from 'assert';
import * as c from '../../blue_modules/encryption';
describe('unit - encryption', function () {
it('encrypts and decrypts', function () {

View file

@ -1,5 +1,5 @@
import { HDSegwitElectrumSeedP2WPKHWallet } from '../../class';
const assert = require('assert');
import assert from 'assert';
describe('HDSegwitElectrumSeedP2WPKHWallet', () => {
it('wont accept BIP39 seed', () => {

View file

@ -38,35 +38,35 @@ describe('P2SH Segwit HD (BIP49)', () => {
it('can convert witness to address', () => {
let address = SegwitP2SHWallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8');
assert.strictEqual(address, '34ZVGb3gT8xMLT6fpqC6dNVqJtJmvdjbD7');
address = SegwitP2SHWallet.witnessToAddress();
address = SegwitP2SHWallet.witnessToAddress('');
assert.strictEqual(address, false);
address = SegwitP2SHWallet.witnessToAddress('trololo');
assert.strictEqual(address, false);
address = SegwitP2SHWallet.scriptPubKeyToAddress('a914e286d58e53f9247a4710e51232cce0686f16873c87');
assert.strictEqual(address, '3NLnALo49CFEF4tCRhCvz45ySSfz3UktZC');
address = SegwitP2SHWallet.scriptPubKeyToAddress();
address = SegwitP2SHWallet.scriptPubKeyToAddress('');
assert.strictEqual(address, false);
address = SegwitP2SHWallet.scriptPubKeyToAddress('trololo');
assert.strictEqual(address, false);
address = SegwitBech32Wallet.witnessToAddress('035c618df829af694cb99e664ce1b34f80ad2c3b49bcd0d9c0b1836c66b2d25fd8');
assert.strictEqual(address, 'bc1quhnve8q4tk3unhmjts7ymxv8cd6w9xv8wy29uv');
address = SegwitBech32Wallet.witnessToAddress();
address = SegwitBech32Wallet.witnessToAddress('');
assert.strictEqual(address, false);
address = SegwitBech32Wallet.witnessToAddress('trololo');
assert.strictEqual(address, false);
address = SegwitBech32Wallet.scriptPubKeyToAddress('00144d757460da5fcaf84cc22f3847faaa1078e84f6a');
assert.strictEqual(address, 'bc1qf46hgcx6tl90snxz9uuy0742zpuwsnm27ysdh7');
address = SegwitBech32Wallet.scriptPubKeyToAddress();
address = SegwitBech32Wallet.scriptPubKeyToAddress('');
assert.strictEqual(address, false);
address = SegwitBech32Wallet.scriptPubKeyToAddress('trololo');
assert.strictEqual(address, false);
address = LegacyWallet.scriptPubKeyToAddress('76a914d0b77eb1502c81c4093da9aa6eccfdf560cdd6b288ac');
assert.strictEqual(address, '1L2bNMGRQQLT2AVUek4K9L7sn3SSMioMgE');
address = LegacyWallet.scriptPubKeyToAddress();
address = LegacyWallet.scriptPubKeyToAddress('');
assert.strictEqual(address, false);
address = LegacyWallet.scriptPubKeyToAddress('trololo');
assert.strictEqual(address, false);
@ -86,7 +86,7 @@ describe('P2SH Segwit HD (BIP49)', () => {
it('can generate Segwit HD (BIP49)', async () => {
const hd = new HDSegwitP2SHWallet();
const hashmap = {};
const hashmap: Record<string, number> = {};
for (let c = 0; c < 1000; c++) {
await hd.generate();
const secret = hd.getSecret();
@ -156,11 +156,11 @@ describe('P2SH Segwit HD (BIP49)', () => {
const secret = hd.getSecret();
assert.strictEqual(secret.startsWith('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon'), true);
let secretWithoutChecksum = secret.split(' ');
const secretWithoutChecksum = secret.split(' ');
secretWithoutChecksum.pop();
secretWithoutChecksum = secretWithoutChecksum.join(' ');
const secretWithoutChecksumString = secretWithoutChecksum.join(' ');
assert.strictEqual(
secretWithoutChecksum.endsWith('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon'),
secretWithoutChecksumString.endsWith('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon'),
false,
);

View file

@ -1,8 +1,8 @@
import { HDSegwitBech32Wallet, LightningLdkWallet } from '../../class';
const assert = require('assert');
import assert from 'assert';
describe('', () => {
function isHex(h) {
function isHex(h: string) {
const re = /[0-9A-Fa-f]{6}/g;
return re.test(h);
}

View file

@ -1,11 +1,11 @@
import { TaprootWallet } from '../../class';
const assert = require('assert');
import assert from 'assert';
describe('Taproot wallet', () => {
it('can convert scriptPubKey to address', () => {
let address = TaprootWallet.scriptPubKeyToAddress('512040ef293a8a0ebaf8b351a27d89ff4b5b3822a635e4afdca77a30170c363bafa3');
assert.strictEqual(address, 'bc1pgrhjjw52p6a03v635f7cnl6ttvuz9f34ujhaefm6xqtscd3m473szkl92g');
address = TaprootWallet.scriptPubKeyToAddress();
address = TaprootWallet.scriptPubKeyToAddress('');
assert.strictEqual(address, false);
address = TaprootWallet.scriptPubKeyToAddress('trololo');
assert.strictEqual(address, false);