mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 11:39:22 +00:00
CW-325-Coin-Control-enhancements (#846)
* fix checkbox
* save the output state
* add note as a header
* Allow copy the Amount and Address
* add frozen balance to dashboard
* add block explorer
* fix url launcher
* code formatting
* minor fixes
* Revert "minor fixes"
This reverts commit d230b6a07b
.
* fix missing implementations error
* [skip ci] update localization
* fix unspent with same txid
* add amount check
* add vout check
* remove formattedTotalAvailableBalance
* remove unrelated mac os files
This commit is contained in:
parent
f26815efb8
commit
315c4c911c
37 changed files with 525 additions and 339 deletions
|
@ -4,7 +4,7 @@ import 'package:cw_bitcoin/bitcoin_amount_format.dart';
|
||||||
import 'package:cw_core/balance.dart';
|
import 'package:cw_core/balance.dart';
|
||||||
|
|
||||||
class ElectrumBalance extends Balance {
|
class ElectrumBalance extends Balance {
|
||||||
const ElectrumBalance({required this.confirmed, required this.unconfirmed})
|
const ElectrumBalance({required this.confirmed, required this.unconfirmed, required this.frozen})
|
||||||
: super(confirmed, unconfirmed);
|
: super(confirmed, unconfirmed);
|
||||||
|
|
||||||
static ElectrumBalance? fromJSON(String? jsonSource) {
|
static ElectrumBalance? fromJSON(String? jsonSource) {
|
||||||
|
@ -16,20 +16,25 @@ class ElectrumBalance extends Balance {
|
||||||
|
|
||||||
return ElectrumBalance(
|
return ElectrumBalance(
|
||||||
confirmed: decoded['confirmed'] as int? ?? 0,
|
confirmed: decoded['confirmed'] as int? ?? 0,
|
||||||
unconfirmed: decoded['unconfirmed'] as int? ?? 0);
|
unconfirmed: decoded['unconfirmed'] as int? ?? 0,
|
||||||
|
frozen: decoded['frozen'] as int? ?? 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
final int confirmed;
|
final int confirmed;
|
||||||
final int unconfirmed;
|
final int unconfirmed;
|
||||||
|
final int frozen;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get formattedAvailableBalance =>
|
String get formattedAvailableBalance => bitcoinAmountToString(amount: confirmed - frozen);
|
||||||
bitcoinAmountToString(amount: confirmed);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get formattedAdditionalBalance =>
|
String get formattedAdditionalBalance => bitcoinAmountToString(amount: unconfirmed);
|
||||||
bitcoinAmountToString(amount: unconfirmed);
|
|
||||||
|
String get formattedFrozenBalance {
|
||||||
|
final frozenFormatted = bitcoinAmountToString(amount: frozen);
|
||||||
|
return frozenFormatted == '0.0' ? '' : frozenFormatted;
|
||||||
|
}
|
||||||
|
|
||||||
String toJSON() =>
|
String toJSON() =>
|
||||||
json.encode({'confirmed': confirmed, 'unconfirmed': unconfirmed});
|
json.encode({'confirmed': confirmed, 'unconfirmed': unconfirmed, 'frozen': frozen});
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,8 @@ abstract class ElectrumWalletBase extends WalletBase<ElectrumBalance,
|
||||||
_scripthashesUpdateSubject = {},
|
_scripthashesUpdateSubject = {},
|
||||||
balance = ObservableMap<CryptoCurrency, ElectrumBalance>.of(
|
balance = ObservableMap<CryptoCurrency, ElectrumBalance>.of(
|
||||||
currency != null
|
currency != null
|
||||||
? {currency: initialBalance ?? const ElectrumBalance(confirmed: 0, unconfirmed: 0)}
|
? {currency: initialBalance ?? const ElectrumBalance(confirmed: 0, unconfirmed: 0,
|
||||||
|
frozen: 0)}
|
||||||
: {}),
|
: {}),
|
||||||
this.unspentCoinsInfo = unspentCoinsInfo,
|
this.unspentCoinsInfo = unspentCoinsInfo,
|
||||||
super(walletInfo) {
|
super(walletInfo) {
|
||||||
|
@ -133,8 +134,8 @@ abstract class ElectrumWalletBase extends WalletBase<ElectrumBalance,
|
||||||
await walletAddresses.discoverAddresses();
|
await walletAddresses.discoverAddresses();
|
||||||
await updateTransactions();
|
await updateTransactions();
|
||||||
_subscribeForUpdates();
|
_subscribeForUpdates();
|
||||||
await _updateBalance();
|
|
||||||
await updateUnspent();
|
await updateUnspent();
|
||||||
|
await updateBalance();
|
||||||
_feeRates = await electrumClient.feeRates();
|
_feeRates = await electrumClient.feeRates();
|
||||||
|
|
||||||
Timer.periodic(const Duration(minutes: 1),
|
Timer.periodic(const Duration(minutes: 1),
|
||||||
|
@ -343,7 +344,7 @@ abstract class ElectrumWalletBase extends WalletBase<ElectrumBalance,
|
||||||
electrumClient: electrumClient, amount: amount, fee: fee)
|
electrumClient: electrumClient, amount: amount, fee: fee)
|
||||||
..addListener((transaction) async {
|
..addListener((transaction) async {
|
||||||
transactionHistory.addOne(transaction);
|
transactionHistory.addOne(transaction);
|
||||||
await _updateBalance();
|
await updateBalance();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +498,10 @@ abstract class ElectrumWalletBase extends WalletBase<ElectrumBalance,
|
||||||
hash: coin.hash,
|
hash: coin.hash,
|
||||||
isFrozen: coin.isFrozen,
|
isFrozen: coin.isFrozen,
|
||||||
isSending: coin.isSending,
|
isSending: coin.isSending,
|
||||||
noteRaw: coin.note
|
noteRaw: coin.note,
|
||||||
|
address: coin.address.address,
|
||||||
|
value: coin.value,
|
||||||
|
vout: coin.vout,
|
||||||
);
|
);
|
||||||
|
|
||||||
await unspentCoinsInfo.add(newInfo);
|
await unspentCoinsInfo.add(newInfo);
|
||||||
|
@ -634,8 +638,8 @@ abstract class ElectrumWalletBase extends WalletBase<ElectrumBalance,
|
||||||
_scripthashesUpdateSubject[sh] = electrumClient.scripthashUpdate(sh);
|
_scripthashesUpdateSubject[sh] = electrumClient.scripthashUpdate(sh);
|
||||||
_scripthashesUpdateSubject[sh]?.listen((event) async {
|
_scripthashesUpdateSubject[sh]?.listen((event) async {
|
||||||
try {
|
try {
|
||||||
await _updateBalance();
|
|
||||||
await updateUnspent();
|
await updateUnspent();
|
||||||
|
await updateBalance();
|
||||||
await updateTransactions();
|
await updateTransactions();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e.toString());
|
print(e.toString());
|
||||||
|
@ -653,7 +657,17 @@ abstract class ElectrumWalletBase extends WalletBase<ElectrumBalance,
|
||||||
final sh = scriptHash(addressRecord.address, networkType: networkType);
|
final sh = scriptHash(addressRecord.address, networkType: networkType);
|
||||||
final balanceFuture = electrumClient.getBalance(sh);
|
final balanceFuture = electrumClient.getBalance(sh);
|
||||||
balanceFutures.add(balanceFuture);
|
balanceFutures.add(balanceFuture);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var totalFrozen = 0;
|
||||||
|
unspentCoinsInfo.values.forEach((info) {
|
||||||
|
unspentCoins.forEach((element) {
|
||||||
|
if (element.hash == info.hash && info.isFrozen && element.address.address == info.address
|
||||||
|
&& element.value == info.value) {
|
||||||
|
totalFrozen += element.value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
final balances = await Future.wait(balanceFutures);
|
final balances = await Future.wait(balanceFutures);
|
||||||
var totalConfirmed = 0;
|
var totalConfirmed = 0;
|
||||||
|
@ -672,10 +686,11 @@ abstract class ElectrumWalletBase extends WalletBase<ElectrumBalance,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ElectrumBalance(confirmed: totalConfirmed, unconfirmed: totalUnconfirmed);
|
return ElectrumBalance(confirmed: totalConfirmed, unconfirmed: totalUnconfirmed,
|
||||||
|
frozen: totalFrozen);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _updateBalance() async {
|
Future<void> updateBalance() async {
|
||||||
balance[currency] = await _fetchBalances();
|
balance[currency] = await _fetchBalances();
|
||||||
await save();
|
await save();
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ class ElectrumWallletSnapshot {
|
||||||
.map((addr) => BitcoinAddressRecord.fromJSON(addr))
|
.map((addr) => BitcoinAddressRecord.fromJSON(addr))
|
||||||
.toList();
|
.toList();
|
||||||
final balance = ElectrumBalance.fromJSON(data['balance'] as String) ??
|
final balance = ElectrumBalance.fromJSON(data['balance'] as String) ??
|
||||||
ElectrumBalance(confirmed: 0, unconfirmed: 0);
|
ElectrumBalance(confirmed: 0, unconfirmed: 0, frozen: 0);
|
||||||
var regularAddressIndex = 0;
|
var regularAddressIndex = 0;
|
||||||
var changeAddressIndex = 0;
|
var changeAddressIndex = 0;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,10 @@ class UnspentCoinsInfo extends HiveObject {
|
||||||
required this.hash,
|
required this.hash,
|
||||||
required this.isFrozen,
|
required this.isFrozen,
|
||||||
required this.isSending,
|
required this.isSending,
|
||||||
required this.noteRaw});
|
required this.noteRaw,
|
||||||
|
required this.address,
|
||||||
|
required this.vout,
|
||||||
|
required this.value});
|
||||||
|
|
||||||
static const typeId = 9;
|
static const typeId = 9;
|
||||||
static const boxName = 'Unspent';
|
static const boxName = 'Unspent';
|
||||||
|
@ -30,6 +33,15 @@ class UnspentCoinsInfo extends HiveObject {
|
||||||
@HiveField(4)
|
@HiveField(4)
|
||||||
String? noteRaw;
|
String? noteRaw;
|
||||||
|
|
||||||
|
@HiveField(5, defaultValue: '')
|
||||||
|
String address;
|
||||||
|
|
||||||
|
@HiveField(6, defaultValue: 0)
|
||||||
|
int value;
|
||||||
|
|
||||||
|
@HiveField(7, defaultValue: 0)
|
||||||
|
int vout;
|
||||||
|
|
||||||
String get note => noteRaw ?? '';
|
String get note => noteRaw ?? '';
|
||||||
|
|
||||||
set note(String value) => noteRaw = value;
|
set note(String value) => noteRaw = value;
|
||||||
|
|
|
@ -71,4 +71,6 @@ abstract class WalletBase<
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
Future<void> changePassword(String password);
|
Future<void> changePassword(String password);
|
||||||
|
|
||||||
|
Future<void>? updateBalance();
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,9 @@ abstract class HavenWalletBase extends WalletBase<MoneroBalance,
|
||||||
(_) async => await save());
|
(_) async => await save());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void>? updateBalance() => null;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void close() {
|
void close() {
|
||||||
_listener?.stop();
|
_listener?.stop();
|
||||||
|
|
|
@ -118,6 +118,8 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
|
||||||
Duration(seconds: _autoSaveInterval),
|
Duration(seconds: _autoSaveInterval),
|
||||||
(_) async => await save());
|
(_) async => await save());
|
||||||
}
|
}
|
||||||
|
@override
|
||||||
|
Future<void>? updateBalance() => null;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void close() {
|
void close() {
|
||||||
|
|
|
@ -8,187 +8,207 @@ import 'package:auto_size_text/auto_size_text.dart';
|
||||||
import 'package:cake_wallet/src/widgets/introducing_card.dart';
|
import 'package:cake_wallet/src/widgets/introducing_card.dart';
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
|
||||||
|
class BalancePage extends StatelessWidget {
|
||||||
class BalancePage extends StatelessWidget{
|
|
||||||
BalancePage({required this.dashboardViewModel, required this.settingsStore});
|
BalancePage({required this.dashboardViewModel, required this.settingsStore});
|
||||||
|
|
||||||
final DashboardViewModel dashboardViewModel;
|
final DashboardViewModel dashboardViewModel;
|
||||||
final SettingsStore settingsStore;
|
final SettingsStore settingsStore;
|
||||||
|
|
||||||
|
Color get backgroundLightColor =>
|
||||||
|
settingsStore.currentTheme.type == ThemeType.bright ? Colors.transparent : Colors.white;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onLongPress: () => dashboardViewModel.balanceViewModel.isReversing = !dashboardViewModel.balanceViewModel.isReversing,
|
onLongPress: () => dashboardViewModel.balanceViewModel.isReversing =
|
||||||
onLongPressUp: () => dashboardViewModel.balanceViewModel.isReversing = !dashboardViewModel.balanceViewModel.isReversing,
|
!dashboardViewModel.balanceViewModel.isReversing,
|
||||||
child: SingleChildScrollView(
|
onLongPressUp: () => dashboardViewModel.balanceViewModel.isReversing =
|
||||||
child: Column(
|
!dashboardViewModel.balanceViewModel.isReversing,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
child: SingleChildScrollView(
|
||||||
children: [
|
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
SizedBox(height: ResponsiveLayoutUtil.instance.isMobile(context) ? 56 : 16),
|
SizedBox(height: 56),
|
||||||
Container(
|
Container(
|
||||||
margin: const EdgeInsets.only(left: 24, bottom: 16),
|
margin: const EdgeInsets.only(left: 24, bottom: 16),
|
||||||
child: Observer(builder: (_) {
|
child: Observer(builder: (_) {
|
||||||
return Text(
|
return Text(dashboardViewModel.balanceViewModel.asset,
|
||||||
dashboardViewModel.balanceViewModel.asset,
|
style: TextStyle(
|
||||||
style: TextStyle(
|
fontSize: 24,
|
||||||
fontSize: 24,
|
fontFamily: 'Lato',
|
||||||
fontFamily: 'Lato',
|
fontWeight: FontWeight.w600,
|
||||||
fontWeight: FontWeight.w600,
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
color: Theme.of(context)
|
height: 1),
|
||||||
.accentTextTheme!
|
maxLines: 1,
|
||||||
.headline2!
|
textAlign: TextAlign.center);
|
||||||
.backgroundColor!,
|
})),
|
||||||
height: 1),
|
|
||||||
maxLines: 1,
|
|
||||||
textAlign: TextAlign.center);
|
|
||||||
})),
|
|
||||||
Observer(builder: (_) {
|
Observer(builder: (_) {
|
||||||
if (dashboardViewModel.balanceViewModel.isShowCard){
|
if (dashboardViewModel.balanceViewModel.isShowCard) {
|
||||||
return IntroducingCard(
|
return IntroducingCard(
|
||||||
title: S.of(context).introducing_cake_pay,
|
title: S.of(context).introducing_cake_pay,
|
||||||
subTitle: S.of(context).cake_pay_learn_more,
|
subTitle: S.of(context).cake_pay_learn_more,
|
||||||
borderColor: settingsStore.currentTheme.type == ThemeType.bright
|
borderColor: settingsStore.currentTheme.type == ThemeType.bright
|
||||||
? Color.fromRGBO(255, 255, 255, 0.2)
|
? Color.fromRGBO(255, 255, 255, 0.2)
|
||||||
: Colors.transparent,
|
: Colors.transparent,
|
||||||
closeCard: dashboardViewModel.balanceViewModel.disableIntroCakePayCard
|
closeCard: dashboardViewModel.balanceViewModel.disableIntroCakePayCard);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Container ();
|
return Container();
|
||||||
}),
|
}),
|
||||||
Observer(builder: (_) {
|
Observer(builder: (_) {
|
||||||
return ListView.separated(
|
return ListView.separated(
|
||||||
physics: NeverScrollableScrollPhysics(),
|
physics: NeverScrollableScrollPhysics(),
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
separatorBuilder: (_, __) => Container(padding: EdgeInsets.only(bottom: 8)),
|
separatorBuilder: (_, __) => Container(padding: EdgeInsets.only(bottom: 8)),
|
||||||
itemCount: dashboardViewModel.balanceViewModel.formattedBalances.length,
|
itemCount: dashboardViewModel.balanceViewModel.formattedBalances.length,
|
||||||
itemBuilder: (__, index) {
|
itemBuilder: (__, index) {
|
||||||
final balance = dashboardViewModel.balanceViewModel.formattedBalances.elementAt(index);
|
final balance =
|
||||||
return buildBalanceRow(context,
|
dashboardViewModel.balanceViewModel.formattedBalances.elementAt(index);
|
||||||
availableBalanceLabel: '${dashboardViewModel.balanceViewModel.availableBalanceLabel}',
|
return buildBalanceRow(context,
|
||||||
|
availableBalanceLabel:
|
||||||
|
'${dashboardViewModel.balanceViewModel.availableBalanceLabel}',
|
||||||
availableBalance: balance.availableBalance,
|
availableBalance: balance.availableBalance,
|
||||||
availableFiatBalance: balance.fiatAvailableBalance,
|
availableFiatBalance: balance.fiatAvailableBalance,
|
||||||
additionalBalanceLabel: '${dashboardViewModel.balanceViewModel.additionalBalanceLabel}',
|
additionalBalanceLabel:
|
||||||
|
'${dashboardViewModel.balanceViewModel.additionalBalanceLabel}',
|
||||||
additionalBalance: balance.additionalBalance,
|
additionalBalance: balance.additionalBalance,
|
||||||
additionalFiatBalance: balance.fiatAdditionalBalance,
|
additionalFiatBalance: balance.fiatAdditionalBalance,
|
||||||
|
frozenBalance: balance.frozenBalance,
|
||||||
|
frozenFiatBalance: balance.fiatFrozenBalance,
|
||||||
currency: balance.formattedAssetTitle);
|
currency: balance.formattedAssetTitle);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
])));
|
])));
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget buildBalanceRow(BuildContext context,
|
Widget buildBalanceRow(BuildContext context,
|
||||||
{required String availableBalanceLabel,
|
{required String availableBalanceLabel,
|
||||||
required String availableBalance,
|
required String availableBalance,
|
||||||
required String availableFiatBalance,
|
required String availableFiatBalance,
|
||||||
required String additionalBalanceLabel,
|
required String additionalBalanceLabel,
|
||||||
required String additionalBalance,
|
required String additionalBalance,
|
||||||
required String additionalFiatBalance,
|
required String additionalFiatBalance,
|
||||||
|
required String frozenBalance,
|
||||||
|
required String frozenFiatBalance,
|
||||||
required String currency}) {
|
required String currency}) {
|
||||||
return Container(
|
return Container(
|
||||||
margin: const EdgeInsets.only(left: 16, right: 16),
|
margin: const EdgeInsets.only(left: 16, right: 16),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(30.0),
|
borderRadius: BorderRadius.circular(30.0),
|
||||||
border: Border.all(color: settingsStore.currentTheme.type == ThemeType.bright ? Color.fromRGBO(255, 255, 255, 0.2): Colors.transparent, width: 1, ),
|
border: Border.all(
|
||||||
color:Theme.of(context).textTheme!.headline6!.backgroundColor!
|
color: settingsStore.currentTheme.type == ThemeType.bright
|
||||||
),
|
? Color.fromRGBO(255, 255, 255, 0.2)
|
||||||
|
: Colors.transparent,
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
color: Theme.of(context).textTheme!.headline6!.backgroundColor!),
|
||||||
child: Container(
|
child: Container(
|
||||||
margin: const EdgeInsets.only(top: 16, left: 24, right: 24, bottom: 24),
|
margin: const EdgeInsets.only(top: 16, left: 24, right: 24, bottom: 24),
|
||||||
child: Column(
|
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
SizedBox(
|
||||||
children: [
|
height: 4,
|
||||||
SizedBox(height: 4,),
|
),
|
||||||
Text('${availableBalanceLabel}',
|
Text('${availableBalanceLabel}',
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
fontFamily: 'Lato',
|
fontFamily: 'Lato',
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
color: Theme.of(context)
|
color: Theme.of(context).accentTextTheme!.headline3!.backgroundColor!,
|
||||||
.accentTextTheme!
|
|
||||||
.headline3!
|
|
||||||
.backgroundColor!,
|
|
||||||
height: 1)),
|
height: 1)),
|
||||||
SizedBox(height: 5),
|
SizedBox(height: 5),
|
||||||
Row(
|
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
AutoSizeText(availableBalance,
|
||||||
children: [
|
style: TextStyle(
|
||||||
AutoSizeText(
|
fontSize: 24,
|
||||||
availableBalance,
|
fontFamily: 'Lato',
|
||||||
style: TextStyle(
|
fontWeight: FontWeight.w900,
|
||||||
fontSize: 24,
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
fontFamily: 'Lato',
|
height: 1),
|
||||||
fontWeight: FontWeight.w900,
|
maxLines: 1,
|
||||||
color: Theme.of(context)
|
textAlign: TextAlign.center),
|
||||||
.accentTextTheme!
|
Text(currency,
|
||||||
.headline2!
|
style: TextStyle(
|
||||||
.backgroundColor!,
|
fontSize: 28,
|
||||||
height: 1),
|
fontFamily: 'Lato',
|
||||||
maxLines: 1,
|
fontWeight: FontWeight.w800,
|
||||||
textAlign: TextAlign.center),
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
Text(currency,
|
height: 1)),
|
||||||
style: TextStyle(
|
]),
|
||||||
fontSize: 28,
|
SizedBox(
|
||||||
fontFamily: 'Lato',
|
height: 4,
|
||||||
fontWeight: FontWeight.w800,
|
),
|
||||||
color: Theme.of(context)
|
Text('${availableFiatBalance}',
|
||||||
.accentTextTheme!
|
|
||||||
.headline2!
|
|
||||||
.backgroundColor!,
|
|
||||||
height: 1)),
|
|
||||||
]),
|
|
||||||
SizedBox(height: 4,),
|
|
||||||
Text('${availableFiatBalance}',
|
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
fontFamily: 'Lato',
|
fontFamily: 'Lato',
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
color: Theme.of(context)
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
.accentTextTheme!
|
height: 1)),
|
||||||
.headline2!
|
SizedBox(height: 26),
|
||||||
.backgroundColor!,
|
if (frozenBalance.isNotEmpty)
|
||||||
height: 1)),
|
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
SizedBox(height: 26),
|
Text(S.current.frozen_balance,
|
||||||
Text('${additionalBalanceLabel}',
|
textAlign: TextAlign.center,
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 12,
|
|
||||||
fontFamily: 'Lato',
|
|
||||||
fontWeight: FontWeight.w400,
|
|
||||||
color: Theme.of(context)
|
|
||||||
.accentTextTheme!
|
|
||||||
.headline3!
|
|
||||||
.backgroundColor!,
|
|
||||||
height: 1)),
|
|
||||||
SizedBox(height: 8),
|
|
||||||
AutoSizeText(
|
|
||||||
additionalBalance,
|
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 20,
|
fontSize: 12,
|
||||||
fontFamily: 'Lato',
|
fontFamily: 'Lato',
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
color: Theme.of(context)
|
color: Theme.of(context).accentTextTheme!.headline3!.backgroundColor!,
|
||||||
.accentTextTheme!
|
height: 1)),
|
||||||
.headline2!
|
SizedBox(height: 8),
|
||||||
.backgroundColor!,
|
AutoSizeText(frozenBalance,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 20,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
height: 1),
|
height: 1),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
textAlign: TextAlign.center),
|
textAlign: TextAlign.center),
|
||||||
SizedBox(height: 4,),
|
SizedBox(height: 4),
|
||||||
Text('${additionalFiatBalance}',
|
Text(
|
||||||
|
frozenFiatBalance,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
|
height: 1),
|
||||||
|
),
|
||||||
|
SizedBox(height: 24)
|
||||||
|
]),
|
||||||
|
Text('${additionalBalanceLabel}',
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: Theme.of(context).accentTextTheme!.headline3!.backgroundColor!,
|
||||||
|
height: 1)),
|
||||||
|
SizedBox(height: 8),
|
||||||
|
AutoSizeText(additionalBalance,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 20,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
|
height: 1),
|
||||||
|
maxLines: 1,
|
||||||
|
textAlign: TextAlign.center),
|
||||||
|
SizedBox(
|
||||||
|
height: 4,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'${additionalFiatBalance}',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
fontFamily: 'Lato',
|
fontFamily: 'Lato',
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
color: Theme.of(context)
|
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!,
|
||||||
.accentTextTheme!
|
|
||||||
.headline2!
|
|
||||||
.backgroundColor!,
|
|
||||||
height: 1),
|
height: 1),
|
||||||
)
|
)
|
||||||
])),
|
])),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
|
import 'package:cake_wallet/src/screens/transaction_details/blockexplorer_list_item.dart';
|
||||||
import 'package:cake_wallet/src/screens/transaction_details/textfield_list_item.dart';
|
import 'package:cake_wallet/src/screens/transaction_details/textfield_list_item.dart';
|
||||||
import 'package:cake_wallet/src/screens/transaction_details/widgets/textfield_list_row.dart';
|
import 'package:cake_wallet/src/screens/transaction_details/widgets/textfield_list_row.dart';
|
||||||
import 'package:cake_wallet/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart';
|
import 'package:cake_wallet/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart';
|
||||||
import 'package:cake_wallet/src/widgets/standard_list.dart';
|
import 'package:cake_wallet/src/widgets/standard_list.dart';
|
||||||
|
import 'package:cake_wallet/utils/show_bar.dart';
|
||||||
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_details_view_model.dart';
|
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_details_view_model.dart';
|
||||||
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart';
|
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:cake_wallet/src/widgets/list_row.dart';
|
import 'package:cake_wallet/src/widgets/list_row.dart';
|
||||||
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
|
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
|
||||||
import 'package:cake_wallet/src/screens/base_page.dart';
|
import 'package:cake_wallet/src/screens/base_page.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
|
||||||
|
@ -30,9 +33,13 @@ class UnspentCoinsDetailsPage extends BasePage {
|
||||||
final item = unspentCoinsDetailsViewModel.items[index];
|
final item = unspentCoinsDetailsViewModel.items[index];
|
||||||
|
|
||||||
if (item is StandartListItem) {
|
if (item is StandartListItem) {
|
||||||
return ListRow(
|
return GestureDetector(
|
||||||
title: '${item.title}:',
|
onTap: () {
|
||||||
value: item.value);
|
Clipboard.setData(ClipboardData(text: item.value));
|
||||||
|
showBar<void>(context, S.of(context).transaction_details_copied(item.title));
|
||||||
|
},
|
||||||
|
child: ListRow(title: '${item.title}:', value: item.value),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item is TextFieldListItem) {
|
if (item is TextFieldListItem) {
|
||||||
|
@ -44,14 +51,21 @@ class UnspentCoinsDetailsPage extends BasePage {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item is UnspentCoinsSwitchItem) {
|
if (item is UnspentCoinsSwitchItem) {
|
||||||
return Observer(builder: (_) => UnspentCoinsSwitchRow(
|
return Observer(
|
||||||
title: item.title,
|
builder: (_) => UnspentCoinsSwitchRow(
|
||||||
switchValue: item.switchValue(),
|
title: item.title,
|
||||||
onSwitchValueChange: item.onSwitchValueChange
|
switchValue: item.switchValue(),
|
||||||
));
|
onSwitchValueChange: item.onSwitchValueChange));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item is BlockExplorerListItem) {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: item.onTap,
|
||||||
|
child: ListRow(title: '${item.title}:', value: item.value),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Container();
|
return Container();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'package:auto_size_text/auto_size_text.dart';
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
import 'package:cake_wallet/palette.dart';
|
import 'package:cake_wallet/palette.dart';
|
||||||
|
import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
@ -28,99 +29,77 @@ class UnspentCoinsListItem extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final itemColor = isSending? selectedItemColor : unselectedItemColor;
|
final itemColor = isSending ? selectedItemColor : unselectedItemColor;
|
||||||
final _note = (note?.isNotEmpty ?? false) ? note : address;
|
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
height: 62,
|
height: 70,
|
||||||
padding: EdgeInsets.all(12),
|
padding: EdgeInsets.symmetric(vertical: 6, horizontal: 12),
|
||||||
decoration: BoxDecoration(
|
decoration:
|
||||||
borderRadius: BorderRadius.all(Radius.circular(12)),
|
BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(12)), color: itemColor),
|
||||||
color: itemColor),
|
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.max,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(right: 12),
|
padding: EdgeInsets.only(right: 12),
|
||||||
child: GestureDetector(
|
child: StandardCheckbox(
|
||||||
onTap: () => onCheckBoxTap?.call(),
|
value: isSending, onChanged: (value) => onCheckBoxTap?.call())),
|
||||||
child: Container(
|
|
||||||
height: 24.0,
|
|
||||||
width: 24.0,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
border: Border.all(
|
|
||||||
color: Theme.of(context)
|
|
||||||
.primaryTextTheme!
|
|
||||||
.caption!
|
|
||||||
.color!,
|
|
||||||
width: 1.0),
|
|
||||||
borderRadius: BorderRadius.all(
|
|
||||||
Radius.circular(8.0)),
|
|
||||||
color: itemColor),
|
|
||||||
child: isSending
|
|
||||||
? Icon(
|
|
||||||
Icons.check,
|
|
||||||
color: Colors.blue,
|
|
||||||
size: 20.0,
|
|
||||||
)
|
|
||||||
: Offstage(),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Row(
|
Row(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
children: [
|
||||||
children: [
|
Column(
|
||||||
Expanded(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
child: AutoSizeText(
|
children: [
|
||||||
amount,
|
if (note.isNotEmpty)
|
||||||
style: TextStyle(
|
AutoSizeText(
|
||||||
color: amountColor,
|
note,
|
||||||
fontSize: 16,
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.w600
|
color: amountColor, fontSize: 15, fontWeight: FontWeight.w600),
|
||||||
),
|
maxLines: 1,
|
||||||
maxLines: 1,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
if (isFrozen) Container(
|
AutoSizeText(
|
||||||
|
amount,
|
||||||
|
style:
|
||||||
|
TextStyle(color: amountColor, fontSize: 15, fontWeight: FontWeight.w600),
|
||||||
|
maxLines: 1,
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
if (isFrozen)
|
||||||
|
Container(
|
||||||
height: 17,
|
height: 17,
|
||||||
padding: EdgeInsets.only(left: 6, right: 6),
|
padding: EdgeInsets.only(left: 6, right: 6),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.all(Radius.circular(8.5)),
|
borderRadius: BorderRadius.all(Radius.circular(8.5)),
|
||||||
color: Colors.white),
|
color: Colors.white),
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: Text(
|
child: Text(
|
||||||
S.of(context).frozen,
|
S.of(context).frozen,
|
||||||
style: TextStyle(
|
style:
|
||||||
color: amountColor,
|
TextStyle(color: amountColor, fontSize: 7, fontWeight: FontWeight.w600),
|
||||||
fontSize: 7,
|
))
|
||||||
fontWeight: FontWeight.w600
|
],
|
||||||
),
|
),
|
||||||
)
|
Expanded(
|
||||||
)
|
child: Row(
|
||||||
],
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
),
|
children: [
|
||||||
Text(
|
AutoSizeText(
|
||||||
_note,
|
address,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: addressColor,
|
color: addressColor,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
maxLines: 1,
|
||||||
),
|
),
|
||||||
maxLines: 1,
|
],
|
||||||
overflow: TextOverflow.ellipsis
|
),
|
||||||
)
|
),
|
||||||
]
|
])),
|
||||||
)
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
)
|
));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
|
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||||
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
import 'package:cake_wallet/entities/fiat_api_mode.dart';
|
||||||
|
import 'package:cw_bitcoin/bitcoin_amount_format.dart';
|
||||||
|
import 'package:cw_bitcoin/electrum_balance.dart';
|
||||||
import 'package:cw_core/transaction_history.dart';
|
import 'package:cw_core/transaction_history.dart';
|
||||||
|
import 'package:cw_core/unspent_coins_info.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
import 'package:cw_core/wallet_base.dart';
|
||||||
import 'package:cw_core/balance.dart';
|
import 'package:cw_core/balance.dart';
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
|
@ -11,6 +15,7 @@ import 'package:cake_wallet/entities/calculate_fiat_amount.dart';
|
||||||
import 'package:cake_wallet/store/app_store.dart';
|
import 'package:cake_wallet/store/app_store.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
||||||
|
import 'package:hive/hive.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
|
||||||
part 'balance_view_model.g.dart';
|
part 'balance_view_model.g.dart';
|
||||||
|
@ -19,14 +24,18 @@ class BalanceRecord {
|
||||||
const BalanceRecord({
|
const BalanceRecord({
|
||||||
required this.availableBalance,
|
required this.availableBalance,
|
||||||
required this.additionalBalance,
|
required this.additionalBalance,
|
||||||
|
required this.frozenBalance,
|
||||||
required this.fiatAvailableBalance,
|
required this.fiatAvailableBalance,
|
||||||
required this.fiatAdditionalBalance,
|
required this.fiatAdditionalBalance,
|
||||||
|
required this.fiatFrozenBalance,
|
||||||
required this.asset,
|
required this.asset,
|
||||||
required this.formattedAssetTitle});
|
required this.formattedAssetTitle});
|
||||||
final String fiatAdditionalBalance;
|
final String fiatAdditionalBalance;
|
||||||
final String fiatAvailableBalance;
|
final String fiatAvailableBalance;
|
||||||
|
final String fiatFrozenBalance;
|
||||||
final String additionalBalance;
|
final String additionalBalance;
|
||||||
final String availableBalance;
|
final String availableBalance;
|
||||||
|
final String frozenBalance;
|
||||||
final CryptoCurrency asset;
|
final CryptoCurrency asset;
|
||||||
final String formattedAssetTitle;
|
final String formattedAssetTitle;
|
||||||
}
|
}
|
||||||
|
@ -135,6 +144,32 @@ abstract class BalanceViewModelBase with Store {
|
||||||
return walletBalance.formattedAvailableBalance;
|
return walletBalance.formattedAvailableBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get frozenBalance {
|
||||||
|
final walletBalance = _walletBalance;
|
||||||
|
|
||||||
|
if (displayMode == BalanceDisplayMode.hiddenBalance) {
|
||||||
|
return '---';
|
||||||
|
}
|
||||||
|
|
||||||
|
return getFormattedFrozenBalance(walletBalance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get frozenFiatBalance {
|
||||||
|
final walletBalance = _walletBalance;
|
||||||
|
final fiatCurrency = settingsStore.fiatCurrency;
|
||||||
|
|
||||||
|
if (displayMode == BalanceDisplayMode.hiddenBalance) {
|
||||||
|
return '---';
|
||||||
|
}
|
||||||
|
|
||||||
|
return _getFiatBalance(
|
||||||
|
price: price,
|
||||||
|
cryptoAmount: getFormattedFrozenBalance(walletBalance)) + ' ' + fiatCurrency.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
String get additionalBalance {
|
String get additionalBalance {
|
||||||
final walletBalance = _walletBalance;
|
final walletBalance = _walletBalance;
|
||||||
|
@ -158,7 +193,7 @@ abstract class BalanceViewModelBase with Store {
|
||||||
return _getFiatBalance(
|
return _getFiatBalance(
|
||||||
price: price,
|
price: price,
|
||||||
cryptoAmount: walletBalance.formattedAvailableBalance) + ' ' + fiatCurrency.toString();
|
cryptoAmount: walletBalance.formattedAvailableBalance) + ' ' + fiatCurrency.toString();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
|
@ -173,7 +208,7 @@ abstract class BalanceViewModelBase with Store {
|
||||||
return _getFiatBalance(
|
return _getFiatBalance(
|
||||||
price: price,
|
price: price,
|
||||||
cryptoAmount: walletBalance.formattedAdditionalBalance) + ' ' + fiatCurrency.toString();
|
cryptoAmount: walletBalance.formattedAdditionalBalance) + ' ' + fiatCurrency.toString();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
|
@ -183,8 +218,10 @@ abstract class BalanceViewModelBase with Store {
|
||||||
return MapEntry(key, BalanceRecord(
|
return MapEntry(key, BalanceRecord(
|
||||||
availableBalance: '---',
|
availableBalance: '---',
|
||||||
additionalBalance: '---',
|
additionalBalance: '---',
|
||||||
|
frozenBalance: '---',
|
||||||
fiatAdditionalBalance: isFiatDisabled ? '' : '---',
|
fiatAdditionalBalance: isFiatDisabled ? '' : '---',
|
||||||
fiatAvailableBalance: isFiatDisabled ? '' : '---',
|
fiatAvailableBalance: isFiatDisabled ? '' : '---',
|
||||||
|
fiatFrozenBalance: isFiatDisabled ? '' : '---',
|
||||||
asset: key,
|
asset: key,
|
||||||
formattedAssetTitle: _formatterAsset(key)));
|
formattedAssetTitle: _formatterAsset(key)));
|
||||||
}
|
}
|
||||||
|
@ -207,13 +244,25 @@ abstract class BalanceViewModelBase with Store {
|
||||||
price: price,
|
price: price,
|
||||||
cryptoAmount: value.formattedAvailableBalance));
|
cryptoAmount: value.formattedAvailableBalance));
|
||||||
|
|
||||||
return MapEntry(key, BalanceRecord(
|
|
||||||
availableBalance: value.formattedAvailableBalance,
|
final frozenFiatBalance = isFiatDisabled ? '' : (fiatCurrency.toString()
|
||||||
additionalBalance: value.formattedAdditionalBalance,
|
+ ' '
|
||||||
fiatAdditionalBalance: additionalFiatBalance,
|
+ _getFiatBalance(
|
||||||
fiatAvailableBalance: availableFiatBalance,
|
price: price,
|
||||||
asset: key,
|
cryptoAmount: getFormattedFrozenBalance(value)));
|
||||||
formattedAssetTitle: _formatterAsset(key)));
|
|
||||||
|
|
||||||
|
return MapEntry(
|
||||||
|
key,
|
||||||
|
BalanceRecord(
|
||||||
|
availableBalance: value.formattedAvailableBalance,
|
||||||
|
additionalBalance: value.formattedAdditionalBalance,
|
||||||
|
frozenBalance: getFormattedFrozenBalance(value),
|
||||||
|
fiatAdditionalBalance: additionalFiatBalance,
|
||||||
|
fiatAvailableBalance: availableFiatBalance,
|
||||||
|
fiatFrozenBalance: frozenFiatBalance,
|
||||||
|
asset: key,
|
||||||
|
formattedAssetTitle: _formatterAsset(key)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +339,7 @@ abstract class BalanceViewModelBase with Store {
|
||||||
}
|
}
|
||||||
|
|
||||||
String _getFiatBalance({required double price, String? cryptoAmount}) {
|
String _getFiatBalance({required double price, String? cryptoAmount}) {
|
||||||
if (cryptoAmount == null) {
|
if (cryptoAmount == null || cryptoAmount.isEmpty) {
|
||||||
return '0.00';
|
return '0.00';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,10 +355,15 @@ abstract class BalanceViewModelBase with Store {
|
||||||
return assetStringified.replaceFirst('X', 'x');
|
return assetStringified.replaceFirst('X', 'x');
|
||||||
}
|
}
|
||||||
|
|
||||||
return asset.toString();
|
return asset.toString();
|
||||||
default:
|
default:
|
||||||
return asset.toString();
|
return asset.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String getFormattedFrozenBalance(Balance walletBalance) =>
|
||||||
|
walletBalance is ElectrumBalance ? walletBalance.formattedFrozenBalance : '';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/src/screens/transaction_details/blockexplorer_list_item.dart';
|
||||||
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
|
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
|
||||||
import 'package:cake_wallet/src/screens/transaction_details/textfield_list_item.dart';
|
import 'package:cake_wallet/src/screens/transaction_details/textfield_list_item.dart';
|
||||||
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_list_item.dart';
|
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_list_item.dart';
|
||||||
|
@ -5,7 +6,9 @@ import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_item.dart';
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart';
|
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart';
|
||||||
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart';
|
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart';
|
||||||
|
import 'package:cw_core/wallet_type.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
part 'unspent_coins_details_view_model.g.dart';
|
part 'unspent_coins_details_view_model.g.dart';
|
||||||
|
|
||||||
|
@ -13,21 +16,14 @@ class UnspentCoinsDetailsViewModel = UnspentCoinsDetailsViewModelBase
|
||||||
with _$UnspentCoinsDetailsViewModel;
|
with _$UnspentCoinsDetailsViewModel;
|
||||||
|
|
||||||
abstract class UnspentCoinsDetailsViewModelBase with Store {
|
abstract class UnspentCoinsDetailsViewModelBase with Store {
|
||||||
UnspentCoinsDetailsViewModelBase({
|
UnspentCoinsDetailsViewModelBase(
|
||||||
required this.unspentCoinsItem,
|
{required this.unspentCoinsItem, required this.unspentCoinsListViewModel})
|
||||||
required this.unspentCoinsListViewModel})
|
|
||||||
: items = <TransactionDetailsListItem>[],
|
: items = <TransactionDetailsListItem>[],
|
||||||
isFrozen = unspentCoinsItem.isFrozen,
|
isFrozen = unspentCoinsItem.isFrozen,
|
||||||
note = unspentCoinsItem.note {
|
note = unspentCoinsItem.note {
|
||||||
items = [
|
items = [
|
||||||
StandartListItem(
|
StandartListItem(title: S.current.transaction_details_amount, value: unspentCoinsItem.amount),
|
||||||
title: S.current.transaction_details_amount,
|
StandartListItem(title: S.current.widgets_address, value: unspentCoinsItem.address),
|
||||||
value: unspentCoinsItem.amount
|
|
||||||
),
|
|
||||||
StandartListItem(
|
|
||||||
title: S.current.widgets_address,
|
|
||||||
value: unspentCoinsItem.address
|
|
||||||
),
|
|
||||||
TextFieldListItem(
|
TextFieldListItem(
|
||||||
title: S.current.note_tap_to_change,
|
title: S.current.note_tap_to_change,
|
||||||
value: note,
|
value: note,
|
||||||
|
@ -36,21 +32,53 @@ abstract class UnspentCoinsDetailsViewModelBase with Store {
|
||||||
unspentCoinsListViewModel.saveUnspentCoinInfo(unspentCoinsItem);
|
unspentCoinsListViewModel.saveUnspentCoinInfo(unspentCoinsItem);
|
||||||
}),
|
}),
|
||||||
UnspentCoinsSwitchItem(
|
UnspentCoinsSwitchItem(
|
||||||
title: S.current.freeze,
|
title: S.current.freeze,
|
||||||
value: '',
|
value: '',
|
||||||
switchValue: () => isFrozen,
|
switchValue: () => isFrozen,
|
||||||
onSwitchValueChange: (value) async {
|
onSwitchValueChange: (value) async {
|
||||||
isFrozen = value;
|
isFrozen = value;
|
||||||
unspentCoinsItem.isFrozen = value;
|
unspentCoinsItem.isFrozen = value;
|
||||||
if (value) {
|
if (value) {
|
||||||
unspentCoinsItem.isSending = !value;
|
unspentCoinsItem.isSending = !value;
|
||||||
}
|
}
|
||||||
await unspentCoinsListViewModel.saveUnspentCoinInfo(unspentCoinsItem);
|
await unspentCoinsListViewModel.saveUnspentCoinInfo(unspentCoinsItem);
|
||||||
}
|
}),
|
||||||
)
|
BlockExplorerListItem(
|
||||||
|
title: S.current.view_in_block_explorer,
|
||||||
|
value: _explorerDescription(unspentCoinsListViewModel.wallet.type),
|
||||||
|
onTap: () {
|
||||||
|
try {
|
||||||
|
final url = Uri.parse(
|
||||||
|
_explorerUrl(unspentCoinsListViewModel.wallet.type, unspentCoinsItem.hash));
|
||||||
|
return launchUrl(url);
|
||||||
|
} catch (e) {}
|
||||||
|
|
||||||
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String _explorerUrl(WalletType type, String txId) {
|
||||||
|
switch (type) {
|
||||||
|
case WalletType.bitcoin:
|
||||||
|
return 'https://ordinals.com/tx/${txId}';
|
||||||
|
case WalletType.litecoin:
|
||||||
|
return 'https://litecoin.earlyordies.com/tx/${txId}';
|
||||||
|
default:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _explorerDescription(WalletType type) {
|
||||||
|
switch (type) {
|
||||||
|
case WalletType.bitcoin:
|
||||||
|
return S.current.view_transaction_on + 'Ordinals.com';
|
||||||
|
case WalletType.litecoin:
|
||||||
|
return S.current.view_transaction_on + 'Earlyordies.com';
|
||||||
|
default:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
bool isFrozen;
|
bool isFrozen;
|
||||||
|
|
||||||
|
@ -60,4 +88,4 @@ abstract class UnspentCoinsDetailsViewModelBase with Store {
|
||||||
final UnspentCoinsItem unspentCoinsItem;
|
final UnspentCoinsItem unspentCoinsItem;
|
||||||
final UnspentCoinsListViewModel unspentCoinsListViewModel;
|
final UnspentCoinsListViewModel unspentCoinsListViewModel;
|
||||||
List<TransactionDetailsListItem> items;
|
List<TransactionDetailsListItem> items;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,9 @@ abstract class UnspentCoinsItemBase with Store {
|
||||||
required this.hash,
|
required this.hash,
|
||||||
required this.isFrozen,
|
required this.isFrozen,
|
||||||
required this.note,
|
required this.note,
|
||||||
required this.isSending});
|
required this.isSending,
|
||||||
|
required this.amountRaw,
|
||||||
|
required this.vout});
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
String address;
|
String address;
|
||||||
|
@ -30,4 +32,10 @@ abstract class UnspentCoinsItemBase with Store {
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
bool isSending;
|
bool isSending;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
int amountRaw;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
int vout;
|
||||||
}
|
}
|
|
@ -1,60 +1,81 @@
|
||||||
//import 'package:cw_bitcoin/bitcoin_amount_format.dart';
|
|
||||||
//import 'package:cw_bitcoin/electrum_wallet.dart';
|
|
||||||
import 'package:cw_core/unspent_coins_info.dart';
|
import 'package:cw_core/unspent_coins_info.dart';
|
||||||
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||||
import 'package:cw_core/wallet_base.dart';
|
import 'package:cw_core/wallet_base.dart';
|
||||||
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_item.dart';
|
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_item.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
|
|
||||||
part 'unspent_coins_list_view_model.g.dart';
|
part 'unspent_coins_list_view_model.g.dart';
|
||||||
|
|
||||||
class UnspentCoinsListViewModel = UnspentCoinsListViewModelBase with _$UnspentCoinsListViewModel;
|
class UnspentCoinsListViewModel = UnspentCoinsListViewModelBase with _$UnspentCoinsListViewModel;
|
||||||
|
|
||||||
abstract class UnspentCoinsListViewModelBase with Store {
|
abstract class UnspentCoinsListViewModelBase with Store {
|
||||||
UnspentCoinsListViewModelBase({
|
UnspentCoinsListViewModelBase(
|
||||||
required this.wallet,
|
{required this.wallet, required Box<UnspentCoinsInfo> unspentCoinsInfo})
|
||||||
required Box<UnspentCoinsInfo> unspentCoinsInfo})
|
: _unspentCoinsInfo = unspentCoinsInfo {
|
||||||
: _unspentCoinsInfo = unspentCoinsInfo {
|
|
||||||
bitcoin!.updateUnspents(wallet);
|
bitcoin!.updateUnspents(wallet);
|
||||||
}
|
}
|
||||||
|
|
||||||
WalletBase wallet;
|
WalletBase wallet;
|
||||||
Box<UnspentCoinsInfo> _unspentCoinsInfo;
|
final Box<UnspentCoinsInfo> _unspentCoinsInfo;
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
ObservableList<UnspentCoinsItem> get items => ObservableList.of(bitcoin!.getUnspents(wallet).map((elem) {
|
ObservableList<UnspentCoinsItem> get items =>
|
||||||
final amount = bitcoin!.formatterBitcoinAmountToString(amount: elem.value) +
|
ObservableList.of(bitcoin!.getUnspents(wallet).map((elem) {
|
||||||
' ${wallet.currency.title}';
|
final amount = bitcoin!.formatterBitcoinAmountToString(amount: elem.value) +
|
||||||
|
' ${wallet.currency.title}';
|
||||||
final info = _unspentCoinsInfo.values
|
|
||||||
.firstWhere((element) => element.walletId == wallet.id && element.hash == elem.hash);
|
|
||||||
|
|
||||||
return UnspentCoinsItem(
|
final info = getUnspentCoinInfo(elem.hash, elem.address, elem.value, elem.vout);
|
||||||
address: elem.address,
|
|
||||||
amount: amount,
|
return UnspentCoinsItem(
|
||||||
hash: elem.hash,
|
address: elem.address,
|
||||||
isFrozen: elem.isFrozen,
|
amount: amount,
|
||||||
note: info.note,
|
hash: elem.hash,
|
||||||
isSending: elem.isSending
|
isFrozen: info?.isFrozen ?? false,
|
||||||
);
|
note: info?.note ?? '',
|
||||||
}));
|
isSending: info?.isSending ?? true,
|
||||||
|
amountRaw: elem.value,
|
||||||
|
vout: elem.vout);
|
||||||
|
}));
|
||||||
|
|
||||||
Future<void> saveUnspentCoinInfo(UnspentCoinsItem item) async {
|
Future<void> saveUnspentCoinInfo(UnspentCoinsItem item) async {
|
||||||
try {
|
try {
|
||||||
final info = _unspentCoinsInfo.values
|
final info = getUnspentCoinInfo(item.hash, item.address, item.amountRaw, item.vout);
|
||||||
.firstWhere((element) => element.walletId.contains(wallet.id) &&
|
if (info == null) {
|
||||||
element.hash.contains(item.hash));
|
final newInfo = UnspentCoinsInfo(
|
||||||
|
walletId: wallet.id,
|
||||||
|
hash: item.hash,
|
||||||
|
address: item.address,
|
||||||
|
value: item.amountRaw,
|
||||||
|
vout: item.vout,
|
||||||
|
isFrozen: item.isFrozen,
|
||||||
|
isSending: item.isSending,
|
||||||
|
noteRaw: item.note);
|
||||||
|
|
||||||
|
await _unspentCoinsInfo.add(newInfo);
|
||||||
|
bitcoin!.updateUnspents(wallet);
|
||||||
|
wallet.updateBalance();
|
||||||
|
return;
|
||||||
|
}
|
||||||
info.isFrozen = item.isFrozen;
|
info.isFrozen = item.isFrozen;
|
||||||
info.isSending = item.isSending;
|
info.isSending = item.isSending;
|
||||||
info.note = item.note;
|
info.note = item.note;
|
||||||
|
|
||||||
await info.save();
|
await info.save();
|
||||||
bitcoin!.updateUnspents(wallet);
|
bitcoin!.updateUnspents(wallet);
|
||||||
|
wallet.updateBalance();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e.toString());
|
print(e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
UnspentCoinsInfo? getUnspentCoinInfo(String hash, String address, int value, int vout) {
|
||||||
|
return _unspentCoinsInfo.values.firstWhereOrNull((element) =>
|
||||||
|
element.walletId == wallet.id &&
|
||||||
|
element.hash == hash &&
|
||||||
|
element.address == address &&
|
||||||
|
element.value == value &&
|
||||||
|
element.vout == vout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info":"من فضلك لا تنس تحديد علامة الوجهة أثناء إرسال معاملة XRP للتبادل",
|
"xrp_extra_info":"من فضلك لا تنس تحديد علامة الوجهة أثناء إرسال معاملة XRP للتبادل",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr":"إذا كنت ترغب في استبدال XMR من رصيد Cake Wallet Monero ، فيرجى التبديل إلى محفظة Monero أولاً.",
|
"exchange_incorrect_current_wallet_for_xmr":"إذا كنت ترغب في استبدال XMR من رصيد Cake Wallet Monero ، فيرجى التبديل إلى محفظة Monero أولاً.",
|
||||||
"confirmed":"مؤكد",
|
"confirmed":"رصيد مؤكد",
|
||||||
"unconfirmed":"غير مؤكد",
|
"unconfirmed":"رصيد غير مؤكد",
|
||||||
"displayable":"قابل للعرض",
|
"displayable":"قابل للعرض",
|
||||||
|
|
||||||
"submit_request":"تقديم طلب",
|
"submit_request":"تقديم طلب",
|
||||||
|
@ -685,6 +685,7 @@
|
||||||
"error_dialog_content": "عفوًا ، لقد حصلنا على بعض الخطأ.\n\nيرجى إرسال تقرير التعطل إلى فريق الدعم لدينا لتحسين التطبيق.",
|
"error_dialog_content": "عفوًا ، لقد حصلنا على بعض الخطأ.\n\nيرجى إرسال تقرير التعطل إلى فريق الدعم لدينا لتحسين التطبيق.",
|
||||||
"decimal_places_error": "عدد كبير جدًا من المنازل العشرية",
|
"decimal_places_error": "عدد كبير جدًا من المنازل العشرية",
|
||||||
"edit_node": "تحرير العقدة",
|
"edit_node": "تحرير العقدة",
|
||||||
|
"frozen_balance": "الرصيد المجمد",
|
||||||
"invoice_details": "تفاصيل الفاتورة",
|
"invoice_details": "تفاصيل الفاتورة",
|
||||||
"donation_link_details": "تفاصيل رابط التبرع",
|
"donation_link_details": "تفاصيل رابط التبرع",
|
||||||
"anonpay_description": "توليد ${type}. يمكن للمستلم ${method} بأي عملة مشفرة مدعومة ، وستتلقى أموالاً في هذه",
|
"anonpay_description": "توليد ${type}. يمكن للمستلم ${method} بأي عملة مشفرة مدعومة ، وستتلقى أموالاً في هذه",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Не забравяйте да дадете Destination Tag-а, когато изпращате XRP транзакцията за обмена",
|
"xrp_extra_info" : "Не забравяйте да дадете Destination Tag-а, когато изпращате XRP транзакцията за обмена",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Ако искате да обмените XMR от своя Cake Wallet Monero баланс, първо изберете своя Monero портфейл.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Ако искате да обмените XMR от своя Cake Wallet Monero баланс, първо изберете своя Monero портфейл.",
|
||||||
"confirmed" : "Потвърдено",
|
"confirmed" : "Потвърден баланс",
|
||||||
"unconfirmed" : "Непотвърдено",
|
"unconfirmed" : "Непотвърден баланс",
|
||||||
"displayable" : "Възможност за показване",
|
"displayable" : "Възможност за показване",
|
||||||
|
|
||||||
"submit_request" : "изпращане на заявка",
|
"submit_request" : "изпращане на заявка",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Получихме грешка.\n\nМоля, изпратете доклада до нашия отдел поддръжка, за да подобрим приложението.",
|
"error_dialog_content": "Получихме грешка.\n\nМоля, изпратете доклада до нашия отдел поддръжка, за да подобрим приложението.",
|
||||||
"decimal_places_error": "Твърде много знаци след десетичната запетая",
|
"decimal_places_error": "Твърде много знаци след десетичната запетая",
|
||||||
"edit_node": "Редактиране на възел",
|
"edit_node": "Редактиране на възел",
|
||||||
|
"frozen_balance": "Замразен баланс",
|
||||||
"invoice_details": "IДанни за фактура",
|
"invoice_details": "IДанни за фактура",
|
||||||
"donation_link_details": "Подробности за връзката за дарение",
|
"donation_link_details": "Подробности за връзката за дарение",
|
||||||
"anonpay_description": "Генерирайте ${type}. Получателят може да ${method} с всяка поддържана криптовалута и вие ще получите средства в този портфейл.",
|
"anonpay_description": "Генерирайте ${type}. Получателят може да ${method} с всяка поддържана криптовалута и вие ще получите средства в този портфейл.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Prosím nezapomeňte zadat Destination Tag, když posíláte XRP transakce ke směně",
|
"xrp_extra_info" : "Prosím nezapomeňte zadat Destination Tag, když posíláte XRP transakce ke směně",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Pokud chcete směnit XMR z Monero částky v Cake Wallet, prosím přepněte se nejprve do své Monero peněženky.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Pokud chcete směnit XMR z Monero částky v Cake Wallet, prosím přepněte se nejprve do své Monero peněženky.",
|
||||||
"confirmed" : "Potvrzeno",
|
"confirmed" : "Potvrzený zůstatek",
|
||||||
"unconfirmed" : "Nepotvrzeno",
|
"unconfirmed" : "Nepotvrzený zůstatek",
|
||||||
"displayable" : "Zobrazitelné",
|
"displayable" : "Zobrazitelné",
|
||||||
|
|
||||||
"submit_request" : "odeslat požadavek",
|
"submit_request" : "odeslat požadavek",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Nastala chyba.\n\nProsím odešlete zprávu o chybě naší podpoře, aby mohli zajistit opravu.",
|
"error_dialog_content": "Nastala chyba.\n\nProsím odešlete zprávu o chybě naší podpoře, aby mohli zajistit opravu.",
|
||||||
"decimal_places_error": "Příliš mnoho desetinných míst",
|
"decimal_places_error": "Příliš mnoho desetinných míst",
|
||||||
"edit_node": "Upravit uzel",
|
"edit_node": "Upravit uzel",
|
||||||
|
"frozen_balance": "Zmrazená bilance",
|
||||||
"invoice_details": "detaily faktury",
|
"invoice_details": "detaily faktury",
|
||||||
"donation_link_details": "Podrobnosti odkazu na darování",
|
"donation_link_details": "Podrobnosti odkazu na darování",
|
||||||
"anonpay_description": "Vygenerujte ${type}. Příjemce může ${method} s jakoukoli podporovanou kryptoměnou a vy obdržíte prostředky v této peněžence.",
|
"anonpay_description": "Vygenerujte ${type}. Příjemce může ${method} s jakoukoli podporovanou kryptoměnou a vy obdržíte prostředky v této peněžence.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Bitte vergessen Sie nicht, das Ziel-Tag anzugeben, während Sie die XRP-Transaktion für den Austausch senden",
|
"xrp_extra_info" : "Bitte vergessen Sie nicht, das Ziel-Tag anzugeben, während Sie die XRP-Transaktion für den Austausch senden",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Wenn Sie XMR von Ihrem Cake Wallet Monero-Guthaben umtauschen möchten, wechseln Sie bitte zuerst zu Ihrer Monero-Wallet.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Wenn Sie XMR von Ihrem Cake Wallet Monero-Guthaben umtauschen möchten, wechseln Sie bitte zuerst zu Ihrer Monero-Wallet.",
|
||||||
"confirmed" : "Bestätigt",
|
"confirmed" : "Bestätigter Saldo",
|
||||||
"unconfirmed" : "Unbestätigt",
|
"unconfirmed" : "Unbestätigter Saldo",
|
||||||
"displayable" : "Anzeigebar",
|
"displayable" : "Anzeigebar",
|
||||||
|
|
||||||
"submit_request" : "Eine Anfrage stellen",
|
"submit_request" : "Eine Anfrage stellen",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Hoppla, wir haben einen Fehler.\n\nBitte senden Sie den Absturzbericht an unser Support-Team, um die Anwendung zu verbessern.",
|
"error_dialog_content": "Hoppla, wir haben einen Fehler.\n\nBitte senden Sie den Absturzbericht an unser Support-Team, um die Anwendung zu verbessern.",
|
||||||
"decimal_places_error": "Zu viele Nachkommastellen",
|
"decimal_places_error": "Zu viele Nachkommastellen",
|
||||||
"edit_node": "Knoten bearbeiten",
|
"edit_node": "Knoten bearbeiten",
|
||||||
|
"frozen_balance": "Gefrorenes Gleichgewicht",
|
||||||
"invoice_details": "Rechnungs-Details",
|
"invoice_details": "Rechnungs-Details",
|
||||||
"donation_link_details": "Details zum Spendenlink",
|
"donation_link_details": "Details zum Spendenlink",
|
||||||
"anonpay_description": "Generieren Sie ${type}. Der Empfänger kann ${method} mit jeder unterstützten Kryptowährung verwenden, und Sie erhalten Geld in dieser Brieftasche.",
|
"anonpay_description": "Generieren Sie ${type}. Der Empfänger kann ${method} mit jeder unterstützten Kryptowährung verwenden, und Sie erhalten Geld in dieser Brieftasche.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Please don’t forget to specify the Destination Tag while sending the XRP transaction for the exchange",
|
"xrp_extra_info" : "Please don’t forget to specify the Destination Tag while sending the XRP transaction for the exchange",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "If you want to exchange XMR from your Cake Wallet Monero balance, please switch to your Monero wallet first.",
|
"exchange_incorrect_current_wallet_for_xmr" : "If you want to exchange XMR from your Cake Wallet Monero balance, please switch to your Monero wallet first.",
|
||||||
"confirmed" : "Confirmed",
|
"confirmed" : "Confirmed Balance",
|
||||||
"unconfirmed" : "Unconfirmed",
|
"unconfirmed" : "Unconfirmed Balance",
|
||||||
"displayable" : "Displayable",
|
"displayable" : "Displayable",
|
||||||
|
|
||||||
"submit_request" : "submit a request",
|
"submit_request" : "submit a request",
|
||||||
|
@ -697,6 +697,7 @@
|
||||||
"onion_link": "Onion link",
|
"onion_link": "Onion link",
|
||||||
"decimal_places_error": "Too many decimal places",
|
"decimal_places_error": "Too many decimal places",
|
||||||
"edit_node": "Edit Node",
|
"edit_node": "Edit Node",
|
||||||
|
"frozen_balance": "Frozen Balance",
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
"sell_monero_com_alert_content": "Selling Monero is not supported yet",
|
"sell_monero_com_alert_content": "Selling Monero is not supported yet",
|
||||||
"error_text_input_below_minimum_limit" : "Amount is less than the minimum",
|
"error_text_input_below_minimum_limit" : "Amount is less than the minimum",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "No olvide especificar la etiqueta de destino al enviar la transacción XRP para el intercambio",
|
"xrp_extra_info" : "No olvide especificar la etiqueta de destino al enviar la transacción XRP para el intercambio",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Si desea intercambiar XMR de su saldo de Cake Wallet Monero, primero cambie a su billetera Monero.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Si desea intercambiar XMR de su saldo de Cake Wallet Monero, primero cambie a su billetera Monero.",
|
||||||
"confirmed" : "Confirmada",
|
"confirmed" : "Saldo confirmado",
|
||||||
"unconfirmed" : "Inconfirmado",
|
"unconfirmed" : "Saldo no confirmado",
|
||||||
"displayable" : "Visualizable",
|
"displayable" : "Visualizable",
|
||||||
|
|
||||||
"submit_request" : "presentar una solicitud",
|
"submit_request" : "presentar una solicitud",
|
||||||
|
@ -686,7 +686,8 @@
|
||||||
"do_not_send": "no enviar",
|
"do_not_send": "no enviar",
|
||||||
"error_dialog_content": "Vaya, tenemos un error.\n\nEnvíe el informe de bloqueo a nuestro equipo de soporte para mejorar la aplicación.",
|
"error_dialog_content": "Vaya, tenemos un error.\n\nEnvíe el informe de bloqueo a nuestro equipo de soporte para mejorar la aplicación.",
|
||||||
"decimal_places_error": "Demasiados lugares decimales",
|
"decimal_places_error": "Demasiados lugares decimales",
|
||||||
"edit_node": "Edit Node",
|
"edit_node": "Editar nodo",
|
||||||
|
"frozen_balance": "Balance congelado",
|
||||||
"invoice_details": "Detalles de la factura",
|
"invoice_details": "Detalles de la factura",
|
||||||
"donation_link_details": "Detalles del enlace de donación",
|
"donation_link_details": "Detalles del enlace de donación",
|
||||||
"anonpay_description": "Genera ${type}. El destinatario puede ${method} con cualquier criptomoneda admitida, y recibirá fondos en esta billetera.",
|
"anonpay_description": "Genera ${type}. El destinatario puede ${method} con cualquier criptomoneda admitida, y recibirá fondos en esta billetera.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Merci de ne pas oublier de spécifier le tag de destination lors de l'envoi de la transaction XRP de l'échange",
|
"xrp_extra_info" : "Merci de ne pas oublier de spécifier le tag de destination lors de l'envoi de la transaction XRP de l'échange",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Si vous souhaitez échanger des XMR du solde Monero de votre Cake Wallet, merci de sélectionner votre portefeuille (wallet) Monero au préalable.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Si vous souhaitez échanger des XMR du solde Monero de votre Cake Wallet, merci de sélectionner votre portefeuille (wallet) Monero au préalable.",
|
||||||
"confirmed" : "Confirmé",
|
"confirmed" : "Solde confirmé",
|
||||||
"unconfirmed" : "Non confirmé",
|
"unconfirmed" : "Solde non confirmé",
|
||||||
"displayable" : "Visible",
|
"displayable" : "Visible",
|
||||||
|
|
||||||
"submit_request" : "soumettre une requête",
|
"submit_request" : "soumettre une requête",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Oups, nous avons rencontré une erreur.\n\nMerci d'envoyer le rapport d'erreur à notre équipe d'assistance afin de nous permettre d'améliorer l'application.",
|
"error_dialog_content": "Oups, nous avons rencontré une erreur.\n\nMerci d'envoyer le rapport d'erreur à notre équipe d'assistance afin de nous permettre d'améliorer l'application.",
|
||||||
"decimal_places_error": "Trop de décimales",
|
"decimal_places_error": "Trop de décimales",
|
||||||
"edit_node": "Modifier le nœud",
|
"edit_node": "Modifier le nœud",
|
||||||
|
"frozen_balance": "Équilibre gelé",
|
||||||
"invoice_details": "Détails de la facture",
|
"invoice_details": "Détails de la facture",
|
||||||
"donation_link_details": "Détails du lien de don",
|
"donation_link_details": "Détails du lien de don",
|
||||||
"anonpay_description": "Générez ${type}. Le destinataire peut ${method} avec n'importe quelle crypto-monnaie prise en charge, et vous recevrez des fonds dans ce portefeuille (wallet).",
|
"anonpay_description": "Générez ${type}. Le destinataire peut ${method} avec n'importe quelle crypto-monnaie prise en charge, et vous recevrez des fonds dans ce portefeuille (wallet).",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "एक्सचेंज के लिए एक्सआरपी लेनदेन भेजते समय कृपया गंतव्य टैग निर्दिष्ट करना न भूलें",
|
"xrp_extra_info" : "एक्सचेंज के लिए एक्सआरपी लेनदेन भेजते समय कृपया गंतव्य टैग निर्दिष्ट करना न भूलें",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "यदि आप अपने केक वॉलेट मोनेरो बैलेंस से एक्सएमआर का आदान-प्रदान करना चाहते हैं, तो कृपया अपने मोनेरो वॉलेट में जाएं।",
|
"exchange_incorrect_current_wallet_for_xmr" : "यदि आप अपने केक वॉलेट मोनेरो बैलेंस से एक्सएमआर का आदान-प्रदान करना चाहते हैं, तो कृपया अपने मोनेरो वॉलेट में जाएं।",
|
||||||
"confirmed" : "की पुष्टि की",
|
"confirmed" : "पुष्टि की गई शेष राशिी",
|
||||||
"unconfirmed" : "अपुष्ट",
|
"unconfirmed" : "अपुष्ट शेष राशि",
|
||||||
"displayable" : "प्रदर्शन योग्य",
|
"displayable" : "प्रदर्शन योग्य",
|
||||||
|
|
||||||
"submit_request" : "एक अनुरोध सबमिट करें",
|
"submit_request" : "एक अनुरोध सबमिट करें",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "ओह, हमसे कुछ गड़बड़ी हुई है.\n\nएप्लिकेशन को बेहतर बनाने के लिए कृपया क्रैश रिपोर्ट हमारी सहायता टीम को भेजें।",
|
"error_dialog_content": "ओह, हमसे कुछ गड़बड़ी हुई है.\n\nएप्लिकेशन को बेहतर बनाने के लिए कृपया क्रैश रिपोर्ट हमारी सहायता टीम को भेजें।",
|
||||||
"decimal_places_error": "बहुत अधिक दशमलव स्थान",
|
"decimal_places_error": "बहुत अधिक दशमलव स्थान",
|
||||||
"edit_node": "नोड संपादित करें",
|
"edit_node": "नोड संपादित करें",
|
||||||
|
"frozen_balance": "जमे हुए संतुलन",
|
||||||
"invoice_details": "चालान विवरण",
|
"invoice_details": "चालान विवरण",
|
||||||
"donation_link_details": "दान लिंक विवरण",
|
"donation_link_details": "दान लिंक विवरण",
|
||||||
"anonpay_description": "${type} उत्पन्न करें। प्राप्तकर्ता किसी भी समर्थित क्रिप्टोकरेंसी के साथ ${method} कर सकता है, और आपको इस वॉलेट में धन प्राप्त होगा।",
|
"anonpay_description": "${type} उत्पन्न करें। प्राप्तकर्ता किसी भी समर्थित क्रिप्टोकरेंसी के साथ ${method} कर सकता है, और आपको इस वॉलेट में धन प्राप्त होगा।",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Molimo ne zaboravite navesti odredišnu oznaku prilikom slanja XRP transakcije na razmjenu",
|
"xrp_extra_info" : "Molimo ne zaboravite navesti odredišnu oznaku prilikom slanja XRP transakcije na razmjenu",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Ako želite razmijeniti XMR s vlastitog Monero računa na Cake Wallet novčaniku, molimo prvo se prebacite na svoj Monero novčanik.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Ako želite razmijeniti XMR s vlastitog Monero računa na Cake Wallet novčaniku, molimo prvo se prebacite na svoj Monero novčanik.",
|
||||||
"confirmed" : "Potvrđeno",
|
"confirmed" : "Potvrđeno stanje",
|
||||||
"unconfirmed" : "Nepotvrđeno",
|
"unconfirmed" : "Nepotvrđeno stanje",
|
||||||
"displayable" : "Dostupno za prikaz",
|
"displayable" : "Dostupno za prikaz",
|
||||||
|
|
||||||
"submit_request" : "podnesi zahtjev",
|
"submit_request" : "podnesi zahtjev",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Ups, imamo grešku.\n\nPošaljite izvješće o padu našem timu za podršku kako bismo poboljšali aplikaciju.",
|
"error_dialog_content": "Ups, imamo grešku.\n\nPošaljite izvješće o padu našem timu za podršku kako bismo poboljšali aplikaciju.",
|
||||||
"decimal_places_error": "Previše decimalnih mjesta",
|
"decimal_places_error": "Previše decimalnih mjesta",
|
||||||
"edit_node": "Uredi čvor",
|
"edit_node": "Uredi čvor",
|
||||||
|
"frozen_balance": "Zamrznuti saldo",
|
||||||
"invoice_details": "Podaci o fakturi",
|
"invoice_details": "Podaci o fakturi",
|
||||||
"donation_link_details": "Detalji veza za donacije",
|
"donation_link_details": "Detalji veza za donacije",
|
||||||
"anonpay_description": "Generiraj ${type}. Primatelj može ${method} s bilo kojom podržanom kriptovalutom, a vi ćete primiti sredstva u ovaj novčanik.",
|
"anonpay_description": "Generiraj ${type}. Primatelj može ${method} s bilo kojom podržanom kriptovalutom, a vi ćete primiti sredstva u ovaj novčanik.",
|
||||||
|
|
|
@ -466,8 +466,8 @@
|
||||||
"xrp_extra_info" : "Jangan lupa untuk menentukan Tag Tujuan saat mengirim transaksi XRP untuk pertukaran",
|
"xrp_extra_info" : "Jangan lupa untuk menentukan Tag Tujuan saat mengirim transaksi XRP untuk pertukaran",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Jika Anda ingin menukar XMR dari saldo Monero Cake Wallet Anda, silakan beralih ke dompet Monero Anda terlebih dahulu.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Jika Anda ingin menukar XMR dari saldo Monero Cake Wallet Anda, silakan beralih ke dompet Monero Anda terlebih dahulu.",
|
||||||
"confirmed" : "Dikonfirmasi",
|
"confirmed" : "Saldo Terkonfirmasi",
|
||||||
"unconfirmed" : "Tidak dikonfirmasi",
|
"unconfirmed" : "Saldo Belum Dikonfirmasi",
|
||||||
"displayable" : "Dapat ditampilkan",
|
"displayable" : "Dapat ditampilkan",
|
||||||
|
|
||||||
"submit_request" : "kirim permintaan",
|
"submit_request" : "kirim permintaan",
|
||||||
|
@ -669,6 +669,7 @@
|
||||||
"contact_list_wallets": "Dompet Saya",
|
"contact_list_wallets": "Dompet Saya",
|
||||||
"decimal_places_error": "Terlalu banyak tempat desimal",
|
"decimal_places_error": "Terlalu banyak tempat desimal",
|
||||||
"edit_node": "Sunting Node",
|
"edit_node": "Sunting Node",
|
||||||
|
"frozen_balance": "Saldo Beku",
|
||||||
"invoice_details": "Detail faktur",
|
"invoice_details": "Detail faktur",
|
||||||
"donation_link_details": "Detail tautan donasi",
|
"donation_link_details": "Detail tautan donasi",
|
||||||
"anonpay_description": "Hasilkan ${type}. Penerima dapat ${method} dengan cryptocurrency apa pun yang didukung, dan Anda akan menerima dana di dompet ini.",
|
"anonpay_description": "Hasilkan ${type}. Penerima dapat ${method} dengan cryptocurrency apa pun yang didukung, dan Anda akan menerima dana di dompet ini.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Gentilmente ricorda di indicare il Tag di Destinazione quando invii una transazione XRP per lo scambio",
|
"xrp_extra_info" : "Gentilmente ricorda di indicare il Tag di Destinazione quando invii una transazione XRP per lo scambio",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Se vuoi scambiare XMR dal tuo saldo Cake Wallet Monero, gentilmente passa al tuo portafoglio Monero.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Se vuoi scambiare XMR dal tuo saldo Cake Wallet Monero, gentilmente passa al tuo portafoglio Monero.",
|
||||||
"confirmed" : "Confermato",
|
"confirmed" : "Saldo confermato",
|
||||||
"unconfirmed" : "Non confermato",
|
"unconfirmed" : "Saldo non confermato",
|
||||||
"displayable" : "Visualizzabile",
|
"displayable" : "Visualizzabile",
|
||||||
|
|
||||||
"submit_request" : "invia una richiesta",
|
"submit_request" : "invia una richiesta",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Spiacenti, abbiamo riscontrato un errore.\n\nSi prega di inviare il rapporto sull'arresto anomalo al nostro team di supporto per migliorare l'applicazione.",
|
"error_dialog_content": "Spiacenti, abbiamo riscontrato un errore.\n\nSi prega di inviare il rapporto sull'arresto anomalo al nostro team di supporto per migliorare l'applicazione.",
|
||||||
"decimal_places_error": "Troppe cifre decimali",
|
"decimal_places_error": "Troppe cifre decimali",
|
||||||
"edit_node": "Modifica nodo",
|
"edit_node": "Modifica nodo",
|
||||||
|
"frozen_balance": "Equilibrio congelato",
|
||||||
"invoice_details": "Dettagli della fattura",
|
"invoice_details": "Dettagli della fattura",
|
||||||
"donation_link_details": "Dettagli del collegamento alla donazione",
|
"donation_link_details": "Dettagli del collegamento alla donazione",
|
||||||
"anonpay_description": "Genera ${type}. Il destinatario può ${method} con qualsiasi criptovaluta supportata e riceverai fondi in questo portafoglio.",
|
"anonpay_description": "Genera ${type}. Il destinatario può ${method} con qualsiasi criptovaluta supportata e riceverai fondi in questo portafoglio.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "取引所のXRPトランザクションを送信するときに、宛先タグを指定することを忘れないでください",
|
"xrp_extra_info" : "取引所のXRPトランザクションを送信するときに、宛先タグを指定することを忘れないでください",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Cake Wallet Moneroの残高からXMRを交換する場合は、最初にMoneroウォレットに切り替えてください。",
|
"exchange_incorrect_current_wallet_for_xmr" : "Cake Wallet Moneroの残高からXMRを交換する場合は、最初にMoneroウォレットに切り替えてください。",
|
||||||
"confirmed" : "確認済み",
|
"confirmed" : "確認済み残高",
|
||||||
"unconfirmed" : "未確認",
|
"unconfirmed" : "残高未確認",
|
||||||
"displayable" : "表示可能",
|
"displayable" : "表示可能",
|
||||||
|
|
||||||
"submit_request" : "リクエストを送信する",
|
"submit_request" : "リクエストを送信する",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "エラーが発生しました。\n\nアプリケーションを改善するために、クラッシュ レポートをサポート チームに送信してください。",
|
"error_dialog_content": "エラーが発生しました。\n\nアプリケーションを改善するために、クラッシュ レポートをサポート チームに送信してください。",
|
||||||
"decimal_places_error": "小数点以下の桁数が多すぎる",
|
"decimal_places_error": "小数点以下の桁数が多すぎる",
|
||||||
"edit_node": "ノードを編集",
|
"edit_node": "ノードを編集",
|
||||||
|
"frozen_balance": "冷凍残高",
|
||||||
"invoice_details": "請求の詳細",
|
"invoice_details": "請求の詳細",
|
||||||
"donation_link_details": "寄付リンクの詳細",
|
"donation_link_details": "寄付リンクの詳細",
|
||||||
"anonpay_description": "${type} を生成します。受取人はサポートされている任意の暗号通貨で ${method} でき、あなたはこのウォレットで資金を受け取ります。",
|
"anonpay_description": "${type} を生成します。受取人はサポートされている任意の暗号通貨で ${method} でき、あなたはこのウォレットで資金を受け取ります。",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "교환을 위해 XRP 트랜잭션을 보내는 동안 대상 태그를 지정하는 것을 잊지 마십시오",
|
"xrp_extra_info" : "교환을 위해 XRP 트랜잭션을 보내는 동안 대상 태그를 지정하는 것을 잊지 마십시오",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Cake Wallet Monero 잔액에서 XMR을 교환하려면 먼저 Monero 지갑으로 전환하십시오.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Cake Wallet Monero 잔액에서 XMR을 교환하려면 먼저 Monero 지갑으로 전환하십시오.",
|
||||||
"confirmed" : "확인",
|
"confirmed" : "확인된 잔액",
|
||||||
"unconfirmed" : "미확인",
|
"unconfirmed" : "확인되지 않은 잔액",
|
||||||
"displayable" : "표시 가능",
|
"displayable" : "표시 가능",
|
||||||
|
|
||||||
"submit_request" : "요청을 제출",
|
"submit_request" : "요청을 제출",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "죄송합니다. 오류가 발생했습니다.\n\n응용 프로그램을 개선하려면 지원 팀에 충돌 보고서를 보내주십시오.",
|
"error_dialog_content": "죄송합니다. 오류가 발생했습니다.\n\n응용 프로그램을 개선하려면 지원 팀에 충돌 보고서를 보내주십시오.",
|
||||||
"decimal_places_error": "소수점 이하 자릿수가 너무 많습니다.",
|
"decimal_places_error": "소수점 이하 자릿수가 너무 많습니다.",
|
||||||
"edit_node": "노드 편집",
|
"edit_node": "노드 편집",
|
||||||
|
"frozen_balance": "얼어붙은 균형",
|
||||||
"invoice_details": "인보이스 세부정보",
|
"invoice_details": "인보이스 세부정보",
|
||||||
"donation_link_details": "기부 링크 세부정보",
|
"donation_link_details": "기부 링크 세부정보",
|
||||||
"anonpay_description": "${type} 생성. 수신자는 지원되는 모든 암호화폐로 ${method}할 수 있으며 이 지갑에서 자금을 받게 됩니다.",
|
"anonpay_description": "${type} 생성. 수신자는 지원되는 모든 암호화폐로 ${method}할 수 있으며 이 지갑에서 자금을 받게 됩니다.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "လဲလှယ်မှုအတွက် XRP ငွေလွှဲပို့နေစဉ် Destination Tag ကို သတ်မှတ်ရန် မမေ့ပါနှင့်",
|
"xrp_extra_info" : "လဲလှယ်မှုအတွက် XRP ငွေလွှဲပို့နေစဉ် Destination Tag ကို သတ်မှတ်ရန် မမေ့ပါနှင့်",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "သင်၏ Cake Wallet Monero လက်ကျန်မှ XMR ကိုလဲလှယ်လိုပါက၊ သင်၏ Monero ပိုက်ဆံအိတ်သို့ ဦးစွာပြောင်းပါ။",
|
"exchange_incorrect_current_wallet_for_xmr" : "သင်၏ Cake Wallet Monero လက်ကျန်မှ XMR ကိုလဲလှယ်လိုပါက၊ သင်၏ Monero ပိုက်ဆံအိတ်သို့ ဦးစွာပြောင်းပါ။",
|
||||||
"confirmed" : "အတည်ပြုခဲ့သည်။",
|
"confirmed" : "အတည်ပြုထားသော လက်ကျန်ငွေ",
|
||||||
"unconfirmed" : "အတည်မပြုနိုင်ပါ။",
|
"unconfirmed" : "အတည်မပြုနိုင်သော လက်ကျန်ငွေ",
|
||||||
"displayable" : "ပြသနိုင်သည်။",
|
"displayable" : "ပြသနိုင်သည်။",
|
||||||
|
|
||||||
"submit_request" : "တောင်းဆိုချက်တစ်ခုတင်ပြပါ။",
|
"submit_request" : "တောင်းဆိုချက်တစ်ခုတင်ပြပါ။",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "အိုး၊ ကျွန်ုပ်တို့တွင် အမှားအယွင်းအချို့ရှိသည်။\n\nအပလီကေးရှင်းကို ပိုမိုကောင်းမွန်စေရန်အတွက် ပျက်စီးမှုအစီရင်ခံစာကို ကျွန်ုပ်တို့၏ပံ့ပိုးကူညီရေးအဖွဲ့ထံ ပေးပို့ပါ။",
|
"error_dialog_content": "အိုး၊ ကျွန်ုပ်တို့တွင် အမှားအယွင်းအချို့ရှိသည်။\n\nအပလီကေးရှင်းကို ပိုမိုကောင်းမွန်စေရန်အတွက် ပျက်စီးမှုအစီရင်ခံစာကို ကျွန်ုပ်တို့၏ပံ့ပိုးကူညီရေးအဖွဲ့ထံ ပေးပို့ပါ။",
|
||||||
"decimal_places_error": "ဒဿမနေရာများ များလွန်းသည်။",
|
"decimal_places_error": "ဒဿမနေရာများ များလွန်းသည်။",
|
||||||
"edit_node": "Node ကို တည်းဖြတ်ပါ။",
|
"edit_node": "Node ကို တည်းဖြတ်ပါ။",
|
||||||
|
"frozen_balance": "ေးခဲမှူ",
|
||||||
"invoice_details": "ပြေစာအသေးစိတ်",
|
"invoice_details": "ပြေစာအသေးစိတ်",
|
||||||
"donation_link_details": "လှူဒါန်းရန်လင့်ခ်အသေးစိတ်",
|
"donation_link_details": "လှူဒါန်းရန်လင့်ခ်အသေးစိတ်",
|
||||||
"anonpay_description": "${type} ကို ဖန်တီးပါ။ လက်ခံသူက ${method} ကို ပံ့ပိုးပေးထားသည့် cryptocurrency တစ်ခုခုဖြင့် လုပ်ဆောင်နိုင်ပြီး၊ သင်သည် ဤပိုက်ဆံအိတ်တွင် ရံပုံငွေများ ရရှိမည်ဖြစ်သည်။",
|
"anonpay_description": "${type} ကို ဖန်တီးပါ။ လက်ခံသူက ${method} ကို ပံ့ပိုးပေးထားသည့် cryptocurrency တစ်ခုခုဖြင့် လုပ်ဆောင်နိုင်ပြီး၊ သင်သည် ဤပိုက်ဆံအိတ်တွင် ရံပုံငွေများ ရရှိမည်ဖြစ်သည်။",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Vergeet niet om de Destination Tag op te geven tijdens het verzenden van de XRP-transactie voor de uitwisseling",
|
"xrp_extra_info" : "Vergeet niet om de Destination Tag op te geven tijdens het verzenden van de XRP-transactie voor de uitwisseling",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Als u XMR wilt omwisselen van uw Cake Wallet Monero-saldo, moet u eerst overschakelen naar uw Monero-portemonnee.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Als u XMR wilt omwisselen van uw Cake Wallet Monero-saldo, moet u eerst overschakelen naar uw Monero-portemonnee.",
|
||||||
"confirmed" : "Bevestigd",
|
"confirmed" : "Bevestigd saldo",
|
||||||
"unconfirmed" : "Niet bevestigd",
|
"unconfirmed" : "Onbevestigd saldo",
|
||||||
"displayable" : "Weer te geven",
|
"displayable" : "Weer te geven",
|
||||||
|
|
||||||
"submit_request" : "een verzoek indienen",
|
"submit_request" : "een verzoek indienen",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Oeps, er is een fout opgetreden.\n\nStuur het crashrapport naar ons ondersteuningsteam om de applicatie te verbeteren.",
|
"error_dialog_content": "Oeps, er is een fout opgetreden.\n\nStuur het crashrapport naar ons ondersteuningsteam om de applicatie te verbeteren.",
|
||||||
"decimal_places_error": "Te veel decimalen",
|
"decimal_places_error": "Te veel decimalen",
|
||||||
"edit_node": "Knooppunt bewerken",
|
"edit_node": "Knooppunt bewerken",
|
||||||
|
"frozen_balance": "Bevroren saldo",
|
||||||
"invoice_details": "Factuurgegevens",
|
"invoice_details": "Factuurgegevens",
|
||||||
"donation_link_details": "Details van de donatielink",
|
"donation_link_details": "Details van de donatielink",
|
||||||
"anonpay_description": "Genereer ${type}. De ontvanger kan ${method} gebruiken met elke ondersteunde cryptocurrency en u ontvangt geld in deze portemonnee",
|
"anonpay_description": "Genereer ${type}. De ontvanger kan ${method} gebruiken met elke ondersteunde cryptocurrency en u ontvangt geld in deze portemonnee",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Nie zapomnij podać tagu docelowego podczas wysyłania transakcji XRP do wymiany",
|
"xrp_extra_info" : "Nie zapomnij podać tagu docelowego podczas wysyłania transakcji XRP do wymiany",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Jeśli chcesz wymienić XMR z salda Cake Wallet Monero, najpierw przełącz się na portfel Monero.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Jeśli chcesz wymienić XMR z salda Cake Wallet Monero, najpierw przełącz się na portfel Monero.",
|
||||||
"confirmed" : "Potwierdzony",
|
"confirmed" : "Potwierdzone saldo",
|
||||||
"unconfirmed" : "Niepotwierdzony",
|
"unconfirmed" : "Niepotwierdzone saldo",
|
||||||
"displayable" : "Wyświetlane",
|
"displayable" : "Wyświetlane",
|
||||||
|
|
||||||
"submit_request" : "Złóż wniosek",
|
"submit_request" : "Złóż wniosek",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Ups, wystąpił błąd.\n\nPrześlij raport o awarii do naszego zespołu wsparcia, aby ulepszyć aplikację.",
|
"error_dialog_content": "Ups, wystąpił błąd.\n\nPrześlij raport o awarii do naszego zespołu wsparcia, aby ulepszyć aplikację.",
|
||||||
"decimal_places_error": "Za dużo miejsc dziesiętnych",
|
"decimal_places_error": "Za dużo miejsc dziesiętnych",
|
||||||
"edit_node": "Edytuj węzeł",
|
"edit_node": "Edytuj węzeł",
|
||||||
|
"frozen_balance": "Zamrożona równowaga",
|
||||||
"invoice_details": "Dane do faktury",
|
"invoice_details": "Dane do faktury",
|
||||||
"donation_link_details": "Szczegóły linku darowizny",
|
"donation_link_details": "Szczegóły linku darowizny",
|
||||||
"anonpay_description": "Wygeneruj ${type}. Odbiorca może ${method} z dowolną obsługiwaną kryptowalutą, a Ty otrzymasz środki w tym portfelu.",
|
"anonpay_description": "Wygeneruj ${type}. Odbiorca może ${method} z dowolną obsługiwaną kryptowalutą, a Ty otrzymasz środki w tym portfelu.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Não se esqueça de especificar a etiqueta de destino ao enviar a transação XRP para a troca",
|
"xrp_extra_info" : "Não se esqueça de especificar a etiqueta de destino ao enviar a transação XRP para a troca",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Se você deseja trocar o XMR de seu saldo da Carteira Monero Cake, troque primeiro para sua carteira Monero.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Se você deseja trocar o XMR de seu saldo da Carteira Monero Cake, troque primeiro para sua carteira Monero.",
|
||||||
"confirmed" : "Confirmada",
|
"confirmed" : "Saldo Confirmado",
|
||||||
"unconfirmed" : "Não confirmado",
|
"unconfirmed" : "Saldo não confirmado",
|
||||||
"displayable" : "Exibível",
|
"displayable" : "Exibível",
|
||||||
|
|
||||||
"submit_request" : "enviar um pedido",
|
"submit_request" : "enviar um pedido",
|
||||||
|
@ -686,6 +686,7 @@
|
||||||
"error_dialog_content": "Ops, houve algum erro.\n\nPor favor, envie o relatório de falha para nossa equipe de suporte para melhorar o aplicativo.",
|
"error_dialog_content": "Ops, houve algum erro.\n\nPor favor, envie o relatório de falha para nossa equipe de suporte para melhorar o aplicativo.",
|
||||||
"decimal_places_error": "Muitas casas decimais",
|
"decimal_places_error": "Muitas casas decimais",
|
||||||
"edit_node": "Editar nó",
|
"edit_node": "Editar nó",
|
||||||
|
"frozen_balance": "Saldo Congelado",
|
||||||
"invoice_details": "Detalhes da fatura",
|
"invoice_details": "Detalhes da fatura",
|
||||||
"donation_link_details": "Detalhes do link de doação",
|
"donation_link_details": "Detalhes do link de doação",
|
||||||
"anonpay_description": "Gere ${type}. O destinatário pode ${method} com qualquer criptomoeda suportada e você receberá fundos nesta carteira.",
|
"anonpay_description": "Gere ${type}. O destinatário pode ${method} com qualquer criptomoeda suportada e você receberá fundos nesta carteira.",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Не забудьте указать целевой тег при отправке транзакции XRP для обмена",
|
"xrp_extra_info" : "Не забудьте указать целевой тег при отправке транзакции XRP для обмена",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Если вы хотите обменять XMR со своего баланса Monero в Cake Wallet, сначала переключитесь на свой кошелек Monero.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Если вы хотите обменять XMR со своего баланса Monero в Cake Wallet, сначала переключитесь на свой кошелек Monero.",
|
||||||
"confirmed" : "Подтверждено",
|
"confirmed" : "Подтвержденный баланс",
|
||||||
"unconfirmed" : "Неподтвержденный",
|
"unconfirmed" : "Неподтвержденный баланс",
|
||||||
"displayable" : "Отображаемый",
|
"displayable" : "Отображаемый",
|
||||||
|
|
||||||
"submit_request" : "отправить запрос",
|
"submit_request" : "отправить запрос",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Ой, у нас какая-то ошибка.\n\nПожалуйста, отправьте отчет о сбое в нашу службу поддержки, чтобы сделать приложение лучше.",
|
"error_dialog_content": "Ой, у нас какая-то ошибка.\n\nПожалуйста, отправьте отчет о сбое в нашу службу поддержки, чтобы сделать приложение лучше.",
|
||||||
"decimal_places_error": "Слишком много десятичных знаков",
|
"decimal_places_error": "Слишком много десятичных знаков",
|
||||||
"edit_node": "Редактировать узел",
|
"edit_node": "Редактировать узел",
|
||||||
|
"frozen_balance": "Замороженный баланс",
|
||||||
"invoice_details": "Детали счета",
|
"invoice_details": "Детали счета",
|
||||||
"donation_link_details": "Информация о ссылке для пожертвований",
|
"donation_link_details": "Информация о ссылке для пожертвований",
|
||||||
"anonpay_description": "Создайте ${type}. Получатель может использовать ${method} с любой поддерживаемой криптовалютой, и вы получите средства на этот кошелек.",
|
"anonpay_description": "Создайте ${type}. Получатель может использовать ${method} с любой поддерживаемой криптовалютой, и вы получите средства на этот кошелек.",
|
||||||
|
|
|
@ -477,8 +477,8 @@
|
||||||
"xrp_extra_info": "โปรดอย่าลืมระบุ Destination Tag ในขณะที่ส่งธุรกรรม XRP สำหรับการแลกเปลี่ยน",
|
"xrp_extra_info": "โปรดอย่าลืมระบุ Destination Tag ในขณะที่ส่งธุรกรรม XRP สำหรับการแลกเปลี่ยน",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "หากคุณต้องการแลกเปลี่ยน XMR จากยอดคงเหลือ Monero ใน Cake Wallet ของคุณ กรุณาเปลี่ยนเป็นกระเป๋า Monero ก่อน",
|
"exchange_incorrect_current_wallet_for_xmr" : "หากคุณต้องการแลกเปลี่ยน XMR จากยอดคงเหลือ Monero ใน Cake Wallet ของคุณ กรุณาเปลี่ยนเป็นกระเป๋า Monero ก่อน",
|
||||||
"confirmed" : "ได้รับการยืนยัน",
|
"confirmed" : "ยอดคงเหลือที่ยืนยันแล้ว",
|
||||||
"unconfirmed" : "ยังไม่ได้รับการยืนยัน",
|
"unconfirmed" : "ยอดคงเหลือที่ไม่ได้รับการยืนยัน",
|
||||||
"displayable" : "สามารถแสดงได้",
|
"displayable" : "สามารถแสดงได้",
|
||||||
|
|
||||||
"submit_request" : "ส่งคำขอ",
|
"submit_request" : "ส่งคำขอ",
|
||||||
|
@ -685,6 +685,7 @@
|
||||||
"error_dialog_content": "อ๊ะ เราพบข้อผิดพลาดบางอย่าง\n\nโปรดส่งรายงานข้อขัดข้องไปยังทีมสนับสนุนของเราเพื่อปรับปรุงแอปพลิเคชันให้ดียิ่งขึ้น",
|
"error_dialog_content": "อ๊ะ เราพบข้อผิดพลาดบางอย่าง\n\nโปรดส่งรายงานข้อขัดข้องไปยังทีมสนับสนุนของเราเพื่อปรับปรุงแอปพลิเคชันให้ดียิ่งขึ้น",
|
||||||
"decimal_places_error": "ทศนิยมมากเกินไป",
|
"decimal_places_error": "ทศนิยมมากเกินไป",
|
||||||
"edit_node": "แก้ไขโหนด",
|
"edit_node": "แก้ไขโหนด",
|
||||||
|
"frozen_balance": "ยอดคงเหลือแช่แข็ง",
|
||||||
"invoice_details": "รายละเอียดใบแจ้งหนี้",
|
"invoice_details": "รายละเอียดใบแจ้งหนี้",
|
||||||
"donation_link_details": "รายละเอียดลิงค์บริจาค",
|
"donation_link_details": "รายละเอียดลิงค์บริจาค",
|
||||||
"anonpay_description": "สร้าง ${type} ผู้รับสามารถ ${method} ด้วยสกุลเงินดิจิทัลที่รองรับ และคุณจะได้รับเงินในกระเป๋าสตางค์นี้",
|
"anonpay_description": "สร้าง ${type} ผู้รับสามารถ ${method} ด้วยสกุลเงินดิจิทัลที่รองรับ และคุณจะได้รับเงินในกระเป๋าสตางค์นี้",
|
||||||
|
|
|
@ -479,8 +479,8 @@
|
||||||
"xrp_extra_info" : "Lütfen takas için XRP işlemi gönderirken Hedef Etiketi (Destination Tag) belirtmeyi unutmayın",
|
"xrp_extra_info" : "Lütfen takas için XRP işlemi gönderirken Hedef Etiketi (Destination Tag) belirtmeyi unutmayın",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Cake Wallet'daki Monero bakiyenizi kullanarak takas yapmak istiyorsan, lütfen önce Monero cüzdanına geç.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Cake Wallet'daki Monero bakiyenizi kullanarak takas yapmak istiyorsan, lütfen önce Monero cüzdanına geç.",
|
||||||
"confirmed" : "Onaylı",
|
"confirmed" : "Onaylanmış Bakiye",
|
||||||
"unconfirmed" : "Onaylanmamış",
|
"unconfirmed" : "Onaylanmamış Bakiye",
|
||||||
"displayable" : "Gösterilebilir",
|
"displayable" : "Gösterilebilir",
|
||||||
|
|
||||||
"submit_request" : "talep gönder",
|
"submit_request" : "talep gönder",
|
||||||
|
@ -687,6 +687,7 @@
|
||||||
"error_dialog_content": "Hay aksi, bir hatamız var.\n\nUygulamayı daha iyi hale getirmek için lütfen kilitlenme raporunu destek ekibimize gönderin.",
|
"error_dialog_content": "Hay aksi, bir hatamız var.\n\nUygulamayı daha iyi hale getirmek için lütfen kilitlenme raporunu destek ekibimize gönderin.",
|
||||||
"decimal_places_error": "Çok fazla ondalık basamak",
|
"decimal_places_error": "Çok fazla ondalık basamak",
|
||||||
"edit_node": "Düğümü Düzenle",
|
"edit_node": "Düğümü Düzenle",
|
||||||
|
"frozen_balance": "Dondurulmuş Bakiye",
|
||||||
"invoice_details": "fatura detayları",
|
"invoice_details": "fatura detayları",
|
||||||
"donation_link_details": "Bağış bağlantısı ayrıntıları",
|
"donation_link_details": "Bağış bağlantısı ayrıntıları",
|
||||||
"anonpay_description": "${type} oluşturun. Alıcı, desteklenen herhangi bir kripto para birimi ile ${method} yapabilir ve bu cüzdanda para alırsınız.",
|
"anonpay_description": "${type} oluşturun. Alıcı, desteklenen herhangi bir kripto para birimi ile ${method} yapabilir ve bu cüzdanda para alırsınız.",
|
||||||
|
|
|
@ -478,8 +478,8 @@
|
||||||
"xrp_extra_info" : "Будь ласка, не забудьте вказати тег призначення під час надсилання XRP-транзакції для обміну",
|
"xrp_extra_info" : "Будь ласка, не забудьте вказати тег призначення під час надсилання XRP-транзакції для обміну",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "Якщо ви хочете обміняти XMR із вашого балансу Cake Wallet Monero, спочатку перейдіть на свій гаманець Monero.",
|
"exchange_incorrect_current_wallet_for_xmr" : "Якщо ви хочете обміняти XMR із вашого балансу Cake Wallet Monero, спочатку перейдіть на свій гаманець Monero.",
|
||||||
"confirmed" : "Підтверджено",
|
"confirmed" : "Підтверджений баланс",
|
||||||
"unconfirmed" : "Непідтверджений",
|
"unconfirmed" : "Непідтверджений баланс",
|
||||||
"displayable" : "Відображуваний",
|
"displayable" : "Відображуваний",
|
||||||
|
|
||||||
"submit_request" : "надіслати запит",
|
"submit_request" : "надіслати запит",
|
||||||
|
@ -686,6 +686,7 @@
|
||||||
"error_dialog_content": "На жаль, ми отримали помилку.\n\nБудь ласка, надішліть звіт про збій нашій команді підтримки, щоб покращити додаток.",
|
"error_dialog_content": "На жаль, ми отримали помилку.\n\nБудь ласка, надішліть звіт про збій нашій команді підтримки, щоб покращити додаток.",
|
||||||
"decimal_places_error": "Забагато знаків після коми",
|
"decimal_places_error": "Забагато знаків після коми",
|
||||||
"edit_node": "Редагувати вузол",
|
"edit_node": "Редагувати вузол",
|
||||||
|
"frozen_balance": "Заморожений баланс",
|
||||||
"invoice_details": "Реквізити рахунку-фактури",
|
"invoice_details": "Реквізити рахунку-фактури",
|
||||||
"donation_link_details": "Деталі посилання для пожертв",
|
"donation_link_details": "Деталі посилання для пожертв",
|
||||||
"anonpay_description": "Згенерувати ${type}. Одержувач може ${method} будь-якою підтримуваною криптовалютою, і ви отримаєте кошти на цей гаманець.",
|
"anonpay_description": "Згенерувати ${type}. Одержувач може ${method} будь-якою підтримуваною криптовалютою, і ви отримаєте кошти на цей гаманець.",
|
||||||
|
|
|
@ -481,8 +481,8 @@
|
||||||
"xrp_extra_info" : "ایکسچینج کے لیے XRP ٹرانزیکشن بھیجتے وقت ڈیسٹینیشن ٹیگ بتانا نہ بھولیں۔",
|
"xrp_extra_info" : "ایکسچینج کے لیے XRP ٹرانزیکشن بھیجتے وقت ڈیسٹینیشن ٹیگ بتانا نہ بھولیں۔",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "اگر آپ اپنے Cake والیٹ Monero بیلنس سے XMR کا تبادلہ کرنا چاہتے ہیں، تو براہ کرم پہلے اپنے Monero والیٹ پر جائیں۔",
|
"exchange_incorrect_current_wallet_for_xmr" : "اگر آپ اپنے Cake والیٹ Monero بیلنس سے XMR کا تبادلہ کرنا چاہتے ہیں، تو براہ کرم پہلے اپنے Monero والیٹ پر جائیں۔",
|
||||||
"confirmed" : "تصدیق شدہ",
|
"confirmed" : "تصدیق شدہ بیلنس",
|
||||||
"unconfirmed" : "غیر تصدیق شدہ",
|
"unconfirmed" : "غیر تصدیق شدہ بیلنس",
|
||||||
"displayable" : "قابل نمائش",
|
"displayable" : "قابل نمائش",
|
||||||
|
|
||||||
"submit_request" : "درخواست بھیج دو",
|
"submit_request" : "درخواست بھیج دو",
|
||||||
|
@ -688,6 +688,7 @@
|
||||||
"error_dialog_content" : "افوہ، ہمیں کچھ خرابی ملی۔\n\nایپلی کیشن کو بہتر بنانے کے لیے براہ کرم کریش رپورٹ ہماری سپورٹ ٹیم کو بھیجیں۔",
|
"error_dialog_content" : "افوہ، ہمیں کچھ خرابی ملی۔\n\nایپلی کیشن کو بہتر بنانے کے لیے براہ کرم کریش رپورٹ ہماری سپورٹ ٹیم کو بھیجیں۔",
|
||||||
"decimal_places_error": "بہت زیادہ اعشاریہ جگہیں۔",
|
"decimal_places_error": "بہت زیادہ اعشاریہ جگہیں۔",
|
||||||
"edit_node": "نوڈ میں ترمیم کریں۔",
|
"edit_node": "نوڈ میں ترمیم کریں۔",
|
||||||
|
"frozen_balance": "منجمد بیلنس",
|
||||||
"invoice_details": "رسید کی تفصیلات",
|
"invoice_details": "رسید کی تفصیلات",
|
||||||
"donation_link_details": "عطیہ کے لنک کی تفصیلات",
|
"donation_link_details": "عطیہ کے لنک کی تفصیلات",
|
||||||
"anonpay_description": "${type} بنائیں۔ وصول کنندہ کسی بھی تعاون یافتہ کرپٹو کرنسی کے ساتھ ${method} کرسکتا ہے، اور آپ کو اس بٹوے میں فنڈز موصول ہوں گے۔",
|
"anonpay_description": "${type} بنائیں۔ وصول کنندہ کسی بھی تعاون یافتہ کرپٹو کرنسی کے ساتھ ${method} کرسکتا ہے، اور آپ کو اس بٹوے میں فنڈز موصول ہوں گے۔",
|
||||||
|
|
|
@ -478,8 +478,8 @@
|
||||||
"xrp_extra_info" : "发送用于交换的XRP交易时,请不要忘记指定目标Tag",
|
"xrp_extra_info" : "发送用于交换的XRP交易时,请不要忘记指定目标Tag",
|
||||||
|
|
||||||
"exchange_incorrect_current_wallet_for_xmr" : "如果要从Cake Wallet Monero余额中兑换XMR,请先切换到Monero钱包。",
|
"exchange_incorrect_current_wallet_for_xmr" : "如果要从Cake Wallet Monero余额中兑换XMR,请先切换到Monero钱包。",
|
||||||
"confirmed" : "已确认",
|
"confirmed" : "确认余额",
|
||||||
"unconfirmed" : "未经证实",
|
"unconfirmed" : "未确认余额",
|
||||||
"displayable" : "可显示",
|
"displayable" : "可显示",
|
||||||
|
|
||||||
"submit_request" : "提交请求",
|
"submit_request" : "提交请求",
|
||||||
|
@ -686,6 +686,7 @@
|
||||||
"error_dialog_content": "糟糕,我们遇到了一些错误。\n\n请将崩溃报告发送给我们的支持团队,以改进应用程序。",
|
"error_dialog_content": "糟糕,我们遇到了一些错误。\n\n请将崩溃报告发送给我们的支持团队,以改进应用程序。",
|
||||||
"decimal_places_error": "小数位太多",
|
"decimal_places_error": "小数位太多",
|
||||||
"edit_node": "编辑节点",
|
"edit_node": "编辑节点",
|
||||||
|
"frozen_balance": "冻结余额",
|
||||||
"invoice_details": "发票明细",
|
"invoice_details": "发票明细",
|
||||||
"donation_link_details": "捐赠链接详情",
|
"donation_link_details": "捐赠链接详情",
|
||||||
"anonpay_description": "生成 ${type}。收款人可以使用任何受支持的加密货币 ${method},您将在此钱包中收到资金。",
|
"anonpay_description": "生成 ${type}。收款人可以使用任何受支持的加密货币 ${method},您将在此钱包中收到资金。",
|
||||||
|
|
Loading…
Reference in a new issue