Merge branch 'main' into zano-pr

This commit is contained in:
cyan 2024-12-15 14:25:14 -05:00 committed by GitHub
commit 08fcc8e1bf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
108 changed files with 2437 additions and 569 deletions

View file

@ -0,0 +1,298 @@
#name: Automated Integration Tests
#
#on:
# pull_request:
# branches: [main, CW-659-Transaction-History-Automated-Tests]
# workflow_dispatch:
# inputs:
# branch:
# description: "Branch name to build"
# required: true
# default: "main"
#
#jobs:
# Automated_integration_test:
# runs-on: ubuntu-20.04
# strategy:
# fail-fast: false
# matrix:
# api-level: [29]
# # arch: [x86, x86_64]
# env:
# STORE_PASS: test@cake_wallet
# KEY_PASS: test@cake_wallet
# PR_NUMBER: ${{ github.event.number }}
#
# steps:
# - name: is pr
# if: github.event_name == 'pull_request'
# run: echo "BRANCH_NAME=${GITHUB_HEAD_REF}" >> $GITHUB_ENV
#
# - name: is not pr
# if: github.event_name != 'pull_request'
# run: echo "BRANCH_NAME=${{ github.event.inputs.branch }}" >> $GITHUB_ENV
#
# - name: Free Disk Space (Ubuntu)
# uses: insightsengineering/disk-space-reclaimer@v1
# with:
# tools-cache: true
# android: false
# dotnet: true
# haskell: true
# large-packages: true
# swap-storage: true
# docker-images: true
#
# - uses: actions/checkout@v2
# - uses: actions/setup-java@v2
# with:
# distribution: "temurin"
# java-version: "17"
# - name: Configure placeholder git details
# run: |
# git config --global user.email "CI@cakewallet.com"
# git config --global user.name "Cake Github Actions"
# - name: Flutter action
# uses: subosito/flutter-action@v1
# with:
# flutter-version: "3.24.0"
# channel: stable
#
# - name: Install package dependencies
# run: |
# sudo apt update
# sudo apt-get install -y curl unzip automake build-essential file pkg-config git python libtool libtinfo5 cmake clang
#
# - name: Execute Build and Setup Commands
# run: |
# sudo mkdir -p /opt/android
# sudo chown $USER /opt/android
# cd /opt/android
# -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# cargo install cargo-ndk
# git clone https://github.com/cake-tech/cake_wallet.git --branch ${{ env.BRANCH_NAME }}
# cd cake_wallet/scripts/android/
# ./install_ndk.sh
# source ./app_env.sh cakewallet
# chmod +x pubspec_gen.sh
# ./app_config.sh
#
# - name: Cache Externals
# id: cache-externals
# uses: actions/cache@v3
# with:
# path: |
# /opt/android/cake_wallet/cw_haven/android/.cxx
# /opt/android/cake_wallet/scripts/monero_c/release
# key: ${{ hashFiles('**/prepare_moneroc.sh' ,'**/build_monero_all.sh' ,'**/cache_dependencies.yml') }}
#
# - if: ${{ steps.cache-externals.outputs.cache-hit != 'true' }}
# name: Generate Externals
# run: |
# cd /opt/android/cake_wallet/scripts/android/
# source ./app_env.sh cakewallet
# ./build_monero_all.sh
#
# - name: Install Flutter dependencies
# run: |
# cd /opt/android/cake_wallet
# flutter pub get
#
#
# - name: Install go and gomobile
# run: |
# # install go > 1.23:
# wget https://go.dev/dl/go1.23.1.linux-amd64.tar.gz
# sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.1.linux-amd64.tar.gz
# export PATH=$PATH:/usr/local/go/bin
# export PATH=$PATH:~/go/bin
# go install golang.org/x/mobile/cmd/gomobile@latest
# gomobile init
#
# - name: Build mwebd
# run: |
# # paths are reset after each step, so we need to set them again:
# export PATH=$PATH:/usr/local/go/bin
# export PATH=$PATH:~/go/bin
# cd /opt/android/cake_wallet/scripts/android/
# ./build_mwebd.sh --dont-install
#
# - name: Generate KeyStore
# run: |
# cd /opt/android/cake_wallet/android/app
# keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias testKey -noprompt -dname "CN=CakeWallet, OU=CakeWallet, O=CakeWallet, L=Florida, S=America, C=USA" -storepass $STORE_PASS -keypass $KEY_PASS
#
# - name: Generate key properties
# run: |
# cd /opt/android/cake_wallet
# flutter packages pub run tool/generate_android_key_properties.dart keyAlias=testKey storeFile=key.jks storePassword=$STORE_PASS keyPassword=$KEY_PASS
#
# - name: Generate localization
# run: |
# cd /opt/android/cake_wallet
# flutter packages pub run tool/generate_localization.dart
#
# - name: Build generated code
# run: |
# cd /opt/android/cake_wallet
# ./model_generator.sh
#
# - name: Add secrets
# run: |
# cd /opt/android/cake_wallet
# touch lib/.secrets.g.dart
# touch cw_evm/lib/.secrets.g.dart
# touch cw_solana/lib/.secrets.g.dart
# touch cw_core/lib/.secrets.g.dart
# touch cw_nano/lib/.secrets.g.dart
# touch cw_tron/lib/.secrets.g.dart
# echo "const salt = '${{ secrets.SALT }}';" > lib/.secrets.g.dart
# echo "const keychainSalt = '${{ secrets.KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
# echo "const key = '${{ secrets.KEY }}';" >> lib/.secrets.g.dart
# echo "const walletSalt = '${{ secrets.WALLET_SALT }}';" >> lib/.secrets.g.dart
# echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
# echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
# echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
# echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
# echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
# echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
# echo "const moonPayApiKey = '${{ secrets.MOON_PAY_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const moonPaySecretKey = '${{ secrets.MOON_PAY_SECRET_KEY }}';" >> lib/.secrets.g.dart
# echo "const sideShiftAffiliateId = '${{ secrets.SIDE_SHIFT_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
# echo "const simpleSwapApiKey = '${{ secrets.SIMPLE_SWAP_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const simpleSwapApiKeyDesktop = '${{ secrets.SIMPLE_SWAP_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
# echo "const onramperApiKey = '${{ secrets.ONRAMPER_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const anypayToken = '${{ secrets.ANY_PAY_TOKEN }}';" >> lib/.secrets.g.dart
# echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
# echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
# echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
# echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
# echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const payfuraApiKey = '${{ secrets.PAYFURA_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
# echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
# echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
# echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
# echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
# echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
# echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const polygonScanApiKey = '${{ secrets.POLYGON_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
# echo "const ankrApiKey = '${{ secrets.ANKR_API_KEY }}';" >> cw_solana/lib/.secrets.g.dart
# echo "const testCakePayApiKey = '${{ secrets.TEST_CAKE_PAY_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const cakePayApiKey = '${{ secrets.CAKE_PAY_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const authorization = '${{ secrets.CAKE_PAY_AUTHORIZATION }}';" >> lib/.secrets.g.dart
# echo "const CSRFToken = '${{ secrets.CSRF_TOKEN }}';" >> lib/.secrets.g.dart
# echo "const quantexExchangeMarkup = '${{ secrets.QUANTEX_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
# echo "const nano2ApiKey = '${{ secrets.NANO2_API_KEY }}';" >> cw_nano/lib/.secrets.g.dart
# echo "const nanoNowNodesApiKey = '${{ secrets.NANO_NOW_NODES_API_KEY }}';" >> cw_nano/lib/.secrets.g.dart
# echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
# echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
# echo "const meldTestApiKey = '${{ secrets.MELD_TEST_API_KEY }}';" >> lib/.secrets.g.dart
# echo "const meldTestPublicKey = '${{ secrets.MELD_TEST_PUBLIC_KEY}}';" >> lib/.secrets.g.dart
# echo "const letsExchangeBearerToken = '${{ secrets.LETS_EXCHANGE_TOKEN }}';" >> lib/.secrets.g.dart
# echo "const letsExchangeAffiliateId = '${{ secrets.LETS_EXCHANGE_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
# echo "const stealthExBearerToken = '${{ secrets.STEALTH_EX_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
# echo "const stealthExAdditionalFeePercent = '${{ secrets.STEALTH_EX_ADDITIONAL_FEE_PERCENT }}';" >> lib/.secrets.g.dart
# echo "const moneroTestWalletSeeds ='${{ secrets.MONERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const moneroLegacyTestWalletSeeds = '${{ secrets.MONERO_LEGACY_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const bitcoinTestWalletSeeds = '${{ secrets.BITCOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const ethereumTestWalletSeeds = '${{ secrets.ETHEREUM_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const litecoinTestWalletSeeds = '${{ secrets.LITECOIN_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const bitcoinCashTestWalletSeeds = '${{ secrets.BITCOIN_CASH_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const polygonTestWalletSeeds = '${{ secrets.POLYGON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const solanaTestWalletSeeds = '${{ secrets.SOLANA_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const tronTestWalletSeeds = '${{ secrets.TRON_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const nanoTestWalletSeeds = '${{ secrets.NANO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const wowneroTestWalletSeeds = '${{ secrets.WOWNERO_TEST_WALLET_SEEDS }}';" >> lib/.secrets.g.dart
# echo "const moneroTestWalletReceiveAddress = '${{ secrets.MONERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const bitcoinTestWalletReceiveAddress = '${{ secrets.BITCOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const ethereumTestWalletReceiveAddress = '${{ secrets.ETHEREUM_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const litecoinTestWalletReceiveAddress = '${{ secrets.LITECOIN_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const bitcoinCashTestWalletReceiveAddress = '${{ secrets.BITCOIN_CASH_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const polygonTestWalletReceiveAddress = '${{ secrets.POLYGON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const solanaTestWalletReceiveAddress = '${{ secrets.SOLANA_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const tronTestWalletReceiveAddress = '${{ secrets.TRON_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const nanoTestWalletReceiveAddress = '${{ secrets.NANO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const wowneroTestWalletReceiveAddress = '${{ secrets.WOWNERO_TEST_WALLET_RECEIVE_ADDRESS }}';" >> lib/.secrets.g.dart
# echo "const moneroTestWalletBlockHeight = '${{ secrets.MONERO_TEST_WALLET_BLOCK_HEIGHT }}';" >> lib/.secrets.g.dart
#
# - name: Rename app
# run: |
# echo -e "id=com.cakewallet.test_${{ env.PR_NUMBER }}\nname=${{ env.BRANCH_NAME }}" > /opt/android/cake_wallet/android/app.properties
#
# - name: Build
# run: |
# cd /opt/android/cake_wallet
# flutter build apk --release --split-per-abi
#
# # - name: Rename apk file
# # run: |
# # cd /opt/android/cake_wallet/build/app/outputs/flutter-apk
# # mkdir test-apk
# # cp app-arm64-v8a-release.apk test-apk/${{env.BRANCH_NAME}}.apk
# # cp app-x86_64-release.apk test-apk/${{env.BRANCH_NAME}}_x86.apk
#
# # - name: Upload Artifact
# # uses: kittaakos/upload-artifact-as-is@v0
# # with:
# # path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/test-apk/
#
# # - name: Send Test APK
# # continue-on-error: true
# # uses: adrey/slack-file-upload-action@1.0.5
# # with:
# # token: ${{ secrets.SLACK_APP_TOKEN }}
# # path: /opt/android/cake_wallet/build/app/outputs/flutter-apk/test-apk/${{env.BRANCH_NAME}}.apk
# # channel: ${{ secrets.SLACK_APK_CHANNEL }}
# # title: "${{ env.BRANCH_NAME }}.apk"
# # filename: ${{ env.BRANCH_NAME }}.apk
# # initial_comment: ${{ github.event.head_commit.message }}
#
# - name: 🦾 Enable KVM
# run: |
# echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
# sudo udevadm control --reload-rules
# sudo udevadm trigger --name-match=kvm
#
# - name: 🦾 Cache gradle
# uses: gradle/actions/setup-gradle@v3
#
# - name: 🦾 Cache AVD
# uses: actions/cache@v4
# id: avd-cache
# with:
# path: |
# ~/.android/avd/*
# ~/.android/adb*
# key: avd-${{ matrix.api-level }}
#
# - name: 🦾 Create AVD and generate snapshot for caching
# if: steps.avd-cache.outputs.cache-hit != 'true'
# uses: reactivecircus/android-emulator-runner@v2
# with:
# api-level: ${{ matrix.api-level }}
# force-avd-creation: false
# # arch: ${{ matrix.arch }}
# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
# working-directory: /opt/android/cake_wallet
# disable-animations: false
# script: echo "Generated AVD snapshot for caching."
#
# - name: 🚀 Integration tests on Android Emulator
# uses: reactivecircus/android-emulator-runner@v2
# with:
# api-level: ${{ matrix.api-level }}
# force-avd-creation: false
# emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
# disable-animations: true
# working-directory: /opt/android/cake_wallet
# script: |
# chmod a+rx integration_test_runner.sh
# ./integration_test_runner.sh

View file

@ -208,7 +208,7 @@ jobs:
echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart echo "const tronGridApiKey = '${{ secrets.TRON_GRID_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart echo "const tronNowNodesApiKey = '${{ secrets.TRON_NOW_NODES_API_KEY }}';" >> cw_tron/lib/.secrets.g.dart
echo "const meldTestApiKey = '${{ secrets.MELD_TEST_API_KEY }}';" >> lib/.secrets.g.dart echo "const meldTestApiKey = '${{ secrets.MELD_TEST_API_KEY }}';" >> lib/.secrets.g.dart
echo "const meldTestPublicKey = '${{ secrets.MELD_TEST_PUBLIC_KEY}}';" >> lib/.secrets.g.dar echo "const meldTestPublicKey = '${{ secrets.MELD_TEST_PUBLIC_KEY}}';" >> lib/.secrets.g.dart
echo "const letsExchangeBearerToken = '${{ secrets.LETS_EXCHANGE_TOKEN }}';" >> lib/.secrets.g.dart echo "const letsExchangeBearerToken = '${{ secrets.LETS_EXCHANGE_TOKEN }}';" >> lib/.secrets.g.dart
echo "const letsExchangeAffiliateId = '${{ secrets.LETS_EXCHANGE_AFFILIATE_ID }}';" >> lib/.secrets.g.dart echo "const letsExchangeAffiliateId = '${{ secrets.LETS_EXCHANGE_AFFILIATE_ID }}';" >> lib/.secrets.g.dart
echo "const stealthExBearerToken = '${{ secrets.STEALTH_EX_BEARER_TOKEN }}';" >> lib/.secrets.g.dart echo "const stealthExBearerToken = '${{ secrets.STEALTH_EX_BEARER_TOKEN }}';" >> lib/.secrets.g.dart

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -235,9 +235,9 @@ class ElectrumClient {
return []; return [];
}); });
Future<List<Map<String, dynamic>>> getListUnspent(String scriptHash) => Future<List<Map<String, dynamic>>> getListUnspent(String scriptHash) async {
call(method: 'blockchain.scripthash.listunspent', params: [scriptHash]) final result = await call(method: 'blockchain.scripthash.listunspent', params: [scriptHash]);
.then((dynamic result) {
if (result is List) { if (result is List) {
return result.map((dynamic val) { return result.map((dynamic val) {
if (val is Map<String, dynamic>) { if (val is Map<String, dynamic>) {
@ -249,7 +249,7 @@ class ElectrumClient {
} }
return []; return [];
}); }
Future<List<Map<String, dynamic>>> getMempool(String scriptHash) => Future<List<Map<String, dynamic>>> getMempool(String scriptHash) =>
call(method: 'blockchain.scripthash.get_mempool', params: [scriptHash]) call(method: 'blockchain.scripthash.get_mempool', params: [scriptHash])

View file

@ -1346,7 +1346,7 @@ abstract class ElectrumWalletBase
} }
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
try { try {
await _receiveStream?.cancel(); await _receiveStream?.cancel();
await electrumClient.close(); await electrumClient.close();
@ -1383,7 +1383,8 @@ abstract class ElectrumWalletBase
unspentCoins = updatedUnspentCoins; unspentCoins = updatedUnspentCoins;
final currentWalletUnspentCoins = unspentCoinsInfo.values.where((element) => element.walletId == id); final currentWalletUnspentCoins =
unspentCoinsInfo.values.where((element) => element.walletId == id);
if (currentWalletUnspentCoins.length != updatedUnspentCoins.length) { if (currentWalletUnspentCoins.length != updatedUnspentCoins.length) {
unspentCoins.forEach((coin) => addCoinInfo(coin)); unspentCoins.forEach((coin) => addCoinInfo(coin));
@ -1450,10 +1451,9 @@ abstract class ElectrumWalletBase
@action @action
Future<void> addCoinInfo(BitcoinUnspent coin) async { Future<void> addCoinInfo(BitcoinUnspent coin) async {
// Check if the coin is already in the unspentCoinsInfo for the wallet // Check if the coin is already in the unspentCoinsInfo for the wallet
final existingCoinInfo = unspentCoinsInfo.values.firstWhereOrNull( final existingCoinInfo = unspentCoinsInfo.values
(element) => element.walletId == walletInfo.id && element == coin); .firstWhereOrNull((element) => element.walletId == walletInfo.id && element == coin);
if (existingCoinInfo == null) { if (existingCoinInfo == null) {
final newInfo = UnspentCoinsInfo( final newInfo = UnspentCoinsInfo(
@ -1475,19 +1475,18 @@ abstract class ElectrumWalletBase
Future<void> _refreshUnspentCoinsInfo() async { Future<void> _refreshUnspentCoinsInfo() async {
try { try {
final List<dynamic> keys = <dynamic>[]; final List<dynamic> keys = [];
final currentWalletUnspentCoins = final currentWalletUnspentCoins =
unspentCoinsInfo.values.where((element) => element.walletId.contains(id)); unspentCoinsInfo.values.where((record) => record.walletId == id);
if (currentWalletUnspentCoins.isNotEmpty) { for (final element in currentWalletUnspentCoins) {
currentWalletUnspentCoins.forEach((element) { if (RegexUtils.addressTypeFromStr(element.address, network) is MwebAddress) continue;
final existUnspentCoins = unspentCoins
.where((coin) => element.hash.contains(coin.hash) && element.vout == coin.vout); final existUnspentCoins = unspentCoins.where((coin) => element == coin);
if (existUnspentCoins.isEmpty) { if (existUnspentCoins.isEmpty) {
keys.add(element.key); keys.add(element.key);
} }
});
} }
if (keys.isNotEmpty) { if (keys.isNotEmpty) {
@ -1499,7 +1498,8 @@ abstract class ElectrumWalletBase
} }
Future<void> cleanUpDuplicateUnspentCoins() async { Future<void> cleanUpDuplicateUnspentCoins() async {
final currentWalletUnspentCoins = unspentCoinsInfo.values.where((element) => element.walletId == id); final currentWalletUnspentCoins =
unspentCoinsInfo.values.where((element) => element.walletId == id);
final Map<String, UnspentCoinsInfo> uniqueUnspentCoins = {}; final Map<String, UnspentCoinsInfo> uniqueUnspentCoins = {};
final List<dynamic> duplicateKeys = []; final List<dynamic> duplicateKeys = [];
@ -1535,7 +1535,8 @@ abstract class ElectrumWalletBase
final ownAddresses = walletAddresses.allAddresses.map((addr) => addr.address).toSet(); final ownAddresses = walletAddresses.allAddresses.map((addr) => addr.address).toSet();
final receiverAmount = outputs final receiverAmount = outputs
.where((output) => !ownAddresses.contains(addressFromOutputScript(output.scriptPubKey, network))) .where((output) =>
!ownAddresses.contains(addressFromOutputScript(output.scriptPubKey, network)))
.fold<int>(0, (sum, output) => sum + output.amount.toInt()); .fold<int>(0, (sum, output) => sum + output.amount.toInt());
if (receiverAmount == 0) { if (receiverAmount == 0) {
@ -1774,7 +1775,6 @@ abstract class ElectrumWalletBase
} else { } else {
return key.signInput(txDigest, sigHash: sighash); return key.signInput(txDigest, sigHash: sighash);
} }
}); });
return PendingBitcoinTransaction( return PendingBitcoinTransaction(

View file

@ -1191,7 +1191,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
} }
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
_utxoStream?.cancel(); _utxoStream?.cancel();
_feeRatesTimer?.cancel(); _feeRatesTimer?.cancel();
_syncTimer?.cancel(); _syncTimer?.cancel();

View file

@ -7,7 +7,7 @@ enum DeviceConnectionType {
static List<DeviceConnectionType> supportedConnectionTypes(WalletType walletType, static List<DeviceConnectionType> supportedConnectionTypes(WalletType walletType,
[bool isIOS = false]) { [bool isIOS = false]) {
switch (walletType) { switch (walletType) {
// case WalletType.monero: case WalletType.monero:
case WalletType.bitcoin: case WalletType.bitcoin:
case WalletType.litecoin: case WalletType.litecoin:
case WalletType.ethereum: case WalletType.ethereum:

View file

@ -83,7 +83,7 @@ abstract class WalletBase<BalanceType extends Balance, HistoryType extends Trans
Future<void> rescan({required int height}); Future<void> rescan({required int height});
Future<void> close({required bool shouldCleanup}); Future<void> close({bool shouldCleanup = false});
Future<void> changePassword(String password); Future<void> changePassword(String password);

View file

@ -270,7 +270,7 @@ abstract class EVMChainWalletBase
} }
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
_client.stop(); _client.stop();
_transactionsUpdateTimer?.cancel(); _transactionsUpdateTimer?.cancel();
_updateFeesTimer?.cancel(); _updateFeesTimer?.cancel();

View file

@ -108,7 +108,7 @@ abstract class HavenWalletBase
Future<void>? updateBalance() => null; Future<void>? updateBalance() => null;
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
_listener?.stop(); _listener?.stop();
_onAccountChangeReaction?.reaction.dispose(); _onAccountChangeReaction?.reaction.dispose();
_autoSaveTimer?.cancel(); _autoSaveTimer?.cancel();

View file

@ -200,9 +200,16 @@ String? commitTransactionFromPointerAddress({required int address, required bool
commitTransaction(transactionPointer: monero.PendingTransaction.fromAddress(address), useUR: useUR); commitTransaction(transactionPointer: monero.PendingTransaction.fromAddress(address), useUR: useUR);
String? commitTransaction({required monero.PendingTransaction transactionPointer, required bool useUR}) { String? commitTransaction({required monero.PendingTransaction transactionPointer, required bool useUR}) {
final transactionPointerAddress = transactionPointer.address;
final txCommit = useUR final txCommit = useUR
? monero.PendingTransaction_commitUR(transactionPointer, 120) ? monero.PendingTransaction_commitUR(transactionPointer, 120)
: monero.PendingTransaction_commit(transactionPointer, filename: '', overwrite: false); : Isolate.run(() {
monero.PendingTransaction_commit(
Pointer.fromAddress(transactionPointerAddress),
filename: '',
overwrite: false,
);
});
String? error = (() { String? error = (() {
final status = monero.PendingTransaction_status(transactionPointer.cast()); final status = monero.PendingTransaction_status(transactionPointer.cast());
@ -221,7 +228,7 @@ String? commitTransaction({required monero.PendingTransaction transactionPointer
})(); })();
} }
if (error != null) { if (error != null && error != "no tx keys found for this txid") {
throw CreationTransactionException(message: error); throw CreationTransactionException(message: error);
} }
if (useUR) { if (useUR) {

View file

@ -121,7 +121,6 @@ Future<bool> setupNodeSync(
daemonUsername: login ?? '', daemonUsername: login ?? '',
daemonPassword: password ?? ''); daemonPassword: password ?? '');
}); });
// monero.Wallet_init3(wptr!, argv0: '', defaultLogBaseName: 'moneroc', console: true, logPath: '');
final status = monero.Wallet_status(wptr!); final status = monero.Wallet_status(wptr!);

View file

@ -2,11 +2,12 @@ import 'dart:async';
import 'dart:ffi'; import 'dart:ffi';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:collection/collection.dart';
import 'package:cw_core/utils/print_verbose.dart';
import 'package:ffi/ffi.dart'; import 'package:ffi/ffi.dart';
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart'; import 'package:ledger_flutter_plus/ledger_flutter_plus.dart';
import 'package:ledger_flutter_plus/ledger_flutter_plus_dart.dart'; import 'package:ledger_flutter_plus/ledger_flutter_plus_dart.dart';
import 'package:monero/monero.dart' as monero; import 'package:monero/monero.dart' as monero;
// import 'package:polyseed/polyseed.dart';
LedgerConnection? gLedger; LedgerConnection? gLedger;
@ -28,9 +29,16 @@ void enableLedgerExchange(monero.wallet ptr, LedgerConnection connection) {
ptr, emptyPointer.cast<UnsignedChar>(), 0); ptr, emptyPointer.cast<UnsignedChar>(), 0);
malloc.free(emptyPointer); malloc.free(emptyPointer);
// printV("> ${ledgerRequest.toHexString()}"); _logLedgerCommand(ledgerRequest, false);
final response = await exchange(connection, ledgerRequest); final response = await exchange(connection, ledgerRequest);
// printV("< ${response.toHexString()}"); _logLedgerCommand(response, true);
if (ListEquality().equals(response, [0x55, 0x15])) {
await connection.disconnect();
// // TODO: Show POPUP pls unlock your device
// await Future.delayed(Duration(seconds: 15));
// response = await exchange(connection, ledgerRequest);
}
final Pointer<Uint8> result = malloc<Uint8>(response.length); final Pointer<Uint8> result = malloc<Uint8>(response.length);
for (var i = 0; i < response.length; i++) { for (var i = 0; i < response.length; i++) {
@ -82,3 +90,59 @@ class ExchangeOperation extends LedgerRawOperation<Uint8List> {
@override @override
Future<List<Uint8List>> write(ByteDataWriter writer) async => [inputData]; Future<List<Uint8List>> write(ByteDataWriter writer) async => [inputData];
} }
const _ledgerMoneroCommands = {
0x00: "INS_NONE",
0x02: "INS_RESET",
0x20: "INS_GET_KEY",
0x21: "INS_DISPLAY_ADDRESS",
0x22: "INS_PUT_KEY",
0x24: "INS_GET_CHACHA8_PREKEY",
0x26: "INS_VERIFY_KEY",
0x28: "INS_MANAGE_SEEDWORDS",
0x30: "INS_SECRET_KEY_TO_PUBLIC_KEY",
0x32: "INS_GEN_KEY_DERIVATION",
0x34: "INS_DERIVATION_TO_SCALAR",
0x36: "INS_DERIVE_PUBLIC_KEY",
0x38: "INS_DERIVE_SECRET_KEY",
0x3A: "INS_GEN_KEY_IMAGE",
0x3B: "INS_DERIVE_VIEW_TAG",
0x3C: "INS_SECRET_KEY_ADD",
0x3E: "INS_SECRET_KEY_SUB",
0x40: "INS_GENERATE_KEYPAIR",
0x42: "INS_SECRET_SCAL_MUL_KEY",
0x44: "INS_SECRET_SCAL_MUL_BASE",
0x46: "INS_DERIVE_SUBADDRESS_PUBLIC_KEY",
0x48: "INS_GET_SUBADDRESS",
0x4A: "INS_GET_SUBADDRESS_SPEND_PUBLIC_KEY",
0x4C: "INS_GET_SUBADDRESS_SECRET_KEY",
0x70: "INS_OPEN_TX",
0x72: "INS_SET_SIGNATURE_MODE",
0x74: "INS_GET_ADDITIONAL_KEY",
0x76: "INS_STEALTH",
0x77: "INS_GEN_COMMITMENT_MASK",
0x78: "INS_BLIND",
0x7A: "INS_UNBLIND",
0x7B: "INS_GEN_TXOUT_KEYS",
0x7D: "INS_PREFIX_HASH",
0x7C: "INS_VALIDATE",
0x7E: "INS_MLSAG",
0x7F: "INS_CLSAG",
0x80: "INS_CLOSE_TX",
0xA0: "INS_GET_TX_PROOF",
0xC0: "INS_GET_RESPONSE"
};
void _logLedgerCommand(Uint8List command, [bool isResponse = true]) {
String toHexString(Uint8List data) =>
data.map((e) => e.toRadixString(16).padLeft(2, '0')).join();
if (isResponse) {
printV("< ${toHexString(command)}");
} else {
printV(
"> ${_ledgerMoneroCommands[command[1]]} ${toHexString(command.sublist(2))}");
}
}

View file

@ -175,7 +175,7 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
Future<void>? updateBalance() => null; Future<void>? updateBalance() => null;
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
_listener?.stop(); _listener?.stop();
_onAccountChangeReaction?.reaction.dispose(); _onAccountChangeReaction?.reaction.dispose();
_onTxHistoryChangeReaction?.reaction.dispose(); _onTxHistoryChangeReaction?.reaction.dispose();

View file

@ -1,5 +1,7 @@
import 'dart:ffi'; import 'dart:ffi';
import 'dart:io'; import 'dart:io';
import 'package:cw_core/get_height_by_date.dart';
import 'package:cw_core/monero_wallet_utils.dart'; import 'package:cw_core/monero_wallet_utils.dart';
import 'package:cw_core/pathForWallet.dart'; import 'package:cw_core/pathForWallet.dart';
import 'package:cw_core/unspent_coins_info.dart'; import 'package:cw_core/unspent_coins_info.dart';
@ -9,16 +11,16 @@ import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_service.dart'; import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/wallet_type.dart';
import 'package:cw_core/get_height_by_date.dart';
import 'package:cw_monero/api/account_list.dart'; import 'package:cw_monero/api/account_list.dart';
import 'package:cw_monero/api/wallet_manager.dart' as monero_wallet_manager; import 'package:cw_monero/api/wallet_manager.dart' as monero_wallet_manager;
import 'package:cw_monero/api/wallet_manager.dart'; import 'package:cw_monero/api/wallet_manager.dart';
import 'package:cw_monero/ledger.dart'; import 'package:cw_monero/ledger.dart';
import 'package:cw_monero/monero_wallet.dart'; import 'package:cw_monero/monero_wallet.dart';
import 'package:collection/collection.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart'; import 'package:ledger_flutter_plus/ledger_flutter_plus.dart';
import 'package:polyseed/polyseed.dart';
import 'package:monero/monero.dart' as monero; import 'package:monero/monero.dart' as monero;
import 'package:polyseed/polyseed.dart';
class MoneroNewWalletCredentials extends WalletCredentials { class MoneroNewWalletCredentials extends WalletCredentials {
MoneroNewWalletCredentials( MoneroNewWalletCredentials(
@ -133,14 +135,12 @@ class MoneroWalletService extends WalletService<
try { try {
final path = await pathForWallet(name: name, type: getType()); final path = await pathForWallet(name: name, type: getType());
if (walletFilesExist(path)) { if (walletFilesExist(path)) await repairOldAndroidWallet(name);
await repairOldAndroidWallet(name);
}
await monero_wallet_manager await monero_wallet_manager
.openWalletAsync({'path': path, 'password': password}); .openWalletAsync({'path': path, 'password': password});
final walletInfo = walletInfoSource.values.firstWhere( final walletInfo = walletInfoSource.values
(info) => info.id == WalletBase.idFor(name, getType())); .firstWhere((info) => info.id == WalletBase.idFor(name, getType()));
final wallet = MoneroWallet( final wallet = MoneroWallet(
walletInfo: walletInfo, walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfoSource, unspentCoinsInfo: unspentCoinsInfoSource,
@ -255,7 +255,7 @@ class MoneroWalletService extends WalletService<
final password = credentials.password; final password = credentials.password;
final height = credentials.height; final height = credentials.height;
if (wptr == null ) monero_wallet_manager.createWalletPointer(); if (wptr == null) monero_wallet_manager.createWalletPointer();
enableLedgerExchange(wptr!, credentials.ledgerConnection); enableLedgerExchange(wptr!, credentials.ledgerConnection);
await monero_wallet_manager.restoreWalletFromHardwareWallet( await monero_wallet_manager.restoreWalletFromHardwareWallet(
@ -279,7 +279,8 @@ class MoneroWalletService extends WalletService<
} }
@override @override
Future<MoneroWallet> restoreFromSeed(MoneroRestoreWalletFromSeedCredentials credentials, Future<MoneroWallet> restoreFromSeed(
MoneroRestoreWalletFromSeedCredentials credentials,
{bool? isTestnet}) async { {bool? isTestnet}) async {
// Restore from Polyseed // Restore from Polyseed
if (Polyseed.isValidSeed(credentials.mnemonic)) { if (Polyseed.isValidSeed(credentials.mnemonic)) {
@ -313,7 +314,8 @@ class MoneroWalletService extends WalletService<
final path = await pathForWallet(name: credentials.name, type: getType()); final path = await pathForWallet(name: credentials.name, type: getType());
final polyseedCoin = PolyseedCoin.POLYSEED_MONERO; final polyseedCoin = PolyseedCoin.POLYSEED_MONERO;
final lang = PolyseedLang.getByPhrase(credentials.mnemonic); final lang = PolyseedLang.getByPhrase(credentials.mnemonic);
final polyseed = Polyseed.decode(credentials.mnemonic, lang, polyseedCoin); final polyseed =
Polyseed.decode(credentials.mnemonic, lang, polyseedCoin);
return _restoreFromPolyseed( return _restoreFromPolyseed(
path, credentials.password!, polyseed, credentials.walletInfo!, lang); path, credentials.password!, polyseed, credentials.walletInfo!, lang);
@ -355,24 +357,18 @@ class MoneroWalletService extends WalletService<
Future<void> repairOldAndroidWallet(String name) async { Future<void> repairOldAndroidWallet(String name) async {
try { try {
if (!Platform.isAndroid) { if (!Platform.isAndroid) return;
return;
}
final oldAndroidWalletDirPath = await outdatedAndroidPathForWalletDir(name: name); final oldAndroidWalletDirPath = await outdatedAndroidPathForWalletDir(name: name);
final dir = Directory(oldAndroidWalletDirPath); final dir = Directory(oldAndroidWalletDirPath);
if (!dir.existsSync()) { if (!dir.existsSync()) return;
return;
}
final newWalletDirPath = await pathForWalletDir(name: name, type: getType()); final newWalletDirPath = await pathForWalletDir(name: name, type: getType());
dir.listSync().forEach((f) { dir.listSync().forEach((f) {
final file = File(f.path); final file = File(f.path);
final name = f.path final name = f.path.split('/').last;
.split('/')
.last;
final newPath = newWalletDirPath + '/$name'; final newPath = newWalletDirPath + '/$name';
final newFile = File(newPath); final newFile = File(newPath);
@ -391,9 +387,7 @@ class MoneroWalletService extends WalletService<
try { try {
final path = await pathForWallet(name: name, type: getType()); final path = await pathForWallet(name: name, type: getType());
if (walletFilesExist(path)) { if (walletFilesExist(path)) await repairOldAndroidWallet(name);
await repairOldAndroidWallet(name);
}
await monero_wallet_manager.openWalletAsync({'path': path, 'password': password}); await monero_wallet_manager.openWalletAsync({'path': path, 'password': password});
final walletInfo = walletInfoSource.values final walletInfo = walletInfoSource.values
@ -412,8 +406,10 @@ class MoneroWalletService extends WalletService<
@override @override
bool requireHardwareWalletConnection(String name) { bool requireHardwareWalletConnection(String name) {
final walletInfo = walletInfoSource.values return walletInfoSource.values
.firstWhere((info) => info.id == WalletBase.idFor(name, getType())); .firstWhereOrNull(
return walletInfo.isHardwareWallet; (info) => info.id == WalletBase.idFor(name, getType()))
?.isHardwareWallet ??
false;
} }
} }

View file

@ -150,7 +150,7 @@ abstract class NanoWalletBase
Future<void> changePassword(String password) => throw UnimplementedError("changePassword"); Future<void> changePassword(String password) => throw UnimplementedError("changePassword");
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
_client.stop(); _client.stop();
_receiveTimer?.cancel(); _receiveTimer?.cancel();
} }

View file

@ -1,12 +1,13 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:math'; import 'dart:math' as math;
import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/crypto_currency.dart';
import 'package:cw_core/node.dart'; import 'package:cw_core/node.dart';
import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_solana/pending_solana_transaction.dart'; import 'package:cw_solana/pending_solana_transaction.dart';
import 'package:cw_solana/solana_balance.dart'; import 'package:cw_solana/solana_balance.dart';
import 'package:cw_solana/solana_exceptions.dart';
import 'package:cw_solana/solana_transaction_model.dart'; import 'package:cw_solana/solana_transaction_model.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:solana/dto.dart'; import 'package:solana/dto.dart';
@ -180,7 +181,7 @@ class SolanaWalletClient {
bool isOutgoingTx = transfer.source == publicKey.toBase58(); bool isOutgoingTx = transfer.source == publicKey.toBase58();
double amount = (double.tryParse(transfer.amount) ?? 0.0) / double amount = (double.tryParse(transfer.amount) ?? 0.0) /
pow(10, splTokenDecimal ?? 9); math.pow(10, splTokenDecimal ?? 9);
transactions.add( transactions.add(
SolanaTransactionModel( SolanaTransactionModel(
@ -276,6 +277,7 @@ class SolanaWalletClient {
required String destinationAddress, required String destinationAddress,
required Ed25519HDKeyPair ownerKeypair, required Ed25519HDKeyPair ownerKeypair,
required bool isSendAll, required bool isSendAll,
required double solBalance,
String? tokenMint, String? tokenMint,
List<String> references = const [], List<String> references = const [],
}) async { }) async {
@ -290,6 +292,7 @@ class SolanaWalletClient {
ownerKeypair: ownerKeypair, ownerKeypair: ownerKeypair,
commitment: commitment, commitment: commitment,
isSendAll: isSendAll, isSendAll: isSendAll,
solBalance: solBalance,
); );
return pendingNativeTokenTransaction; return pendingNativeTokenTransaction;
} else { } else {
@ -301,6 +304,7 @@ class SolanaWalletClient {
destinationAddress: destinationAddress, destinationAddress: destinationAddress,
ownerKeypair: ownerKeypair, ownerKeypair: ownerKeypair,
commitment: commitment, commitment: commitment,
solBalance: solBalance,
); );
return pendingSPLTokenTransaction; return pendingSPLTokenTransaction;
} }
@ -353,6 +357,23 @@ class SolanaWalletClient {
return fee; return fee;
} }
Future<bool> hasSufficientFundsLeftForRent({
required double inputAmount,
required double solBalance,
required double fee,
}) async {
final rent =
await _client!.getMinimumBalanceForMintRentExemption(commitment: Commitment.confirmed);
final rentInSol = (rent / lamportsPerSol).toDouble();
final remnant = solBalance - (inputAmount + fee);
if (remnant > rentInSol) return true;
return false;
}
Future<PendingSolanaTransaction> _signNativeTokenTransaction({ Future<PendingSolanaTransaction> _signNativeTokenTransaction({
required String tokenTitle, required String tokenTitle,
required int tokenDecimals, required int tokenDecimals,
@ -361,6 +382,7 @@ class SolanaWalletClient {
required Ed25519HDKeyPair ownerKeypair, required Ed25519HDKeyPair ownerKeypair,
required Commitment commitment, required Commitment commitment,
required bool isSendAll, required bool isSendAll,
required double solBalance,
}) async { }) async {
// Convert SOL to lamport // Convert SOL to lamport
int lamports = (inputAmount * lamportsPerSol).toInt(); int lamports = (inputAmount * lamportsPerSol).toInt();
@ -378,6 +400,16 @@ class SolanaWalletClient {
commitment, commitment,
); );
bool hasSufficientFundsLeft = await hasSufficientFundsLeftForRent(
inputAmount: inputAmount,
fee: fee,
solBalance: solBalance,
);
if (!hasSufficientFundsLeft) {
throw SolanaSignNativeTokenTransactionRentException();
}
SignedTx signedTx; SignedTx signedTx;
if (isSendAll) { if (isSendAll) {
final feeInLamports = (fee * lamportsPerSol).toInt(); final feeInLamports = (fee * lamportsPerSol).toInt();
@ -425,6 +457,7 @@ class SolanaWalletClient {
required String destinationAddress, required String destinationAddress,
required Ed25519HDKeyPair ownerKeypair, required Ed25519HDKeyPair ownerKeypair,
required Commitment commitment, required Commitment commitment,
required double solBalance,
}) async { }) async {
final destinationOwner = Ed25519HDPublicKey.fromBase58(destinationAddress); final destinationOwner = Ed25519HDPublicKey.fromBase58(destinationAddress);
final mint = Ed25519HDPublicKey.fromBase58(tokenMint); final mint = Ed25519HDPublicKey.fromBase58(tokenMint);
@ -447,7 +480,7 @@ class SolanaWalletClient {
// Throw an appropriate exception if the sender has no associated // Throw an appropriate exception if the sender has no associated
// token account // token account
if (associatedSenderAccount == null) { if (associatedSenderAccount == null) {
throw NoAssociatedTokenAccountException(ownerKeypair.address, mint.toBase58()); throw SolanaNoAssociatedTokenAccountException(ownerKeypair.address, mint.toBase58());
} }
try { try {
@ -457,11 +490,11 @@ class SolanaWalletClient {
funder: ownerKeypair, funder: ownerKeypair,
); );
} catch (e) { } catch (e) {
throw Exception('Insufficient SOL balance to complete this transaction: ${e.toString()}'); throw SolanaCreateAssociatedTokenAccountException(e.toString());
} }
// Input by the user // Input by the user
final amount = (inputAmount * pow(10, tokenDecimals)).toInt(); final amount = (inputAmount * math.pow(10, tokenDecimals)).toInt();
final instruction = TokenInstruction.transfer( final instruction = TokenInstruction.transfer(
source: Ed25519HDPublicKey.fromBase58(associatedSenderAccount.pubkey), source: Ed25519HDPublicKey.fromBase58(associatedSenderAccount.pubkey),
@ -483,6 +516,16 @@ class SolanaWalletClient {
commitment, commitment,
); );
bool hasSufficientFundsLeft = await hasSufficientFundsLeftForRent(
inputAmount: inputAmount,
fee: fee,
solBalance: solBalance,
);
if (!hasSufficientFundsLeft) {
throw SolanaSignSPLTokenTransactionRentException();
}
final signedTx = await _signTransactionInternal( final signedTx = await _signTransactionInternal(
message: message, message: message,
signers: signers, signers: signers,

View file

@ -19,3 +19,20 @@ class SolanaTransactionWrongBalanceException implements Exception {
@override @override
String toString() => exceptionMessage; String toString() => exceptionMessage;
} }
class SolanaSignNativeTokenTransactionRentException implements Exception {}
class SolanaCreateAssociatedTokenAccountException implements Exception {
final String exceptionMessage;
SolanaCreateAssociatedTokenAccountException(this.exceptionMessage);
}
class SolanaSignSPLTokenTransactionRentException implements Exception {}
class SolanaNoAssociatedTokenAccountException implements Exception {
const SolanaNoAssociatedTokenAccountException(this.account, this.mint);
final String account;
final String mint;
}

View file

@ -180,7 +180,7 @@ abstract class SolanaWalletBase
Future<void> changePassword(String password) => throw UnimplementedError("changePassword"); Future<void> changePassword(String password) => throw UnimplementedError("changePassword");
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
_client.stop(); _client.stop();
_transactionsUpdateTimer?.cancel(); _transactionsUpdateTimer?.cancel();
} }
@ -228,6 +228,8 @@ abstract class SolanaWalletBase
final walletBalanceForCurrency = balance[transactionCurrency]!.balance; final walletBalanceForCurrency = balance[transactionCurrency]!.balance;
final solBalance = balance[CryptoCurrency.sol]!.balance;
double totalAmount = 0.0; double totalAmount = 0.0;
bool isSendAll = false; bool isSendAll = false;
@ -279,6 +281,7 @@ abstract class SolanaWalletBase
? solCredentials.outputs.first.extractedAddress! ? solCredentials.outputs.first.extractedAddress!
: solCredentials.outputs.first.address, : solCredentials.outputs.first.address,
isSendAll: isSendAll, isSendAll: isSendAll,
solBalance: solBalance,
); );
return pendingSolanaTransaction; return pendingSolanaTransaction;

View file

@ -217,7 +217,7 @@ abstract class TronWalletBase
Future<void> changePassword(String password) => throw UnimplementedError("changePassword"); Future<void> changePassword(String password) => throw UnimplementedError("changePassword");
@override @override
Future<void> close({required bool shouldCleanup}) async => _transactionsUpdateTimer?.cancel(); Future<void> close({bool shouldCleanup = false}) async => _transactionsUpdateTimer?.cancel();
@action @action
@override @override

View file

@ -162,7 +162,7 @@ abstract class WowneroWalletBase
Future<void>? updateBalance() => null; Future<void>? updateBalance() => null;
@override @override
Future<void> close({required bool shouldCleanup}) async { Future<void> close({bool shouldCleanup = false}) async {
_listener?.stop(); _listener?.stop();
_onAccountChangeReaction?.reaction.dispose(); _onAccountChangeReaction?.reaction.dispose();
_onTxHistoryChangeReaction?.reaction.dispose(); _onTxHistoryChangeReaction?.reaction.dispose();

View file

@ -4,10 +4,10 @@ import 'package:cw_core/wallet_type.dart';
class CommonTestConstants { class CommonTestConstants {
static final pin = [0, 8, 0, 1]; static final pin = [0, 8, 0, 1];
static final String sendTestAmount = '0.00008'; static final String sendTestAmount = '0.00008';
static final String exchangeTestAmount = '8'; static final String exchangeTestAmount = '0.01';
static final WalletType testWalletType = WalletType.solana; static final WalletType testWalletType = WalletType.solana;
static final String testWalletName = 'Integrated Testing Wallet'; static final String testWalletName = 'Integrated Testing Wallet';
static final CryptoCurrency testReceiveCurrency = CryptoCurrency.sol; static final CryptoCurrency testReceiveCurrency = CryptoCurrency.usdtSol;
static final CryptoCurrency testDepositCurrency = CryptoCurrency.usdtSol; static final CryptoCurrency testDepositCurrency = CryptoCurrency.sol;
static final String testWalletAddress = '5v9gTW1yWPffhnbNKuvtL2frevAf4HpBMw8oYnfqUjhm'; static final String testWalletAddress = '5v9gTW1yWPffhnbNKuvtL2frevAf4HpBMw8oYnfqUjhm';
} }

View file

@ -7,6 +7,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:cake_wallet/main.dart' as app; import 'package:cake_wallet/main.dart' as app;
import '../robots/create_pin_welcome_page_robot.dart';
import '../robots/dashboard_page_robot.dart'; import '../robots/dashboard_page_robot.dart';
import '../robots/disclaimer_page_robot.dart'; import '../robots/disclaimer_page_robot.dart';
import '../robots/new_wallet_page_robot.dart'; import '../robots/new_wallet_page_robot.dart';
@ -37,6 +38,7 @@ class CommonTestFlows {
_walletListPageRobot = WalletListPageRobot(_tester), _walletListPageRobot = WalletListPageRobot(_tester),
_newWalletTypePageRobot = NewWalletTypePageRobot(_tester), _newWalletTypePageRobot = NewWalletTypePageRobot(_tester),
_restoreOptionsPageRobot = RestoreOptionsPageRobot(_tester), _restoreOptionsPageRobot = RestoreOptionsPageRobot(_tester),
_createPinWelcomePageRobot = CreatePinWelcomePageRobot(_tester),
_restoreFromSeedOrKeysPageRobot = RestoreFromSeedOrKeysPageRobot(_tester), _restoreFromSeedOrKeysPageRobot = RestoreFromSeedOrKeysPageRobot(_tester),
_walletGroupDescriptionPageRobot = WalletGroupDescriptionPageRobot(_tester); _walletGroupDescriptionPageRobot = WalletGroupDescriptionPageRobot(_tester);
@ -53,6 +55,7 @@ class CommonTestFlows {
final WalletListPageRobot _walletListPageRobot; final WalletListPageRobot _walletListPageRobot;
final NewWalletTypePageRobot _newWalletTypePageRobot; final NewWalletTypePageRobot _newWalletTypePageRobot;
final RestoreOptionsPageRobot _restoreOptionsPageRobot; final RestoreOptionsPageRobot _restoreOptionsPageRobot;
final CreatePinWelcomePageRobot _createPinWelcomePageRobot;
final RestoreFromSeedOrKeysPageRobot _restoreFromSeedOrKeysPageRobot; final RestoreFromSeedOrKeysPageRobot _restoreFromSeedOrKeysPageRobot;
final WalletGroupDescriptionPageRobot _walletGroupDescriptionPageRobot; final WalletGroupDescriptionPageRobot _walletGroupDescriptionPageRobot;
@ -190,10 +193,12 @@ class CommonTestFlows {
WalletType walletTypeToCreate, WalletType walletTypeToCreate,
List<int> pin, List<int> pin,
) async { ) async {
await _welcomePageRobot.navigateToCreateNewWalletPage(); await _createPinWelcomePageRobot.tapSetAPinButton();
await setupPinCodeForWallet(pin); await setupPinCodeForWallet(pin);
await _welcomePageRobot.navigateToCreateNewWalletPage();
await _selectWalletTypeForWallet(walletTypeToCreate); await _selectWalletTypeForWallet(walletTypeToCreate);
} }
@ -201,12 +206,14 @@ class CommonTestFlows {
WalletType walletTypeToRestore, WalletType walletTypeToRestore,
List<int> pin, List<int> pin,
) async { ) async {
await _createPinWelcomePageRobot.tapSetAPinButton();
await setupPinCodeForWallet(pin);
await _welcomePageRobot.navigateToRestoreWalletPage(); await _welcomePageRobot.navigateToRestoreWalletPage();
await _restoreOptionsPageRobot.navigateToRestoreFromSeedsOrKeysPage(); await _restoreOptionsPageRobot.navigateToRestoreFromSeedsOrKeysPage();
await setupPinCodeForWallet(pin);
await _selectWalletTypeForWallet(walletTypeToRestore); await _selectWalletTypeForWallet(walletTypeToRestore);
} }

View file

@ -0,0 +1,53 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/screens/welcome/create_pin_welcome_page.dart';
import 'package:cake_wallet/wallet_type_utils.dart';
import 'package:flutter_test/flutter_test.dart';
import '../components/common_test_cases.dart';
class CreatePinWelcomePageRobot {
CreatePinWelcomePageRobot(this.tester) : commonTestCases = CommonTestCases(tester);
final WidgetTester tester;
late CommonTestCases commonTestCases;
Future<void> isCreatePinWelcomePage() async {
await commonTestCases.isSpecificPage<CreatePinWelcomePage>();
}
void hasTitle() {
String title;
if (isMoneroOnly) {
title = S.current.monero_com;
}
if (isHaven) {
title = S.current.haven_app;
}
title = S.current.cake_wallet;
commonTestCases.hasText(title);
}
void hasDescription() {
String description;
if (isMoneroOnly) {
description = S.current.monero_com_wallet_text;
}
if (isHaven) {
description = S.current.haven_app_wallet_text;
}
description = S.current.new_first_wallet_text;
commonTestCases.hasText(description);
}
Future<void> tapSetAPinButton() async {
await commonTestCases.tapItemByKey('create_pin_welcome_page_create_a_pin_button_key');
await commonTestCases.defaultSleepTime();
}
}

View file

@ -123,10 +123,8 @@ class ExchangePageRobot {
return; return;
} }
await commonTestCases.dragUntilVisible( await commonTestCases.enterText(depositCurrency.name, 'search_bar_widget_key');
'picker_items_index_${depositCurrency.name}_button_key',
'picker_scrollbar_key',
);
await commonTestCases.defaultSleepTime(); await commonTestCases.defaultSleepTime();
await commonTestCases.tapItemByKey('picker_items_index_${depositCurrency.name}_button_key'); await commonTestCases.tapItemByKey('picker_items_index_${depositCurrency.name}_button_key');
@ -149,10 +147,8 @@ class ExchangePageRobot {
return; return;
} }
await commonTestCases.dragUntilVisible( await commonTestCases.enterText(receiveCurrency.name, 'search_bar_widget_key');
'picker_items_index_${receiveCurrency.name}_button_key',
'picker_scrollbar_key',
);
await commonTestCases.defaultSleepTime(); await commonTestCases.defaultSleepTime();
await commonTestCases.tapItemByKey('picker_items_index_${receiveCurrency.name}_button_key'); await commonTestCases.tapItemByKey('picker_items_index_${receiveCurrency.name}_button_key');

View file

@ -84,13 +84,11 @@ class SendPageRobot {
return; return;
} }
await commonTestCases.dragUntilVisible( await commonTestCases.enterText(receiveCurrency.title, 'search_bar_widget_key');
'picker_items_index_${receiveCurrency.name}_button_key',
'picker_scrollbar_key',
);
await commonTestCases.defaultSleepTime(); await commonTestCases.defaultSleepTime();
await commonTestCases.tapItemByKey('picker_items_index_${receiveCurrency.name}_button_key'); await commonTestCases.tapItemByKey('picker_items_index_${receiveCurrency.fullName}_button_key');
} }
Future<void> enterReceiveAddress(String receiveAddress) async { Future<void> enterReceiveAddress(String receiveAddress) async {
@ -210,6 +208,7 @@ class SendPageRobot {
_handleAuthPage(); _handleAuthPage();
} }
} }
await tester.pump();
} }
Future<void> handleSendResult() async { Future<void> handleSendResult() async {

View file

@ -42,11 +42,11 @@ class WalletKeysAndSeedPageRobot {
bool hasPrivateKey = appStore.wallet!.privateKey != null; bool hasPrivateKey = appStore.wallet!.privateKey != null;
if (walletType == WalletType.monero) { if (walletType == WalletType.monero) {
final moneroWallet = appStore.wallet as MoneroWallet; final moneroWallet = appStore.wallet as MoneroWalletBase;
final lang = PolyseedLang.getByPhrase(moneroWallet.seed); final lang = PolyseedLang.getByPhrase(moneroWallet.seed);
final legacySeed = moneroWallet.seedLegacy(lang.nameEnglish); final legacySeed = moneroWallet.seedLegacy(lang.nameEnglish);
_confirmMoneroWalletCredentials( await _confirmMoneroWalletCredentials(
appStore, appStore,
walletName, walletName,
moneroWallet.seed, moneroWallet.seed,
@ -59,7 +59,7 @@ class WalletKeysAndSeedPageRobot {
final lang = PolyseedLang.getByPhrase(wowneroWallet.seed); final lang = PolyseedLang.getByPhrase(wowneroWallet.seed);
final legacySeed = wowneroWallet.seedLegacy(lang.nameEnglish); final legacySeed = wowneroWallet.seedLegacy(lang.nameEnglish);
_confirmMoneroWalletCredentials( await _confirmMoneroWalletCredentials(
appStore, appStore,
walletName, walletName,
wowneroWallet.seed, wowneroWallet.seed,
@ -105,12 +105,12 @@ class WalletKeysAndSeedPageRobot {
await commonTestCases.defaultSleepTime(seconds: 5); await commonTestCases.defaultSleepTime(seconds: 5);
} }
void _confirmMoneroWalletCredentials( Future<void> _confirmMoneroWalletCredentials(
AppStore appStore, AppStore appStore,
String walletName, String walletName,
String seed, String seed,
String legacySeed, String legacySeed,
) { ) async {
final keys = appStore.wallet!.keys as MoneroWalletKeys; final keys = appStore.wallet!.keys as MoneroWalletKeys;
final hasPublicSpendKey = commonTestCases.isKeyPresent( final hasPublicSpendKey = commonTestCases.isKeyPresent(
@ -145,10 +145,18 @@ class WalletKeysAndSeedPageRobot {
tester.printToConsole('$walletName wallet has private view key properly displayed'); tester.printToConsole('$walletName wallet has private view key properly displayed');
} }
if (hasSeeds) { if (hasSeeds) {
await commonTestCases.dragUntilVisible(
'${walletName}_wallet_seed_item_key',
'wallet_keys_page_credentials_list_view_key',
);
commonTestCases.hasText(seed); commonTestCases.hasText(seed);
tester.printToConsole('$walletName wallet has seeds properly displayed'); tester.printToConsole('$walletName wallet has seeds properly displayed');
} }
if (hasSeedLegacy) { if (hasSeedLegacy) {
await commonTestCases.dragUntilVisible(
'${walletName}_wallet_seed_legacy_item_key',
'wallet_keys_page_credentials_list_view_key',
);
commonTestCases.hasText(legacySeed); commonTestCases.hasText(legacySeed);
tester.printToConsole('$walletName wallet has legacy seeds properly displayed'); tester.printToConsole('$walletName wallet has legacy seeds properly displayed');
} }

View file

@ -101,7 +101,7 @@ Future<void> _confirmSeedsFlowForWalletType(
walletKeysAndSeedPageRobot.hasTitle(); walletKeysAndSeedPageRobot.hasTitle();
walletKeysAndSeedPageRobot.hasShareWarning(); walletKeysAndSeedPageRobot.hasShareWarning();
walletKeysAndSeedPageRobot.confirmWalletCredentials(walletType); await walletKeysAndSeedPageRobot.confirmWalletCredentials(walletType);
await walletKeysAndSeedPageRobot.backToDashboard(); await walletKeysAndSeedPageRobot.backToDashboard();
} }

45
integration_test_runner.sh Executable file
View file

@ -0,0 +1,45 @@
#!/bin/bash
declare -a targets
declare -a passed_tests
declare -a failed_tests
# Collect all Dart test files in the integration_test directory
while IFS= read -r -d $'\0' file; do
targets+=("$file")
done < <(find integration_test/test_suites -name "*.dart" -type f -print0)
# Run each test and collect results
for target in "${targets[@]}"
do
echo "Running test: $target"
if flutter drive \
--driver=test_driver/integration_test.dart \
--target="$target"; then
echo "✅ Test passed: $target"
passed_tests+=("$target")
else
echo "❌ Test failed: $target"
failed_tests+=("$target")
fi
done
# Provide a summary of test results
echo -e "\n===== Test Summary ====="
if [ ${#passed_tests[@]} -gt 0 ]; then
echo "✅ Passed Tests:"
for test in "${passed_tests[@]}"; do
echo " - $test"
done
fi
if [ ${#failed_tests[@]} -gt 0 ]; then
echo -e "\n❌ Failed Tests:"
for test in "${failed_tests[@]}"; do
echo " - $test"
done
# Exit with a non-zero status to indicate failure
exit 1
else
echo -e "\n🎉 All tests passed successfully!"
fi

View file

@ -93,6 +93,9 @@ class CakePayApi {
required int quantity, required int quantity,
required String userEmail, required String userEmail,
required String token, required String token,
required bool confirmsNoVpn,
required bool confirmsVoidedRefund,
required bool confirmsTermsAgreed,
}) async { }) async {
final uri = Uri.https(baseCakePayUri, createOrderPath); final uri = Uri.https(baseCakePayUri, createOrderPath);
final headers = { final headers = {
@ -106,7 +109,10 @@ class CakePayApi {
'quantity': quantity, 'quantity': quantity,
'user_email': userEmail, 'user_email': userEmail,
'token': token, 'token': token,
'send_email': true 'send_email': true,
'confirms_no_vpn': confirmsNoVpn,
'confirms_voided_refund': confirmsVoidedRefund,
'confirms_terms_agreed': confirmsTermsAgreed,
}; };
try { try {

View file

@ -90,8 +90,14 @@ class CakePayService {
} }
/// Purchase Gift Card /// Purchase Gift Card
Future<CakePayOrder> createOrder( Future<CakePayOrder> createOrder({
{required int cardId, required String price, required int quantity}) async { required int cardId,
required String price,
required int quantity,
required bool confirmsNoVpn,
required bool confirmsVoidedRefund,
required bool confirmsTermsAgreed,
}) async {
final userEmail = (await secureStorage.read(key: cakePayEmailStorageKey))!; final userEmail = (await secureStorage.read(key: cakePayEmailStorageKey))!;
final token = (await secureStorage.read(key: cakePayUserTokenKey))!; final token = (await secureStorage.read(key: cakePayUserTokenKey))!;
return await cakePayApi.createOrder( return await cakePayApi.createOrder(
@ -100,7 +106,11 @@ class CakePayService {
price: price, price: price,
quantity: quantity, quantity: quantity,
token: token, token: token,
userEmail: userEmail); userEmail: userEmail,
confirmsNoVpn: confirmsNoVpn,
confirmsVoidedRefund: confirmsVoidedRefund,
confirmsTermsAgreed: confirmsTermsAgreed,
);
} }
///Simulate Purchase Gift Card ///Simulate Purchase Gift Card

View file

@ -39,6 +39,8 @@ import 'package:cake_wallet/entities/wallet_manager.dart';
import 'package:cake_wallet/src/screens/buy/buy_sell_options_page.dart'; import 'package:cake_wallet/src/screens/buy/buy_sell_options_page.dart';
import 'package:cake_wallet/src/screens/buy/payment_method_options_page.dart'; import 'package:cake_wallet/src/screens/buy/payment_method_options_page.dart';
import 'package:cake_wallet/src/screens/receive/address_list_page.dart'; import 'package:cake_wallet/src/screens/receive/address_list_page.dart';
import 'package:cake_wallet/src/screens/seed/seed_verification/seed_verification_page.dart';
import 'package:cake_wallet/src/screens/send/transaction_success_info_page.dart';
import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart'; import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart';
import 'package:cake_wallet/src/screens/settings/mweb_logs_page.dart'; import 'package:cake_wallet/src/screens/settings/mweb_logs_page.dart';
import 'package:cake_wallet/src/screens/settings/mweb_node_page.dart'; import 'package:cake_wallet/src/screens/settings/mweb_node_page.dart';
@ -1178,6 +1180,9 @@ Future<void> setup({
getIt.registerFactoryParam<PreSeedPage, int, void>( getIt.registerFactoryParam<PreSeedPage, int, void>(
(seedPhraseLength, _) => PreSeedPage(seedPhraseLength)); (seedPhraseLength, _) => PreSeedPage(seedPhraseLength));
getIt.registerFactoryParam<TransactionSuccessPage, String, void>(
(content, _) => TransactionSuccessPage(content: content));
getIt.registerFactoryParam<TradeDetailsViewModel, Trade, void>((trade, _) => getIt.registerFactoryParam<TradeDetailsViewModel, Trade, void>((trade, _) =>
TradeDetailsViewModel( TradeDetailsViewModel(
tradeForDetails: trade, tradeForDetails: trade,
@ -1416,5 +1421,7 @@ Future<void> setup({
getIt.registerFactory(() => SignViewModel(getIt.get<AppStore>().wallet!)); getIt.registerFactory(() => SignViewModel(getIt.get<AppStore>().wallet!));
getIt.registerFactory(() => SeedVerificationPage(getIt.get<WalletSeedViewModel>()));
_isSetupFinished = true; _isSetupFinished = true;
} }

View file

@ -60,15 +60,17 @@ class ExolixExchangeProvider extends ExchangeProvider {
Future<bool> checkIsAvailable() async => true; Future<bool> checkIsAvailable() async => true;
@override @override
Future<Limits> fetchLimits( Future<Limits> fetchLimits({
{required CryptoCurrency from, required CryptoCurrency from,
required CryptoCurrency to, required CryptoCurrency to,
required bool isFixedRateMode}) async { required bool isFixedRateMode,
}) async {
final params = <String, String>{ final params = <String, String>{
'rateType': _getRateType(isFixedRateMode), 'rateType': _getRateType(isFixedRateMode),
'amount': '1', 'amount': '1',
'apiToken': apiKey, 'apiToken': apiKey,
}; };
if (isFixedRateMode) { if (isFixedRateMode) {
params['coinFrom'] = _normalizeCurrency(to); params['coinFrom'] = _normalizeCurrency(to);
params['coinTo'] = _normalizeCurrency(from); params['coinTo'] = _normalizeCurrency(from);
@ -80,14 +82,30 @@ class ExolixExchangeProvider extends ExchangeProvider {
params['networkFrom'] = _networkFor(from); params['networkFrom'] = _networkFor(from);
params['networkTo'] = _networkFor(to); params['networkTo'] = _networkFor(to);
} }
// Maximum of 2 attempts to fetch limits
for (int i = 0; i < 2; i++) {
final uri = Uri.https(apiBaseUrl, ratePath, params); final uri = Uri.https(apiBaseUrl, ratePath, params);
final response = await get(uri); final response = await get(uri);
if (response.statusCode != 200) if (response.statusCode == 200) {
throw Exception('Unexpected http status: ${response.statusCode}');
final responseJSON = json.decode(response.body) as Map<String, dynamic>; final responseJSON = json.decode(response.body) as Map<String, dynamic>;
return Limits(min: responseJSON['minAmount'] as double?); final minAmount = responseJSON['minAmount'];
final maxAmount = responseJSON['maxAmount'];
return Limits(min: _toDouble(minAmount), max: _toDouble(maxAmount));
} else if (response.statusCode == 422) {
final errorResponse = json.decode(response.body) as Map<String, dynamic>;
if (errorResponse.containsKey('minAmount')) {
params['amount'] = errorResponse['minAmount'].toString();
continue;
}
throw Exception('Error 422: ${errorResponse['message'] ?? 'Unknown error'}');
} else {
throw Exception('Unexpected HTTP status: ${response.statusCode}');
}
}
throw Exception('Failed to fetch limits after retrying.');
} }
@override @override
@ -279,4 +297,15 @@ class ExolixExchangeProvider extends ExchangeProvider {
String _normalizeAddress(String address) => String _normalizeAddress(String address) =>
address.startsWith('bitcoincash:') ? address.replaceFirst('bitcoincash:', '') : address; address.startsWith('bitcoincash:') ? address.replaceFirst('bitcoincash:', '') : address;
static double? _toDouble(dynamic value) {
if (value is int) {
return value.toDouble();
} else if (value is double) {
return value;
} else if (value is String) {
return double.tryParse(value);
}
return null;
}
} }

View file

@ -168,6 +168,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider {
final status = responseJSON['status'] as String; final status = responseJSON['status'] as String;
final createdAtString = responseJSON['created_at'] as String; final createdAtString = responseJSON['created_at'] as String;
final expiredAtTimestamp = responseJSON['expired_at'] as int; final expiredAtTimestamp = responseJSON['expired_at'] as int;
final extraId = responseJSON['deposit_extra_id'] as String?;
final createdAt = DateTime.parse(createdAtString); final createdAt = DateTime.parse(createdAtString);
final expiredAt = DateTime.fromMillisecondsSinceEpoch(expiredAtTimestamp * 1000); final expiredAt = DateTime.fromMillisecondsSinceEpoch(expiredAtTimestamp * 1000);
@ -199,6 +200,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider {
state: TradeState.deserialize(raw: status), state: TradeState.deserialize(raw: status),
createdAt: createdAt, createdAt: createdAt,
expiredAt: expiredAt, expiredAt: expiredAt,
extraId: extraId,
); );
} catch (e) { } catch (e) {
log(e.toString()); log(e.toString());
@ -231,6 +233,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider {
final status = responseJSON['status'] as String; final status = responseJSON['status'] as String;
final createdAtString = responseJSON['created_at'] as String; final createdAtString = responseJSON['created_at'] as String;
final expiredAtTimestamp = responseJSON['expired_at'] as int; final expiredAtTimestamp = responseJSON['expired_at'] as int;
final extraId = responseJSON['deposit_extra_id'] as String?;
final createdAt = DateTime.parse(createdAtString); final createdAt = DateTime.parse(createdAtString);
final expiredAt = DateTime.fromMillisecondsSinceEpoch(expiredAtTimestamp * 1000); final expiredAt = DateTime.fromMillisecondsSinceEpoch(expiredAtTimestamp * 1000);
@ -249,6 +252,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider {
createdAt: createdAt, createdAt: createdAt,
expiredAt: expiredAt, expiredAt: expiredAt,
isRefund: status == 'refund', isRefund: status == 'refund',
extraId: extraId,
); );
} }

View file

@ -203,6 +203,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
final inputAddress = responseJSON['depositAddress'] as String; final inputAddress = responseJSON['depositAddress'] as String;
final settleAddress = responseJSON['settleAddress'] as String; final settleAddress = responseJSON['settleAddress'] as String;
final depositAmount = responseJSON['depositAmount'] as String?; final depositAmount = responseJSON['depositAmount'] as String?;
final depositMemo = responseJSON['depositMemo'] as String?;
return Trade( return Trade(
id: id, id: id,
@ -217,6 +218,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
payoutAddress: settleAddress, payoutAddress: settleAddress,
createdAt: DateTime.now(), createdAt: DateTime.now(),
isSendAll: isSendAll, isSendAll: isSendAll,
extraId: depositMemo
); );
} }
@ -251,6 +253,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
final isVariable = (responseJSON['type'] as String) == 'variable'; final isVariable = (responseJSON['type'] as String) == 'variable';
final expiredAtRaw = responseJSON['expiresAt'] as String; final expiredAtRaw = responseJSON['expiresAt'] as String;
final expiredAt = isVariable ? null : DateTime.tryParse(expiredAtRaw)?.toLocal(); final expiredAt = isVariable ? null : DateTime.tryParse(expiredAtRaw)?.toLocal();
final depositMemo = responseJSON['depositMemo'] as String?;
return Trade( return Trade(
id: id, id: id,
@ -261,7 +264,8 @@ class SideShiftExchangeProvider extends ExchangeProvider {
amount: expectedSendAmount ?? '', amount: expectedSendAmount ?? '',
state: TradeState.deserialize(raw: status ?? 'created'), state: TradeState.deserialize(raw: status ?? 'created'),
expiredAt: expiredAt, expiredAt: expiredAt,
payoutAddress: settleAddress); payoutAddress: settleAddress,
extraId: depositMemo);
} }
Future<String> _createQuote(TradeRequest request) async { Future<String> _createQuote(TradeRequest request) async {

View file

@ -154,6 +154,7 @@ class StealthExExchangeProvider extends ExchangeProvider {
final receiveAmount = toDouble(withdrawal['amount']); final receiveAmount = toDouble(withdrawal['amount']);
final status = responseJSON['status'] as String; final status = responseJSON['status'] as String;
final createdAtString = responseJSON['created_at'] as String; final createdAtString = responseJSON['created_at'] as String;
final extraId = deposit['extra_id'] as String?;
final createdAt = DateTime.parse(createdAtString); final createdAt = DateTime.parse(createdAtString);
final expiredAt = validUntil != null final expiredAt = validUntil != null
@ -188,6 +189,7 @@ class StealthExExchangeProvider extends ExchangeProvider {
state: TradeState.deserialize(raw: status), state: TradeState.deserialize(raw: status),
createdAt: createdAt, createdAt: createdAt,
expiredAt: expiredAt, expiredAt: expiredAt,
extraId: extraId,
); );
} catch (e) { } catch (e) {
log(e.toString()); log(e.toString());
@ -220,6 +222,7 @@ class StealthExExchangeProvider extends ExchangeProvider {
final status = responseJSON['status'] as String; final status = responseJSON['status'] as String;
final createdAtString = responseJSON['created_at'] as String; final createdAtString = responseJSON['created_at'] as String;
final createdAt = DateTime.parse(createdAtString); final createdAt = DateTime.parse(createdAtString);
final extraId = deposit['extra_id'] as String?;
return Trade( return Trade(
id: respId, id: respId,
@ -234,6 +237,7 @@ class StealthExExchangeProvider extends ExchangeProvider {
state: TradeState.deserialize(raw: status), state: TradeState.deserialize(raw: status),
createdAt: createdAt, createdAt: createdAt,
isRefund: status == 'refunded', isRefund: status == 'refunded',
extraId: extraId,
); );
} }

View file

@ -171,7 +171,8 @@ class TrocadorExchangeProvider extends ExchangeProvider {
if (!isFixedRateMode) 'amount_from': request.fromAmount, if (!isFixedRateMode) 'amount_from': request.fromAmount,
if (isFixedRateMode) 'amount_to': request.toAmount, if (isFixedRateMode) 'amount_to': request.toAmount,
'address': request.toAddress, 'address': request.toAddress,
'refund': request.refundAddress 'refund': request.refundAddress,
'refund_memo' : '0',
}; };
if (isFixedRateMode) { if (isFixedRateMode) {
@ -262,6 +263,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
final password = responseJSON['password'] as String; final password = responseJSON['password'] as String;
final providerId = responseJSON['id_provider'] as String; final providerId = responseJSON['id_provider'] as String;
final providerName = responseJSON['provider'] as String; final providerName = responseJSON['provider'] as String;
final addressProviderMemo = responseJSON['address_provider_memo'] as String?;
return Trade( return Trade(
id: id, id: id,
@ -277,6 +279,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
password: password, password: password,
providerId: providerId, providerId: providerId,
providerName: providerName, providerName: providerName,
extraId: addressProviderMemo,
); );
}); });
} }

View file

@ -143,6 +143,7 @@ class Trade extends HiveObject {
isRefund: map['isRefund'] as bool?, isRefund: map['isRefund'] as bool?,
isSendAll: map['isSendAll'] as bool?, isSendAll: map['isSendAll'] as bool?,
router: map['router'] as String?, router: map['router'] as String?,
extraId: map['extra_id'] as String?,
); );
} }
@ -162,6 +163,7 @@ class Trade extends HiveObject {
'isRefund': isRefund, 'isRefund': isRefund,
'isSendAll': isSendAll, 'isSendAll': isSendAll,
'router': router, 'router': router,
'extra_id': extraId,
}; };
} }

View file

@ -44,13 +44,16 @@ void startAuthenticationStateChange(
} catch (error, stack) { } catch (error, stack) {
loginError = error; loginError = error;
await ExceptionHandler.resetLastPopupDate(); await ExceptionHandler.resetLastPopupDate();
await ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stack)); await ExceptionHandler.onError(
FlutterErrorDetails(exception: error, stack: stack));
} }
return; return;
} }
if (state == AuthenticationState.allowed) { if ([AuthenticationState.allowed, AuthenticationState.allowedCreate]
if (requireHardwareWalletConnection()) { .contains(state)) {
if (state == AuthenticationState.allowed &&
requireHardwareWalletConnection()) {
await navigatorKey.currentState!.pushNamedAndRemoveUntil( await navigatorKey.currentState!.pushNamedAndRemoveUntil(
Routes.connectDevices, Routes.connectDevices,
(route) => false, (route) => false,

View file

@ -66,9 +66,11 @@ import 'package:cake_wallet/src/screens/restore/sweeping_wallet_page.dart';
import 'package:cake_wallet/src/screens/restore/wallet_restore_choose_derivation.dart'; import 'package:cake_wallet/src/screens/restore/wallet_restore_choose_derivation.dart';
import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart'; import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart'; import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
import 'package:cake_wallet/src/screens/seed/seed_verification/seed_verification_page.dart';
import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart'; import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart';
import 'package:cake_wallet/src/screens/send/send_page.dart'; import 'package:cake_wallet/src/screens/send/send_page.dart';
import 'package:cake_wallet/src/screens/send/send_template_page.dart'; import 'package:cake_wallet/src/screens/send/send_template_page.dart';
import 'package:cake_wallet/src/screens/send/transaction_success_info_page.dart';
import 'package:cake_wallet/src/screens/settings/connection_sync_page.dart'; import 'package:cake_wallet/src/screens/settings/connection_sync_page.dart';
import 'package:cake_wallet/src/screens/settings/desktop_settings/desktop_settings_page.dart'; import 'package:cake_wallet/src/screens/settings/desktop_settings/desktop_settings_page.dart';
import 'package:cake_wallet/src/screens/settings/display_settings_page.dart'; import 'package:cake_wallet/src/screens/settings/display_settings_page.dart';
@ -585,6 +587,10 @@ Route<dynamic> createRoute(RouteSettings settings) {
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
builder: (_) => getIt.get<PreSeedPage>(param1: settings.arguments as int)); builder: (_) => getIt.get<PreSeedPage>(param1: settings.arguments as int));
case Routes.transactionSuccessPage:
return MaterialPageRoute<void>(
builder: (_) => getIt.get<TransactionSuccessPage>(param1: settings.arguments as String));
case Routes.backup: case Routes.backup:
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<BackupPage>()); fullscreenDialog: true, builder: (_) => getIt.get<BackupPage>());
@ -794,6 +800,12 @@ Route<dynamic> createRoute(RouteSettings settings) {
), ),
); );
case Routes.walletSeedVerificationPage:
return MaterialPageRoute<void>(
fullscreenDialog: true,
builder: (_) => getIt.get<SeedVerificationPage>(),
);
default: default:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
builder: (_) => Scaffold( builder: (_) => Scaffold(

View file

@ -53,6 +53,7 @@ class Routes {
static const restoreWalletType = '/restore_wallet_type'; static const restoreWalletType = '/restore_wallet_type';
static const restoreWallet = '/restore_wallet'; static const restoreWallet = '/restore_wallet';
static const preSeedPage = '/pre_seed_page'; static const preSeedPage = '/pre_seed_page';
static const transactionSuccessPage = '/transaction_success_info_page';
static const backup = '/backup'; static const backup = '/backup';
static const editBackupPassword = '/edit_backup_passowrd'; static const editBackupPassword = '/edit_backup_passowrd';
static const restoreFromBackup = '/restore_from_backup'; static const restoreFromBackup = '/restore_from_backup';
@ -115,4 +116,5 @@ class Routes {
static const urqrAnimatedPage = '/urqr/animated_page'; static const urqrAnimatedPage = '/urqr/animated_page';
static const walletGroupsDisplayPage = '/wallet_groups_display_page'; static const walletGroupsDisplayPage = '/wallet_groups_display_page';
static const walletGroupDescription = '/wallet_group_description'; static const walletGroupDescription = '/wallet_group_description';
static const walletSeedVerificationPage = '/wallet_seed_verification_page';
} }

View file

@ -116,7 +116,7 @@ class CakePayCardsPage extends BasePage {
}, },
child: Container( child: Container(
width: 32, width: 32,
padding: EdgeInsets.all(8), padding: EdgeInsets.only(top: 7, bottom: 7),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor, color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
border: Border.all( border: Border.all(
@ -125,7 +125,7 @@ class CakePayCardsPage extends BasePage {
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
child: Image.asset( child: Image.asset(
'assets/images/filter.png', 'assets/images/filter_icon.png',
color: Theme.of(context).extension<FilterTheme>()!.iconColor, color: Theme.of(context).extension<FilterTheme>()!.iconColor,
))), ))),
); );
@ -141,14 +141,14 @@ class CakePayCardsPage extends BasePage {
} }
}, },
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 6), padding: EdgeInsets.symmetric(horizontal: 8),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor, color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
border: Border.all(color: Colors.transparent), border: Border.all(color: Colors.transparent),
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
), ),
child: Container( child: Container(
margin: EdgeInsets.symmetric(vertical: 2), margin: EdgeInsets.symmetric(vertical: 4),
child: Row( child: Row(
children: [ children: [
Image.asset( Image.asset(
@ -363,12 +363,9 @@ class _SearchWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final searchIcon = ExcludeSemantics( final searchIcon = ExcludeSemantics(
child: Padding( child: Icon( Icons.search,
padding: EdgeInsets.all(8),
child: Image.asset(
'assets/images/mini_search_icon.png',
color: Theme.of(context).extension<FilterTheme>()!.iconColor, color: Theme.of(context).extension<FilterTheme>()!.iconColor,
), //size: 24
), ),
); );
@ -379,8 +376,8 @@ class _SearchWidget extends StatelessWidget {
decoration: InputDecoration( decoration: InputDecoration(
filled: true, filled: true,
contentPadding: EdgeInsets.only( contentPadding: EdgeInsets.only(
top: 10, top: 8,
left: 10, left: 8,
), ),
fillColor: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor, fillColor: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
hintText: S.of(context).search, hintText: S.of(context).search,

View file

@ -10,8 +10,10 @@ import 'package:cake_wallet/src/screens/cake_pay/widgets/text_icon_button.dart';
import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart'; import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/src/widgets/base_alert_dialog.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/extensions/picker_theme.dart'; import 'package:cake_wallet/themes/extensions/picker_theme.dart';
import 'package:cake_wallet/themes/extensions/receive_page_theme.dart'; import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
@ -23,6 +25,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
import 'package:url_launcher/url_launcher.dart';
class CakePayBuyCardDetailPage extends BasePage { class CakePayBuyCardDetailPage extends BasePage {
CakePayBuyCardDetailPage(this.cakePayPurchaseViewModel); CakePayBuyCardDetailPage(this.cakePayPurchaseViewModel);
@ -207,8 +210,10 @@ class CakePayBuyCardDetailPage extends BasePage {
padding: EdgeInsets.only(bottom: 12), padding: EdgeInsets.only(bottom: 12),
child: Observer(builder: (_) { child: Observer(builder: (_) {
return LoadingPrimaryButton( return LoadingPrimaryButton(
isLoading: cakePayPurchaseViewModel.sendViewModel.state is IsExecutingState, isDisabled: cakePayPurchaseViewModel.isPurchasing,
onPressed: () => purchaseCard(context), isLoading: cakePayPurchaseViewModel.isPurchasing ||
cakePayPurchaseViewModel.sendViewModel.state is IsExecutingState,
onPressed: () => confirmPurchaseFirst(context),
text: S.of(context).purchase_gift_card, text: S.of(context).purchase_gift_card,
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
textColor: Colors.white, textColor: Colors.white,
@ -253,6 +258,48 @@ class CakePayBuyCardDetailPage extends BasePage {
}); });
} }
Future<void> _showconfirmPurchaseFirstAlert(BuildContext context) async {
if (!cakePayPurchaseViewModel.confirmsNoVpn ||
!cakePayPurchaseViewModel.confirmsVoidedRefund ||
!cakePayPurchaseViewModel.confirmsTermsAgreed) {
await showPopUp<void>(
context: context,
builder: (BuildContext context) => ThreeCheckboxAlert(
alertTitle: S.of(context).cakepay_confirm_purchase,
leftButtonText: S.of(context).cancel,
rightButtonText: S.of(context).confirm,
actionLeftButton: () {
cakePayPurchaseViewModel.isPurchasing = false;
Navigator.of(context).pop();
},
actionRightButton: (confirmsNoVpn, confirmsVoidedRefund, confirmsTermsAgreed) {
cakePayPurchaseViewModel.confirmsNoVpn = confirmsNoVpn;
cakePayPurchaseViewModel.confirmsVoidedRefund = confirmsVoidedRefund;
cakePayPurchaseViewModel.confirmsTermsAgreed = confirmsTermsAgreed;
Navigator.of(context).pop();
},
),
);
}
if (cakePayPurchaseViewModel.confirmsNoVpn &&
cakePayPurchaseViewModel.confirmsVoidedRefund &&
cakePayPurchaseViewModel.confirmsTermsAgreed) {
await purchaseCard(context);
}
}
Future<void> confirmPurchaseFirst(BuildContext context) async {
bool isLogged = await cakePayPurchaseViewModel.cakePayService.isLogged();
if (!isLogged) {
Navigator.of(context).pushNamed(Routes.cakePayWelcomePage);
} else {
cakePayPurchaseViewModel.isPurchasing = true;
await _showconfirmPurchaseFirstAlert(context);
}
}
Future<void> purchaseCard(BuildContext context) async { Future<void> purchaseCard(BuildContext context) async {
bool isLogged = await cakePayPurchaseViewModel.cakePayService.isLogged(); bool isLogged = await cakePayPurchaseViewModel.cakePayService.isLogged();
if (!isLogged) { if (!isLogged) {
@ -263,7 +310,9 @@ class CakePayBuyCardDetailPage extends BasePage {
} catch (_) { } catch (_) {
await cakePayPurchaseViewModel.cakePayService.logout(); await cakePayPurchaseViewModel.cakePayService.logout();
} }
} }
cakePayPurchaseViewModel.isPurchasing = false;
} }
void _showHowToUseCard( void _showHowToUseCard(
@ -428,3 +477,201 @@ class CakePayBuyCardDetailPage extends BasePage {
} }
} }
} }
class ThreeCheckboxAlert extends BaseAlertDialog {
ThreeCheckboxAlert({
required this.alertTitle,
required this.leftButtonText,
required this.rightButtonText,
required this.actionLeftButton,
required this.actionRightButton,
this.alertBarrierDismissible = true,
Key? key,
});
final String alertTitle;
final String leftButtonText;
final String rightButtonText;
final VoidCallback actionLeftButton;
final Function(bool, bool, bool) actionRightButton;
final bool alertBarrierDismissible;
bool checkbox1 = false;
void toggleCheckbox1() => checkbox1 = !checkbox1;
bool checkbox2 = false;
void toggleCheckbox2() => checkbox2 = !checkbox2;
bool checkbox3 = false;
void toggleCheckbox3() => checkbox3 = !checkbox3;
bool showValidationMessage = true;
@override
String get titleText => alertTitle;
@override
bool get isDividerExists => true;
@override
String get leftActionButtonText => leftButtonText;
@override
String get rightActionButtonText => rightButtonText;
@override
VoidCallback get actionLeft => actionLeftButton;
@override
VoidCallback get actionRight => () {
actionRightButton(checkbox1, checkbox2, checkbox3);
};
@override
bool get barrierDismissible => alertBarrierDismissible;
@override
Widget content(BuildContext context) {
return ThreeCheckboxAlertContent(
checkbox1: checkbox1,
toggleCheckbox1: toggleCheckbox1,
checkbox2: checkbox2,
toggleCheckbox2: toggleCheckbox2,
checkbox3: checkbox3,
toggleCheckbox3: toggleCheckbox3,
);
}
}
class ThreeCheckboxAlertContent extends StatefulWidget {
ThreeCheckboxAlertContent({
required this.checkbox1,
required this.toggleCheckbox1,
required this.checkbox2,
required this.toggleCheckbox2,
required this.checkbox3,
required this.toggleCheckbox3,
Key? key,
}) : super(key: key);
bool checkbox1;
void Function() toggleCheckbox1;
bool checkbox2;
void Function() toggleCheckbox2;
bool checkbox3;
void Function() toggleCheckbox3;
@override
_ThreeCheckboxAlertContentState createState() => _ThreeCheckboxAlertContentState(
checkbox1: checkbox1,
toggleCheckbox1: toggleCheckbox1,
checkbox2: checkbox2,
toggleCheckbox2: toggleCheckbox2,
checkbox3: checkbox3,
toggleCheckbox3: toggleCheckbox3,
);
static _ThreeCheckboxAlertContentState? of(BuildContext context) {
return context.findAncestorStateOfType<_ThreeCheckboxAlertContentState>();
}
}
class _ThreeCheckboxAlertContentState extends State<ThreeCheckboxAlertContent> {
_ThreeCheckboxAlertContentState({
required this.checkbox1,
required this.toggleCheckbox1,
required this.checkbox2,
required this.toggleCheckbox2,
required this.checkbox3,
required this.toggleCheckbox3,
});
bool checkbox1;
void Function() toggleCheckbox1;
bool checkbox2;
void Function() toggleCheckbox2;
bool checkbox3;
void Function() toggleCheckbox3;
bool showValidationMessage = true;
bool get areAllCheckboxesChecked => checkbox1 && checkbox2 && checkbox3;
@override
Widget build(BuildContext context) {
return Form(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
StandardCheckbox(
value: checkbox1,
caption: S.of(context).cakepay_confirm_no_vpn,
onChanged: (bool? value) {
setState(() {
checkbox1 = value ?? false;
toggleCheckbox1();
showValidationMessage = !areAllCheckboxesChecked;
});
},
),
StandardCheckbox(
value: checkbox2,
caption: S.of(context).cakepay_confirm_voided_refund,
onChanged: (bool? value) {
setState(() {
checkbox2 = value ?? false;
toggleCheckbox2();
showValidationMessage = !areAllCheckboxesChecked;
});
},
),
StandardCheckbox(
value: checkbox3,
caption: S.of(context).cakepay_confirm_terms_agreed,
onChanged: (bool? value) {
setState(() {
checkbox3 = value ?? false;
toggleCheckbox3();
showValidationMessage = !areAllCheckboxesChecked;
});
},
),
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => launchUrl(
Uri.parse("https://cakepay.com/cakepay-web-terms.txt"),
mode: LaunchMode.externalApplication,
),
child: Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text(
S.of(context).settings_terms_and_conditions,
style: TextStyle(
fontSize: 16,
fontFamily: 'Lato',
fontWeight: FontWeight.w400,
color: Theme.of(context).primaryColor,
decoration: TextDecoration.none,
height: 1,
),
softWrap: true,
),
),
),
if (showValidationMessage)
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text(
'Please confirm all checkboxes',
style: TextStyle(
color: Colors.red,
fontSize: 14,
fontFamily: 'Lato',
fontWeight: FontWeight.w400,
decoration: TextDecoration.none,
),
),
),
],
),
);
}
}

View file

@ -22,11 +22,13 @@ class ConnectDevicePageParams {
final WalletType walletType; final WalletType walletType;
final OnConnectDevice onConnectDevice; final OnConnectDevice onConnectDevice;
final bool allowChangeWallet; final bool allowChangeWallet;
final bool isReconnect;
ConnectDevicePageParams({ ConnectDevicePageParams({
required this.walletType, required this.walletType,
required this.onConnectDevice, required this.onConnectDevice,
this.allowChangeWallet = false, this.allowChangeWallet = false,
this.isReconnect = false,
}); });
} }
@ -34,19 +36,33 @@ class ConnectDevicePage extends BasePage {
final WalletType walletType; final WalletType walletType;
final OnConnectDevice onConnectDevice; final OnConnectDevice onConnectDevice;
final bool allowChangeWallet; final bool allowChangeWallet;
final bool isReconnect;
final LedgerViewModel ledgerVM; final LedgerViewModel ledgerVM;
ConnectDevicePage(ConnectDevicePageParams params, this.ledgerVM) ConnectDevicePage(ConnectDevicePageParams params, this.ledgerVM)
: walletType = params.walletType, : walletType = params.walletType,
onConnectDevice = params.onConnectDevice, onConnectDevice = params.onConnectDevice,
allowChangeWallet = params.allowChangeWallet; allowChangeWallet = params.allowChangeWallet,
isReconnect = params.isReconnect;
@override @override
String get title => S.current.restore_title_from_hardware_wallet; String get title => isReconnect
? S.current.reconnect_your_hardware_wallet
: S.current.restore_title_from_hardware_wallet;
@override @override
Widget body(BuildContext context) => ConnectDevicePageBody( Widget? leading(BuildContext context) =>
walletType, onConnectDevice, allowChangeWallet, ledgerVM); !isReconnect ? super.leading(context) : null;
@override
Widget body(BuildContext context) => PopScope(
canPop: !isReconnect,
child: ConnectDevicePageBody(
walletType,
onConnectDevice,
allowChangeWallet,
ledgerVM,
));
} }
class ConnectDevicePageBody extends StatefulWidget { class ConnectDevicePageBody extends StatefulWidget {
@ -75,6 +91,8 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
late Timer? _bleStateTimer = null; late Timer? _bleStateTimer = null;
late StreamSubscription<LedgerDevice>? _bleRefresh = null; late StreamSubscription<LedgerDevice>? _bleRefresh = null;
bool longWait = false;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -89,6 +107,11 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
_usbRefreshTimer = _usbRefreshTimer =
Timer.periodic(Duration(seconds: 1), (_) => _refreshUsbDevices()); Timer.periodic(Duration(seconds: 1), (_) => _refreshUsbDevices());
} }
Future.delayed(Duration(seconds: 10), () {
if (widget.ledgerVM.bleIsEnabled && bleDevices.isEmpty)
setState(() => longWait = true);
});
}); });
} }
@ -98,6 +121,8 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
_bleStateTimer?.cancel(); _bleStateTimer?.cancel();
_usbRefreshTimer?.cancel(); _usbRefreshTimer?.cancel();
_bleRefresh?.cancel(); _bleRefresh?.cancel();
widget.ledgerVM.stopScanning();
super.dispose(); super.dispose();
} }
@ -118,9 +143,11 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
Future<void> _refreshBleDevices() async { Future<void> _refreshBleDevices() async {
try { try {
if (widget.ledgerVM.bleIsEnabled) { if (widget.ledgerVM.bleIsEnabled) {
_bleRefresh = widget.ledgerVM _bleRefresh =
.scanForBleDevices() widget.ledgerVM.scanForBleDevices().listen((device) => setState(() {
.listen((device) => setState(() => bleDevices.add(device))) bleDevices.add(device);
if (longWait) longWait = false;
}))
..onError((e) { ..onError((e) {
throw e.toString(); throw e.toString();
}); });
@ -175,15 +202,21 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
), ),
// DeviceTile( Offstage(
// onPressed: () => Navigator.of(context).push( offstage: !longWait,
// MaterialPageRoute<void>( child: Padding(
// builder: (BuildContext context) => DebugDevicePage(), padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
// ), child: Text(S.of(context).if_you_dont_see_your_device,
// ), style: TextStyle(
// title: "Debug Ledger", fontSize: 16,
// leading: imageLedger, fontWeight: FontWeight.w500,
// ), color: Theme.of(context)
.extension<CakeTextTheme>()!
.titleColor),
textAlign: TextAlign.center,
),
),
),
Observer( Observer(
builder: (_) => Offstage( builder: (_) => Offstage(
offstage: widget.ledgerVM.bleIsEnabled, offstage: widget.ledgerVM.bleIsEnabled,

View file

@ -118,12 +118,7 @@ class CryptoBalanceWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return SingleChildScrollView(
onLongPress: () => dashboardViewModel.balanceViewModel.isReversing =
!dashboardViewModel.balanceViewModel.isReversing,
onLongPressUp: () => dashboardViewModel.balanceViewModel.isReversing =
!dashboardViewModel.balanceViewModel.isReversing,
child: SingleChildScrollView(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
@ -325,7 +320,7 @@ class CryptoBalanceWidget extends StatelessWidget {
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () => launchUrl( onTap: () => launchUrl(
Uri.parse( Uri.parse(
"https://guides.cakewallet.com/docs/cryptos/bitcoin/#silent-payments"), "https://docs.cakewallet.com/cryptos/bitcoin#silent-payments"),
mode: LaunchMode.externalApplication, mode: LaunchMode.externalApplication,
), ),
child: Row( child: Row(
@ -459,7 +454,6 @@ class CryptoBalanceWidget extends StatelessWidget {
}), }),
], ],
), ),
),
); );
} }
@ -597,9 +591,14 @@ class BalanceRowWidget extends StatelessWidget {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( GestureDetector(
onTap: () => dashboardViewModel.balanceViewModel.switchBalanceValue(),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
GestureDetector( GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
@ -607,10 +606,7 @@ class BalanceRowWidget extends StatelessWidget {
? () => _showBalanceDescription( ? () => _showBalanceDescription(
context, S.of(context).available_balance_description) context, S.of(context).available_balance_description)
: null, : null,
child: Column( child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [ children: [
Semantics( Semantics(
hint: 'Double tap to see more information', hint: 'Double tap to see more information',
@ -636,6 +632,7 @@ class BalanceRowWidget extends StatelessWidget {
), ),
], ],
), ),
),
SizedBox(height: 6), SizedBox(height: 6),
AutoSizeText(availableBalance, AutoSizeText(availableBalance,
style: TextStyle( style: TextStyle(
@ -667,9 +664,10 @@ class BalanceRowWidget extends StatelessWidget {
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Theme.of(context).extension<BalancePageTheme>()!.textColor, color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
height: 1)), height: 1)),
], ],
), ),
),
SizedBox( SizedBox(
width: min(MediaQuery.of(context).size.width * 0.2, 100), width: min(MediaQuery.of(context).size.width * 0.2, 100),
child: Center( child: Center(
@ -712,6 +710,7 @@ class BalanceRowWidget extends StatelessWidget {
), ),
], ],
), ),
),
if (frozenBalance.isNotEmpty) if (frozenBalance.isNotEmpty)
GestureDetector( GestureDetector(
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
@ -778,7 +777,9 @@ class BalanceRowWidget extends StatelessWidget {
), ),
), ),
if (hasAdditionalBalance) if (hasAdditionalBalance)
Column( GestureDetector(
onTap: () => dashboardViewModel.balanceViewModel.switchBalanceValue(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox(height: 24), SizedBox(height: 24),
@ -821,12 +822,13 @@ class BalanceRowWidget extends StatelessWidget {
), ),
], ],
), ),
),
], ],
), ),
), ),
), ),
if (hasSecondAdditionalBalance || hasSecondAvailableBalance) ...[ if (hasSecondAdditionalBalance || hasSecondAvailableBalance) ...[
SizedBox(height: 16), SizedBox(height: 10),
Container( Container(
margin: const EdgeInsets.only(left: 16, right: 16), margin: const EdgeInsets.only(left: 16, right: 16),
decoration: BoxDecoration( decoration: BoxDecoration(
@ -881,7 +883,9 @@ class BalanceRowWidget extends StatelessWidget {
], ],
), ),
if (hasSecondAvailableBalance) if (hasSecondAvailableBalance)
Row( GestureDetector(
onTap: () => dashboardViewModel.balanceViewModel.switchBalanceValue(),
child: Row(
children: [ children: [
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -890,7 +894,7 @@ class BalanceRowWidget extends StatelessWidget {
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,
onTap: () => launchUrl( onTap: () => launchUrl(
Uri.parse( Uri.parse(
"https://guides.cakewallet.com/docs/cryptos/litecoin/#mweb"), "https://docs.cakewallet.com/cryptos/litecoin.html#mweb"),
mode: LaunchMode.externalApplication, mode: LaunchMode.externalApplication,
), ),
child: Row( child: Row(
@ -953,6 +957,7 @@ class BalanceRowWidget extends StatelessWidget {
), ),
], ],
), ),
),
], ],
), ),
), ),

View file

@ -53,7 +53,7 @@ class TransactionsPage extends StatelessWidget {
onTap: () { onTap: () {
try { try {
final uri = Uri.parse( final uri = Uri.parse(
"https://guides.cakewallet.com/docs/FAQ/why_are_my_funds_not_appearing/"); "https://docs.cakewallet.com/faq/funds-not-appearing");
launchUrl(uri, mode: LaunchMode.externalApplication); launchUrl(uri, mode: LaunchMode.externalApplication);
} catch (_) {} } catch (_) {}
}, },

View file

@ -347,7 +347,7 @@ class _WalletNameFormState extends State<WalletNameForm> {
key: ValueKey('new_wallet_page_confirm_button_key'), key: ValueKey('new_wallet_page_confirm_button_key'),
onPressed: _confirmForm, onPressed: _confirmForm,
text: S.of(context).seed_language_next, text: S.of(context).seed_language_next,
color: Colors.green, color: Theme.of(context).primaryColor,
textColor: Colors.white, textColor: Colors.white,
isLoading: _walletNewVM.state is IsExecutingState, isLoading: _walletNewVM.state is IsExecutingState,
isDisabled: _walletNewVM.name.isEmpty, isDisabled: _walletNewVM.name.isEmpty,

View file

@ -40,7 +40,7 @@ class SelectButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final backgroundColor = color ?? (isSelected ? Colors.green : Theme.of(context).cardColor); final backgroundColor = color ?? (isSelected ? Theme.of(context).primaryColor : Theme.of(context).cardColor);
final effectiveTextColor = textColor ?? final effectiveTextColor = textColor ??
(isSelected (isSelected
? Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor ? Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor

View file

@ -31,7 +31,7 @@ class _HeaderTileState extends State<HeaderTile> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final searchIcon = Image.asset("assets/images/search_icon.png", final searchIcon = Icon( Icons.search,
color: Theme.of(context).extension<ReceivePageTheme>()!.iconsColor); color: Theme.of(context).extension<ReceivePageTheme>()!.iconsColor);
return Container( return Container(

View file

@ -56,9 +56,8 @@ class _RestoreOptionsBodyState extends State<_RestoreOptionsBody> {
} }
if (isMoneroOnly) { if (isMoneroOnly) {
// return DeviceConnectionType.supportedConnectionTypes(WalletType.monero, Platform.isIOS) return DeviceConnectionType.supportedConnectionTypes(WalletType.monero, Platform.isIOS)
// .isNotEmpty; .isNotEmpty;
return false;
} }
return true; return true;

View file

@ -25,5 +25,5 @@ class PreSeedPage extends InfoPage {
@override @override
void Function(BuildContext) get onPressed => void Function(BuildContext) get onPressed =>
(BuildContext context) => Navigator.of(context).popAndPushNamed(Routes.seed, arguments: true); (BuildContext context) => Navigator.of(context).pushNamed(Routes.seed, arguments: true);
} }

View file

@ -0,0 +1,35 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/seed/seed_verification/seed_verification_step_view.dart';
import 'package:cake_wallet/src/screens/seed/seed_verification/seed_verification_success_view.dart';
import 'package:cake_wallet/view_model/wallet_seed_view_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
class SeedVerificationPage extends BasePage {
final WalletSeedViewModel walletSeedViewModel;
SeedVerificationPage(this.walletSeedViewModel);
@override
String? get title => S.current.verify_seed;
@override
Widget body(BuildContext context) {
return Observer(
builder: (context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: walletSeedViewModel.isVerificationComplete
? SeedVerificationSuccessView(
imageColor: titleColor(context),
)
: SeedVerificationStepView(
walletSeedViewModel: walletSeedViewModel,
questionTextColor: titleColor(context),
),
);
},
);
}
}

View file

@ -0,0 +1,135 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/utils/show_bar.dart';
import 'package:cake_wallet/view_model/wallet_seed_view_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
class SeedVerificationStepView extends StatelessWidget {
const SeedVerificationStepView({
required this.walletSeedViewModel,
required this.questionTextColor,
super.key,
});
final WalletSeedViewModel walletSeedViewModel;
final Color questionTextColor;
@override
Widget build(BuildContext context) {
return Observer(
builder: (context) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 48),
Align(
alignment: Alignment.center,
child: RichText(
text: TextSpan(
children: [
TextSpan(
text: '${S.current.seed_position_question_one} ',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: questionTextColor,
),
),
TextSpan(
text: '${getOrdinal(walletSeedViewModel.currentWordIndex + 1)} ',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w800,
color: questionTextColor,
),
),
TextSpan(
text: S.current.seed_position_question_two,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: questionTextColor,
),
),
],
),
textAlign: TextAlign.center,
),
),
const SizedBox(height: 24),
Align(
alignment: Alignment.center,
child: Wrap(
spacing: 8,
runSpacing: 8,
alignment: WrapAlignment.center,
children: walletSeedViewModel.currentOptions.map(
(option) {
return GestureDetector(
onTap: () async {
final isCorrectWord = walletSeedViewModel.isChosenWordCorrect(option);
final isSecondWrongEntry = walletSeedViewModel.wrongEntries == 2;
if (!isCorrectWord) {
await showBar<void>(
context,
isSecondWrongEntry
? S.current.incorrect_seed_option_back
: S.current.incorrect_seed_option,
);
if (isSecondWrongEntry) {
Navigator.pop(context);
}
}
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 8),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16),
color: Theme.of(context).cardColor,
),
child: Text(
option,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w800,
color: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor,
),
),
),
);
},
).toList(),
),
),
],
),
);
},
);
}
String getOrdinal(int number) {
// Handle special cases for 11th, 12th, 13th
final lastTwoDigits = number % 100;
if (lastTwoDigits >= 11 && lastTwoDigits <= 13) {
return '${number}th';
}
// Check the last digit for st, nd, rd, or default th
final lastDigit = number % 10;
switch (lastDigit) {
case 1:
return '${number}st';
case 2:
return '${number}nd';
case 3:
return '${number}rd';
default:
return '${number}th';
}
}
}

View file

@ -0,0 +1,74 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:flutter/material.dart';
class SeedVerificationSuccessView extends StatelessWidget {
const SeedVerificationSuccessView({required this.imageColor, super.key});
final Color imageColor;
@override
Widget build(BuildContext context) {
final image = Image.asset('assets/images/seed_verified.png', color: imageColor);
return Center(
child: Column(
children: [
ConstrainedBox(
constraints: BoxConstraints(maxHeight: MediaQuery.of(context).size.height * 0.3),
child: AspectRatio(
aspectRatio: 1.8,
child: image,
),
),
SizedBox(height: 16),
Text(
S.current.seed_verified,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
),
),
SizedBox(height: 48),
RichText(
text: TextSpan(
children: [
TextSpan(
text: '${S.current.seed_verified_subtext} ',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w400,
color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor,
),
),
TextSpan(
text: S.current.seed_display_path,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w800,
color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor,
),
),
],
),
textAlign: TextAlign.center,
),
Spacer(),
PrimaryButton(
key: ValueKey('wallet_seed_page_open_wallet_button_key'),
onPressed: () {
Navigator.of(context).popUntil((route) => route.isFirst);
},
text: S.current.open_wallet,
color: Theme.of(context).primaryColor,
textColor: Colors.white,
),
SizedBox(height: 16),
],
),
);
}
}

View file

@ -1,6 +1,6 @@
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart'; import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
import 'package:cake_wallet/themes/extensions/pin_code_theme.dart';
import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/themes/theme_base.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/utils/clipboard_util.dart'; import 'package:cake_wallet/utils/clipboard_util.dart';
@ -16,7 +16,7 @@ import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/view_model/wallet_seed_view_model.dart'; import 'package:cake_wallet/view_model/wallet_seed_view_model.dart';
import '../../../themes/extensions/menu_theme.dart'; import '../../../themes/extensions/send_page_theme.dart';
class WalletSeedPage extends BasePage { class WalletSeedPage extends BasePage {
WalletSeedPage(this.walletSeedViewModel, {required this.isNewWalletCreated}); WalletSeedPage(this.walletSeedViewModel, {required this.isNewWalletCreated});
@ -30,62 +30,34 @@ class WalletSeedPage extends BasePage {
final bool isNewWalletCreated; final bool isNewWalletCreated;
final WalletSeedViewModel walletSeedViewModel; final WalletSeedViewModel walletSeedViewModel;
@override
void onClose(BuildContext context) async {
if (isNewWalletCreated) {
final confirmed = await showPopUp<bool>(
context: context,
builder: (BuildContext context) {
return AlertWithTwoActions(
alertDialogKey: ValueKey('wallet_seed_page_seed_alert_dialog_key'),
alertRightActionButtonKey:
ValueKey('wallet_seed_page_seed_alert_confirm_button_key'),
alertLeftActionButtonKey: ValueKey('wallet_seed_page_seed_alert_back_button_key'),
alertTitle: S.of(context).seed_alert_title,
alertContent: S.of(context).seed_alert_content,
leftButtonText: S.of(context).seed_alert_back,
rightButtonText: S.of(context).seed_alert_yes,
actionLeftButton: () => Navigator.of(context).pop(false),
actionRightButton: () => Navigator.of(context).pop(true),
);
},
) ??
false;
if (confirmed) {
Navigator.of(context).popUntil((route) => route.isFirst);
}
return;
}
Navigator.of(context).pop();
}
@override
Widget? leading(BuildContext context) => isNewWalletCreated ? null : super.leading(context);
@override @override
Widget trailing(BuildContext context) { Widget trailing(BuildContext context) {
final copyImage = Image.asset(
'assets/images/copy_address.png',
color: Theme.of(context)
.extension<CakeTextTheme>()!
.buttonTextColor
);
return isNewWalletCreated return isNewWalletCreated
? GestureDetector( ? GestureDetector(
key: ValueKey('wallet_seed_page_next_button_key'), key: ValueKey('wallet_seed_page_copy_seeds_button_key'),
onTap: () => onClose(context), onTap: () {
ClipboardUtil.setSensitiveDataToClipboard(
ClipboardData(text: walletSeedViewModel.seed),
);
showBar<void>(context, S.of(context).copied_to_clipboard);
},
child: Container( child: Container(
width: 100, padding: EdgeInsets.all(8),
height: 32, width: 40,
alignment: Alignment.center, alignment: Alignment.center,
margin: EdgeInsets.only(left: 10), margin: EdgeInsets.only(left: 10),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(16)), borderRadius: BorderRadius.all(Radius.circular(8)),
color: Theme.of(context).cardColor), color: Theme.of(context).cardColor,
child: Text(
S.of(context).seed_language_next,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
color: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor),
), ),
child: copyImage,
), ),
) )
: Offstage(); : Offstage();
@ -96,7 +68,7 @@ class WalletSeedPage extends BasePage {
return WillPopScope( return WillPopScope(
onWillPop: () async => false, onWillPop: () async => false,
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 8), padding: EdgeInsets.symmetric(horizontal: 14, vertical: 8),
alignment: Alignment.center, alignment: Alignment.center,
child: ConstrainedBox( child: ConstrainedBox(
constraints: constraints:
@ -114,12 +86,12 @@ class WalletSeedPage extends BasePage {
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8), padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
decoration: BoxDecoration( decoration: BoxDecoration(
color: currentTheme.type == ThemeType.dark color: currentTheme.type == ThemeType.dark
? Color.fromRGBO(126, 116, 59, 1) ? Color.fromRGBO(132, 110, 64, 1)
: Color.fromRGBO(189, 169, 90, 1), : Color.fromRGBO(194, 165, 94, 1),
borderRadius: BorderRadius.all(Radius.circular(12)), borderRadius: BorderRadius.all(Radius.circular(12)),
border: Border.all( border: Border.all(
color: currentTheme.type == ThemeType.dark color: currentTheme.type == ThemeType.dark
? Color.fromRGBO(171, 171, 41, 1) ? Color.fromRGBO(177, 147, 41, 1)
: Color.fromRGBO(125, 122, 15, 1), : Color.fromRGBO(125, 122, 15, 1),
width: 2.0, width: 2.0,
)), )),
@ -130,7 +102,7 @@ class WalletSeedPage extends BasePage {
size: 64, size: 64,
color: Colors.white.withOpacity(0.75), color: Colors.white.withOpacity(0.75),
), ),
SizedBox(width: 8), SizedBox(width: 6),
Expanded( Expanded(
child: Text( child: Text(
S.current.cake_seeds_save_disclaimer, S.current.cake_seeds_save_disclaimer,
@ -147,24 +119,23 @@ class WalletSeedPage extends BasePage {
], ],
), ),
), ),
SizedBox(height: 32), SizedBox(height: 20),
Text( Text(
key: ValueKey('wallet_seed_page_wallet_name_text_key'), key: ValueKey('wallet_seed_page_wallet_name_text_key'),
walletSeedViewModel.name, walletSeedViewModel.name,
style: TextStyle( style: TextStyle(
fontSize: 20, fontSize: 18,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor, color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
), ),
), ),
SizedBox(height: 24), SizedBox(height: 20),
Expanded( Expanded(
child: GridView.builder( child: GridView.builder(
padding: const EdgeInsets.symmetric(horizontal: 4),
itemCount: walletSeedViewModel.seedSplit.length, itemCount: walletSeedViewModel.seedSplit.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: walletSeedViewModel.columnCount, crossAxisCount: 3,
childAspectRatio: 3.6, childAspectRatio: 2.8,
mainAxisSpacing: 8.0, mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0, crossAxisSpacing: 8.0,
), ),
@ -173,7 +144,7 @@ class WalletSeedPage extends BasePage {
final numberCount = index + 1; final numberCount = index + 1;
return Container( return Container(
padding: const EdgeInsets.symmetric(horizontal: 4), padding: const EdgeInsets.symmetric(horizontal: 8),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
@ -183,24 +154,31 @@ class WalletSeedPage extends BasePage {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SizedBox( SizedBox(
width: 20,
child: Text( child: Text(
//maxLines: 1,
numberCount.toString(), numberCount.toString(),
textAlign: TextAlign.right, textAlign: TextAlign.center,
style: TextStyle(
fontSize: 12,
height: 1,
fontWeight: FontWeight.w800,
color: Theme.of(context)
.extension<CakeTextTheme>()!
.buttonTextColor
.withOpacity(0.5)),
),
),
const SizedBox(width: 6),
Expanded(
child: Text(
'${item[0].toLowerCase()}${item.substring(1)}',
style: TextStyle( style: TextStyle(
fontSize: 14, fontSize: 14,
height: 0.8,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
color: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor.withOpacity(0.5) color: Theme.of(context)
), .extension<CakeTextTheme>()!
), .buttonTextColor),
),
const SizedBox(width: 8),
Text(
'${item[0].toUpperCase()}${item.substring(1)}',
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w700,
color: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor
), ),
), ),
], ],
@ -221,7 +199,7 @@ class WalletSeedPage extends BasePage {
children: <Widget>[ children: <Widget>[
Flexible( Flexible(
child: Container( child: Container(
padding: EdgeInsets.only(right: 8.0), padding: EdgeInsets.only(right: 8.0, top: 8.0),
child: PrimaryButton( child: PrimaryButton(
key: ValueKey('wallet_seed_page_save_seeds_button_key'), key: ValueKey('wallet_seed_page_save_seeds_button_key'),
onPressed: () { onPressed: () {
@ -240,17 +218,13 @@ class WalletSeedPage extends BasePage {
), ),
Flexible( Flexible(
child: Container( child: Container(
padding: EdgeInsets.only(left: 8.0), padding: EdgeInsets.only(left: 8.0, top: 8.0),
child: Builder( child: Builder(
builder: (context) => PrimaryButton( builder: (context) => PrimaryButton(
key: ValueKey('wallet_seed_page_copy_seeds_button_key'), key: ValueKey('wallet_seed_page_verify_seed_button_key'),
onPressed: () { onPressed: () =>
ClipboardUtil.setSensitiveDataToClipboard( Navigator.pushNamed(context, Routes.walletSeedVerificationPage),
ClipboardData(text: walletSeedViewModel.seed), text: S.current.verify_seed,
);
showBar<void>(context, S.of(context).copied_to_clipboard);
},
text: S.of(context).copy,
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
textColor: Colors.white, textColor: Colors.white,
), ),
@ -259,7 +233,7 @@ class WalletSeedPage extends BasePage {
) )
], ],
), ),
SizedBox(height: 24), SizedBox(height: 12),
], ],
) )
], ],

View file

@ -500,82 +500,59 @@ class SendPage extends BasePage {
actionRightButton: () async { actionRightButton: () async {
Navigator.of(_dialogContext).pop(); Navigator.of(_dialogContext).pop();
sendViewModel.commitTransaction(context); sendViewModel.commitTransaction(context);
await showPopUp<void>( },
context: context, actionLeftButton: () => Navigator.of(_dialogContext).pop());
builder: (BuildContext _dialogContext) { });
return Observer(builder: (_) { }
final state = sendViewModel.state; });
if (state is FailureState) {
Navigator.of(_dialogContext).pop();
} }
if (state is TransactionCommitted) { if (state is TransactionCommitted) {
newContactAddress = WidgetsBinding.instance.addPostFrameCallback((_) async {
newContactAddress ?? sendViewModel.newContactAddress();
if (sendViewModel.coinTypeToSpendFrom != UnspentCoinType.any) { final successMessage = S.of(context).send_success(
newContactAddress = null;
}
final successMessage = S.of(_dialogContext).send_success(
sendViewModel.selectedCryptoCurrency.toString()); sendViewModel.selectedCryptoCurrency.toString());
final waitMessage = sendViewModel.walletType == WalletType.solana final waitMessage = sendViewModel.walletType == WalletType.solana
? '. ${S.of(_dialogContext).waitFewSecondForTxUpdate}' ? '. ${S.of(context).waitFewSecondForTxUpdate}'
: ''; : '';
final newContactMessage = newContactAddress != null && sendViewModel.showAddressBookPopup String alertContent = "$successMessage$waitMessage";
? '\n${S.of(_dialogContext).add_contact_to_address_book}'
: '';
String alertContent = await Navigator.of(context).pushNamed(
"$successMessage$waitMessage$newContactMessage"; Routes.transactionSuccessPage,
arguments: alertContent
);
if (newContactMessage.isNotEmpty) { newContactAddress = newContactAddress ?? sendViewModel.newContactAddress();
return AlertWithTwoActions( if (sendViewModel.coinTypeToSpendFrom != UnspentCoinType.any) newContactAddress = null;
if (newContactAddress != null && sendViewModel.showAddressBookPopup) {
await showPopUp<void>(
context: context,
builder: (BuildContext _dialogContext) => AlertWithTwoActions(
alertDialogKey: ValueKey('send_page_sent_dialog_key'), alertDialogKey: ValueKey('send_page_sent_dialog_key'),
alertTitle: '', alertTitle: '',
alertContent: alertContent, alertContent: S.of(_dialogContext).add_contact_to_address_book,
rightButtonText: S.of(_dialogContext).add_contact, rightButtonText: S.of(_dialogContext).add_contact,
leftButtonText: S.of(_dialogContext).ignor, leftButtonText: S.of(_dialogContext).ignor,
alertLeftActionButtonKey: alertLeftActionButtonKey: ValueKey('send_page_sent_dialog_ignore_button_key'),
ValueKey('send_page_sent_dialog_ignore_button_key'), alertRightActionButtonKey:
alertRightActionButtonKey: ValueKey( ValueKey('send_page_sent_dialog_add_contact_button_key'),
'send_page_sent_dialog_add_contact_button_key'),
actionRightButton: () { actionRightButton: () {
Navigator.of(_dialogContext).pop(); Navigator.of(_dialogContext).pop();
RequestReviewHandler.requestReview(); RequestReviewHandler.requestReview();
Navigator.of(context).pushNamed( Navigator.of(context)
Routes.addressBookAddContact, .pushNamed(Routes.addressBookAddContact, arguments: newContactAddress);
arguments: newContactAddress);
newContactAddress = null; newContactAddress = null;
}, },
actionLeftButton: () { actionLeftButton: () {
Navigator.of(_dialogContext).pop(); Navigator.of(_dialogContext).pop();
RequestReviewHandler.requestReview(); RequestReviewHandler.requestReview();
newContactAddress = null; newContactAddress = null;
}); }));
} else {
if (initialPaymentRequest?.callbackMessage?.isNotEmpty ??
false) {
alertContent = initialPaymentRequest!.callbackMessage!;
}
return AlertWithOneAction(
alertTitle: '',
alertContent: alertContent,
buttonText: S.of(_dialogContext).ok,
buttonAction: () {
Navigator.of(_dialogContext).pop();
RequestReviewHandler.requestReview();
});
}
} }
return Offstage();
});
});
if (state is TransactionCommitted) {
if (initialPaymentRequest?.callbackUrl?.isNotEmpty ?? false) { if (initialPaymentRequest?.callbackUrl?.isNotEmpty ?? false) {
// wait a second so it's not as jarring: // wait a second so it's not as jarring:
await Future.delayed(Duration(seconds: 1)); await Future.delayed(Duration(seconds: 1));
@ -588,16 +565,7 @@ class SendPage extends BasePage {
printV(e); printV(e);
} }
} }
}
},
actionLeftButton: () => Navigator.of(_dialogContext).pop());
});
}
});
}
if (state is TransactionCommitted) {
WidgetsBinding.instance.addPostFrameCallback((_) {
sendViewModel.clearOutputs(); sendViewModel.clearOutputs();
}); });
} }
@ -612,7 +580,10 @@ class SendPage extends BasePage {
alertTitle: S.of(context).proceed_on_device, alertTitle: S.of(context).proceed_on_device,
alertContent: S.of(context).proceed_on_device_description, alertContent: S.of(context).proceed_on_device_description,
buttonText: S.of(context).cancel, buttonText: S.of(context).cancel,
buttonAction: () => Navigator.of(context).pop()); buttonAction: () {
sendViewModel.state = InitialExecutionState();
Navigator.of(context).pop();
});
}); });
}); });
} }

View file

@ -0,0 +1,32 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/screens/Info_page.dart';
import 'package:flutter/cupertino.dart';
class TransactionSuccessPage extends InfoPage {
TransactionSuccessPage({required this.content})
: super(
imageLightPath: 'assets/images/birthday_cake.png',
imageDarkPath: 'assets/images/birthday_cake.png',
);
final String content;
@override
bool get onWillPop => false;
@override
String get pageTitle => 'Transaction Sent Successfully';
@override
String get pageDescription => content;
@override
String get buttonText => S.current.ok;
@override
Key? get buttonKey => ValueKey('transaction_success_info_page_button_key');
@override
void Function(BuildContext) get onPressed =>
(BuildContext context) => Navigator.of(context).pop();
}

View file

@ -20,7 +20,7 @@ class Setup2FAPage extends BasePage {
Widget body(BuildContext context) { Widget body(BuildContext context) {
final cake2FAGuideTitle = 'Cake 2FA Guide'; final cake2FAGuideTitle = 'Cake 2FA Guide';
final cake2FAGuideUri = final cake2FAGuideUri =
Uri.parse('https://guides.cakewallet.com/docs/advanced-features/authentication'); Uri.parse('https://docs.cakewallet.com/features/advanced/authentication/');
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [

View file

@ -6,7 +6,6 @@ import 'package:cake_wallet/src/widgets/standard_list.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
import 'package:cake_wallet/utils/clipboard_util.dart'; import 'package:cake_wallet/utils/clipboard_util.dart';
import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_bar.dart';
import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart'; import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart';
@ -30,7 +29,7 @@ class Setup2FAQRPage extends BasePage {
width: 16, width: 16,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor); color: Theme.of(context).extension<CakeTextTheme>()!.titleColor);
final cake2FAHowToUseUrl = Uri.parse( final cake2FAHowToUseUrl = Uri.parse(
'https://guides.cakewallet.com/docs/advanced-features/authentication/#enabling-cake-2fa'); 'https://docs.cakewallet.com/features/advanced/authentication/#enabling-cake-2fa');
return Padding( return Padding(
padding: const EdgeInsets.symmetric(horizontal: 24), padding: const EdgeInsets.symmetric(horizontal: 24),
child: Column( child: Column(

View file

@ -70,7 +70,7 @@ class SupportPage extends BasePage {
), ),
title: S.of(context).support_title_guides, title: S.of(context).support_title_guides,
description: S.of(context).support_description_guides, description: S.of(context).support_description_guides,
onPressed: () => _launchUrl(supportViewModel.guidesUrl), onPressed: () => _launchUrl(supportViewModel.docsUrl),
), ),
), ),
Padding( Padding(

View file

@ -8,7 +8,8 @@ class TradeDetailsListCardItem extends StandartListItem {
{required this.id, {required this.id,
required this.createdAt, required this.createdAt,
required this.pair, required this.pair,
required this.onTap}) required this.onTap,
this.extraId})
: super(title: '', value: ''); : super(title: '', value: '');
factory TradeDetailsListCardItem.tradeDetails( factory TradeDetailsListCardItem.tradeDetails(
@ -16,9 +17,19 @@ class TradeDetailsListCardItem extends StandartListItem {
required String createdAt, required String createdAt,
required CryptoCurrency from, required CryptoCurrency from,
required CryptoCurrency to, required CryptoCurrency to,
required void Function(BuildContext) onTap}) { required void Function(BuildContext) onTap,
String? extraId}) {
final extraIdTitle = from == CryptoCurrency.xrp
? S.current.destination_tag
: from == CryptoCurrency.xlm
? S.current.memo
: S.current.extra_id;
return TradeDetailsListCardItem( return TradeDetailsListCardItem(
id: '${S.current.trade_details_id} ${formatAsText(id)}', id: '${S.current.trade_details_id} ${formatAsText(id)}',
extraId: extraId != null ? '$extraIdTitle $extraId' : null,
createdAt: formatAsText(createdAt), createdAt: formatAsText(createdAt),
pair: '${formatAsText(from)}${formatAsText(to)}', pair: '${formatAsText(from)}${formatAsText(to)}',
onTap: onTap); onTap: onTap);
@ -27,6 +38,7 @@ class TradeDetailsListCardItem extends StandartListItem {
final String id; final String id;
final String createdAt; final String createdAt;
final String pair; final String pair;
final String? extraId;
final void Function(BuildContext) onTap; final void Function(BuildContext) onTap;
static String formatAsText<T>(T value) => value?.toString() ?? ''; static String formatAsText<T>(T value) => value?.toString() ?? '';

View file

@ -69,6 +69,7 @@ class TradeDetailsPageBodyState extends State<TradeDetailsPageBody> {
if (item is TradeDetailsListCardItem) if (item is TradeDetailsListCardItem)
return TradeDetailsStandardListCard( return TradeDetailsStandardListCard(
id: item.id, id: item.id,
extraId: item.extraId,
create: item.createdAt, create: item.createdAt,
pair: item.pair, pair: item.pair,
currentTheme: tradeDetailsViewModel.settingsStore.currentTheme.type, currentTheme: tradeDetailsViewModel.settingsStore.currentTheme.type,

View file

@ -154,7 +154,7 @@ class UnspentCoinsListFormState extends State<UnspentCoinsListForm> {
SizedBox(height: 15), SizedBox(height: 15),
Expanded( Expanded(
child: unspentCoinsListViewModel.items.isEmpty child: unspentCoinsListViewModel.items.isEmpty
? Center(child: Text('No unspent coins available\ntry to reconnect',textAlign: TextAlign.center)) ? Center(child: Text('No unspent coins available',textAlign: TextAlign.center))
: ListView.separated( : ListView.separated(
itemCount: unspentCoinsListViewModel.items.length, itemCount: unspentCoinsListViewModel.items.length,
separatorBuilder: (_, __) => SizedBox(height: 15), separatorBuilder: (_, __) => SizedBox(height: 15),

View file

@ -84,6 +84,7 @@ class WalletKeysPage extends BasePage {
child: Observer( child: Observer(
builder: (_) { builder: (_) {
return ListView.separated( return ListView.separated(
key: ValueKey('wallet_keys_page_credentials_list_view_key'),
separatorBuilder: (context, index) => Container( separatorBuilder: (context, index) => Container(
height: 1, height: 1,
padding: EdgeInsets.only(left: 24), padding: EdgeInsets.only(left: 24),

View file

@ -335,6 +335,26 @@ class WalletListBodyState extends State<WalletListBody> {
padding: const EdgeInsets.all(24), padding: const EdgeInsets.all(24),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
PrimaryImageButton(
key: ValueKey('wallet_list_page_restore_wallet_button_key'),
onPressed: () {
if (widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets) {
widget.authService.authenticateAction(
context,
route: Routes.restoreOptions,
arguments: false,
conditionToDetermineIfToUse2FA: widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets,
);
} else {
Navigator.of(context).pushNamed(Routes.restoreOptions, arguments: false);
}
},
image: restoreWalletImage,
text: S.of(context).wallet_list_restore_wallet,
color: Theme.of(context).cardColor,
textColor: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor,
),
SizedBox(height: 10.0),
PrimaryImageButton( PrimaryImageButton(
key: ValueKey('wallet_list_page_create_new_wallet_button_key'), key: ValueKey('wallet_list_page_create_new_wallet_button_key'),
onPressed: () { onPressed: () {
@ -374,26 +394,6 @@ class WalletListBodyState extends State<WalletListBody> {
color: Theme.of(context).primaryColor, color: Theme.of(context).primaryColor,
textColor: Colors.white, textColor: Colors.white,
), ),
SizedBox(height: 10.0),
PrimaryImageButton(
key: ValueKey('wallet_list_page_restore_wallet_button_key'),
onPressed: () {
if (widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets) {
widget.authService.authenticateAction(
context,
route: Routes.restoreOptions,
arguments: false,
conditionToDetermineIfToUse2FA: widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets,
);
} else {
Navigator.of(context).pushNamed(Routes.restoreOptions, arguments: false);
}
},
image: restoreWalletImage,
text: S.of(context).wallet_list_restore_wallet,
color: Theme.of(context).cardColor,
textColor: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor,
)
], ],
), ),
), ),
@ -458,8 +458,9 @@ class WalletListBodyState extends State<WalletListBody> {
if (!isAuthenticatedSuccessfully) return; if (!isAuthenticatedSuccessfully) return;
try { try {
if (widget.walletListViewModel final requireHardwareWalletConnection = widget.walletListViewModel
.requireHardwareWalletConnection(wallet)) { .requireHardwareWalletConnection(wallet);
if (requireHardwareWalletConnection) {
await Navigator.of(context).pushNamed( await Navigator.of(context).pushNamed(
Routes.connectDevices, Routes.connectDevices,
arguments: ConnectDevicePageParams( arguments: ConnectDevicePageParams(
@ -481,8 +482,6 @@ class WalletListBodyState extends State<WalletListBody> {
); );
} }
changeProcessText( changeProcessText(
S.of(context).wallet_list_loading_wallet(wallet.name)); S.of(context).wallet_list_loading_wallet(wallet.name));
await widget.walletListViewModel.loadWallet(wallet); await widget.walletListViewModel.loadWallet(wallet);
@ -492,6 +491,9 @@ class WalletListBodyState extends State<WalletListBody> {
if (responsiveLayoutUtil.shouldRenderMobileUI) { if (responsiveLayoutUtil.shouldRenderMobileUI) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
if (this.mounted) { if (this.mounted) {
if (requireHardwareWalletConnection) {
Navigator.of(context).pop();
}
widget.onWalletLoaded.call(context); widget.onWalletLoaded.call(context);
} }
}); });

View file

@ -17,13 +17,14 @@ class SearchBarWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return TextFormField( return TextFormField(
key: ValueKey('search_bar_widget_key'),
controller: searchController, controller: searchController,
style: TextStyle(color: Theme.of(context).extension<PickerTheme>()!.searchHintColor), style: TextStyle(color: Theme.of(context).extension<PickerTheme>()!.searchHintColor),
decoration: InputDecoration( decoration: InputDecoration(
hintText: hintText ?? S.of(context).search, hintText: hintText ?? S.of(context).search,
hintStyle: TextStyle(color: Theme.of(context).extension<PickerTheme>()!.searchHintColor), hintStyle: TextStyle(color: Theme.of(context).extension<PickerTheme>()!.searchHintColor),
prefixIcon: Image.asset("assets/images/search_icon.png", prefixIcon: Icon( Icons.search,
color: Theme.of(context).extension<PickerTheme>()!.searchIconColor), color: Theme.of(context).primaryColor),
filled: true, filled: true,
fillColor: Theme.of(context).extension<PickerTheme>()!.searchBackgroundFillColor, fillColor: Theme.of(context).extension<PickerTheme>()!.searchBackgroundFillColor,
alignLabelWithHint: false, alignLabelWithHint: false,

View file

@ -26,7 +26,9 @@ class StandardCheckbox extends StatelessWidget {
], begin: Alignment.centerLeft, end: Alignment.centerRight); ], begin: Alignment.centerLeft, end: Alignment.centerRight);
final boxBorder = Border.all( final boxBorder = Border.all(
color: borderColor ?? Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor, width: 1.0); color: borderColor ?? Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor,
width: 1.0,
);
final checkedBoxDecoration = BoxDecoration( final checkedBoxDecoration = BoxDecoration(
gradient: gradientBackground ? baseGradient : null, gradient: gradientBackground ? baseGradient : null,
@ -41,6 +43,7 @@ class StandardCheckbox extends StatelessWidget {
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
height: 24.0, height: 24.0,
@ -55,13 +58,22 @@ class StandardCheckbox extends StatelessWidget {
: Offstage(), : Offstage(),
), ),
if (caption.isNotEmpty) if (caption.isNotEmpty)
Padding( Flexible(
child: Padding(
padding: EdgeInsets.only(left: 10), padding: EdgeInsets.only(left: 10),
child: Text( child: Text(
caption, caption,
softWrap: true,
style: TextStyle( style: TextStyle(
fontSize: 16.0, color: Theme.of(context).extension<CakeTextTheme>()!.titleColor), fontSize: 16.0,
)) fontFamily: 'Lato',
fontWeight: FontWeight.normal,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
decoration: TextDecoration.none,
),
),
),
)
], ],
), ),
); );

View file

@ -6,12 +6,14 @@ import 'package:cake_wallet/themes/theme_base.dart';
class TradeDetailsStandardListCard extends StatelessWidget { class TradeDetailsStandardListCard extends StatelessWidget {
TradeDetailsStandardListCard( TradeDetailsStandardListCard(
{required this.id, {required this.id,
this.extraId,
required this.create, required this.create,
required this.pair, required this.pair,
required this.onTap, required this.onTap,
required this.currentTheme}); required this.currentTheme});
final String id; final String id;
final String? extraId;
final String create; final String create;
final String pair; final String pair;
final ThemeType currentTheme; final ThemeType currentTheme;
@ -57,6 +59,16 @@ class TradeDetailsStandardListCard extends StatelessWidget {
SizedBox( SizedBox(
height: 8, height: 8,
), ),
if (extraId != null && extraId!.isNotEmpty)
Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: Text(extraId!,
style: TextStyle(
fontSize: 16,
fontFamily: 'Lato',
fontWeight: FontWeight.w400,
color: textColor)),
),
Text(create, Text(create,
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,

View file

@ -4,7 +4,7 @@ part 'authentication_store.g.dart';
class AuthenticationStore = AuthenticationStoreBase with _$AuthenticationStore; class AuthenticationStore = AuthenticationStoreBase with _$AuthenticationStore;
enum AuthenticationState { uninitialized, installed, allowed, _reset } enum AuthenticationState { uninitialized, installed, allowed, allowedCreate, _reset }
abstract class AuthenticationStoreBase with Store { abstract class AuthenticationStoreBase with Store {
AuthenticationStoreBase() : state = AuthenticationState.uninitialized; AuthenticationStoreBase() : state = AuthenticationState.uninitialized;
@ -23,4 +23,10 @@ abstract class AuthenticationStoreBase with Store {
state = AuthenticationState._reset; state = AuthenticationState._reset;
state = AuthenticationState.allowed; state = AuthenticationState.allowed;
} }
@action
void allowedCreate() {
state = AuthenticationState._reset;
state = AuthenticationState.allowedCreate;
}
} }

View file

@ -3,4 +3,5 @@ class FeatureFlag {
static const bool isExolixEnabled = true; static const bool isExolixEnabled = true;
static const bool isInAppTorEnabled = false; static const bool isInAppTorEnabled = false;
static const bool isBackgroundSyncEnabled = false; static const bool isBackgroundSyncEnabled = false;
static const int verificationWordsCount = 2;
} }

View file

@ -49,6 +49,13 @@ abstract class CakePayPurchaseViewModelBase with Store {
String get fiatCurrency => paymentCredential.fiatCurrency; String get fiatCurrency => paymentCredential.fiatCurrency;
bool confirmsNoVpn = false;
bool confirmsVoidedRefund = false;
bool confirmsTermsAgreed = false;
@observable
bool isPurchasing = false;
CryptoPaymentData? get cryptoPaymentData { CryptoPaymentData? get cryptoPaymentData {
if (order == null) return null; if (order == null) return null;
@ -88,7 +95,11 @@ abstract class CakePayPurchaseViewModelBase with Store {
order = await cakePayService.createOrder( order = await cakePayService.createOrder(
cardId: card.id, cardId: card.id,
price: paymentCredential.amount.toString(), price: paymentCredential.amount.toString(),
quantity: paymentCredential.quantity); quantity: paymentCredential.quantity,
confirmsNoVpn: confirmsNoVpn,
confirmsVoidedRefund: confirmsVoidedRefund,
confirmsTermsAgreed: confirmsTermsAgreed,
);
await confirmSending(); await confirmSending();
expirationTime = order!.paymentData.expirationTime; expirationTime = order!.paymentData.expirationTime;
updateRemainingTime(); updateRemainingTime();

View file

@ -288,7 +288,7 @@ abstract class BalanceViewModelBase with Store {
BalanceRecord( BalanceRecord(
availableBalance: '---', availableBalance: '---',
additionalBalance: '---', additionalBalance: '---',
frozenBalance: '---', frozenBalance: '',
secondAvailableBalance: '---', secondAvailableBalance: '---',
secondAdditionalBalance: '---', secondAdditionalBalance: '---',
fiatAdditionalBalance: isFiatDisabled ? '' : '---', fiatAdditionalBalance: isFiatDisabled ? '' : '---',
@ -489,6 +489,15 @@ abstract class BalanceViewModelBase with Store {
isShowCard = cardDisplayStatus; isShowCard = cardDisplayStatus;
} }
@action
void switchBalanceValue() {
if (settingsStore.balanceDisplayMode == BalanceDisplayMode.displayableBalance) {
settingsStore.balanceDisplayMode = BalanceDisplayMode.hiddenBalance;
} else {
settingsStore.balanceDisplayMode = BalanceDisplayMode.displayableBalance;
}
}
String _getFiatBalance({required double price, String? cryptoAmount}) { String _getFiatBalance({required double price, String? cryptoAmount}) {
if (cryptoAmount == null || cryptoAmount.isEmpty || double.tryParse(cryptoAmount) == null) { if (cryptoAmount == null || cryptoAmount.isEmpty || double.tryParse(cryptoAmount) == null) {
return '0.00'; return '0.00';

View file

@ -159,16 +159,6 @@ abstract class ExchangeTradeViewModelBase with Store {
), ),
); );
if (trade.extraId != null) {
final title = trade.from == CryptoCurrency.xrp
? S.current.destination_tag
: trade.from == CryptoCurrency.xlm
? S.current.memo
: S.current.extra_id;
items.add(ExchangeTradeItem(title: title, data: '${trade.extraId}', isCopied: false));
}
items.addAll([ items.addAll([
ExchangeTradeItem( ExchangeTradeItem(
title: S.current.amount, title: S.current.amount,
@ -176,7 +166,7 @@ abstract class ExchangeTradeViewModelBase with Store {
isCopied: true, isCopied: true,
), ),
ExchangeTradeItem( ExchangeTradeItem(
title: S.current.estimated_receive_amount +':', title: S.current.estimated_receive_amount + ':',
data: '${tradesStore.trade?.receiveAmount} ${trade.to}', data: '${tradesStore.trade?.receiveAmount} ${trade.to}',
isCopied: true, isCopied: true,
), ),
@ -185,12 +175,25 @@ abstract class ExchangeTradeViewModelBase with Store {
data: trade.inputAddress ?? '', data: trade.inputAddress ?? '',
isCopied: true, isCopied: true,
), ),
]);
if (trade.extraId != null) {
final title = trade.from == CryptoCurrency.xrp
? S.current.destination_tag
: trade.from == CryptoCurrency.xlm
? S.current.memo
: S.current.extra_id;
items.add(ExchangeTradeItem(title: title, data: '${trade.extraId}', isCopied: true));
}
items.add(
ExchangeTradeItem( ExchangeTradeItem(
title: S.current.arrive_in_this_address('${tradesStore.trade!.to}', tagTo) + ':', title: S.current.arrive_in_this_address('${tradesStore.trade!.to}', tagTo) + ':',
data: trade.payoutAddress ?? '', data: trade.payoutAddress ?? '',
isCopied: true, isCopied: true,
), ),
]); );
} }
static bool _checkIfCanSend(TradesStore tradesStore, WalletBase wallet) { static bool _checkIfCanSend(TradesStore tradesStore, WalletBase wallet) {

View file

@ -4,14 +4,18 @@ import 'dart:io';
import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/ethereum/ethereum.dart'; import 'package:cake_wallet/ethereum/ethereum.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/main.dart';
import 'package:cake_wallet/monero/monero.dart'; import 'package:cake_wallet/monero/monero.dart';
import 'package:cake_wallet/polygon/polygon.dart'; import 'package:cake_wallet/polygon/polygon.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/connect_device/connect_device_page.dart';
import 'package:cake_wallet/utils/device_info.dart'; import 'package:cake_wallet/utils/device_info.dart';
import 'package:cake_wallet/wallet_type_utils.dart'; import 'package:cake_wallet/wallet_type_utils.dart';
import 'package:cw_core/hardware/device_connection_type.dart'; import 'package:cw_core/hardware/device_connection_type.dart';
import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_base.dart';
import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/wallet_type.dart';
import 'package:flutter/widgets.dart';
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart' as sdk; import 'package:ledger_flutter_plus/ledger_flutter_plus.dart' as sdk;
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
@ -59,7 +63,8 @@ abstract class LedgerViewModelBase with Store {
bool _bleIsInitialized = false; bool _bleIsInitialized = false;
Future<void> _initBLE() async { Future<void> _initBLE() async {
if (bleIsEnabled && !_bleIsInitialized) { if (bleIsEnabled && !_bleIsInitialized) {
ledgerPlusBLE = sdk.LedgerInterface.ble(onPermissionRequest: (_) async { ledgerPlusBLE = sdk.LedgerInterface.ble(
onPermissionRequest: (_) async {
Map<Permission, PermissionStatus> statuses = await [ Map<Permission, PermissionStatus> statuses = await [
Permission.bluetoothScan, Permission.bluetoothScan,
Permission.bluetoothConnect, Permission.bluetoothConnect,
@ -67,7 +72,9 @@ abstract class LedgerViewModelBase with Store {
].request(); ].request();
return statuses.values.where((status) => status.isDenied).isEmpty; return statuses.values.where((status) => status.isDenied).isEmpty;
}); },
bleOptions:
sdk.BluetoothOptions(maxScanDuration: Duration(minutes: 5)));
_bleIsInitialized = true; _bleIsInitialized = true;
} }
} }
@ -84,16 +91,26 @@ abstract class LedgerViewModelBase with Store {
Stream<sdk.LedgerDevice> scanForUsbDevices() => ledgerPlusUSB.scan(); Stream<sdk.LedgerDevice> scanForUsbDevices() => ledgerPlusUSB.scan();
Future<void> stopScanning() async {
await ledgerPlusBLE.stopScanning();
if (!Platform.isIOS) {
await ledgerPlusUSB.stopScanning();
}
}
Future<void> connectLedger(sdk.LedgerDevice device, WalletType type) async { Future<void> connectLedger(sdk.LedgerDevice device, WalletType type) async {
if (isConnected) { if (isConnected) {
try { try {
await _connection!.disconnect(); await _connectionChangeListener?.cancel();
_connectionChangeListener = null;
await _connection!.disconnect().catchError((_) {});
} catch (_) {} } catch (_) {}
} }
final ledger = device.connectionType == sdk.ConnectionType.ble final ledger = device.connectionType == sdk.ConnectionType.ble
? ledgerPlusBLE ? ledgerPlusBLE
: ledgerPlusUSB; : ledgerPlusUSB;
if (_connectionChangeListener == null) { if (_connectionChangeListener == null) {
_connectionChangeListener = ledger.deviceStateChanges.listen((event) { _connectionChangeListener = ledger.deviceStateChanges.listen((event) {
printV('Ledger Device State Changed: $event'); printV('Ledger Device State Changed: $event');
@ -101,6 +118,18 @@ abstract class LedgerViewModelBase with Store {
_connection = null; _connection = null;
if (type == WalletType.monero) { if (type == WalletType.monero) {
monero!.resetLedgerConnection(); monero!.resetLedgerConnection();
Navigator.of( navigatorKey.currentContext!).pushNamed(
Routes.connectDevices,
arguments: ConnectDevicePageParams(
walletType: WalletType.monero,
allowChangeWallet: true,
isReconnect: true,
onConnectDevice: (context, ledgerVM) async {
Navigator.of(context).pop();
},
),
);
} }
} }
}); });

View file

@ -1,4 +1,3 @@
import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/entities/contact.dart'; import 'package:cake_wallet/entities/contact.dart';
import 'package:cake_wallet/entities/evm_transaction_error_fees_handler.dart'; import 'package:cake_wallet/entities/evm_transaction_error_fees_handler.dart';
import 'package:cake_wallet/entities/priority_for_wallet_type.dart'; import 'package:cake_wallet/entities/priority_for_wallet_type.dart';
@ -14,7 +13,6 @@ import 'package:cake_wallet/polygon/polygon.dart';
import 'package:cake_wallet/reactions/wallet_connect.dart'; import 'package:cake_wallet/reactions/wallet_connect.dart';
import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/solana/solana.dart'; import 'package:cake_wallet/solana/solana.dart';
import 'package:cake_wallet/src/screens/ur/animated_ur_page.dart';
import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/store/app_store.dart';
import 'package:cake_wallet/tron/tron.dart'; import 'package:cake_wallet/tron/tron.dart';
import 'package:cake_wallet/view_model/contact_list/contact_list_view_model.dart'; import 'package:cake_wallet/view_model/contact_list/contact_list_view_model.dart';
@ -30,6 +28,7 @@ import 'package:cw_core/unspent_coin_type.dart';
import 'package:cake_wallet/view_model/send/output.dart'; import 'package:cake_wallet/view_model/send/output.dart';
import 'package:cake_wallet/view_model/send/send_template_view_model.dart'; import 'package:cake_wallet/view_model/send/send_template_view_model.dart';
import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_solana/solana_exceptions.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
@ -493,7 +492,8 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
if (pendingTransaction!.shouldCommitUR()) { if (pendingTransaction!.shouldCommitUR()) {
final urstr = await pendingTransaction!.commitUR(); final urstr = await pendingTransaction!.commitUR();
final result = await Navigator.of(context).pushNamed(Routes.urqrAnimatedPage, arguments: urstr); final result =
await Navigator.of(context).pushNamed(Routes.urqrAnimatedPage, arguments: urstr);
if (result == null) { if (result == null) {
state = FailureState("Canceled by user"); state = FailureState("Canceled by user");
return; return;
@ -510,12 +510,9 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
final descriptionKey = '${pendingTransaction!.id}_${wallet.walletAddresses.primaryAddress}'; final descriptionKey = '${pendingTransaction!.id}_${wallet.walletAddresses.primaryAddress}';
_settingsStore.shouldSaveRecipientAddress _settingsStore.shouldSaveRecipientAddress
? await transactionDescriptionBox.add(TransactionDescription( ? await transactionDescriptionBox.add(TransactionDescription(
id: descriptionKey, id: descriptionKey, recipientAddress: address, transactionNote: note))
recipientAddress: address, : await transactionDescriptionBox
transactionNote: note)) .add(TransactionDescription(id: descriptionKey, transactionNote: note));
: await transactionDescriptionBox.add(TransactionDescription(
id: descriptionKey,
transactionNote: note));
} }
state = TransactionCommitted(); state = TransactionCommitted();
@ -680,10 +677,26 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
lamportsNeeded != null ? ((lamportsNeeded + 5000) / lamportsPerSol) : 0.0; lamportsNeeded != null ? ((lamportsNeeded + 5000) / lamportsPerSol) : 0.0;
return S.current.insufficient_lamports(solValueNeeded.toString()); return S.current.insufficient_lamports(solValueNeeded.toString());
} else { } else {
printV("No match found.");
return S.current.insufficient_lamport_for_tx; return S.current.insufficient_lamport_for_tx;
} }
} }
if (error is SolanaSignNativeTokenTransactionRentException) {
return S.current.solana_sign_native_transaction_rent_exception;
}
if (error is SolanaCreateAssociatedTokenAccountException) {
return S.current.solana_create_associated_token_account_exception;
}
if (error is SolanaSignSPLTokenTransactionRentException) {
return S.current.solana_sign_spl_token_transaction_rent_exception;
}
if (error is SolanaNoAssociatedTokenAccountException) {
return S.current.solana_no_associated_token_account_exception;
}
if (errorMessage.contains('insufficient funds for rent')) { if (errorMessage.contains('insufficient funds for rent')) {
return S.current.insufficientFundsForRentError; return S.current.insufficientFundsForRentError;
} }

View file

@ -31,10 +31,15 @@ abstract class SupportViewModelBase with Store {
linkTitle: S.current.apk_update, linkTitle: S.current.apk_update,
link: 'https://github.com/cake-tech/cake_wallet/releases'), link: 'https://github.com/cake-tech/cake_wallet/releases'),
LinkListItem( LinkListItem(
title: 'Telegram Community', title: 'Discord',
icon: 'assets/images/discord.png',
linkTitle: 'discord.gg/pwmWa6aFpX',
link: 'https://discord.gg/pwmWa6aFpX'),
LinkListItem(
title: 'Telegram',
icon: 'assets/images/Telegram.png', icon: 'assets/images/Telegram.png',
linkTitle: 't.me/cakewallet', linkTitle: 't.me/cakewallet',
link: 'https://t.me/cakewallet'), link: 'https://t.me/cakewalletannouncements'),
LinkListItem( LinkListItem(
title: 'Telegram Support Bot', title: 'Telegram Support Bot',
icon: 'assets/images/Telegram.png', icon: 'assets/images/Telegram.png',
@ -75,7 +80,7 @@ abstract class SupportViewModelBase with Store {
icon: 'assets/images/onramper_dark.png', icon: 'assets/images/onramper_dark.png',
lightIcon: 'assets/images/onramper_light.png', lightIcon: 'assets/images/onramper_light.png',
linkTitle: 'View exchanges', linkTitle: 'View exchanges',
link: 'https://guides.cakewallet.com/docs/service-support/buy/#onramper'), link: 'https://docs.cakewallet.com/support/buy/#onramper'),
LinkListItem( LinkListItem(
title: 'DFX', title: 'DFX',
icon: 'assets/images/dfx_dark.png', icon: 'assets/images/dfx_dark.png',
@ -103,7 +108,7 @@ abstract class SupportViewModelBase with Store {
// link: 'mailto:support@y.at') // link: 'mailto:support@y.at')
]; ];
final guidesUrl = 'https://guides.cakewallet.com'; final docsUrl = 'https://docs.cakewallet.com';
String fetchUrl({String locale = "en", String authToken = ""}) { String fetchUrl({String locale = "en", String authToken = ""}) {
var supportUrl = var supportUrl =

View file

@ -153,6 +153,7 @@ abstract class TradeDetailsViewModelBase with Store {
items.add(TradeDetailsListCardItem.tradeDetails( items.add(TradeDetailsListCardItem.tradeDetails(
id: trade.id, id: trade.id,
extraId: trade.extraId,
createdAt: trade.createdAt != null ? dateFormat.format(trade.createdAt!) : '', createdAt: trade.createdAt != null ? dateFormat.format(trade.createdAt!) : '',
from: trade.from, from: trade.from,
to: trade.to, to: trade.to,

View file

@ -8,7 +8,6 @@ import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/nano/nano.dart'; import 'package:cake_wallet/nano/nano.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/view_model/restore/restore_mode.dart';
import 'package:cake_wallet/view_model/restore/restore_wallet.dart'; import 'package:cake_wallet/view_model/restore/restore_wallet.dart';
import 'package:cake_wallet/view_model/seed_settings_view_model.dart'; import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
import 'package:cw_core/pathForWallet.dart'; import 'package:cw_core/pathForWallet.dart';
@ -114,7 +113,7 @@ abstract class WalletCreationVMBase with Store {
await _walletInfoSource.add(walletInfo); await _walletInfoSource.add(walletInfo);
await _appStore.changeCurrentWallet(wallet); await _appStore.changeCurrentWallet(wallet);
getIt.get<BackgroundTasks>().registerSyncTask(); getIt.get<BackgroundTasks>().registerSyncTask();
_appStore.authenticationStore.allowed(); _appStore.authenticationStore.allowedCreate();
state = ExecutedSuccessfullyState(); state = ExecutedSuccessfullyState();
} catch (e, s) { } catch (e, s) {
printV("error: $e"); printV("error: $e");

View file

@ -1,3 +1,6 @@
import 'dart:math';
import 'package:cake_wallet/utils/feature_flag.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_base.dart';
@ -8,7 +11,11 @@ class WalletSeedViewModel = WalletSeedViewModelBase with _$WalletSeedViewModel;
abstract class WalletSeedViewModelBase with Store { abstract class WalletSeedViewModelBase with Store {
WalletSeedViewModelBase(WalletBase wallet) WalletSeedViewModelBase(WalletBase wallet)
: name = wallet.name, : name = wallet.name,
seed = wallet.seed!; seed = wallet.seed!,
currentOptions = ObservableList<String>(),
verificationIndices = ObservableList<int>() {
setupSeedVerification();
}
@observable @observable
String name; String name;
@ -16,7 +23,96 @@ abstract class WalletSeedViewModelBase with Store {
@observable @observable
String seed; String seed;
List<String> get seedSplit => seed.split(' '); /// The Regex split the words based on any whitespace character.
///
/// Either standard ASCII space (U+0020) or the full-width space character (U+3000) used by the Japanese.
List<String> get seedSplit => seed.split(RegExp(r'\s+'));
int get columnCount => seedSplit.length <= 16 ? 2 : 3; int get columnCount => seedSplit.length <= 16 ? 2 : 3;
double get columnAspectRatio => seedSplit.length <= 16 ? 1.8 : 2.8;
/// The indices of the seed to be verified.
ObservableList<int> verificationIndices;
/// The index of the word in verificationIndices being verified.
@observable
int currentStepIndex = 0;
/// The options to be displayed on the page for the current seed step.
///
/// The user has to choose from these.
ObservableList<String> currentOptions;
/// The number of words to be verified, linked to a Feature Flag so we can easily modify it.
int get verificationWordCount => FeatureFlag.verificationWordsCount;
/// Then number of wrong entries the user has selected;
///
/// Routes the view to the seed screen if it's up to two.
@observable
int wrongEntries = 0;
int get currentWordIndex => verificationIndices[currentStepIndex];
String get currentCorrectWord => seedSplit[currentWordIndex];
@observable
bool isVerificationComplete = false;
void setupSeedVerification() {
generateRandomIndices();
generateOptions();
}
/// Generate the indices of the seeds to be verified.
///
/// Structured to be as random as possible.
@action
void generateRandomIndices() {
verificationIndices.clear();
final random = Random();
final indices = <int>[];
while (indices.length < verificationWordCount) {
final i = random.nextInt(seedSplit.length);
if (!indices.contains(i)) {
indices.add(i);
}
}
verificationIndices.addAll(indices);
}
/// Generates the options for each index being verified.
@action
void generateOptions() {
currentOptions.clear();
final correctWord = currentCorrectWord;
final incorrectWords = seedSplit.where((word) => word != correctWord).toList();
incorrectWords.shuffle();
final options = [correctWord, ...incorrectWords.take(5)];
options.shuffle();
currentOptions.addAll(options);
}
bool isChosenWordCorrect(String chosenWord) {
if (chosenWord == currentCorrectWord) {
wrongEntries = 0;
if (currentStepIndex + 1 < verificationWordCount) {
currentStepIndex++;
generateOptions();
} else {
// All verification steps completed
isVerificationComplete = true;
}
return true;
} else {
wrongEntries++;
return false;
}
}
} }

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "شراء بطاقات مسبقة الدفع وبطاقات الهدايا في جميع أنحاء العالم", "cake_pay_subtitle": "شراء بطاقات مسبقة الدفع وبطاقات الهدايا في جميع أنحاء العالم",
"cake_pay_web_cards_subtitle": "اشتري بطاقات مدفوعة مسبقا وبطاقات هدايا في جميع أنحاء العالم", "cake_pay_web_cards_subtitle": "اشتري بطاقات مدفوعة مسبقا وبطاقات هدايا في جميع أنحاء العالم",
"cake_pay_web_cards_title": "بطاقات Cake Pay Web", "cake_pay_web_cards_title": "بطاقات Cake Pay Web",
"cake_seeds_save_disclaimer": "يرجى حفظ هذه الكلمات في مكان آمن! إذا فقدت الوصول إلى محفظتك ، فإن دعم محفظة الكيك لا يمكن أن يساعدك", "cake_seeds_save_disclaimer": "يرجى حفظ هذه الكلمات في مكان آمن! ستحتاج إلى هذه الكلمات لاستعادة محفظتك على جهاز جديد.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "أؤكد أنني لا أستخدم وكيلًا أو VPN",
"cakepay_confirm_purchase": "تأكيد الشراء",
"cakepay_confirm_terms_agreed": "أوافق على الشروط والأحكام المقدمة هنا:",
"cakepay_confirm_voided_refund": "أفهم أن محاولات الفداء من بلد محظور سوف تبطل أي استرداد",
"cakepay_ios_not_available": "آسف ، بطاقة الهدايا هذه غير متوفرة على iOS. يمكنك شرائه على Android أو من خلال موقعنا بدلاً من ذلك.", "cakepay_ios_not_available": "آسف ، بطاقة الهدايا هذه غير متوفرة على iOS. يمكنك شرائه على Android أو من خلال موقعنا بدلاً من ذلك.",
"cakepay_prepaid_card": "بطاقة ائتمان CakePay مسبقة الدفع", "cakepay_prepaid_card": "بطاقة ائتمان CakePay مسبقة الدفع",
"camera_consent": ".ﻞﻴﺻﺎﻔﺘﻟﺍ ﻰﻠﻋ ﻝﻮﺼﺤﻠﻟ ﻢﻬﺑ ﺔﺻﺎﺨﻟﺍ ﺔﻴﺻﻮﺼﺨﻟﺍ ﺔﺳﺎﻴﺳ ﻦﻣ ﻖﻘﺤﺘﻟﺍ ﻰﺟﺮﻳ .${provider} ﻝﻮﻠ", "camera_consent": ".ﻞﻴﺻﺎﻔﺘﻟﺍ ﻰﻠﻋ ﻝﻮﺼﺤﻠﻟ ﻢﻬﺑ ﺔﺻﺎﺨﻟﺍ ﺔﻴﺻﻮﺼﺨﻟﺍ ﺔﺳﺎﻴﺳ ﻦﻣ ﻖﻘﺤﺘﻟﺍ ﻰﺟﺮﻳ .${provider} ﻝﻮﻠ",
@ -355,12 +359,15 @@
"how_to_use": " ﻞﻤﻌﺘﺴﺗ ﻒﻴﻛ", "how_to_use": " ﻞﻤﻌﺘﺴﺗ ﻒﻴﻛ",
"how_to_use_card": "كيفية استخدام هذه البطاقة", "how_to_use_card": "كيفية استخدام هذه البطاقة",
"id": "رقم المعرف:", "id": "رقم المعرف:",
"if_you_dont_see_your_device": "إذا كنت لا ترى جهازك أعلاه ، فيرجى التأكد من أن دفتر الأستاذ الخاص بك مستيقظًا ومؤمنًا!",
"ignor": "تجاهل", "ignor": "تجاهل",
"import": "ﺩﺭﻮﺘﺴﻳ", "import": "ﺩﺭﻮﺘﺴﻳ",
"importNFTs": "NFTs ﺩﺍﺮﻴﺘﺳﺍ", "importNFTs": "NFTs ﺩﺍﺮﻴﺘﺳﺍ",
"in_store": "في المتجر", "in_store": "في المتجر",
"incoming": "الواردة", "incoming": "الواردة",
"incorrect_seed": "النص الذي تم إدخاله غير صالح.", "incorrect_seed": "النص الذي تم إدخاله غير صالح.",
"incorrect_seed_option": "غير صحيح. من فضلك حاول مرة أخرى",
"incorrect_seed_option_back": "غير صحيح. يرجى التأكد من حفظ البذور بشكل صحيح وحاول مرة أخرى.",
"inputs": "المدخلات", "inputs": "المدخلات",
"insufficient_funds_for_tx": "أموال غير كافية لتنفيذ المعاملة بنجاح.", "insufficient_funds_for_tx": "أموال غير كافية لتنفيذ المعاملة بنجاح.",
"insufficient_lamport_for_tx": "ليس لديك ما يكفي من SOL لتغطية المعاملة ورسوم المعاملات الخاصة بها. يرجى إضافة المزيد من SOL إلى محفظتك أو تقليل كمية SOL التي ترسلها.", "insufficient_lamport_for_tx": "ليس لديك ما يكفي من SOL لتغطية المعاملة ورسوم المعاملات الخاصة بها. يرجى إضافة المزيد من SOL إلى محفظتك أو تقليل كمية SOL التي ترسلها.",
@ -470,6 +477,7 @@
"online": "متصل", "online": "متصل",
"onramper_option_description": "شراء بسرعة التشفير مع العديد من طرق الدفع. متوفر في معظم البلدان. ينتشر وتختلف الرسوم.", "onramper_option_description": "شراء بسرعة التشفير مع العديد من طرق الدفع. متوفر في معظم البلدان. ينتشر وتختلف الرسوم.",
"open_gift_card": "افتح بطاقة الهدية", "open_gift_card": "افتح بطاقة الهدية",
"open_wallet": "فتح محفظة",
"optional_description": "وصف اختياري", "optional_description": "وصف اختياري",
"optional_email_hint": "البريد الإلكتروني إخطار المدفوع لأمره الاختياري", "optional_email_hint": "البريد الإلكتروني إخطار المدفوع لأمره الاختياري",
"optional_name": "اسم المستلم الاختياري", "optional_name": "اسم المستلم الاختياري",
@ -538,6 +546,7 @@
"recipient_address": "عنوان المستلم", "recipient_address": "عنوان المستلم",
"reconnect": "أعد الاتصال", "reconnect": "أعد الاتصال",
"reconnect_alert_text": "هل أنت متأكد من رغبتك في إعادة الاتصال؟", "reconnect_alert_text": "هل أنت متأكد من رغبتك في إعادة الاتصال؟",
"reconnect_your_hardware_wallet": "أعد توصيل محفظة الأجهزة الخاصة بك",
"reconnection": "إعادة الاتصال", "reconnection": "إعادة الاتصال",
"red_dark_theme": "موضوع الظلام الأحمر", "red_dark_theme": "موضوع الظلام الأحمر",
"red_light_theme": "موضوع الضوء الأحمر", "red_light_theme": "موضوع الضوء الأحمر",
@ -619,6 +628,7 @@
"seed_alert_title": "انتباه", "seed_alert_title": "انتباه",
"seed_alert_yes": "نعم، فعلت ذلك", "seed_alert_yes": "نعم، فعلت ذلك",
"seed_choose": "اختر لغة السييد", "seed_choose": "اختر لغة السييد",
"seed_display_path": "القائمة -> الأمان والنسخ الاحتياطي -> إظهار المفتاح/البذور",
"seed_hex_form": "بذور المحفظة (شكل عرافة)", "seed_hex_form": "بذور المحفظة (شكل عرافة)",
"seed_key": "مفتاح البذور", "seed_key": "مفتاح البذور",
"seed_language": "لغة البذور", "seed_language": "لغة البذور",
@ -637,9 +647,13 @@
"seed_language_russian": "الروسية", "seed_language_russian": "الروسية",
"seed_language_spanish": "الأسبانية", "seed_language_spanish": "الأسبانية",
"seed_phrase_length": "ﺭﻭﺬﺒﻟﺍ ﺓﺭﺎﺒﻌﻟﺍ ﻝﻮﻃ", "seed_phrase_length": "ﺭﻭﺬﺒﻟﺍ ﺓﺭﺎﺒﻌﻟﺍ ﻝﻮﻃ",
"seed_position_question_one": "ما هو",
"seed_position_question_two": "كلمة عبارة البذور؟",
"seed_reminder": "يرجى تدوينها في حالة فقد هاتفك أو مسحه", "seed_reminder": "يرجى تدوينها في حالة فقد هاتفك أو مسحه",
"seed_share": "شارك السييد", "seed_share": "شارك السييد",
"seed_title": "سييد", "seed_title": "سييد",
"seed_verified": "تم التحقق من البذور",
"seed_verified_subtext": "يمكنك استخدام البذور المحفوظة لاحقًا لاستعادة هذه المحفظة في حالة الفساد أو فقدان جهازك. \n\n يمكنك عرض هذه البذرة مرة أخرى من",
"seedtype": "البذور", "seedtype": "البذور",
"seedtype_alert_content": "مشاركة البذور مع محافظ أخرى ممكن فقط مع BIP39 Seedtype.", "seedtype_alert_content": "مشاركة البذور مع محافظ أخرى ممكن فقط مع BIP39 Seedtype.",
"seedtype_alert_title": "تنبيه البذور", "seedtype_alert_title": "تنبيه البذور",
@ -741,6 +755,10 @@
"silent_payments_settings": "إعدادات المدفوعات الصامتة", "silent_payments_settings": "إعدادات المدفوعات الصامتة",
"single_seed_wallets_group": "محافظ بذرة واحدة", "single_seed_wallets_group": "محافظ بذرة واحدة",
"slidable": "قابل للانزلاق", "slidable": "قابل للانزلاق",
"solana_create_associated_token_account_exception": "خطأ في إنشاء حساب رمز المرتبط بعنوان المستلم.",
"solana_no_associated_token_account_exception": "لا يوجد حساب مميز مرتبط بهذا العنوان.",
"solana_sign_native_transaction_rent_exception": "لا يمكن إكمال المعاملة. غادر SOL غير كاف للإيجار بعد المعاملة. يرجى أن تصل إلى رصيد SOL أو تقليل كمية SOL التي ترسلها.",
"solana_sign_spl_token_transaction_rent_exception": "لا يمكن إكمال المعاملة. غادر SOL غير كاف للإيجار بعد المعاملة. يرجى أن تصل إلى توازن سولك.",
"sort_by": "ترتيب حسب", "sort_by": "ترتيب حسب",
"spend_key_private": "مفتاح الإنفاق (خاص)", "spend_key_private": "مفتاح الإنفاق (خاص)",
"spend_key_public": "مفتاح الإنفاق (عام)", "spend_key_public": "مفتاح الإنفاق (عام)",
@ -753,7 +771,7 @@
"support_description_guides": "توثيق ودعم القضايا المشتركة", "support_description_guides": "توثيق ودعم القضايا المشتركة",
"support_description_live_chat": "حرة وسريعة! ممثلو الدعم المدربين متاحون للمساعدة", "support_description_live_chat": "حرة وسريعة! ممثلو الدعم المدربين متاحون للمساعدة",
"support_description_other_links": "انضم إلى مجتمعاتنا أو تصل إلينا شركائنا من خلال أساليب أخرى", "support_description_other_links": "انضم إلى مجتمعاتنا أو تصل إلينا شركائنا من خلال أساليب أخرى",
"support_title_guides": "أدلة محفظة كعكة", "support_title_guides": "مستندات محفظة كعكة",
"support_title_live_chat": "الدعم المباشر", "support_title_live_chat": "الدعم المباشر",
"support_title_other_links": "روابط دعم أخرى", "support_title_other_links": "روابط دعم أخرى",
"sweeping_wallet": "كنس المحفظة", "sweeping_wallet": "كنس المحفظة",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "هذا الزوج المتغير غير مدعوم في التبادلات المحددة", "variable_pair_not_supported": "هذا الزوج المتغير غير مدعوم في التبادلات المحددة",
"verification": "تَحَقّق", "verification": "تَحَقّق",
"verify_message": "تحقق من الرسالة", "verify_message": "تحقق من الرسالة",
"verify_seed": "تحقق من البذور",
"verify_with_2fa": "تحقق مع Cake 2FA", "verify_with_2fa": "تحقق مع Cake 2FA",
"version": "الإصدار ${currentVersion}", "version": "الإصدار ${currentVersion}",
"view_all": "مشاهدة الكل", "view_all": "مشاهدة الكل",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Купете предплатени карти и карти за подаръци в световен мащаб", "cake_pay_subtitle": "Купете предплатени карти и карти за подаръци в световен мащаб",
"cake_pay_web_cards_subtitle": "Купете световно признати предплатени и гифт карти", "cake_pay_web_cards_subtitle": "Купете световно признати предплатени и гифт карти",
"cake_pay_web_cards_title": "Cake Pay Онлайн Карти", "cake_pay_web_cards_title": "Cake Pay Онлайн Карти",
"cake_seeds_save_disclaimer": "Моля, запазете тези думи на сигурно място! Ако загубите достъп до портфейла си, поддръжката на портфейла за торти не може да ви помогне", "cake_seeds_save_disclaimer": "Моля, запазете тези думи на сигурно място! Ще ви трябват тези думи, за да възстановите портфейла си на ново устройство.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Потвърждавам, че не използвам прокси или VPN",
"cakepay_confirm_purchase": "Потвърдете покупката",
"cakepay_confirm_terms_agreed": "Съгласен съм с условията, представени тук:",
"cakepay_confirm_voided_refund": "Разбирам, че опитите за обратно изкупуване от ограничена държава ще анулират всяко възстановяване",
"cakepay_ios_not_available": "За съжаление тази карта за подарък не се предлага в iOS. Можете да го закупите на Android или чрез нашия уебсайт вместо това.", "cakepay_ios_not_available": "За съжаление тази карта за подарък не се предлага в iOS. Можете да го закупите на Android или чрез нашия уебсайт вместо това.",
"cakepay_prepaid_card": "CakePay предплатена дебитна карта", "cakepay_prepaid_card": "CakePay предплатена дебитна карта",
"camera_consent": "Вашият фотоапарат ще бъде използван за заснемане на изображение с цел идентификация от ${provider}. Моля, проверете тяхната политика за поверителност за подробности.", "camera_consent": "Вашият фотоапарат ще бъде използван за заснемане на изображение с цел идентификация от ${provider}. Моля, проверете тяхната политика за поверителност за подробности.",
@ -355,12 +359,15 @@
"how_to_use": "Как да използвам", "how_to_use": "Как да използвам",
"how_to_use_card": "Как се ползва тази карта", "how_to_use_card": "Как се ползва тази карта",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Ако не виждате устройството си по -горе, моля, уверете се, че вашата книга е будна и отключена!",
"ignor": "Игнориране", "ignor": "Игнориране",
"import": "Импортиране", "import": "Импортиране",
"importNFTs": "Импортирайте NFT", "importNFTs": "Импортирайте NFT",
"in_store": "In Store", "in_store": "In Store",
"incoming": "Входящи", "incoming": "Входящи",
"incorrect_seed": "Въведеният текст е невалиден.", "incorrect_seed": "Въведеният текст е невалиден.",
"incorrect_seed_option": "Неправилно. Моля, опитайте отново",
"incorrect_seed_option_back": "Неправилно. Моля, уверете се, че семето ви е запазено правилно и опитайте отново.",
"inputs": "Входове", "inputs": "Входове",
"insufficient_funds_for_tx": "Недостатъчни средства за успешно извършване на транзакция.", "insufficient_funds_for_tx": "Недостатъчни средства за успешно извършване на транзакция.",
"insufficient_lamport_for_tx": "Нямате достатъчно SOL, за да покриете транзакцията и таксата му за транзакция. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате.", "insufficient_lamport_for_tx": "Нямате достатъчно SOL, за да покриете транзакцията и таксата му за транзакция. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате.",
@ -470,6 +477,7 @@
"online": "Онлайн", "online": "Онлайн",
"onramper_option_description": "Бързо купувайте криптовалута с много методи за плащане. Предлага се в повечето страни. Разпространенията и таксите варират.", "onramper_option_description": "Бързо купувайте криптовалута с много методи за плащане. Предлага се в повечето страни. Разпространенията и таксите варират.",
"open_gift_card": "Отвори Gift Card", "open_gift_card": "Отвори Gift Card",
"open_wallet": "Отворен портфейл",
"optional_description": "Описание по избор", "optional_description": "Описание по избор",
"optional_email_hint": "Незадължителен имейл за уведомяване на получателя", "optional_email_hint": "Незадължителен имейл за уведомяване на получателя",
"optional_name": "Незадължително име на получател", "optional_name": "Незадължително име на получател",
@ -538,6 +546,7 @@
"recipient_address": "Адрес на получател", "recipient_address": "Адрес на получател",
"reconnect": "Reconnect", "reconnect": "Reconnect",
"reconnect_alert_text": "Сигурни ли сте, че искате да се свържете отново?", "reconnect_alert_text": "Сигурни ли сте, че искате да се свържете отново?",
"reconnect_your_hardware_wallet": "Свържете отново хардуерния си портфейл",
"reconnection": "Свързване отново", "reconnection": "Свързване отново",
"red_dark_theme": "Червена тъмна тема", "red_dark_theme": "Червена тъмна тема",
"red_light_theme": "Тема на червената светлина", "red_light_theme": "Тема на червената светлина",
@ -619,6 +628,7 @@
"seed_alert_title": "Внимание", "seed_alert_title": "Внимание",
"seed_alert_yes": "Да", "seed_alert_yes": "Да",
"seed_choose": "Изберете език на seed-а", "seed_choose": "Изберете език на seed-а",
"seed_display_path": "Меню -> Сигурност и архивиране -> Показване на ключ/семена",
"seed_hex_form": "Семена от портфейл (шестнадесетична форма)", "seed_hex_form": "Семена от портфейл (шестнадесетична форма)",
"seed_key": "Ключ за семена", "seed_key": "Ключ за семена",
"seed_language": "Език на семената", "seed_language": "Език на семената",
@ -637,9 +647,13 @@
"seed_language_russian": "Руски", "seed_language_russian": "Руски",
"seed_language_spanish": "Испански", "seed_language_spanish": "Испански",
"seed_phrase_length": "Дължина на началната фраза", "seed_phrase_length": "Дължина на началната фраза",
"seed_position_question_one": "Какво е",
"seed_position_question_two": "Дума на вашата фраза за семена?",
"seed_reminder": "Моля, запишете го в случай на загуба на устройството.", "seed_reminder": "Моля, запишете го в случай на загуба на устройството.",
"seed_share": "Споделяне на seed", "seed_share": "Споделяне на seed",
"seed_title": "Seed", "seed_title": "Seed",
"seed_verified": "Семена проверено",
"seed_verified_subtext": "Можете да използвате запазените си семена по -късно, за да възстановите този портфейл в случай на корупция или загуба на устройството си. \n\n Можете да видите това семе отново от",
"seedtype": "Семенна тип", "seedtype": "Семенна тип",
"seedtype_alert_content": "Споделянето на семена с други портфейли е възможно само с BIP39 Seedtype.", "seedtype_alert_content": "Споделянето на семена с други портфейли е възможно само с BIP39 Seedtype.",
"seedtype_alert_title": "Сигнал за семена", "seedtype_alert_title": "Сигнал за семена",
@ -741,6 +755,10 @@
"silent_payments_settings": "Настройки за безшумни плащания", "silent_payments_settings": "Настройки за безшумни плащания",
"single_seed_wallets_group": "Портфейли с единични семена", "single_seed_wallets_group": "Портфейли с единични семена",
"slidable": "Плъзгащ се", "slidable": "Плъзгащ се",
"solana_create_associated_token_account_exception": "Грешка Създаване на свързана сметка за жетони за адреса на получател.",
"solana_no_associated_token_account_exception": "Няма свързана сметка за този адрес.",
"solana_sign_native_transaction_rent_exception": "Транзакцията не може да бъде завършена. Недостатъчен сол оставен под наем след транзакция. Любезно допълнете баланса си на SOL или намалете количеството SOL, което изпращате.",
"solana_sign_spl_token_transaction_rent_exception": "Транзакцията не може да бъде завършена. Недостатъчен сол оставен под наем след транзакция. Любезно допълнете баланса си на SOL.",
"sort_by": "Сортирай по", "sort_by": "Сортирай по",
"spend_key_private": "Spend key (таен)", "spend_key_private": "Spend key (таен)",
"spend_key_public": "Spend key (публичен)", "spend_key_public": "Spend key (публичен)",
@ -753,7 +771,7 @@
"support_description_guides": "Документация и подкрепа за общи проблеми", "support_description_guides": "Документация и подкрепа за общи проблеми",
"support_description_live_chat": "Безплатно и бързо! Обучени представители на подкрепата са на разположение за подпомагане", "support_description_live_chat": "Безплатно и бързо! Обучени представители на подкрепата са на разположение за подпомагане",
"support_description_other_links": "Присъединете се към нашите общности или се свържете с нас нашите партньори чрез други методи", "support_description_other_links": "Присъединете се към нашите общности или се свържете с нас нашите партньори чрез други методи",
"support_title_guides": "Ръководства за портфейл за торта", "support_title_guides": "Документи за портфейл за торта",
"support_title_live_chat": "Подкрепа на живо", "support_title_live_chat": "Подкрепа на живо",
"support_title_other_links": "Други връзки за поддръжка", "support_title_other_links": "Други връзки за поддръжка",
"sweeping_wallet": "Метещ портфейл", "sweeping_wallet": "Метещ портфейл",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "Този variable pair не се поддържа от избраната борса", "variable_pair_not_supported": "Този variable pair не се поддържа от избраната борса",
"verification": "Потвърждаване", "verification": "Потвърждаване",
"verify_message": "Проверете съобщението", "verify_message": "Проверете съобщението",
"verify_seed": "Проверете семената",
"verify_with_2fa": "Проверете с Cake 2FA", "verify_with_2fa": "Проверете с Cake 2FA",
"version": "Версия ${currentVersion}", "version": "Версия ${currentVersion}",
"view_all": "Виж всички", "view_all": "Виж всички",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Kupte si celosvětové předplacené karty a dárkové karty", "cake_pay_subtitle": "Kupte si celosvětové předplacené karty a dárkové karty",
"cake_pay_web_cards_subtitle": "Kupte si celosvětové předplacené a dárkové karty", "cake_pay_web_cards_subtitle": "Kupte si celosvětové předplacené a dárkové karty",
"cake_pay_web_cards_title": "Cake Pay webové karty", "cake_pay_web_cards_title": "Cake Pay webové karty",
"cake_seeds_save_disclaimer": "Uložte tato slova na bezpečném místě! Pokud ztratíte přístup k vaší peněžence, podpora peněženky dortu vám nemůže pomoci", "cake_seeds_save_disclaimer": "Uložte tato slova na bezpečném místě! Tato slova budete potřebovat k obnovení peněženky na novém zařízení.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Potvrzuji, že nepoužívám proxy nebo VPN",
"cakepay_confirm_purchase": "Potvrďte nákup",
"cakepay_confirm_terms_agreed": "Souhlasím s zde uvedenými podmínkami:",
"cakepay_confirm_voided_refund": "Chápu, že pokusy o vykoupení z omezené země zruší jakékoli vrácení peněz",
"cakepay_ios_not_available": "Je nám líto, tato dárková karta není k dispozici na iOS. Místo toho si jej můžete zakoupit na Androidu nebo prostřednictvím našeho webu.", "cakepay_ios_not_available": "Je nám líto, tato dárková karta není k dispozici na iOS. Místo toho si jej můžete zakoupit na Androidu nebo prostřednictvím našeho webu.",
"cakepay_prepaid_card": "CakePay předplacená debetní karta", "cakepay_prepaid_card": "CakePay předplacená debetní karta",
"camera_consent": "Váš fotoaparát použije k pořízení snímku pro účely identifikace ${provider}. Podrobnosti najdete v jejich Zásadách ochrany osobních údajů.", "camera_consent": "Váš fotoaparát použije k pořízení snímku pro účely identifikace ${provider}. Podrobnosti najdete v jejich Zásadách ochrany osobních údajů.",
@ -355,12 +359,15 @@
"how_to_use": "Jak používat", "how_to_use": "Jak používat",
"how_to_use_card": "Jak použít tuto kartu", "how_to_use_card": "Jak použít tuto kartu",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Pokud vaše zařízení nevidíte výše, ujistěte se, že vaše kniha je vzhůru a odemknutá!",
"ignor": "Ignorovat", "ignor": "Ignorovat",
"import": "Import", "import": "Import",
"importNFTs": "Importujte NFT", "importNFTs": "Importujte NFT",
"in_store": "V obchodě", "in_store": "V obchodě",
"incoming": "Příchozí", "incoming": "Příchozí",
"incorrect_seed": "Zadaný text není správný.", "incorrect_seed": "Zadaný text není správný.",
"incorrect_seed_option": "Nesprávný. Zkuste to prosím znovu",
"incorrect_seed_option_back": "Nesprávný. Ujistěte se, že vaše semeno je správně uloženo a zkuste to znovu.",
"inputs": "Vstupy", "inputs": "Vstupy",
"insufficient_funds_for_tx": "Nedostatečné prostředky na úspěšné provedení transakce.", "insufficient_funds_for_tx": "Nedostatečné prostředky na úspěšné provedení transakce.",
"insufficient_lamport_for_tx": "Nemáte dostatek SOL na pokrytí transakce a jejího transakčního poplatku. Laskavě přidejte do své peněženky více solu nebo snižte množství Sol, kterou odesíláte.", "insufficient_lamport_for_tx": "Nemáte dostatek SOL na pokrytí transakce a jejího transakčního poplatku. Laskavě přidejte do své peněženky více solu nebo snižte množství Sol, kterou odesíláte.",
@ -470,6 +477,7 @@
"online": "Online", "online": "Online",
"onramper_option_description": "Rychle si koupte krypto s mnoha metodami plateb. K dispozici ve většině zemí. Rozpětí a poplatky se liší.", "onramper_option_description": "Rychle si koupte krypto s mnoha metodami plateb. K dispozici ve většině zemí. Rozpětí a poplatky se liší.",
"open_gift_card": "Otevřít dárkovou kartu", "open_gift_card": "Otevřít dárkovou kartu",
"open_wallet": "Otevřená peněženka",
"optional_description": "Volitelný popis", "optional_description": "Volitelný popis",
"optional_email_hint": "Volitelný e-mail s upozorněním na příjemce platby", "optional_email_hint": "Volitelný e-mail s upozorněním na příjemce platby",
"optional_name": "Volitelné jméno příjemce", "optional_name": "Volitelné jméno příjemce",
@ -538,6 +546,7 @@
"recipient_address": "Adresa příjemce", "recipient_address": "Adresa příjemce",
"reconnect": "Znovu připojit", "reconnect": "Znovu připojit",
"reconnect_alert_text": "Opravdu se chcete znovu připojit?", "reconnect_alert_text": "Opravdu se chcete znovu připojit?",
"reconnect_your_hardware_wallet": "Znovu připojte svou hardwarovou peněženku",
"reconnection": "Znovu připojit", "reconnection": "Znovu připojit",
"red_dark_theme": "Červené temné téma", "red_dark_theme": "Červené temné téma",
"red_light_theme": "Téma červeného světla", "red_light_theme": "Téma červeného světla",
@ -619,6 +628,7 @@
"seed_alert_title": "Pozor", "seed_alert_title": "Pozor",
"seed_alert_yes": "Ano", "seed_alert_yes": "Ano",
"seed_choose": "Zvolte si jazyk seedu", "seed_choose": "Zvolte si jazyk seedu",
"seed_display_path": "Nabídka -> Zabezpečení a zálohování -> Zobrazit klíč/semena",
"seed_hex_form": "Semeno peněženky (hex formulář)", "seed_hex_form": "Semeno peněženky (hex formulář)",
"seed_key": "Klíč semen", "seed_key": "Klíč semen",
"seed_language": "Jazyk semen", "seed_language": "Jazyk semen",
@ -637,9 +647,13 @@
"seed_language_russian": "Ruština", "seed_language_russian": "Ruština",
"seed_language_spanish": "Španělština", "seed_language_spanish": "Španělština",
"seed_phrase_length": "Délka fráze semene", "seed_phrase_length": "Délka fráze semene",
"seed_position_question_one": "Co je",
"seed_position_question_two": "Slovo vaší fráze semen?",
"seed_reminder": "Prosím zapište si toto pro případ ztráty, nebo poškození telefonu", "seed_reminder": "Prosím zapište si toto pro případ ztráty, nebo poškození telefonu",
"seed_share": "Sdílet seed", "seed_share": "Sdílet seed",
"seed_title": "Seed", "seed_title": "Seed",
"seed_verified": "Ověřeno semeno",
"seed_verified_subtext": "V případě korupce nebo ztráty zařízení můžete později použít své uložené semeno později k obnovení této peněženky.",
"seedtype": "SeedType", "seedtype": "SeedType",
"seedtype_alert_content": "Sdílení semen s jinými peněženkami je možné pouze u BIP39 SeedType.", "seedtype_alert_content": "Sdílení semen s jinými peněženkami je možné pouze u BIP39 SeedType.",
"seedtype_alert_title": "Upozornění seedtype", "seedtype_alert_title": "Upozornění seedtype",
@ -741,6 +755,10 @@
"silent_payments_settings": "Nastavení tichých plateb", "silent_payments_settings": "Nastavení tichých plateb",
"single_seed_wallets_group": "Jednorázové peněženky", "single_seed_wallets_group": "Jednorázové peněženky",
"slidable": "Posuvné", "slidable": "Posuvné",
"solana_create_associated_token_account_exception": "Vytvoření chyby přidruženého účtu tokenů pro adresu příjmu.",
"solana_no_associated_token_account_exception": "Pro tuto adresu není přidružen žádný přidružený token.",
"solana_sign_native_transaction_rent_exception": "Transakce nelze dokončit. Po transakci nedostatek Sol odešel k pronájmu. Laskavě doplňte rovnováhu SOL nebo snižte množství SOL, které odesíláte.",
"solana_sign_spl_token_transaction_rent_exception": "Transakce nelze dokončit. Po transakci nedostatek Sol odešel k pronájmu. Laskavě doplňte rovnováhu SOL.",
"sort_by": "Seřazeno podle", "sort_by": "Seřazeno podle",
"spend_key_private": "Klíč pro platby (soukromý)", "spend_key_private": "Klíč pro platby (soukromý)",
"spend_key_public": "Klíč pro platby (veřejný)", "spend_key_public": "Klíč pro platby (veřejný)",
@ -753,7 +771,7 @@
"support_description_guides": "Dokumentace a podpora běžných otázek", "support_description_guides": "Dokumentace a podpora běžných otázek",
"support_description_live_chat": "Zdarma a rychle! K dispozici jsou zástupci vyškolených podpůrných podpory", "support_description_live_chat": "Zdarma a rychle! K dispozici jsou zástupci vyškolených podpůrných podpory",
"support_description_other_links": "Připojte se k našim komunitám nebo se k nám oslovte další metody", "support_description_other_links": "Připojte se k našim komunitám nebo se k nám oslovte další metody",
"support_title_guides": "Průvodce peněženkami dortu", "support_title_guides": "Dokumenty peněženky dortu",
"support_title_live_chat": "Živá podpora", "support_title_live_chat": "Živá podpora",
"support_title_other_links": "Další odkazy na podporu", "support_title_other_links": "Další odkazy na podporu",
"sweeping_wallet": "Zametací peněženka", "sweeping_wallet": "Zametací peněženka",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "Tento pár s tržním kurzem není ve zvolené směnárně podporován", "variable_pair_not_supported": "Tento pár s tržním kurzem není ve zvolené směnárně podporován",
"verification": "Ověření", "verification": "Ověření",
"verify_message": "Ověřit zprávu", "verify_message": "Ověřit zprávu",
"verify_seed": "Ověřte osivo",
"verify_with_2fa": "Ověřte pomocí Cake 2FA", "verify_with_2fa": "Ověřte pomocí Cake 2FA",
"version": "Verze ${currentVersion}", "version": "Verze ${currentVersion}",
"view_all": "Zobrazit vše", "view_all": "Zobrazit vše",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Kaufen Sie weltweite Prepaid-Karten und Geschenkkarten", "cake_pay_subtitle": "Kaufen Sie weltweite Prepaid-Karten und Geschenkkarten",
"cake_pay_web_cards_subtitle": "Kaufen Sie weltweit Prepaid-Karten und Geschenkkarten", "cake_pay_web_cards_subtitle": "Kaufen Sie weltweit Prepaid-Karten und Geschenkkarten",
"cake_pay_web_cards_title": "Cake Pay-Webkarten", "cake_pay_web_cards_title": "Cake Pay-Webkarten",
"cake_seeds_save_disclaimer": "Bitte speichern Sie diese Wörter an einem sicheren Ort! Wenn Sie den Zugang zu Ihrer Brieftasche verlieren, kann Ihnen die Stütze der Kuchenbrieftasche nicht helfen", "cake_seeds_save_disclaimer": "Bitte speichern Sie diese Wörter an einem sicheren Ort! Sie benötigen diese Wörter, um Ihre Brieftasche auf einem neuen Gerät wiederherzustellen.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Ich bestätige, dass ich keinen Proxy oder VPN benutze",
"cakepay_confirm_purchase": "Kauf bestätigen",
"cakepay_confirm_terms_agreed": "Ich stimme den hier vorgestellten Bedingungen zu:",
"cakepay_confirm_voided_refund": "Ich verstehe",
"cakepay_ios_not_available": "Entschuldigung, diese Geschenkkarte ist auf iOS nicht erhältlich. Sie können es stattdessen auf Android oder über unsere Website kaufen.", "cakepay_ios_not_available": "Entschuldigung, diese Geschenkkarte ist auf iOS nicht erhältlich. Sie können es stattdessen auf Android oder über unsere Website kaufen.",
"cakepay_prepaid_card": "CakePay-Prepaid-Debitkarte", "cakepay_prepaid_card": "CakePay-Prepaid-Debitkarte",
"camera_consent": "Mit Ihrer Kamera wird bis zum ${provider} ein Bild zur Identifizierung aufgenommen. Weitere Informationen finden Sie in deren Datenschutzbestimmungen.", "camera_consent": "Mit Ihrer Kamera wird bis zum ${provider} ein Bild zur Identifizierung aufgenommen. Weitere Informationen finden Sie in deren Datenschutzbestimmungen.",
@ -355,12 +359,15 @@
"how_to_use": "Wie benutzt man", "how_to_use": "Wie benutzt man",
"how_to_use_card": "Wie man diese Karte benutzt", "how_to_use_card": "Wie man diese Karte benutzt",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Wenn Sie Ihr Gerät nicht sehen, stellen Sie bitte sicher, dass Ihr Ledger an und entsperrt ist!",
"ignor": "Ignorieren", "ignor": "Ignorieren",
"import": "Importieren", "import": "Importieren",
"importNFTs": "NFTs importieren", "importNFTs": "NFTs importieren",
"in_store": "Im Geschäft", "in_store": "Im Geschäft",
"incoming": "Eingehend", "incoming": "Eingehend",
"incorrect_seed": "Der eingegebene Text ist ungültig.", "incorrect_seed": "Der eingegebene Text ist ungültig.",
"incorrect_seed_option": "Falsch. Bitte versuchen Sie es erneut",
"incorrect_seed_option_back": "Falsch. Bitte stellen Sie sicher, dass Ihr Samen korrekt gespeichert wird, und versuchen Sie es erneut.",
"inputs": "Eingänge", "inputs": "Eingänge",
"insufficient_funds_for_tx": "Unzureichende Mittel zur erfolgreichen Ausführung der Transaktion.", "insufficient_funds_for_tx": "Unzureichende Mittel zur erfolgreichen Ausführung der Transaktion.",
"insufficient_lamport_for_tx": "Sie haben nicht genug SOL, um die Transaktion und ihre Transaktionsgebühr abzudecken. Bitte fügen Sie Ihrer Wallet mehr Sol hinzu oder reduzieren Sie die SOL-Menge, die Sie senden.", "insufficient_lamport_for_tx": "Sie haben nicht genug SOL, um die Transaktion und ihre Transaktionsgebühr abzudecken. Bitte fügen Sie Ihrer Wallet mehr Sol hinzu oder reduzieren Sie die SOL-Menge, die Sie senden.",
@ -470,6 +477,7 @@
"online": "online", "online": "online",
"onramper_option_description": "Kaufen Sie schnell Krypto mit vielen Zahlungsmethoden. In den meisten Ländern erhältlich. Spreads und Gebühren variieren.", "onramper_option_description": "Kaufen Sie schnell Krypto mit vielen Zahlungsmethoden. In den meisten Ländern erhältlich. Spreads und Gebühren variieren.",
"open_gift_card": "Geschenkkarte öffnen", "open_gift_card": "Geschenkkarte öffnen",
"open_wallet": "Offener Brieftasche",
"optional_description": "Optionale Beschreibung", "optional_description": "Optionale Beschreibung",
"optional_email_hint": "Optionale Benachrichtigungs-E-Mail für den Zahlungsempfänger", "optional_email_hint": "Optionale Benachrichtigungs-E-Mail für den Zahlungsempfänger",
"optional_name": "Optionaler Empfängername", "optional_name": "Optionaler Empfängername",
@ -502,8 +510,8 @@
"placeholder_transactions": "Ihre Transaktionen werden hier angezeigt", "placeholder_transactions": "Ihre Transaktionen werden hier angezeigt",
"please_fill_totp": "Bitte geben Sie den 8-stelligen Code ein, der auf Ihrem anderen Gerät vorhanden ist", "please_fill_totp": "Bitte geben Sie den 8-stelligen Code ein, der auf Ihrem anderen Gerät vorhanden ist",
"please_make_selection": "Bitte treffen Sie unten eine Auswahl zum Erstellen oder Wiederherstellen Ihrer Wallet.", "please_make_selection": "Bitte treffen Sie unten eine Auswahl zum Erstellen oder Wiederherstellen Ihrer Wallet.",
"Please_reference_document": "Weitere Informationen finden Sie in den Dokumenten unten.",
"please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.", "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.",
"Please_reference_document": "Weitere Informationen finden Sie in den Dokumenten unten.",
"please_select": "Bitte auswählen:", "please_select": "Bitte auswählen:",
"please_select_backup_file": "Bitte wählen Sie die Sicherungsdatei und geben Sie das Sicherungskennwort ein.", "please_select_backup_file": "Bitte wählen Sie die Sicherungsdatei und geben Sie das Sicherungskennwort ein.",
"please_try_to_connect_to_another_node": "Bitte versuchen Sie, sich mit einem anderen Knoten zu verbinden", "please_try_to_connect_to_another_node": "Bitte versuchen Sie, sich mit einem anderen Knoten zu verbinden",
@ -539,6 +547,7 @@
"recipient_address": "Empfängeradresse", "recipient_address": "Empfängeradresse",
"reconnect": "Erneut verbinden", "reconnect": "Erneut verbinden",
"reconnect_alert_text": "Sind Sie sicher, dass Sie sich neu verbinden möchten?", "reconnect_alert_text": "Sind Sie sicher, dass Sie sich neu verbinden möchten?",
"reconnect_your_hardware_wallet": "Hardware-Wallet neu verbinden",
"reconnection": "Neu verbinden", "reconnection": "Neu verbinden",
"red_dark_theme": "Red Dark Thema", "red_dark_theme": "Red Dark Thema",
"red_light_theme": "Red Light Thema", "red_light_theme": "Red Light Thema",
@ -620,6 +629,7 @@
"seed_alert_title": "Achtung", "seed_alert_title": "Achtung",
"seed_alert_yes": "Ja, habe ich", "seed_alert_yes": "Ja, habe ich",
"seed_choose": "Seed-Sprache auswählen", "seed_choose": "Seed-Sprache auswählen",
"seed_display_path": "Menü -> Sicherheit und Sicherung -> Schlüssel/Samen anzeigen",
"seed_hex_form": "Seed (Hexformat)", "seed_hex_form": "Seed (Hexformat)",
"seed_key": "Seed-Schlüssel", "seed_key": "Seed-Schlüssel",
"seed_language": "Seed-Sprache", "seed_language": "Seed-Sprache",
@ -638,9 +648,13 @@
"seed_language_russian": "Russisch", "seed_language_russian": "Russisch",
"seed_language_spanish": "Spanisch", "seed_language_spanish": "Spanisch",
"seed_phrase_length": "Länge der Seed-Phrase", "seed_phrase_length": "Länge der Seed-Phrase",
"seed_position_question_one": "Was ist das",
"seed_position_question_two": "Wort Ihrer Samenphrase?",
"seed_reminder": "Bitte notieren Sie diese für den Fall, dass Sie Ihr Telefon verlieren oder es kaputtgeht", "seed_reminder": "Bitte notieren Sie diese für den Fall, dass Sie Ihr Telefon verlieren oder es kaputtgeht",
"seed_share": "Seed teilen", "seed_share": "Seed teilen",
"seed_title": "Seed", "seed_title": "Seed",
"seed_verified": "Samen verifiziert",
"seed_verified_subtext": "Sie können Ihren gespeicherten Saat",
"seedtype": "Seedtyp", "seedtype": "Seedtyp",
"seedtype_alert_content": "Das Teilen von Seeds mit anderen Wallet ist nur mit bip39 Seedype möglich.", "seedtype_alert_content": "Das Teilen von Seeds mit anderen Wallet ist nur mit bip39 Seedype möglich.",
"seedtype_alert_title": "Seedype-Alarm", "seedtype_alert_title": "Seedype-Alarm",
@ -742,6 +756,10 @@
"silent_payments_settings": "Einstellungen für stille Zahlungen", "silent_payments_settings": "Einstellungen für stille Zahlungen",
"single_seed_wallets_group": "Einzelne Wallets", "single_seed_wallets_group": "Einzelne Wallets",
"slidable": "Verschiebbar", "slidable": "Verschiebbar",
"solana_create_associated_token_account_exception": "Fehler beim Erstellen des zugehörigen Token -Kontos für die Empfängeradresse.",
"solana_no_associated_token_account_exception": "Für diese Adresse ist kein Token -Konto zugeordnet.",
"solana_sign_native_transaction_rent_exception": "Transaktion kann nicht abgeschlossen werden. Unzureichende Sol ließen nach der Transaktion zur Miete gelassen. Bitte geben Sie Ihre SOL -Balance auf oder reduzieren Sie die Menge an SOL, die Sie senden.",
"solana_sign_spl_token_transaction_rent_exception": "Transaktion kann nicht abgeschlossen werden. Unzureichende Sol ließen nach der Transaktion zur Miete gelassen. Bitte geben Sie Ihre SOL -Balance auf.",
"sort_by": "Sortiere nach", "sort_by": "Sortiere nach",
"spend_key_private": "Spend Key (geheim)", "spend_key_private": "Spend Key (geheim)",
"spend_key_public": "Spend Key (öffentlich)", "spend_key_public": "Spend Key (öffentlich)",
@ -754,7 +772,7 @@
"support_description_guides": "Dokumentation und Hilfe für bekannte Probleme", "support_description_guides": "Dokumentation und Hilfe für bekannte Probleme",
"support_description_live_chat": "Kostenlos und schnell! Ausgebildete Mitarbeiter stehen zur Unterstützung bereit, um zu helfen", "support_description_live_chat": "Kostenlos und schnell! Ausgebildete Mitarbeiter stehen zur Unterstützung bereit, um zu helfen",
"support_description_other_links": "Treten Sie unseren Communities bei oder erreichen Sie uns oder unsere Partner über andere Methoden", "support_description_other_links": "Treten Sie unseren Communities bei oder erreichen Sie uns oder unsere Partner über andere Methoden",
"support_title_guides": "Cake Wallet Guides", "support_title_guides": "Kuchenbrieftasche Docs",
"support_title_live_chat": "Live Support", "support_title_live_chat": "Live Support",
"support_title_other_links": "Andere Support-Links", "support_title_other_links": "Andere Support-Links",
"sweeping_wallet": "Wallet leeren", "sweeping_wallet": "Wallet leeren",
@ -894,6 +912,7 @@
"variable_pair_not_supported": "Dieses Variablenpaar wird von den ausgewählten Börsen nicht unterstützt", "variable_pair_not_supported": "Dieses Variablenpaar wird von den ausgewählten Börsen nicht unterstützt",
"verification": "Verifizierung", "verification": "Verifizierung",
"verify_message": "Nachricht überprüfen", "verify_message": "Nachricht überprüfen",
"verify_seed": "Saatgut überprüfen",
"verify_with_2fa": "Verifizieren Sie mit Cake 2FA", "verify_with_2fa": "Verifizieren Sie mit Cake 2FA",
"version": "Version ${currentVersion}", "version": "Version ${currentVersion}",
"view_all": "Alle anzeigen", "view_all": "Alle anzeigen",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Buy worldwide prepaid cards and gift cards", "cake_pay_subtitle": "Buy worldwide prepaid cards and gift cards",
"cake_pay_web_cards_subtitle": "Buy worldwide prepaid cards and gift cards", "cake_pay_web_cards_subtitle": "Buy worldwide prepaid cards and gift cards",
"cake_pay_web_cards_title": "Cake Pay Web Cards", "cake_pay_web_cards_title": "Cake Pay Web Cards",
"cake_seeds_save_disclaimer": "Please save these words in a secure place! If you lose access to your wallet, Cake Wallet support CANNOT help you", "cake_seeds_save_disclaimer": "Please save these words in a secure place! You will need these words to restore your wallet on a new device.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "I confirm I am not using a Proxy or VPN",
"cakepay_confirm_purchase": "Confirm Purchase",
"cakepay_confirm_terms_agreed": "I agree to the terms and conditions presented here:",
"cakepay_confirm_voided_refund": "I understand redemption attempts from a restricted country will void any refund",
"cakepay_ios_not_available": "Sorry, this gift card is not available on iOS. You can purchase it on Android or through our website instead.", "cakepay_ios_not_available": "Sorry, this gift card is not available on iOS. You can purchase it on Android or through our website instead.",
"cakepay_prepaid_card": "CakePay Prepaid Debit Card", "cakepay_prepaid_card": "CakePay Prepaid Debit Card",
"camera_consent": "Your camera will be used to capture an image for identification purposes by ${provider}. Please check their Privacy Policy for details.", "camera_consent": "Your camera will be used to capture an image for identification purposes by ${provider}. Please check their Privacy Policy for details.",
@ -355,12 +359,15 @@
"how_to_use": "How to use", "how_to_use": "How to use",
"how_to_use_card": "How to use this card", "how_to_use_card": "How to use this card",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "If you don't see your device above, please be sure your Ledger is awake and unlocked!",
"ignor": "Ignore", "ignor": "Ignore",
"import": "Import", "import": "Import",
"importNFTs": "Import NFTs", "importNFTs": "Import NFTs",
"in_store": "In Store", "in_store": "In Store",
"incoming": "Incoming", "incoming": "Incoming",
"incorrect_seed": "The text entered is not valid.", "incorrect_seed": "The text entered is not valid.",
"incorrect_seed_option": "Incorrect. Please try again",
"incorrect_seed_option_back": "Incorrect. Please make sure your seed is saved correctly and try again.",
"inputs": "Inputs", "inputs": "Inputs",
"insufficient_funds_for_tx": "Insufficient funds to successfully execute transaction.", "insufficient_funds_for_tx": "Insufficient funds to successfully execute transaction.",
"insufficient_lamport_for_tx": "You do not have enough SOL to cover the transaction and its transaction fee. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending.", "insufficient_lamport_for_tx": "You do not have enough SOL to cover the transaction and its transaction fee. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending.",
@ -470,6 +477,7 @@
"online": "Online", "online": "Online",
"onramper_option_description": "Quickly buy crypto with many payment methods. Available in most countries. Spreads and fees vary.", "onramper_option_description": "Quickly buy crypto with many payment methods. Available in most countries. Spreads and fees vary.",
"open_gift_card": "Open Gift Card", "open_gift_card": "Open Gift Card",
"open_wallet": "Open Wallet",
"optional_description": "Optional description", "optional_description": "Optional description",
"optional_email_hint": "Optional payee notification email", "optional_email_hint": "Optional payee notification email",
"optional_name": "Optional recipient name", "optional_name": "Optional recipient name",
@ -538,6 +546,7 @@
"recipient_address": "Recipient address", "recipient_address": "Recipient address",
"reconnect": "Reconnect", "reconnect": "Reconnect",
"reconnect_alert_text": "Are you sure you want to reconnect?", "reconnect_alert_text": "Are you sure you want to reconnect?",
"reconnect_your_hardware_wallet": "Reconnect your Hardware Wallet",
"reconnection": "Reconnection", "reconnection": "Reconnection",
"red_dark_theme": "Red Dark Theme", "red_dark_theme": "Red Dark Theme",
"red_light_theme": "Red Light Theme", "red_light_theme": "Red Light Theme",
@ -619,6 +628,7 @@
"seed_alert_title": "Attention", "seed_alert_title": "Attention",
"seed_alert_yes": "Yes, I have", "seed_alert_yes": "Yes, I have",
"seed_choose": "Choose seed language", "seed_choose": "Choose seed language",
"seed_display_path": "Menu -> Security and Backup -> Show key/seeds",
"seed_hex_form": "Wallet seed (hex form)", "seed_hex_form": "Wallet seed (hex form)",
"seed_key": "Seed key", "seed_key": "Seed key",
"seed_language": "Seed language", "seed_language": "Seed language",
@ -637,9 +647,13 @@
"seed_language_russian": "Russian", "seed_language_russian": "Russian",
"seed_language_spanish": "Spanish", "seed_language_spanish": "Spanish",
"seed_phrase_length": "Seed phrase length", "seed_phrase_length": "Seed phrase length",
"seed_position_question_one": "What is the",
"seed_position_question_two": "word of your seed phrase?",
"seed_reminder": "Please write these down in case you lose or wipe your phone", "seed_reminder": "Please write these down in case you lose or wipe your phone",
"seed_share": "Share seed", "seed_share": "Share seed",
"seed_title": "Seed", "seed_title": "Seed",
"seed_verified": "Seed Verified",
"seed_verified_subtext": "You can use your saved seed later on to restore this wallet in the event of corruption or losing your device.\n\nYou can view this seed again from the",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "Sharing seeds with other wallets is only possible with BIP39 SeedType.", "seedtype_alert_content": "Sharing seeds with other wallets is only possible with BIP39 SeedType.",
"seedtype_alert_title": "SeedType Alert", "seedtype_alert_title": "SeedType Alert",
@ -741,6 +755,10 @@
"silent_payments_settings": "Silent Payments settings", "silent_payments_settings": "Silent Payments settings",
"single_seed_wallets_group": "Single Seed Wallets", "single_seed_wallets_group": "Single Seed Wallets",
"slidable": "Slidable", "slidable": "Slidable",
"solana_create_associated_token_account_exception": "Error creating associated token account for receipient address.",
"solana_no_associated_token_account_exception": "There is no associated token account for this address.",
"solana_sign_native_transaction_rent_exception": "Transaction cannot be completed. Insufficient SOL left for rent after transaction. Kindly top up your SOL balance or reduce the amount of SOL you are sending.",
"solana_sign_spl_token_transaction_rent_exception": "Transaction cannot be completed. Insufficient SOL left for rent after transaction. Kindly top up your SOL balance.",
"sort_by": "Sort by", "sort_by": "Sort by",
"spend_key_private": "Spend key (private)", "spend_key_private": "Spend key (private)",
"spend_key_public": "Spend key (public)", "spend_key_public": "Spend key (public)",
@ -753,7 +771,7 @@
"support_description_guides": "Documentation and support for common issues", "support_description_guides": "Documentation and support for common issues",
"support_description_live_chat": "Free and fast! Trained support representatives are available to assist", "support_description_live_chat": "Free and fast! Trained support representatives are available to assist",
"support_description_other_links": "Join our communities or reach us or our partners through other methods", "support_description_other_links": "Join our communities or reach us or our partners through other methods",
"support_title_guides": "Cake Wallet guides", "support_title_guides": "Cake Wallet docs",
"support_title_live_chat": "Live support", "support_title_live_chat": "Live support",
"support_title_other_links": "Other support links", "support_title_other_links": "Other support links",
"sweeping_wallet": "Sweeping wallet", "sweeping_wallet": "Sweeping wallet",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "This variable pair is not supported with the selected exchanges", "variable_pair_not_supported": "This variable pair is not supported with the selected exchanges",
"verification": "Verification", "verification": "Verification",
"verify_message": "Verify Message", "verify_message": "Verify Message",
"verify_seed": "Verify Seed",
"verify_with_2fa": "Verify with Cake 2FA", "verify_with_2fa": "Verify with Cake 2FA",
"version": "Version ${currentVersion}", "version": "Version ${currentVersion}",
"view_all": "View all", "view_all": "View all",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Compra tarjetas prepagadas y tarjetas de regalo en todo el mundo", "cake_pay_subtitle": "Compra tarjetas prepagadas y tarjetas de regalo en todo el mundo",
"cake_pay_web_cards_subtitle": "Compra tarjetas de prepago y tarjetas de regalo en todo el mundo", "cake_pay_web_cards_subtitle": "Compra tarjetas de prepago y tarjetas de regalo en todo el mundo",
"cake_pay_web_cards_title": "Tarjetas Web Cake Pay", "cake_pay_web_cards_title": "Tarjetas Web Cake Pay",
"cake_seeds_save_disclaimer": "¡Guarde estas palabras en un lugar seguro! Si pierde acceso a su billetera, el soporte de la billetera de pastel no puede ayudarlo", "cake_seeds_save_disclaimer": "¡Guarde estas palabras en un lugar seguro! Necesitará estas palabras para restaurar su billetera en un nuevo dispositivo.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Confirmo que no estoy usando un proxy o VPN",
"cakepay_confirm_purchase": "Confirmar la compra",
"cakepay_confirm_terms_agreed": "Estoy de acuerdo con los términos y condiciones presentados aquí:",
"cakepay_confirm_voided_refund": "Entiendo que los intentos de redención de un país restringido anularán cualquier reembolso",
"cakepay_ios_not_available": "Lo siento, esta tarjeta de regalo no está disponible en iOS. Puede comprarlo en Android o a través de nuestro sitio web.", "cakepay_ios_not_available": "Lo siento, esta tarjeta de regalo no está disponible en iOS. Puede comprarlo en Android o a través de nuestro sitio web.",
"cakepay_prepaid_card": "Tarjeta de Débito Prepago CakePay", "cakepay_prepaid_card": "Tarjeta de Débito Prepago CakePay",
"camera_consent": "Su cámara será utilizada para capturar una imagen con fines de identificación por ${provider}. Consulta tu Política de privacidad para obtener más detalles.", "camera_consent": "Su cámara será utilizada para capturar una imagen con fines de identificación por ${provider}. Consulta tu Política de privacidad para obtener más detalles.",
@ -355,12 +359,15 @@
"how_to_use": "Cómo utilizar", "how_to_use": "Cómo utilizar",
"how_to_use_card": "Cómo usar esta tarjeta", "how_to_use_card": "Cómo usar esta tarjeta",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Si no ve su dispositivo arriba, ¡asegúrese de que su libro mayor esté despierto y desbloqueado!",
"ignor": "Pasar por alto", "ignor": "Pasar por alto",
"import": "Importar", "import": "Importar",
"importNFTs": "Importar NFT", "importNFTs": "Importar NFT",
"in_store": "En la tienda", "in_store": "En la tienda",
"incoming": "Entrante", "incoming": "Entrante",
"incorrect_seed": "El texto ingresado no es válido.", "incorrect_seed": "El texto ingresado no es válido.",
"incorrect_seed_option": "Incorrecto. Por favor intente de nuevo",
"incorrect_seed_option_back": "Incorrecto. Asegúrese de que su semilla se guarde correctamente e intente nuevamente.",
"inputs": "Entradas", "inputs": "Entradas",
"insufficient_funds_for_tx": "Fondos insuficientes para ejecutar con éxito la transacción.", "insufficient_funds_for_tx": "Fondos insuficientes para ejecutar con éxito la transacción.",
"insufficient_lamport_for_tx": "No tienes suficiente SOL para cubrir la transacción y su tarifa de transacción. Por favor, agrega más SOL a su billetera o reduce la cantidad de sol que está enviando.", "insufficient_lamport_for_tx": "No tienes suficiente SOL para cubrir la transacción y su tarifa de transacción. Por favor, agrega más SOL a su billetera o reduce la cantidad de sol que está enviando.",
@ -470,6 +477,7 @@
"online": "En línea", "online": "En línea",
"onramper_option_description": "Compra rápidamente cripto con muchos métodos de pago. Disponible en la mayoría de los países. Los diferenciales y las tarifas varían.", "onramper_option_description": "Compra rápidamente cripto con muchos métodos de pago. Disponible en la mayoría de los países. Los diferenciales y las tarifas varían.",
"open_gift_card": "Abrir tarjeta de regalo", "open_gift_card": "Abrir tarjeta de regalo",
"open_wallet": "Billetera abierta",
"optional_description": "Descripción opcional", "optional_description": "Descripción opcional",
"optional_email_hint": "Correo electrónico de notificación del beneficiario opcional", "optional_email_hint": "Correo electrónico de notificación del beneficiario opcional",
"optional_name": "Nombre del destinatario opcional", "optional_name": "Nombre del destinatario opcional",
@ -539,6 +547,7 @@
"recipient_address": "Dirección del receptor", "recipient_address": "Dirección del receptor",
"reconnect": "Volver a conectar", "reconnect": "Volver a conectar",
"reconnect_alert_text": "¿Estás seguro de reconectar?", "reconnect_alert_text": "¿Estás seguro de reconectar?",
"reconnect_your_hardware_wallet": "Vuelva a conectar su billetera de hardware",
"reconnection": "Reconexión", "reconnection": "Reconexión",
"red_dark_theme": "Tema rojo oscuro", "red_dark_theme": "Tema rojo oscuro",
"red_light_theme": "Tema de la luz roja", "red_light_theme": "Tema de la luz roja",
@ -620,6 +629,7 @@
"seed_alert_title": "Atención", "seed_alert_title": "Atención",
"seed_alert_yes": "Sí tengo", "seed_alert_yes": "Sí tengo",
"seed_choose": "Elige el idioma semilla", "seed_choose": "Elige el idioma semilla",
"seed_display_path": "Menú -> Seguridad y copia de seguridad -> Mostrar llave/semillas",
"seed_hex_form": "Semilla de billetera (forma hexadecimal)", "seed_hex_form": "Semilla de billetera (forma hexadecimal)",
"seed_key": "Llave de semilla", "seed_key": "Llave de semilla",
"seed_language": "Lenguaje de semillas", "seed_language": "Lenguaje de semillas",
@ -638,9 +648,13 @@
"seed_language_russian": "Ruso", "seed_language_russian": "Ruso",
"seed_language_spanish": "Español", "seed_language_spanish": "Español",
"seed_phrase_length": "Longitud de la frase inicial", "seed_phrase_length": "Longitud de la frase inicial",
"seed_position_question_one": "¿Qué es el",
"seed_position_question_two": "¿Palabra de tu frase de semillas?",
"seed_reminder": "Anótalos en caso de que pierdas o borres tu aplicación", "seed_reminder": "Anótalos en caso de que pierdas o borres tu aplicación",
"seed_share": "Compartir semillas", "seed_share": "Compartir semillas",
"seed_title": "Semilla", "seed_title": "Semilla",
"seed_verified": "Semilla verificada",
"seed_verified_subtext": "Puede usar su semilla guardada más adelante para restaurar esta billetera en caso de corrupción o perder su dispositivo. \n\n Puede ver esta semilla nuevamente desde el",
"seedtype": "Tipos de semillas", "seedtype": "Tipos de semillas",
"seedtype_alert_content": "Compartir semillas con otras billeteras solo es posible con semillas bip39 - un tipo específico de semilla.", "seedtype_alert_content": "Compartir semillas con otras billeteras solo es posible con semillas bip39 - un tipo específico de semilla.",
"seedtype_alert_title": "Alerta de tipo de semillas", "seedtype_alert_title": "Alerta de tipo de semillas",
@ -742,6 +756,10 @@
"silent_payments_settings": "Configuración de pagos silenciosos", "silent_payments_settings": "Configuración de pagos silenciosos",
"single_seed_wallets_group": "Billeteras de semillas individuales", "single_seed_wallets_group": "Billeteras de semillas individuales",
"slidable": "deslizable", "slidable": "deslizable",
"solana_create_associated_token_account_exception": "Error a crear una cuenta de token asociada para la dirección recibida.",
"solana_no_associated_token_account_exception": "No hay una cuenta de token asociada para esta dirección.",
"solana_sign_native_transaction_rent_exception": "La transacción no se puede completar. Sol insuficiente que queda en alquiler después de la transacción. Por favor, supere su saldo de sol o reduzca la cantidad de sol que está enviando.",
"solana_sign_spl_token_transaction_rent_exception": "La transacción no se puede completar. Sol insuficiente que queda en alquiler después de la transacción. Por favor, supere su balance de sol.",
"sort_by": "Ordenar por", "sort_by": "Ordenar por",
"spend_key_private": "Llave de gasto (privada)", "spend_key_private": "Llave de gasto (privada)",
"spend_key_public": "Llave de gasto (pública)", "spend_key_public": "Llave de gasto (pública)",
@ -754,7 +772,7 @@
"support_description_guides": "Documentación y apoyo para problemas comunes", "support_description_guides": "Documentación y apoyo para problemas comunes",
"support_description_live_chat": "¡GRATIS y RÁPIDO! Los representantes de apoyo capacitado están disponibles para ayudar", "support_description_live_chat": "¡GRATIS y RÁPIDO! Los representantes de apoyo capacitado están disponibles para ayudar",
"support_description_other_links": "Únete a nuestras comunidades o comunícate con nosotros nuestros socios a través de otros métodos", "support_description_other_links": "Únete a nuestras comunidades o comunícate con nosotros nuestros socios a través de otros métodos",
"support_title_guides": "Guías de billetera para pastel", "support_title_guides": "Documentos de billetera de pastel",
"support_title_live_chat": "Soporte en tiempo real", "support_title_live_chat": "Soporte en tiempo real",
"support_title_other_links": "Otros enlaces de soporte", "support_title_other_links": "Otros enlaces de soporte",
"sweeping_wallet": "Barrer billetera (gastar todos los fondos disponibles)", "sweeping_wallet": "Barrer billetera (gastar todos los fondos disponibles)",
@ -893,6 +911,7 @@
"variable_pair_not_supported": "Este par de variables no es compatible con los intercambios seleccionados", "variable_pair_not_supported": "Este par de variables no es compatible con los intercambios seleccionados",
"verification": "Verificación", "verification": "Verificación",
"verify_message": "Mensaje de verificación", "verify_message": "Mensaje de verificación",
"verify_seed": "Verificar semilla",
"verify_with_2fa": "Verificar con Cake 2FA", "verify_with_2fa": "Verificar con Cake 2FA",
"version": "Versión ${currentVersion}", "version": "Versión ${currentVersion}",
"view_all": "Ver todo", "view_all": "Ver todo",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Achetez des cartes et des cartes-cadeaux prépayées mondiales", "cake_pay_subtitle": "Achetez des cartes et des cartes-cadeaux prépayées mondiales",
"cake_pay_web_cards_subtitle": "Achetez des cartes prépayées et des cartes-cadeaux dans le monde entier", "cake_pay_web_cards_subtitle": "Achetez des cartes prépayées et des cartes-cadeaux dans le monde entier",
"cake_pay_web_cards_title": "Cartes Web Cake Pay", "cake_pay_web_cards_title": "Cartes Web Cake Pay",
"cake_seeds_save_disclaimer": "Veuillez enregistrer ces mots dans un endroit sécurisé! Si vous perdez accès à votre portefeuille, le support de portefeuille à gâteau ne peut pas vous aider", "cake_seeds_save_disclaimer": "Veuillez enregistrer ces mots dans un endroit sécurisé! Vous aurez besoin de ces mots pour restaurer votre portefeuille sur un nouvel appareil.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Je confirme que je n'utilise pas de proxy ou de VPN",
"cakepay_confirm_purchase": "Confirmer l'achat",
"cakepay_confirm_terms_agreed": "J'accepte les termes et conditions présentés ici:",
"cakepay_confirm_voided_refund": "Je comprends que les tentatives de rachat d'un pays restreint annulent tout remboursement",
"cakepay_ios_not_available": "Désolé, cette carte-cadeau n'est pas disponible sur iOS. Vous pouvez l'acheter sur Android ou via notre site Web à la place.", "cakepay_ios_not_available": "Désolé, cette carte-cadeau n'est pas disponible sur iOS. Vous pouvez l'acheter sur Android ou via notre site Web à la place.",
"cakepay_prepaid_card": "Carte de débit prépayée Cake Pay", "cakepay_prepaid_card": "Carte de débit prépayée Cake Pay",
"camera_consent": "Votre appareil photo sera utilisé pour capturer une image à des fins d'identification par ${provider}. Veuillez consulter leur politique de confidentialité pour plus de détails.", "camera_consent": "Votre appareil photo sera utilisé pour capturer une image à des fins d'identification par ${provider}. Veuillez consulter leur politique de confidentialité pour plus de détails.",
@ -355,12 +359,15 @@
"how_to_use": "Comment utiliser", "how_to_use": "Comment utiliser",
"how_to_use_card": "Comment utiliser cette carte", "how_to_use_card": "Comment utiliser cette carte",
"id": "ID : ", "id": "ID : ",
"if_you_dont_see_your_device": "Si vous ne voyez pas votre appareil ci-dessus, assurez-vous que votre grand livre est éveillé et déverrouillé!",
"ignor": "Ignorer", "ignor": "Ignorer",
"import": "Importer", "import": "Importer",
"importNFTs": "Importer des NFT", "importNFTs": "Importer des NFT",
"in_store": "En magasin", "in_store": "En magasin",
"incoming": "Entrantes", "incoming": "Entrantes",
"incorrect_seed": "Le texte entré est invalide.", "incorrect_seed": "Le texte entré est invalide.",
"incorrect_seed_option": "Incorrect. Veuillez réessayer",
"incorrect_seed_option_back": "Incorrect. Veuillez vous assurer que votre graine est enregistrée correctement et réessayer.",
"inputs": "Contributions", "inputs": "Contributions",
"insufficient_funds_for_tx": "Fonds insuffisants pour exécuter avec succès la transaction.", "insufficient_funds_for_tx": "Fonds insuffisants pour exécuter avec succès la transaction.",
"insufficient_lamport_for_tx": "Vous n'avez pas assez de sol pour couvrir la transaction et ses frais de transaction. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de Sol que vous envoyez.", "insufficient_lamport_for_tx": "Vous n'avez pas assez de sol pour couvrir la transaction et ses frais de transaction. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de Sol que vous envoyez.",
@ -470,6 +477,7 @@
"online": "En ligne", "online": "En ligne",
"onramper_option_description": "Achetez rapidement des cryptomonnaies avec de nombreuses méthodes de paiement. Disponible dans la plupart des pays. Les spreads et les frais peuvent varier.", "onramper_option_description": "Achetez rapidement des cryptomonnaies avec de nombreuses méthodes de paiement. Disponible dans la plupart des pays. Les spreads et les frais peuvent varier.",
"open_gift_card": "Ouvrir la carte-cadeau", "open_gift_card": "Ouvrir la carte-cadeau",
"open_wallet": "Portefeuille ouvert",
"optional_description": "Descriptif facultatif", "optional_description": "Descriptif facultatif",
"optional_email_hint": "E-mail de notification du bénéficiaire facultatif", "optional_email_hint": "E-mail de notification du bénéficiaire facultatif",
"optional_name": "Nom du destinataire facultatif", "optional_name": "Nom du destinataire facultatif",
@ -538,6 +546,7 @@
"recipient_address": "Adresse bénéficiaire", "recipient_address": "Adresse bénéficiaire",
"reconnect": "Reconnecter", "reconnect": "Reconnecter",
"reconnect_alert_text": "Êtes vous certain de vouloir vous reconnecter ?", "reconnect_alert_text": "Êtes vous certain de vouloir vous reconnecter ?",
"reconnect_your_hardware_wallet": "Reconnectez votre portefeuille matériel",
"reconnection": "Reconnexion", "reconnection": "Reconnexion",
"red_dark_theme": "Thème rouge sombre", "red_dark_theme": "Thème rouge sombre",
"red_light_theme": "Thème rouge clair", "red_light_theme": "Thème rouge clair",
@ -619,6 +628,7 @@
"seed_alert_title": "Attention", "seed_alert_title": "Attention",
"seed_alert_yes": "Oui, je suis sûr", "seed_alert_yes": "Oui, je suis sûr",
"seed_choose": "Choisissez la langue de la phrase secrète (seed)", "seed_choose": "Choisissez la langue de la phrase secrète (seed)",
"seed_display_path": "Menu -> Sécurité et sauvegarde -> Afficher la clé / les graines",
"seed_hex_form": "Graine du portefeuille (forme hexagonale)", "seed_hex_form": "Graine du portefeuille (forme hexagonale)",
"seed_key": "Clé secrète (seed key)", "seed_key": "Clé secrète (seed key)",
"seed_language": "Langage de la phrase secrète", "seed_language": "Langage de la phrase secrète",
@ -637,9 +647,13 @@
"seed_language_russian": "Russe", "seed_language_russian": "Russe",
"seed_language_spanish": "Espagnol", "seed_language_spanish": "Espagnol",
"seed_phrase_length": "Longueur de la phrase de départ", "seed_phrase_length": "Longueur de la phrase de départ",
"seed_position_question_one": "Qu'est-ce que le",
"seed_position_question_two": "mot de votre phrase de semence?",
"seed_reminder": "Merci d'écrire votre phrase secrète (seed) au cas où vous perdriez ou effaceriez votre téléphone", "seed_reminder": "Merci d'écrire votre phrase secrète (seed) au cas où vous perdriez ou effaceriez votre téléphone",
"seed_share": "Partager la phrase secrète (seed)", "seed_share": "Partager la phrase secrète (seed)",
"seed_title": "Phrase secrète (seed)", "seed_title": "Phrase secrète (seed)",
"seed_verified": "Graine vérifiée",
"seed_verified_subtext": "Vous pouvez utiliser votre graine enregistrée plus tard pour restaurer ce portefeuille en cas de corruption ou de perdre votre appareil. \n\n Vous pouvez revoir cette graine à partir du",
"seedtype": "Type de graine", "seedtype": "Type de graine",
"seedtype_alert_content": "Le partage de graines avec d'autres portefeuilles n'est possible qu'avec le type de graine BIP39.", "seedtype_alert_content": "Le partage de graines avec d'autres portefeuilles n'est possible qu'avec le type de graine BIP39.",
"seedtype_alert_title": "Alerte Type de Graine", "seedtype_alert_title": "Alerte Type de Graine",
@ -741,6 +755,10 @@
"silent_payments_settings": "Paramètres de paiement silencieux", "silent_payments_settings": "Paramètres de paiement silencieux",
"single_seed_wallets_group": "Portefeuilles de semences simples", "single_seed_wallets_group": "Portefeuilles de semences simples",
"slidable": "Glissable", "slidable": "Glissable",
"solana_create_associated_token_account_exception": "Création d'erreur Création de jetons associés pour l'adresse détenue.",
"solana_no_associated_token_account_exception": "Il n'y a pas de compte de jeton associé pour cette adresse.",
"solana_sign_native_transaction_rent_exception": "La transaction ne peut pas être terminée. Sol insuffisant laissé à la location après la transaction. Veuillez compléter votre solde SOL ou réduire la quantité de Sol que vous envoyez.",
"solana_sign_spl_token_transaction_rent_exception": "La transaction ne peut pas être terminée. Sol insuffisant laissé à la location après la transaction. Veuillez compléter votre solde de Sol.",
"sort_by": "Trier par", "sort_by": "Trier par",
"spend_key_private": "Clef de dépense (spend key) (privée)", "spend_key_private": "Clef de dépense (spend key) (privée)",
"spend_key_public": "Clef de dépense (spend key) (publique)", "spend_key_public": "Clef de dépense (spend key) (publique)",
@ -753,7 +771,7 @@
"support_description_guides": "Documentation et support pour les problèmes communs", "support_description_guides": "Documentation et support pour les problèmes communs",
"support_description_live_chat": "GRATUIT ET RAPIDE ! Des représentants de soutien formé sont disponibles pour aider", "support_description_live_chat": "GRATUIT ET RAPIDE ! Des représentants de soutien formé sont disponibles pour aider",
"support_description_other_links": "Rejoignez nos communautés ou contactez-nous ou nos partenaires à travers d'autres méthodes", "support_description_other_links": "Rejoignez nos communautés ou contactez-nous ou nos partenaires à travers d'autres méthodes",
"support_title_guides": "Guides de Cake Wallet", "support_title_guides": "Docs de portefeuille à gâteau",
"support_title_live_chat": "Support en direct", "support_title_live_chat": "Support en direct",
"support_title_other_links": "Autres liens d'assistance", "support_title_other_links": "Autres liens d'assistance",
"sweeping_wallet": "Portefeuille (wallet) de consolidation", "sweeping_wallet": "Portefeuille (wallet) de consolidation",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "Cette paire variable n'est pas prise en charge avec les échanges sélectionnés", "variable_pair_not_supported": "Cette paire variable n'est pas prise en charge avec les échanges sélectionnés",
"verification": "Vérification", "verification": "Vérification",
"verify_message": "Vérifier le message", "verify_message": "Vérifier le message",
"verify_seed": "Vérifiez les semences",
"verify_with_2fa": "Vérifier avec Cake 2FA", "verify_with_2fa": "Vérifier avec Cake 2FA",
"version": "Version ${currentVersion}", "version": "Version ${currentVersion}",
"view_all": "Voir tout", "view_all": "Voir tout",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Sayi katunan shirye-shiryen duniya da katunan kyauta", "cake_pay_subtitle": "Sayi katunan shirye-shiryen duniya da katunan kyauta",
"cake_pay_web_cards_subtitle": "Sayi katunan da aka riga aka biya na duniya da katunan kyauta", "cake_pay_web_cards_subtitle": "Sayi katunan da aka riga aka biya na duniya da katunan kyauta",
"cake_pay_web_cards_title": "Cake Pay Web Cards", "cake_pay_web_cards_title": "Cake Pay Web Cards",
"cake_seeds_save_disclaimer": "Da fatan za a ceci waɗannan kalmomin a cikin amintaccen wuri! Idan ka rasa damar zuwa Wallet, Tallafin Wall Wallet ba zai iya taimaka maka ba", "cake_seeds_save_disclaimer": "Da fatan za a ceci waɗannan kalmomin a cikin amintaccen wuri! Kuna buƙatar waɗannan kalmomin don dawo da walat ɗinku a kan sabon na'ura.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Na tabbatar ba na amfani da wakili ko VPN",
"cakepay_confirm_purchase": "Tabbatar da sayan",
"cakepay_confirm_terms_agreed": "Na yarda da sharuɗɗan da sharuɗɗan da aka gabatar anan:",
"cakepay_confirm_voided_refund": "Na fahimci fansa daga ƙasar da aka ƙuntata ba za ta yi amfani da wani maida ba",
"cakepay_ios_not_available": "Yi haƙuri, wannan katin kyautar ba a samuwa akan iOS. Kuna iya sayan shi a kan Android ko ta yanar gizo a maimakon.", "cakepay_ios_not_available": "Yi haƙuri, wannan katin kyautar ba a samuwa akan iOS. Kuna iya sayan shi a kan Android ko ta yanar gizo a maimakon.",
"cakepay_prepaid_card": "Katin zare kudi na CakePay", "cakepay_prepaid_card": "Katin zare kudi na CakePay",
"camera_consent": "Za a yi amfani da kyamarar ku don ɗaukar hoto don dalilai na tantancewa ta ${provider}. Da fatan za a duba Manufar Sirri don cikakkun bayanai.", "camera_consent": "Za a yi amfani da kyamarar ku don ɗaukar hoto don dalilai na tantancewa ta ${provider}. Da fatan za a duba Manufar Sirri don cikakkun bayanai.",
@ -355,12 +359,15 @@
"how_to_use": "Yadda ake amfani da shi", "how_to_use": "Yadda ake amfani da shi",
"how_to_use_card": "Yadda ake amfani da wannan kati", "how_to_use_card": "Yadda ake amfani da wannan kati",
"id": "ID:", "id": "ID:",
"if_you_dont_see_your_device": "Idan baku ga na'urarka da ke sama ba, da fatan za a tabbata Ledger dinku yana farkawa kuma a buɗe!",
"ignor": "Yi watsi da shi", "ignor": "Yi watsi da shi",
"import": "Shigo da", "import": "Shigo da",
"importNFTs": "Shigo da NFTs", "importNFTs": "Shigo da NFTs",
"in_store": "A cikin Store", "in_store": "A cikin Store",
"incoming": "Mai shigowa", "incoming": "Mai shigowa",
"incorrect_seed": "rubutun da aka shigar ba shi da inganci.", "incorrect_seed": "rubutun da aka shigar ba shi da inganci.",
"incorrect_seed_option": "Ba daidai ba. Da fatan za a sake gwadawa",
"incorrect_seed_option_back": "Ba daidai ba. Da fatan za a tabbatar da zuriyar ku an ajiye daidai kuma a sake gwadawa.",
"inputs": "Abubuwan da ke ciki", "inputs": "Abubuwan da ke ciki",
"insufficient_funds_for_tx": "Rashin isasshen kuɗi don aiwatar da ma'amala.", "insufficient_funds_for_tx": "Rashin isasshen kuɗi don aiwatar da ma'amala.",
"insufficient_lamport_for_tx": "Ba ku da isasshen sool don rufe ma'amala da kuɗin ma'amala. Da unara ƙara ƙarin sool a cikin walat ɗinku ko rage adadin Sol ɗin da kuke aikawa.", "insufficient_lamport_for_tx": "Ba ku da isasshen sool don rufe ma'amala da kuɗin ma'amala. Da unara ƙara ƙarin sool a cikin walat ɗinku ko rage adadin Sol ɗin da kuke aikawa.",
@ -470,6 +477,7 @@
"online": "Kan layi", "online": "Kan layi",
"onramper_option_description": "Da sauri sayi Crypto tare da hanyoyin biyan kuɗi da yawa. Akwai a yawancin ƙasashe. Yaduwa da kudade sun bambanta.", "onramper_option_description": "Da sauri sayi Crypto tare da hanyoyin biyan kuɗi da yawa. Akwai a yawancin ƙasashe. Yaduwa da kudade sun bambanta.",
"open_gift_card": "Bude Katin Kyauta", "open_gift_card": "Bude Katin Kyauta",
"open_wallet": "Bude Wadda",
"openalias_alert_content": "Zaka aika kuɗi zuwa \n${recipient_name}", "openalias_alert_content": "Zaka aika kuɗi zuwa \n${recipient_name}",
"openalias_alert_title": "An gano adireshin", "openalias_alert_title": "An gano adireshin",
"optional_description": "Bayanin zai iya ba da maki", "optional_description": "Bayanin zai iya ba da maki",
@ -540,6 +548,7 @@
"recipient_address": "Adireshin mai karɓa", "recipient_address": "Adireshin mai karɓa",
"reconnect": "Sake haɗawa", "reconnect": "Sake haɗawa",
"reconnect_alert_text": "Shin kun tabbata kuna son sake haɗawa?", "reconnect_alert_text": "Shin kun tabbata kuna son sake haɗawa?",
"reconnect_your_hardware_wallet": "Sake kunnawa kayan aiki",
"reconnection": "Sake haɗawa", "reconnection": "Sake haɗawa",
"red_dark_theme": "Ja duhu taken", "red_dark_theme": "Ja duhu taken",
"red_light_theme": "Ja mai haske", "red_light_theme": "Ja mai haske",
@ -621,6 +630,7 @@
"seed_alert_title": "Hankali", "seed_alert_title": "Hankali",
"seed_alert_yes": "E, Na yi", "seed_alert_yes": "E, Na yi",
"seed_choose": "Zaɓi harshen seed", "seed_choose": "Zaɓi harshen seed",
"seed_display_path": "Ming menu -> Tsaro da Ajiyayyen -> Kaben Now / Duri",
"seed_hex_form": "Gany Sero (form form)", "seed_hex_form": "Gany Sero (form form)",
"seed_key": "Maɓallin iri", "seed_key": "Maɓallin iri",
"seed_language": "Harshen Magani", "seed_language": "Harshen Magani",
@ -639,9 +649,13 @@
"seed_language_russian": "Rashanci", "seed_language_russian": "Rashanci",
"seed_language_spanish": "Spanish", "seed_language_spanish": "Spanish",
"seed_phrase_length": "Tsawon jimlar iri", "seed_phrase_length": "Tsawon jimlar iri",
"seed_position_question_one": "Menene",
"seed_position_question_two": "Maganar Je'in Seedhniyarka?",
"seed_reminder": "Don Allah rubuta wadannan in case ka manta ko ka sake kwallon wayarka", "seed_reminder": "Don Allah rubuta wadannan in case ka manta ko ka sake kwallon wayarka",
"seed_share": "Raba iri", "seed_share": "Raba iri",
"seed_title": "iri", "seed_title": "iri",
"seed_verified": "Iri",
"seed_verified_subtext": "Kuna iya amfani da zuriyar da kuka tsira daga baya don mayar da wannan walat ɗin a lokacin da ya faru na cin hanci da rashawa ko rasa na'urarka. \n\n Za ku iya duba wannan iri ɗin kuma daga",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "Raba tsaba tare da sauran wallets yana yiwuwa ne kawai tare da Bip39 seedtype.", "seedtype_alert_content": "Raba tsaba tare da sauran wallets yana yiwuwa ne kawai tare da Bip39 seedtype.",
"seedtype_alert_title": "Seedtype farke", "seedtype_alert_title": "Seedtype farke",
@ -743,6 +757,10 @@
"silent_payments_settings": "Saitunan Silent", "silent_payments_settings": "Saitunan Silent",
"single_seed_wallets_group": "Guaro", "single_seed_wallets_group": "Guaro",
"slidable": "Mai iya zamewa", "slidable": "Mai iya zamewa",
"solana_create_associated_token_account_exception": "Kuskuren ƙirƙirar asusun Asusun da aka danganta don Adireshin karɓar karɓa.",
"solana_no_associated_token_account_exception": "Babu wani haɗin yanar gizo mai alaƙa don wannan adireshin.",
"solana_sign_native_transaction_rent_exception": "Ma'amala ba za a iya kammala ba. Rashin cancanta na Sol ya bar haya bayan ma'amala. Da kyau a saman ma'auni na Solku ko rage adadin Sol da kuke aikawa.",
"solana_sign_spl_token_transaction_rent_exception": "Ma'amala ba za a iya kammala ba. Rashin cancanta na Sol ya bar haya bayan ma'amala. Da kyau sama da ma'auni na Sol.",
"sort_by": "Kasa", "sort_by": "Kasa",
"spend_key_private": "makullin biya (maɓallin kalmar sirri)", "spend_key_private": "makullin biya (maɓallin kalmar sirri)",
"spend_key_public": "makullin biya (maɓallin jama'a)", "spend_key_public": "makullin biya (maɓallin jama'a)",
@ -755,7 +773,7 @@
"support_description_guides": "Tallafi da tallafi don batutuwa na yau da kullun", "support_description_guides": "Tallafi da tallafi don batutuwa na yau da kullun",
"support_description_live_chat": "Kyauta da sauri! An horar da wakilan tallafi na tallafi don taimakawa", "support_description_live_chat": "Kyauta da sauri! An horar da wakilan tallafi na tallafi don taimakawa",
"support_description_other_links": "Kasance tare da al'ummominmu ko kuma ka kai mu abokanmu ta hanyar wasu hanyoyi", "support_description_other_links": "Kasance tare da al'ummominmu ko kuma ka kai mu abokanmu ta hanyar wasu hanyoyi",
"support_title_guides": "Jagorar Cake", "support_title_guides": "Docs Bakin",
"support_title_live_chat": "Tallafi na Live", "support_title_live_chat": "Tallafi na Live",
"support_title_other_links": "Sauran hanyoyin tallafi", "support_title_other_links": "Sauran hanyoyin tallafi",
"sweeping_wallet": "Kashi na kasa", "sweeping_wallet": "Kashi na kasa",
@ -894,6 +912,7 @@
"variable_pair_not_supported": "Ba a samun goyan bayan wannan m biyu tare da zaɓaɓɓun musayar", "variable_pair_not_supported": "Ba a samun goyan bayan wannan m biyu tare da zaɓaɓɓun musayar",
"verification": "tabbatar", "verification": "tabbatar",
"verify_message": "Tabbatar saƙon", "verify_message": "Tabbatar saƙon",
"verify_seed": "Tabbatar zuriya",
"verify_with_2fa": "Tabbatar da Cake 2FA", "verify_with_2fa": "Tabbatar da Cake 2FA",
"version": "Sigar ${currentVersion}", "version": "Sigar ${currentVersion}",
"view_all": "Duba duka", "view_all": "Duba duka",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "दुनिया भर में प्रीपेड कार्ड और उपहार कार्ड खरीदें", "cake_pay_subtitle": "दुनिया भर में प्रीपेड कार्ड और उपहार कार्ड खरीदें",
"cake_pay_web_cards_subtitle": "दुनिया भर में प्रीपेड कार्ड और गिफ्ट कार्ड खरीदें", "cake_pay_web_cards_subtitle": "दुनिया भर में प्रीपेड कार्ड और गिफ्ट कार्ड खरीदें",
"cake_pay_web_cards_title": "केक भुगतान वेब कार्ड", "cake_pay_web_cards_title": "केक भुगतान वेब कार्ड",
"cake_seeds_save_disclaimer": "कृपया इन शब्दों को सुरक्षित स्थान पर सहेजें! यदि आप अपने बटुए तक पहुंच खो देते हैं, तो केक वॉलेट समर्थन आपकी मदद नहीं कर सकता है", "cake_seeds_save_disclaimer": "कृपया इन शब्दों को सुरक्षित स्थान पर सहेजें! एक नए डिवाइस पर अपने बटुए को पुनर्स्थापित करने के लिए आपको इन शब्दों की आवश्यकता होगी।",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "मैं पुष्टि करता हूं कि मैं एक प्रॉक्सी या वीपीएन का उपयोग नहीं कर रहा हूं",
"cakepay_confirm_purchase": "खरीद की पुष्टि करें",
"cakepay_confirm_terms_agreed": "मैं यहां प्रस्तुत नियमों और शर्तों से सहमत हूं:",
"cakepay_confirm_voided_refund": "मैं समझता हूं कि एक प्रतिबंधित देश से मोचन प्रयास किसी भी धनवापसी को शून्य कर देंगे",
"cakepay_ios_not_available": "क्षमा करें, यह उपहार कार्ड iOS पर उपलब्ध नहीं है। आप इसे Android पर या हमारी वेबसाइट के बजाय खरीद सकते हैं।", "cakepay_ios_not_available": "क्षमा करें, यह उपहार कार्ड iOS पर उपलब्ध नहीं है। आप इसे Android पर या हमारी वेबसाइट के बजाय खरीद सकते हैं।",
"cakepay_prepaid_card": "केकपे प्रीपेड डेबिट कार्ड", "cakepay_prepaid_card": "केकपे प्रीपेड डेबिट कार्ड",
"camera_consent": "आपके कैमरे का उपयोग ${provider} द्वारा पहचान उद्देश्यों के लिए एक छवि कैप्चर करने के लिए किया जाएगा। विवरण के लिए कृपया उनकी गोपनीयता नीति जांचें।", "camera_consent": "आपके कैमरे का उपयोग ${provider} द्वारा पहचान उद्देश्यों के लिए एक छवि कैप्चर करने के लिए किया जाएगा। विवरण के लिए कृपया उनकी गोपनीयता नीति जांचें।",
@ -355,12 +359,15 @@
"how_to_use": "का उपयोग कैसे करें", "how_to_use": "का उपयोग कैसे करें",
"how_to_use_card": "इस कार्ड का उपयोग कैसे करें", "how_to_use_card": "इस कार्ड का उपयोग कैसे करें",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "यदि आप अपने डिवाइस को ऊपर नहीं देखते हैं, तो कृपया सुनिश्चित करें कि आपका लेजर जागृत और अनलॉक हो गया है!",
"ignor": "नज़रअंदाज़ करना", "ignor": "नज़रअंदाज़ करना",
"import": "आयात", "import": "आयात",
"importNFTs": "एनएफटी आयात करें", "importNFTs": "एनएफटी आयात करें",
"in_store": "स्टोर में", "in_store": "स्टोर में",
"incoming": "आने वाली", "incoming": "आने वाली",
"incorrect_seed": "दर्ज किया गया पाठ मान्य नहीं है।", "incorrect_seed": "दर्ज किया गया पाठ मान्य नहीं है।",
"incorrect_seed_option": "गलत। कृपया पुन: प्रयास करें",
"incorrect_seed_option_back": "गलत। कृपया सुनिश्चित करें कि आपका बीज सही तरीके से बच गया है और फिर से प्रयास करें।",
"inputs": "इनपुट", "inputs": "इनपुट",
"insufficient_funds_for_tx": "लेनदेन को सफलतापूर्वक निष्पादित करने के लिए अपर्याप्त धन।", "insufficient_funds_for_tx": "लेनदेन को सफलतापूर्वक निष्पादित करने के लिए अपर्याप्त धन।",
"insufficient_lamport_for_tx": "आपके पास लेनदेन और इसके लेनदेन शुल्क को कवर करने के लिए पर्याप्त सोल नहीं है। कृपया अपने बटुए में अधिक सोल जोड़ें या आपके द्वारा भेजे जा रहे सोल राशि को कम करें।", "insufficient_lamport_for_tx": "आपके पास लेनदेन और इसके लेनदेन शुल्क को कवर करने के लिए पर्याप्त सोल नहीं है। कृपया अपने बटुए में अधिक सोल जोड़ें या आपके द्वारा भेजे जा रहे सोल राशि को कम करें।",
@ -470,6 +477,7 @@
"online": "ऑनलाइन", "online": "ऑनलाइन",
"onramper_option_description": "जल्दी से कई भुगतान विधियों के साथ क्रिप्टो खरीदें। अधिकांश देशों में उपलब्ध है। फैलता है और फीस अलग -अलग होती है।", "onramper_option_description": "जल्दी से कई भुगतान विधियों के साथ क्रिप्टो खरीदें। अधिकांश देशों में उपलब्ध है। फैलता है और फीस अलग -अलग होती है।",
"open_gift_card": "गिफ्ट कार्ड खोलें", "open_gift_card": "गिफ्ट कार्ड खोलें",
"open_wallet": "खुला बटुआ",
"optional_description": "वैकल्पिक विवरण", "optional_description": "वैकल्पिक विवरण",
"optional_email_hint": "वैकल्पिक प्राप्तकर्ता सूचना ईमेल", "optional_email_hint": "वैकल्पिक प्राप्तकर्ता सूचना ईमेल",
"optional_name": "वैकल्पिक प्राप्तकर्ता नाम", "optional_name": "वैकल्पिक प्राप्तकर्ता नाम",
@ -540,6 +548,7 @@
"recipient_address": "प्राप्तकर्ता का पता", "recipient_address": "प्राप्तकर्ता का पता",
"reconnect": "रिकनेक्ट", "reconnect": "रिकनेक्ट",
"reconnect_alert_text": "क्या आप पुन: कनेक्ट होना सुनिश्चित करते हैं?", "reconnect_alert_text": "क्या आप पुन: कनेक्ट होना सुनिश्चित करते हैं?",
"reconnect_your_hardware_wallet": "अपने हार्डवेयर वॉलेट को फिर से कनेक्ट करें",
"reconnection": "पुनर्संयोजन", "reconnection": "पुनर्संयोजन",
"red_dark_theme": "लाल डार्क थीम", "red_dark_theme": "लाल डार्क थीम",
"red_light_theme": "लाल प्रकाश थीम", "red_light_theme": "लाल प्रकाश थीम",
@ -621,6 +630,7 @@
"seed_alert_title": "ध्यान", "seed_alert_title": "ध्यान",
"seed_alert_yes": "हाँ मेरे पास है", "seed_alert_yes": "हाँ मेरे पास है",
"seed_choose": "बीज भाषा चुनें", "seed_choose": "बीज भाषा चुनें",
"seed_display_path": "मेनू -> सुरक्षा और बैकअप -> कुंजी/बीज दिखाएं",
"seed_hex_form": "वॉलेट सीड (हेक्स फॉर्म)", "seed_hex_form": "वॉलेट सीड (हेक्स फॉर्म)",
"seed_key": "बीज कुंजी", "seed_key": "बीज कुंजी",
"seed_language": "बीज", "seed_language": "बीज",
@ -639,9 +649,13 @@
"seed_language_russian": "रूसी", "seed_language_russian": "रूसी",
"seed_language_spanish": "स्पेनिश", "seed_language_spanish": "स्पेनिश",
"seed_phrase_length": "बीज वाक्यांश की लंबाई", "seed_phrase_length": "बीज वाक्यांश की लंबाई",
"seed_position_question_one": "क्या है",
"seed_position_question_two": "आपके बीज वाक्यांश का शब्द?",
"seed_reminder": "यदि आप अपना फोन खो देते हैं या मिटा देते हैं तो कृपया इन्हें लिख लें", "seed_reminder": "यदि आप अपना फोन खो देते हैं या मिटा देते हैं तो कृपया इन्हें लिख लें",
"seed_share": "बीज साझा करें", "seed_share": "बीज साझा करें",
"seed_title": "बीज", "seed_title": "बीज",
"seed_verified": "बीज सत्यापित",
"seed_verified_subtext": "आप भ्रष्टाचार की स्थिति में इस बटुए को पुनर्स्थापित करने या अपने डिवाइस को खोने के लिए बाद में अपने सहेजे गए बीज का उपयोग कर सकते हैं। \n\n आप इस बीज को फिर से देख सकते हैं",
"seedtype": "बीज", "seedtype": "बीज",
"seedtype_alert_content": "अन्य पर्स के साथ बीज साझा करना केवल BIP39 सीडटाइप के साथ संभव है।", "seedtype_alert_content": "अन्य पर्स के साथ बीज साझा करना केवल BIP39 सीडटाइप के साथ संभव है।",
"seedtype_alert_title": "बीजगणित अलर्ट", "seedtype_alert_title": "बीजगणित अलर्ट",
@ -743,6 +757,10 @@
"silent_payments_settings": "मूक भुगतान सेटिंग्स", "silent_payments_settings": "मूक भुगतान सेटिंग्स",
"single_seed_wallets_group": "एकल बीज बटुए", "single_seed_wallets_group": "एकल बीज बटुए",
"slidable": "फिसलने लायक", "slidable": "फिसलने लायक",
"solana_create_associated_token_account_exception": "रसीद पते के लिए संबद्ध टोकन खाता बनाने में त्रुटि।",
"solana_no_associated_token_account_exception": "इस पते के लिए कोई जुड़ा हुआ टोकन खाता नहीं है।",
"solana_sign_native_transaction_rent_exception": "लेन -देन पूरा नहीं किया जा सकता है। अपर्याप्त सोल लेनदेन के बाद किराए के लिए छोड़ दिया। कृपया अपने सोल बैलेंस को टॉप करें या आपके द्वारा भेजे जा रहे सोल की मात्रा को कम करें।",
"solana_sign_spl_token_transaction_rent_exception": "लेन -देन पूरा नहीं किया जा सकता है। अपर्याप्त सोल लेनदेन के बाद किराए के लिए छोड़ दिया। कृपया अपने सोल बैलेंस को ऊपर रखें।",
"sort_by": "इसके अनुसार क्रमबद्ध करें", "sort_by": "इसके अनुसार क्रमबद्ध करें",
"spend_key_private": "खर्च करना (निजी)", "spend_key_private": "खर्च करना (निजी)",
"spend_key_public": "खर्च करना (जनता)", "spend_key_public": "खर्च करना (जनता)",
@ -755,7 +773,7 @@
"support_description_guides": "सामान्य मुद्दों के लिए प्रलेखन और समर्थन", "support_description_guides": "सामान्य मुद्दों के लिए प्रलेखन और समर्थन",
"support_description_live_chat": "मुक्त और तेजी से! प्रशिक्षित सहायता प्रतिनिधि सहायता के लिए उपलब्ध हैं", "support_description_live_chat": "मुक्त और तेजी से! प्रशिक्षित सहायता प्रतिनिधि सहायता के लिए उपलब्ध हैं",
"support_description_other_links": "हमारे समुदायों में शामिल हों या अन्य तरीकों के माध्यम से हमारे साथी तक पहुंचें", "support_description_other_links": "हमारे समुदायों में शामिल हों या अन्य तरीकों के माध्यम से हमारे साथी तक पहुंचें",
"support_title_guides": "केक वॉलेट गाइड", "support_title_guides": "केक बटुए डॉक्स",
"support_title_live_chat": "लाइव सहायता", "support_title_live_chat": "लाइव सहायता",
"support_title_other_links": "अन्य समर्थन लिंक", "support_title_other_links": "अन्य समर्थन लिंक",
"sweeping_wallet": "स्वीपिंग वॉलेट", "sweeping_wallet": "स्वीपिंग वॉलेट",
@ -894,6 +912,7 @@
"variable_pair_not_supported": "यह परिवर्तनीय जोड़ी चयनित एक्सचेंजों के साथ समर्थित नहीं है", "variable_pair_not_supported": "यह परिवर्तनीय जोड़ी चयनित एक्सचेंजों के साथ समर्थित नहीं है",
"verification": "सत्यापन", "verification": "सत्यापन",
"verify_message": "संदेश सत्यापित करें", "verify_message": "संदेश सत्यापित करें",
"verify_seed": "बीज सत्यापित करें",
"verify_with_2fa": "केक 2FA के साथ सत्यापित करें", "verify_with_2fa": "केक 2FA के साथ सत्यापित करें",
"version": "संस्करण ${currentVersion}", "version": "संस्करण ${currentVersion}",
"view_all": "सभी देखें", "view_all": "सभी देखें",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Kupite svjetske unaprijed plaćene kartice i poklon kartice", "cake_pay_subtitle": "Kupite svjetske unaprijed plaćene kartice i poklon kartice",
"cake_pay_web_cards_subtitle": "Kupujte prepaid kartice i poklon kartice diljem svijeta", "cake_pay_web_cards_subtitle": "Kupujte prepaid kartice i poklon kartice diljem svijeta",
"cake_pay_web_cards_title": "Cake Pay Web kartice", "cake_pay_web_cards_title": "Cake Pay Web kartice",
"cake_seeds_save_disclaimer": "Molimo spremite ove riječi na sigurno mjesto! Ako izgubite pristup vašem novčaniku, podrška za novčanik za kolače ne može vam pomoći", "cake_seeds_save_disclaimer": "Molimo spremite ove riječi na sigurno mjesto! Trebat će vam ove riječi da biste vratili novčanik na novi uređaj.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Potvrđujem da ne koristim proxy ili vpn",
"cakepay_confirm_purchase": "Potvrdi kupnju",
"cakepay_confirm_terms_agreed": "Slažem se s ovdje predstavljenim uvjetima:",
"cakepay_confirm_voided_refund": "Razumijem da će pokušaji otkupa od ograničene zemlje poništiti bilo koji povrat novca",
"cakepay_ios_not_available": "Oprostite, ova poklon kartica nije dostupna na iOS -u. Umjesto toga, možete ga kupiti na Androidu ili putem naše web stranice.", "cakepay_ios_not_available": "Oprostite, ova poklon kartica nije dostupna na iOS -u. Umjesto toga, možete ga kupiti na Androidu ili putem naše web stranice.",
"cakepay_prepaid_card": "CakePay unaprijed plaćena debitna kartica", "cakepay_prepaid_card": "CakePay unaprijed plaćena debitna kartica",
"camera_consent": "Vaš će fotoaparat koristiti za snimanje slike u svrhu identifikacije od strane ${provider}. Pojedinosti potražite u njihovoj politici privatnosti.", "camera_consent": "Vaš će fotoaparat koristiti za snimanje slike u svrhu identifikacije od strane ${provider}. Pojedinosti potražite u njihovoj politici privatnosti.",
@ -355,12 +359,15 @@
"how_to_use": "Kako koristiti", "how_to_use": "Kako koristiti",
"how_to_use_card": "Kako koristiti ovu karticu", "how_to_use_card": "Kako koristiti ovu karticu",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Ako svoj uređaj ne vidite gore, budite sigurni da je vaša knjiga budna i otključana!",
"ignor": "Zanemariti", "ignor": "Zanemariti",
"import": "Uvoz", "import": "Uvoz",
"importNFTs": "Uvoz NFT-ova", "importNFTs": "Uvoz NFT-ova",
"in_store": "U trgovini", "in_store": "U trgovini",
"incoming": "Dolazno", "incoming": "Dolazno",
"incorrect_seed": "Uneseni tekst nije valjan.", "incorrect_seed": "Uneseni tekst nije valjan.",
"incorrect_seed_option": "Netočno. Pokušajte ponovo",
"incorrect_seed_option_back": "Netočno. Provjerite je li vaše sjeme ispravno spasilo i pokušajte ponovo.",
"inputs": "Unosi", "inputs": "Unosi",
"insufficient_funds_for_tx": "Nedovoljna sredstva za uspješno izvršavanje transakcije.", "insufficient_funds_for_tx": "Nedovoljna sredstva za uspješno izvršavanje transakcije.",
"insufficient_lamport_for_tx": "Nemate dovoljno SOL -a da pokriva transakciju i njegovu transakcijsku naknadu. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete.", "insufficient_lamport_for_tx": "Nemate dovoljno SOL -a da pokriva transakciju i njegovu transakcijsku naknadu. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete.",
@ -470,6 +477,7 @@
"online": "Na mreži", "online": "Na mreži",
"onramper_option_description": "Brzo kupite kriptovalute s mnogim načinima plaćanja. Dostupno u većini zemalja. Širenja i naknade variraju.", "onramper_option_description": "Brzo kupite kriptovalute s mnogim načinima plaćanja. Dostupno u većini zemalja. Širenja i naknade variraju.",
"open_gift_card": "Otvori darovnu karticu", "open_gift_card": "Otvori darovnu karticu",
"open_wallet": "Otvoreni novčanik",
"optional_description": "Opcijski opis", "optional_description": "Opcijski opis",
"optional_email_hint": "Neobavezna e-pošta za obavijest primatelja", "optional_email_hint": "Neobavezna e-pošta za obavijest primatelja",
"optional_name": "Izborno ime primatelja", "optional_name": "Izborno ime primatelja",
@ -538,6 +546,7 @@
"recipient_address": "Primateljeva adresa", "recipient_address": "Primateljeva adresa",
"reconnect": "Ponovno povezivanje", "reconnect": "Ponovno povezivanje",
"reconnect_alert_text": "Jeste li sigurni da se želite ponovno povezati?", "reconnect_alert_text": "Jeste li sigurni da se želite ponovno povezati?",
"reconnect_your_hardware_wallet": "Ponovno spojite svoj hardverski novčanik",
"reconnection": "Ponovno povezivanje", "reconnection": "Ponovno povezivanje",
"red_dark_theme": "Crvena tamna tema", "red_dark_theme": "Crvena tamna tema",
"red_light_theme": "Tema crvenog svjetla", "red_light_theme": "Tema crvenog svjetla",
@ -619,6 +628,7 @@
"seed_alert_title": "Upozorenje", "seed_alert_title": "Upozorenje",
"seed_alert_yes": "Jesam", "seed_alert_yes": "Jesam",
"seed_choose": "Odaberi jezik pristupnog izraza", "seed_choose": "Odaberi jezik pristupnog izraza",
"seed_display_path": "Izbornik -> Sigurnost i sigurnosna kopija -> Prikaži ključ/sjemenke",
"seed_hex_form": "Sjeme novčanika (šesterokutni oblik)", "seed_hex_form": "Sjeme novčanika (šesterokutni oblik)",
"seed_key": "Sjemenski ključ", "seed_key": "Sjemenski ključ",
"seed_language": "Sjemeni jezik", "seed_language": "Sjemeni jezik",
@ -637,9 +647,13 @@
"seed_language_russian": "Ruski", "seed_language_russian": "Ruski",
"seed_language_spanish": "Španjolski", "seed_language_spanish": "Španjolski",
"seed_phrase_length": "Duljina početne fraze", "seed_phrase_length": "Duljina početne fraze",
"seed_position_question_one": "Što je",
"seed_position_question_two": "Riječ vaše sjemenske fraze?",
"seed_reminder": "Molimo zapišite ih u slučaju da izgubite mobitel ili izbrišete podatke", "seed_reminder": "Molimo zapišite ih u slučaju da izgubite mobitel ili izbrišete podatke",
"seed_share": "Podijeli pristupni izraz", "seed_share": "Podijeli pristupni izraz",
"seed_title": "Prisupni izraz", "seed_title": "Prisupni izraz",
"seed_verified": "Potvrđeno sjeme",
"seed_verified_subtext": "Svoje spremljeno sjeme možete kasnije koristiti za vraćanje ovog novčanika u slučaju korupcije ili gubitka uređaja. \n\n To sjeme možete ponovo pogledati iz",
"seedtype": "Sjemenska vrsta", "seedtype": "Sjemenska vrsta",
"seedtype_alert_content": "Dijeljenje sjemena s drugim novčanicima moguće je samo s BIP39 sjemenom.", "seedtype_alert_content": "Dijeljenje sjemena s drugim novčanicima moguće je samo s BIP39 sjemenom.",
"seedtype_alert_title": "Upozorenje o sjemenu", "seedtype_alert_title": "Upozorenje o sjemenu",
@ -741,6 +755,10 @@
"silent_payments_settings": "Postavke tihih plaćanja", "silent_payments_settings": "Postavke tihih plaćanja",
"single_seed_wallets_group": "Jednostruki novčanici", "single_seed_wallets_group": "Jednostruki novčanici",
"slidable": "Klizna", "slidable": "Klizna",
"solana_create_associated_token_account_exception": "Pogreška u stvaranju povezanog token računa za adresu primanja.",
"solana_no_associated_token_account_exception": "Za ovu adresu ne postoji povezani token račun.",
"solana_sign_native_transaction_rent_exception": "Transakcija se ne može završiti. Nedovoljno sol ostao je za najam nakon transakcije. Ljubazno nadopunite svoj SOL saldo ili smanjite količinu SOL -a koju šaljete.",
"solana_sign_spl_token_transaction_rent_exception": "Transakcija se ne može završiti. Nedovoljno sol ostao je za najam nakon transakcije. Ljubazno nadopunite svoju sol ravnotežu.",
"sort_by": "Poredaj po", "sort_by": "Poredaj po",
"spend_key_private": "Spend key (privatni)", "spend_key_private": "Spend key (privatni)",
"spend_key_public": "Spend key (javni)", "spend_key_public": "Spend key (javni)",
@ -753,7 +771,7 @@
"support_description_guides": "Dokumentacija i podrška za uobičajena pitanja", "support_description_guides": "Dokumentacija i podrška za uobičajena pitanja",
"support_description_live_chat": "Besplatno i brzo! Obučeni predstavnici podrške dostupni su za pomoć", "support_description_live_chat": "Besplatno i brzo! Obučeni predstavnici podrške dostupni su za pomoć",
"support_description_other_links": "Pridružite se našim zajednicama ili nam dosegnu naše partnere drugim metodama", "support_description_other_links": "Pridružite se našim zajednicama ili nam dosegnu naše partnere drugim metodama",
"support_title_guides": "Vodiči za torte", "support_title_guides": "Dokumenti s kolačem kolača",
"support_title_live_chat": "Podrška uživo", "support_title_live_chat": "Podrška uživo",
"support_title_other_links": "Ostale veze za podršku", "support_title_other_links": "Ostale veze za podršku",
"sweeping_wallet": "Čisti novčanik", "sweeping_wallet": "Čisti novčanik",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "Ovaj par varijabli nije podržan s odabranim burzama", "variable_pair_not_supported": "Ovaj par varijabli nije podržan s odabranim burzama",
"verification": "Potvrda", "verification": "Potvrda",
"verify_message": "Provjerite poruku", "verify_message": "Provjerite poruku",
"verify_seed": "Provjerite sjeme",
"verify_with_2fa": "Provjerite s Cake 2FA", "verify_with_2fa": "Provjerite s Cake 2FA",
"version": "Verzija ${currentVersion}", "version": "Verzija ${currentVersion}",
"view_all": "Prikaži sve", "view_all": "Prikaži sve",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Գնեք համաշխարհային նախավճարային քարտեր և նվեր քարտեր", "cake_pay_subtitle": "Գնեք համաշխարհային նախավճարային քարտեր և նվեր քարտեր",
"cake_pay_web_cards_subtitle": "Գնեք համաշխարհային նախավճարային քարտեր և նվեր քարտեր", "cake_pay_web_cards_subtitle": "Գնեք համաշխարհային նախավճարային քարտեր և նվեր քարտեր",
"cake_pay_web_cards_title": "Cake Pay Վեբ Քարտեր", "cake_pay_web_cards_title": "Cake Pay Վեբ Քարտեր",
"cake_seeds_save_disclaimer": "Խնդրում ենք պահպանել այս բառերը անվտանգ տեղում: Եթե ​​ձեր դրամապանակը կորցնեք մուտքը, տորթի դրամապանակի աջակցությունը չի կարող օգնել ձեզ", "cake_seeds_save_disclaimer": "Խնդրում ենք պահպանել այս բառերը անվտանգ տեղում: Ձեզ հարկավոր կլինի այս բառերը `ձեր դրամապանակը նոր սարքում վերականգնելու համար:",
"cake_wallet": "Cake Գաղտնապահոց", "cake_wallet": "Cake Գաղտնապահոց",
"cakepay_confirm_no_vpn": "Ես հաստատում եմ, որ ես չեմ օգտագործում վստահված անձ կամ VPN",
"cakepay_confirm_purchase": "Հաստատեք գնումը",
"cakepay_confirm_terms_agreed": "Ես համաձայն եմ այստեղ ներկայացված պայմաններին.",
"cakepay_confirm_voided_refund": "Ես հասկանում եմ, որ սահմանափակված երկրի մարման փորձերը կվերականգնեն ցանկացած փոխհատուցում",
"cakepay_ios_not_available": "Ներեցեք, այս նվեր քարտը հասանելի չէ iOS- ում: Փոխարենը կարող եք այն գնել Android- ում կամ մեր կայքում:", "cakepay_ios_not_available": "Ներեցեք, այս նվեր քարտը հասանելի չէ iOS- ում: Փոխարենը կարող եք այն գնել Android- ում կամ մեր կայքում:",
"cakepay_prepaid_card": "CakePay Նախավճարային Դեբետային Քարտ", "cakepay_prepaid_card": "CakePay Նախավճարային Դեբետային Քարտ",
"camera_consent": "Ձեր տեսախցիկը կօգտագործվի ${provider}-ի կողմից ինքնությունը հաստատելու նպատակով: Խնդրում ենք ծանոթանալ նրանց Գաղտնիության Քաղաքականության հետ:", "camera_consent": "Ձեր տեսախցիկը կօգտագործվի ${provider}-ի կողմից ինքնությունը հաստատելու նպատակով: Խնդրում ենք ծանոթանալ նրանց Գաղտնիության Քաղաքականության հետ:",
@ -355,12 +359,15 @@
"how_to_use": "Ինչպես օգտագործել", "how_to_use": "Ինչպես օգտագործել",
"how_to_use_card": "Ինչպես օգտագործել այս քարտը", "how_to_use_card": "Ինչպես օգտագործել այս քարտը",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Եթե ​​ձեր սարքը վերեւում չեք տեսնում, համոզվեք, որ ձեր Ledger- ը արթուն է եւ բացված:",
"ignor": "Անտեսել", "ignor": "Անտեսել",
"import": "Ներմուծել", "import": "Ներմուծել",
"importNFTs": "Ներմուծել NFT-ներ", "importNFTs": "Ներմուծել NFT-ներ",
"in_store": "Տեղում", "in_store": "Տեղում",
"incoming": "Մուտքային", "incoming": "Մուտքային",
"incorrect_seed": "Տեքստը սխալ է", "incorrect_seed": "Տեքստը սխալ է",
"incorrect_seed_option": "Սխալ Խնդրում ենք կրկին փորձել",
"incorrect_seed_option_back": "Սխալ Խնդրում ենք համոզվեք, որ ձեր սերմը ճիշտ պահվում է եւ կրկին փորձեք:",
"inputs": "Մուտքեր", "inputs": "Մուտքեր",
"insufficient_funds_for_tx": "Անբավարար միջոցներ `գործարքը հաջողությամբ կատարելու համար:", "insufficient_funds_for_tx": "Անբավարար միջոցներ `գործարքը հաջողությամբ կատարելու համար:",
"insufficient_lamport_for_tx": "Դուք չունեք բավարար SOL՝ գործարքն և գործարքի վարձը ծածկելու համար։ Խնդրում ենք ավելացնել ավելի շատ SOL ձեր դրամապանակում կամ նվազեցնել ուղարկվող SOL-ի քանակը։", "insufficient_lamport_for_tx": "Դուք չունեք բավարար SOL՝ գործարքն և գործարքի վարձը ծածկելու համար։ Խնդրում ենք ավելացնել ավելի շատ SOL ձեր դրամապանակում կամ նվազեցնել ուղարկվող SOL-ի քանակը։",
@ -470,6 +477,7 @@
"online": "Առցանց", "online": "Առցանց",
"onramper_option_description": "Արագ գնեք կրիպտոցուլեր շատ վճարման մեթոդներով։ Հասանելի է մեծ մասամբ երկրներում։ Տարածված և վճարները փոփոխվում են", "onramper_option_description": "Արագ գնեք կրիպտոցուլեր շատ վճարման մեթոդներով։ Հասանելի է մեծ մասամբ երկրներում։ Տարածված և վճարները փոփոխվում են",
"open_gift_card": "Բացեք նվեր քարտ", "open_gift_card": "Բացեք նվեր քարտ",
"open_wallet": "Բաց դրամապանակ",
"optional_description": "Ոչ պարտադիր նկարագրություն", "optional_description": "Ոչ պարտադիր նկարագրություն",
"optional_email_hint": "Ոչ պարտադիր վճարողի ծանուցման էլեկտրոնային փոստ", "optional_email_hint": "Ոչ պարտադիր վճարողի ծանուցման էլեկտրոնային փոստ",
"optional_name": "Ոչ պարտադիր ստացողի անուն", "optional_name": "Ոչ պարտադիր ստացողի անուն",
@ -538,6 +546,7 @@
"recipient_address": "Ստացողի հասցե", "recipient_address": "Ստացողի հասցե",
"reconnect": "Վերակապվել", "reconnect": "Վերակապվել",
"reconnect_alert_text": "Դուք վստահ եք, որ ուզում եք վերակապվել?", "reconnect_alert_text": "Դուք վստահ եք, որ ուզում եք վերակապվել?",
"reconnect_your_hardware_wallet": "Միացրեք ձեր ապարատային դրամապանակը",
"reconnection": "Վերակապում", "reconnection": "Վերակապում",
"red_dark_theme": "Կարմիր մութ տեսք", "red_dark_theme": "Կարմիր մութ տեսք",
"red_light_theme": "Կարմիր պայծառ տեսք", "red_light_theme": "Կարմիր պայծառ տեսք",
@ -619,6 +628,7 @@
"seed_alert_title": "Ուշադրություն", "seed_alert_title": "Ուշադրություն",
"seed_alert_yes": "Այո, ես արդեն գրի եմ առել այն", "seed_alert_yes": "Այո, ես արդեն գրի եմ առել այն",
"seed_choose": "Ընտրել սերմի լեզուն", "seed_choose": "Ընտրել սերմի լեզուն",
"seed_display_path": "MENU -> Անվտանգություն եւ պահուստավորում -> Show ույց տալ ստեղնը / սերմերը",
"seed_hex_form": "Դրամապանակի սերմ (hex ֆորմատ)", "seed_hex_form": "Դրամապանակի սերմ (hex ֆորմատ)",
"seed_key": "Սերմի բանալի", "seed_key": "Սերմի բանալի",
"seed_language": "Սերմի լեզու", "seed_language": "Սերմի լեզու",
@ -637,9 +647,13 @@
"seed_language_russian": "Ռուսերեն", "seed_language_russian": "Ռուսերեն",
"seed_language_spanish": "Իսպաներեն", "seed_language_spanish": "Իսպաներեն",
"seed_phrase_length": "Սերմի արտահայտության երկարություն", "seed_phrase_length": "Սերմի արտահայտության երկարություն",
"seed_position_question_one": "Ինչ է",
"seed_position_question_two": "Ձեր սերմի արտահայտության խոսքը:",
"seed_reminder": "Խնդրում ենք գրի առնել այս տեղեկությունը, եթե դուք կորցնեք կամ ջնջեք ձեր հեռախոսը", "seed_reminder": "Խնդրում ենք գրի առնել այս տեղեկությունը, եթե դուք կորցնեք կամ ջնջեք ձեր հեռախոսը",
"seed_share": "Կիսվել սերմով", "seed_share": "Կիսվել սերմով",
"seed_title": "Սերմ", "seed_title": "Սերմ",
"seed_verified": "SEED- ը հաստատեց",
"seed_verified_subtext": "Դուք կարող եք ավելի ուշ օգտագործել ձեր պահպանված սերմը `վերականգնելու այս դրամապանակը կոռուպցիայի դեպքում կամ ձեր սարքը կորցնելու դեպքում: \n\n կարող եք կրկին դիտել այս սերմը",
"seedtype": "Սերմի տեսակ", "seedtype": "Սերմի տեսակ",
"seedtype_alert_content": "Այլ դրամապանակներով սերմերի փոխանակումը հնարավոր է միայն BIP39 SEEDTYPE- ով:", "seedtype_alert_content": "Այլ դրամապանակներով սերմերի փոխանակումը հնարավոր է միայն BIP39 SEEDTYPE- ով:",
"seedtype_alert_title": "SEEDTYPE ALERT", "seedtype_alert_title": "SEEDTYPE ALERT",
@ -741,6 +755,10 @@
"silent_payments_settings": "Լուռ Վճարումներ Կարգավորումներ", "silent_payments_settings": "Լուռ Վճարումներ Կարգավորումներ",
"single_seed_wallets_group": "Մեկ սերմերի դրամապանակներ", "single_seed_wallets_group": "Մեկ սերմերի դրամապանակներ",
"slidable": "Սահելի", "slidable": "Սահելի",
"solana_create_associated_token_account_exception": "Recesient Advent- ի համար հարակից նշանների հաշիվ ստեղծելու սխալ:",
"solana_no_associated_token_account_exception": "Այս հասցեի համար կապված նշանների հաշիվ չկա:",
"solana_sign_native_transaction_rent_exception": "Գործարքը հնարավոր չէ լրացնել: Անբավարար սոլը գործարքից հետո վարձով է մնացել: Սիրով վերացրեք ձեր SOL հավասարակշռությունը կամ նվազեցրեք ձեր ուղարկած սոլի քանակը:",
"solana_sign_spl_token_transaction_rent_exception": "Գործարքը հնարավոր չէ լրացնել: Անբավարար սոլը գործարքից հետո վարձով է մնացել: Սիրով վերացրեք ձեր SOL հավասարակշռությունը:",
"sort_by": "Դասավորել ըստ", "sort_by": "Դասավորել ըստ",
"spend_key_private": "Վճարման բանալի (գախտնի)", "spend_key_private": "Վճարման բանալի (գախտնի)",
"spend_key_public": "Վճարման բանալի (հանրային)", "spend_key_public": "Վճարման բանալի (հանրային)",
@ -753,7 +771,7 @@
"support_description_guides": "Տարածված խնդիրների փաստաթղթավորում և աջակցություն", "support_description_guides": "Տարածված խնդիրների փաստաթղթավորում և աջակցություն",
"support_description_live_chat": "Անվճար և արագ աջակցություն! Պատրաստված մասնագետները պատրաստ են օգնել", "support_description_live_chat": "Անվճար և արագ աջակցություն! Պատրաստված մասնագետները պատրաստ են օգնել",
"support_description_other_links": "Միացեք մեր համայնքին կամ հասեք մեզ այլ միջոցներով", "support_description_other_links": "Միացեք մեր համայնքին կամ հասեք մեզ այլ միջոցներով",
"support_title_guides": "Cake Wallet ուղեցույց", "support_title_guides": "Տորթ դրամապանակի փաստաթղթեր",
"support_title_live_chat": "Անմիջական աջակցություն", "support_title_live_chat": "Անմիջական աջակցություն",
"support_title_other_links": "Այլ աջակցության հղումներ", "support_title_other_links": "Այլ աջակցության հղումներ",
"sweeping_wallet": "Դրամապանակը մաքրվում է", "sweeping_wallet": "Դրամապանակը մաքրվում է",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "Այս փոփոխականի զույգը չի աջակցվում ընտրված բորսաների հետ", "variable_pair_not_supported": "Այս փոփոխականի զույգը չի աջակցվում ընտրված բորսաների հետ",
"verification": "Ստուգում", "verification": "Ստուգում",
"verify_message": "Ստուգել հաղորդագրությունը", "verify_message": "Ստուգել հաղորդագրությունը",
"verify_seed": "Ստուգեք սերմը",
"verify_with_2fa": "Ստուգեք Cake 2FA-ով", "verify_with_2fa": "Ստուգեք Cake 2FA-ով",
"version": "Տարբերակ ${currentVersion}", "version": "Տարբերակ ${currentVersion}",
"view_all": "Դիտել բոլորը", "view_all": "Դիտել բոլորը",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Beli kartu prabayar di seluruh dunia dan kartu hadiah", "cake_pay_subtitle": "Beli kartu prabayar di seluruh dunia dan kartu hadiah",
"cake_pay_web_cards_subtitle": "Beli kartu prabayar dan kartu hadiah secara global", "cake_pay_web_cards_subtitle": "Beli kartu prabayar dan kartu hadiah secara global",
"cake_pay_web_cards_title": "Kartu Web Cake Pay", "cake_pay_web_cards_title": "Kartu Web Cake Pay",
"cake_seeds_save_disclaimer": "Harap simpan kata -kata ini di tempat yang aman! Jika Anda kehilangan akses ke dompet Anda, dukungan dompet kue tidak dapat membantu Anda", "cake_seeds_save_disclaimer": "Harap simpan kata -kata ini di tempat yang aman! Anda akan membutuhkan kata -kata ini untuk mengembalikan dompet Anda pada perangkat baru.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Saya mengkonfirmasi saya tidak menggunakan proxy atau vpn",
"cakepay_confirm_purchase": "Konfirmasi pembelian",
"cakepay_confirm_terms_agreed": "Saya setuju dengan syarat dan ketentuan yang disajikan di sini:",
"cakepay_confirm_voided_refund": "Saya mengerti upaya penebusan dari negara terbatas akan membatalkan pengembalian dana",
"cakepay_ios_not_available": "Maaf, kartu hadiah ini tidak tersedia di iOS. Anda dapat membelinya di Android atau melalui situs web kami sebagai gantinya.", "cakepay_ios_not_available": "Maaf, kartu hadiah ini tidak tersedia di iOS. Anda dapat membelinya di Android atau melalui situs web kami sebagai gantinya.",
"cakepay_prepaid_card": "Kartu Debit Prabayar CakePay", "cakepay_prepaid_card": "Kartu Debit Prabayar CakePay",
"camera_consent": "Kamera Anda akan digunakan untuk mengambil gambar untuk tujuan identifikasi oleh ${provider}. Silakan periksa Kebijakan Privasi mereka untuk detailnya.", "camera_consent": "Kamera Anda akan digunakan untuk mengambil gambar untuk tujuan identifikasi oleh ${provider}. Silakan periksa Kebijakan Privasi mereka untuk detailnya.",
@ -355,12 +359,15 @@
"how_to_use": "Cara Penggunaan", "how_to_use": "Cara Penggunaan",
"how_to_use_card": "Bagaimana menggunakan kartu ini", "how_to_use_card": "Bagaimana menggunakan kartu ini",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Jika Anda tidak melihat perangkat Anda di atas, pastikan buku besar Anda terjaga dan tidak terkunci!",
"ignor": "Abaikan", "ignor": "Abaikan",
"import": "Impor", "import": "Impor",
"importNFTs": "Impor NFT", "importNFTs": "Impor NFT",
"in_store": "Di Toko", "in_store": "Di Toko",
"incoming": "Masuk", "incoming": "Masuk",
"incorrect_seed": "Teks yang dimasukkan tidak valid.", "incorrect_seed": "Teks yang dimasukkan tidak valid.",
"incorrect_seed_option": "Salah. Tolong coba lagi",
"incorrect_seed_option_back": "Salah. Pastikan benih Anda disimpan dengan benar dan coba lagi.",
"inputs": "Input", "inputs": "Input",
"insufficient_funds_for_tx": "Dana yang tidak mencukupi untuk berhasil menjalankan transaksi.", "insufficient_funds_for_tx": "Dana yang tidak mencukupi untuk berhasil menjalankan transaksi.",
"insufficient_lamport_for_tx": "Anda tidak memiliki cukup SOL untuk menutupi transaksi dan biaya transaksinya. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim.", "insufficient_lamport_for_tx": "Anda tidak memiliki cukup SOL untuk menutupi transaksi dan biaya transaksinya. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim.",
@ -470,6 +477,7 @@
"online": "Online", "online": "Online",
"onramper_option_description": "Beli crypto dengan cepat dengan banyak metode pembayaran. Tersedia di sebagian besar negara. Spread dan biaya bervariasi.", "onramper_option_description": "Beli crypto dengan cepat dengan banyak metode pembayaran. Tersedia di sebagian besar negara. Spread dan biaya bervariasi.",
"open_gift_card": "Buka Kartu Hadiah", "open_gift_card": "Buka Kartu Hadiah",
"open_wallet": "Dompet Buka",
"openalias_alert_content": "Anda akan mengirim dana ke\n${recipient_name}", "openalias_alert_content": "Anda akan mengirim dana ke\n${recipient_name}",
"openalias_alert_title": "Alamat Terdeteksi", "openalias_alert_title": "Alamat Terdeteksi",
"optional_description": "Deskripsi opsional", "optional_description": "Deskripsi opsional",
@ -540,6 +548,7 @@
"recipient_address": "Alamat penerima", "recipient_address": "Alamat penerima",
"reconnect": "Sambungkan kembali", "reconnect": "Sambungkan kembali",
"reconnect_alert_text": "Apakah Anda yakin ingin menyambungkan kembali?", "reconnect_alert_text": "Apakah Anda yakin ingin menyambungkan kembali?",
"reconnect_your_hardware_wallet": "Hubungkan kembali dompet perangkat keras Anda",
"reconnection": "Koneksi kembali", "reconnection": "Koneksi kembali",
"red_dark_theme": "Tema gelap merah", "red_dark_theme": "Tema gelap merah",
"red_light_theme": "Tema lampu merah", "red_light_theme": "Tema lampu merah",
@ -622,6 +631,7 @@
"seed_alert_title": "Perhatian", "seed_alert_title": "Perhatian",
"seed_alert_yes": "Ya, sudah", "seed_alert_yes": "Ya, sudah",
"seed_choose": "Pilih bahasa bibit", "seed_choose": "Pilih bahasa bibit",
"seed_display_path": "Menu -> Keamanan dan Cadangan -> Tampilkan kunci/biji",
"seed_hex_form": "Biji dompet (bentuk hex)", "seed_hex_form": "Biji dompet (bentuk hex)",
"seed_key": "Kunci benih", "seed_key": "Kunci benih",
"seed_language": "Bahasa benih", "seed_language": "Bahasa benih",
@ -640,9 +650,13 @@
"seed_language_russian": "Rusia", "seed_language_russian": "Rusia",
"seed_language_spanish": "Spanyol", "seed_language_spanish": "Spanyol",
"seed_phrase_length": "Panjang frase benih", "seed_phrase_length": "Panjang frase benih",
"seed_position_question_one": "Apakah yang",
"seed_position_question_two": "Kata frasa benih Anda?",
"seed_reminder": "Silakan tulis ini di tempat yang aman jika kamu kehilangan atau menghapus ponselmu", "seed_reminder": "Silakan tulis ini di tempat yang aman jika kamu kehilangan atau menghapus ponselmu",
"seed_share": "Bagikan bibit", "seed_share": "Bagikan bibit",
"seed_title": "Bibit", "seed_title": "Bibit",
"seed_verified": "Benih diverifikasi",
"seed_verified_subtext": "Anda dapat menggunakan benih yang disimpan nanti untuk mengembalikan dompet ini jika terjadi korupsi atau kehilangan perangkat Anda. \n\n Anda dapat melihat benih ini lagi dari",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "Berbagi biji dengan dompet lain hanya dimungkinkan dengan BIP39 seedtype.", "seedtype_alert_content": "Berbagi biji dengan dompet lain hanya dimungkinkan dengan BIP39 seedtype.",
"seedtype_alert_title": "Peringatan seedtype", "seedtype_alert_title": "Peringatan seedtype",
@ -744,6 +758,10 @@
"silent_payments_settings": "Pengaturan pembayaran diam", "silent_payments_settings": "Pengaturan pembayaran diam",
"single_seed_wallets_group": "Dompet biji tunggal", "single_seed_wallets_group": "Dompet biji tunggal",
"slidable": "Dapat digeser", "slidable": "Dapat digeser",
"solana_create_associated_token_account_exception": "Kesalahan Membuat Akun Token Terkait untuk Alamat Penerima.",
"solana_no_associated_token_account_exception": "Tidak ada akun token terkait untuk alamat ini.",
"solana_sign_native_transaction_rent_exception": "Transaksi tidak dapat diselesaikan. SOL yang tidak mencukupi pergi untuk disewa setelah transaksi. Mohon tambah saldo SOL Anda atau kurangi jumlah SOL yang Anda kirim.",
"solana_sign_spl_token_transaction_rent_exception": "Transaksi tidak dapat diselesaikan. SOL yang tidak mencukupi pergi untuk disewa setelah transaksi. Mohon tambah saldo SOL Anda.",
"sort_by": "Sortir dengan", "sort_by": "Sortir dengan",
"spend_key_private": "Kunci pengeluaran (privat)", "spend_key_private": "Kunci pengeluaran (privat)",
"spend_key_public": "Kunci pengeluaran (publik)", "spend_key_public": "Kunci pengeluaran (publik)",
@ -756,7 +774,7 @@
"support_description_guides": "Dokumentasi dan dukungan untuk masalah umum", "support_description_guides": "Dokumentasi dan dukungan untuk masalah umum",
"support_description_live_chat": "Gratis dan Cepat! Perwakilan dukungan terlatih tersedia untuk membantu", "support_description_live_chat": "Gratis dan Cepat! Perwakilan dukungan terlatih tersedia untuk membantu",
"support_description_other_links": "Bergabunglah dengan komunitas kami atau hubungi kami mitra kami melalui metode lain", "support_description_other_links": "Bergabunglah dengan komunitas kami atau hubungi kami mitra kami melalui metode lain",
"support_title_guides": "Panduan Dompet Kue", "support_title_guides": "DOKS DOKO CAKE",
"support_title_live_chat": "Dukungan langsung", "support_title_live_chat": "Dukungan langsung",
"support_title_other_links": "Tautan dukungan lainnya", "support_title_other_links": "Tautan dukungan lainnya",
"sweeping_wallet": "Dompet menyapu", "sweeping_wallet": "Dompet menyapu",
@ -895,6 +913,7 @@
"variable_pair_not_supported": "Pasangan variabel ini tidak didukung dengan bursa yang dipilih", "variable_pair_not_supported": "Pasangan variabel ini tidak didukung dengan bursa yang dipilih",
"verification": "Verifikasi", "verification": "Verifikasi",
"verify_message": "Verifikasi pesan", "verify_message": "Verifikasi pesan",
"verify_seed": "Verifikasi benih",
"verify_with_2fa": "Verifikasi dengan Cake 2FA", "verify_with_2fa": "Verifikasi dengan Cake 2FA",
"version": "Versi ${currentVersion}", "version": "Versi ${currentVersion}",
"view_all": "Lihat Semua", "view_all": "Lihat Semua",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Acquista carte prepagate in tutto il mondo e carte regalo", "cake_pay_subtitle": "Acquista carte prepagate in tutto il mondo e carte regalo",
"cake_pay_web_cards_subtitle": "Acquista carte prepagate e carte regalo in tutto il mondo", "cake_pay_web_cards_subtitle": "Acquista carte prepagate e carte regalo in tutto il mondo",
"cake_pay_web_cards_title": "Carte Web Cake Pay", "cake_pay_web_cards_title": "Carte Web Cake Pay",
"cake_seeds_save_disclaimer": "Si prega di salvare queste parole in un posto sicuro! Se perdi l'accesso al tuo portafoglio, il supporto per il portafoglio della torta non può aiutarti", "cake_seeds_save_disclaimer": "Si prega di salvare queste parole in un posto sicuro! Avrai bisogno di queste parole per ripristinare il portafoglio su un nuovo dispositivo.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Conferma che non sto usando un proxy o una VPN",
"cakepay_confirm_purchase": "Conferma l'acquisto",
"cakepay_confirm_terms_agreed": "Accetto i termini e le condizioni presentati qui:",
"cakepay_confirm_voided_refund": "Capisco che i tentativi di rimborso da un paese limitato annullano qualsiasi rimborso",
"cakepay_ios_not_available": "Mi dispiace, questa carta regalo non è disponibile su iOS. Puoi acquistarlo su Android o tramite il nostro sito Web.", "cakepay_ios_not_available": "Mi dispiace, questa carta regalo non è disponibile su iOS. Puoi acquistarlo su Android o tramite il nostro sito Web.",
"cakepay_prepaid_card": "Carta di debito prepagata CakePay", "cakepay_prepaid_card": "Carta di debito prepagata CakePay",
"camera_consent": "La tua fotocamera verrà utilizzata per acquisire un'immagine a scopo identificativo da ${provider}. Si prega di controllare la loro Informativa sulla privacy per i dettagli.", "camera_consent": "La tua fotocamera verrà utilizzata per acquisire un'immagine a scopo identificativo da ${provider}. Si prega di controllare la loro Informativa sulla privacy per i dettagli.",
@ -356,12 +360,15 @@
"how_to_use": "Come usare", "how_to_use": "Come usare",
"how_to_use_card": "Come usare questa carta", "how_to_use_card": "Come usare questa carta",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Se non vedi il tuo dispositivo sopra, assicurati che il tuo libro mastro sia sveglio e sbloccato!",
"ignor": "Ignorare", "ignor": "Ignorare",
"import": "Importare", "import": "Importare",
"importNFTs": "Importa NFT", "importNFTs": "Importa NFT",
"in_store": "In negozio", "in_store": "In negozio",
"incoming": "In arrivo", "incoming": "In arrivo",
"incorrect_seed": "Il testo inserito non è valido.", "incorrect_seed": "Il testo inserito non è valido.",
"incorrect_seed_option": "Errato. Per favore riprova",
"incorrect_seed_option_back": "Errato. Assicurati che il tuo seme venga salvato correttamente e riprova.",
"inputs": "Input", "inputs": "Input",
"insufficient_funds_for_tx": "Fondi insufficienti per eseguire correttamente la transazione.", "insufficient_funds_for_tx": "Fondi insufficienti per eseguire correttamente la transazione.",
"insufficient_lamport_for_tx": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Si prega di aggiungere più SOL al tuo portafoglio o ridurre l'importo SOL che stai inviando.", "insufficient_lamport_for_tx": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Si prega di aggiungere più SOL al tuo portafoglio o ridurre l'importo SOL che stai inviando.",
@ -471,6 +478,7 @@
"online": "in linea", "online": "in linea",
"onramper_option_description": "Acquista rapidamente la criptovaluta con molti metodi di pagamento. Disponibile nella maggior parte dei paesi. Gli spread e le commissioni variano.", "onramper_option_description": "Acquista rapidamente la criptovaluta con molti metodi di pagamento. Disponibile nella maggior parte dei paesi. Gli spread e le commissioni variano.",
"open_gift_card": "Apri carta regalo", "open_gift_card": "Apri carta regalo",
"open_wallet": "Portafoglio aperto",
"optional_description": "Descrizione facoltativa", "optional_description": "Descrizione facoltativa",
"optional_email_hint": "Email di notifica del beneficiario facoltativa", "optional_email_hint": "Email di notifica del beneficiario facoltativa",
"optional_name": "Nome del destinatario facoltativo", "optional_name": "Nome del destinatario facoltativo",
@ -540,6 +548,7 @@
"recipient_address": "Indirizzo di destinazione", "recipient_address": "Indirizzo di destinazione",
"reconnect": "Riconnetti", "reconnect": "Riconnetti",
"reconnect_alert_text": "Sei sicuro di volerti riconnettere?", "reconnect_alert_text": "Sei sicuro di volerti riconnettere?",
"reconnect_your_hardware_wallet": "Ricollega il tuo portafoglio hardware",
"reconnection": "Riconnessione", "reconnection": "Riconnessione",
"red_dark_theme": "Red Dark Theme", "red_dark_theme": "Red Dark Theme",
"red_light_theme": "Tema della luce rossa", "red_light_theme": "Tema della luce rossa",
@ -621,6 +630,7 @@
"seed_alert_title": "Attenzione", "seed_alert_title": "Attenzione",
"seed_alert_yes": "Sì, l'ho fatto", "seed_alert_yes": "Sì, l'ho fatto",
"seed_choose": "Scegli la lingua del seme", "seed_choose": "Scegli la lingua del seme",
"seed_display_path": "Menu -> Sicurezza e backup -> Mostra chiave/Semi",
"seed_hex_form": "Seme di portafoglio (forma esadecimale)", "seed_hex_form": "Seme di portafoglio (forma esadecimale)",
"seed_key": "Chiave di semi", "seed_key": "Chiave di semi",
"seed_language": "Linguaggio di semi", "seed_language": "Linguaggio di semi",
@ -639,9 +649,13 @@
"seed_language_russian": "Russo", "seed_language_russian": "Russo",
"seed_language_spanish": "Spagnolo", "seed_language_spanish": "Spagnolo",
"seed_phrase_length": "Lunghezza della frase seed", "seed_phrase_length": "Lunghezza della frase seed",
"seed_position_question_one": "Qual è il",
"seed_position_question_two": "Parola della tua frase di semi?",
"seed_reminder": "Gentilmente trascrivi le parole. Ti tornerà utile in caso perdessi o ripristinassi il tuo telefono", "seed_reminder": "Gentilmente trascrivi le parole. Ti tornerà utile in caso perdessi o ripristinassi il tuo telefono",
"seed_share": "Condividi seme", "seed_share": "Condividi seme",
"seed_title": "Seme", "seed_title": "Seme",
"seed_verified": "Semi verificato",
"seed_verified_subtext": "Puoi usare il tuo seme salvato in seguito per ripristinare questo portafoglio in caso di corruzione o perdere il dispositivo. \n\n Puoi visualizzare di nuovo questo seme dal",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "La condivisione di semi con altri portafogli è possibile solo con Bip39 SeedType.", "seedtype_alert_content": "La condivisione di semi con altri portafogli è possibile solo con Bip39 SeedType.",
"seedtype_alert_title": "Avviso seedType", "seedtype_alert_title": "Avviso seedType",
@ -743,6 +757,10 @@
"silent_payments_settings": "Impostazioni di pagamenti silenziosi", "silent_payments_settings": "Impostazioni di pagamenti silenziosi",
"single_seed_wallets_group": "Portafogli singoli", "single_seed_wallets_group": "Portafogli singoli",
"slidable": "Scorrevole", "slidable": "Scorrevole",
"solana_create_associated_token_account_exception": "Errore Creazione di account token associato per l'indirizzo dei ricevimenti.",
"solana_no_associated_token_account_exception": "Non esiste un account token associato per questo indirizzo.",
"solana_sign_native_transaction_rent_exception": "La transazione non può essere completata. Sol insufficiente lasciato in affitto dopo la transazione. Si prega di ricaricare il saldo SOL o ridurre la quantità di sol che stai inviando.",
"solana_sign_spl_token_transaction_rent_exception": "La transazione non può essere completata. Sol insufficiente lasciato in affitto dopo la transazione. Si prega di ricaricare il tuo equilibrio sol.",
"sort_by": "Ordina per", "sort_by": "Ordina per",
"spend_key_private": "Chiave di spesa (privata)", "spend_key_private": "Chiave di spesa (privata)",
"spend_key_public": "Chiave di spesa (pubblica)", "spend_key_public": "Chiave di spesa (pubblica)",
@ -755,7 +773,7 @@
"support_description_guides": "Documentazione e supporto per problemi comuni", "support_description_guides": "Documentazione e supporto per problemi comuni",
"support_description_live_chat": "Gratuito e veloce! I rappresentanti di supporto qualificati sono disponibili per assistere", "support_description_live_chat": "Gratuito e veloce! I rappresentanti di supporto qualificati sono disponibili per assistere",
"support_description_other_links": "Unisciti alle nostre comunità o raggiungici i nostri partner attraverso altri metodi", "support_description_other_links": "Unisciti alle nostre comunità o raggiungici i nostri partner attraverso altri metodi",
"support_title_guides": "Guide del portafoglio per torte", "support_title_guides": "Documenti del portafoglio per torta",
"support_title_live_chat": "Supporto dal vivo", "support_title_live_chat": "Supporto dal vivo",
"support_title_other_links": "Altri collegamenti di supporto", "support_title_other_links": "Altri collegamenti di supporto",
"sweeping_wallet": "Portafoglio ampio", "sweeping_wallet": "Portafoglio ampio",
@ -894,6 +912,7 @@
"variable_pair_not_supported": "Questa coppia di variabili non è supportata con gli scambi selezionati", "variable_pair_not_supported": "Questa coppia di variabili non è supportata con gli scambi selezionati",
"verification": "Verifica", "verification": "Verifica",
"verify_message": "Verificare il messaggio", "verify_message": "Verificare il messaggio",
"verify_seed": "Verifica il seme",
"verify_with_2fa": "Verifica con Cake 2FA", "verify_with_2fa": "Verifica con Cake 2FA",
"version": "Versione ${currentVersion}", "version": "Versione ${currentVersion}",
"view_all": "Visualizza tutto", "view_all": "Visualizza tutto",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "世界中のプリペイドカードとギフトカードを購入します", "cake_pay_subtitle": "世界中のプリペイドカードとギフトカードを購入します",
"cake_pay_web_cards_subtitle": "世界中のプリペイド カードとギフト カードを購入する", "cake_pay_web_cards_subtitle": "世界中のプリペイド カードとギフト カードを購入する",
"cake_pay_web_cards_title": "Cake Pay ウェブカード", "cake_pay_web_cards_title": "Cake Pay ウェブカード",
"cake_seeds_save_disclaimer": "これらの言葉を安全な場所に保存してください!財布へのアクセスを失った場合、ケーキウォレットのサポートはあなたを助けることができません", "cake_seeds_save_disclaimer": "これらの言葉を安全な場所に保存してください!新しいデバイスで財布を復元するには、これらの単語が必要です。",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "私はプロキシまたはVPNを使用していないことを確認します",
"cakepay_confirm_purchase": "購入を確認します",
"cakepay_confirm_terms_agreed": "ここに提示されている条件に同意します。",
"cakepay_confirm_voided_refund": "制限された国からの償還の試みが払い戻しを無効にすることを理解しています",
"cakepay_ios_not_available": "申し訳ありませんが、このギフトカードはiOSでは利用できません。代わりにAndroidまたは当社のWebサイトから購入できます。", "cakepay_ios_not_available": "申し訳ありませんが、このギフトカードはiOSでは利用できません。代わりにAndroidまたは当社のWebサイトから購入できます。",
"cakepay_prepaid_card": "CakePayプリペイドデビットカード", "cakepay_prepaid_card": "CakePayプリペイドデビットカード",
"camera_consent": "あなたのカメラは、${provider}_ までに識別目的で画像を撮影するために使用されます。詳細については、プライバシー ポリシーをご確認ください。", "camera_consent": "あなたのカメラは、${provider}_ までに識別目的で画像を撮影するために使用されます。詳細については、プライバシー ポリシーをご確認ください。",
@ -356,12 +360,15 @@
"how_to_use": "使い方", "how_to_use": "使い方",
"how_to_use_card": "このカードの使用方法", "how_to_use_card": "このカードの使用方法",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "上記のデバイスが表示されない場合は、元帳が目を覚ましてロック解除されていることを確認してください!",
"ignor": "無視", "ignor": "無視",
"import": "輸入", "import": "輸入",
"importNFTs": "NFTのインポート", "importNFTs": "NFTのインポート",
"in_store": "インストア", "in_store": "インストア",
"incoming": "着信", "incoming": "着信",
"incorrect_seed": "入力されたテキストは無効です。", "incorrect_seed": "入力されたテキストは無効です。",
"incorrect_seed_option": "正しくない。もう一度やり直してください",
"incorrect_seed_option_back": "正しくない。種子が正しく保存されていることを確認し、再試行してください。",
"inputs": "入力", "inputs": "入力",
"insufficient_funds_for_tx": "トランザクションを正常に実行するための資金が不十分です。", "insufficient_funds_for_tx": "トランザクションを正常に実行するための資金が不十分です。",
"insufficient_lamport_for_tx": "トランザクションとその取引手数料をカバーするのに十分なSOLがありません。財布にソルを追加するか、送信するソル量を減らしてください。", "insufficient_lamport_for_tx": "トランザクションとその取引手数料をカバーするのに十分なSOLがありません。財布にソルを追加するか、送信するソル量を減らしてください。",
@ -471,6 +478,7 @@
"online": "オンライン", "online": "オンライン",
"onramper_option_description": "多くの支払い方法で暗号をすばやく購入してください。ほとんどの国で利用可能です。スプレッドと料金は異なります。", "onramper_option_description": "多くの支払い方法で暗号をすばやく購入してください。ほとんどの国で利用可能です。スプレッドと料金は異なります。",
"open_gift_card": "オープンギフトカード", "open_gift_card": "オープンギフトカード",
"open_wallet": "開いたウォレット",
"optional_description": "オプションの説明", "optional_description": "オプションの説明",
"optional_email_hint": "オプションの受取人通知メール", "optional_email_hint": "オプションの受取人通知メール",
"optional_name": "オプションの受信者名", "optional_name": "オプションの受信者名",
@ -539,6 +547,7 @@
"recipient_address": "受信者のアドレス", "recipient_address": "受信者のアドレス",
"reconnect": "再接続", "reconnect": "再接続",
"reconnect_alert_text": "再接続しますか?", "reconnect_alert_text": "再接続しますか?",
"reconnect_your_hardware_wallet": "ハードウェアウォレットを再接続します",
"reconnection": "再接続", "reconnection": "再接続",
"red_dark_theme": "赤い暗いテーマ", "red_dark_theme": "赤い暗いテーマ",
"red_light_theme": "赤色光のテーマ", "red_light_theme": "赤色光のテーマ",
@ -620,6 +629,7 @@
"seed_alert_title": "注意", "seed_alert_title": "注意",
"seed_alert_yes": "はい、あります", "seed_alert_yes": "はい、あります",
"seed_choose": "シード言語を選択してください", "seed_choose": "シード言語を選択してください",
"seed_display_path": "メニュー - >セキュリティとバックアップ - >キー/シードを表示します",
"seed_hex_form": "ウォレットシード(ヘックスフォーム)", "seed_hex_form": "ウォレットシード(ヘックスフォーム)",
"seed_key": "シードキー", "seed_key": "シードキー",
"seed_language": "シード言語", "seed_language": "シード言語",
@ -638,9 +648,13 @@
"seed_language_russian": "ロシア", "seed_language_russian": "ロシア",
"seed_language_spanish": "スペイン語", "seed_language_spanish": "スペイン語",
"seed_phrase_length": "シードフレーズの長さ", "seed_phrase_length": "シードフレーズの長さ",
"seed_position_question_one": "何ですか",
"seed_position_question_two": "あなたの種のフレーズの言葉?",
"seed_reminder": "スマートフォンを紛失したりワイプした場合に備えて、これらを書き留めてください", "seed_reminder": "スマートフォンを紛失したりワイプした場合に備えて、これらを書き留めてください",
"seed_share": "シードを共有する", "seed_share": "シードを共有する",
"seed_title": "シード", "seed_title": "シード",
"seed_verified": "種子確認済み",
"seed_verified_subtext": "後で保存された種子を使用して、腐敗やデバイスの紛失の場合にこの財布を復元することができます。\n\nこのシードを再度見ることができます",
"seedtype": "SeedType", "seedtype": "SeedType",
"seedtype_alert_content": "他の財布と種子を共有することは、BIP39 SeedTypeでのみ可能です。", "seedtype_alert_content": "他の財布と種子を共有することは、BIP39 SeedTypeでのみ可能です。",
"seedtype_alert_title": "SeedTypeアラート", "seedtype_alert_title": "SeedTypeアラート",
@ -742,6 +756,10 @@
"silent_payments_settings": "サイレントペイメント設定", "silent_payments_settings": "サイレントペイメント設定",
"single_seed_wallets_group": "シングルシードウォレット", "single_seed_wallets_group": "シングルシードウォレット",
"slidable": "スライド可能", "slidable": "スライド可能",
"solana_create_associated_token_account_exception": "関連するトークンの作成エラー受信アドレスのアカウント。",
"solana_no_associated_token_account_exception": "このアドレスに関連付けられたトークンアカウントはありません。",
"solana_sign_native_transaction_rent_exception": "トランザクションは完了できません。取引後にレンタルのために残された不十分なソル。ソルバランスを補充するか、送信するソルの量を減らしてください。",
"solana_sign_spl_token_transaction_rent_exception": "トランザクションは完了できません。取引後にレンタルのために残された不十分なソル。ソルバランスを補充してください。",
"sort_by": "並び替え", "sort_by": "並び替え",
"spend_key_private": "キーを使う (プライベート)", "spend_key_private": "キーを使う (プライベート)",
"spend_key_public": "キーを使う (パブリック)", "spend_key_public": "キーを使う (パブリック)",
@ -754,7 +772,7 @@
"support_description_guides": "一般的な問題のドキュメントとサポート", "support_description_guides": "一般的な問題のドキュメントとサポート",
"support_description_live_chat": "無料で速い!訓練されたサポート担当者が支援することができます", "support_description_live_chat": "無料で速い!訓練されたサポート担当者が支援することができます",
"support_description_other_links": "私たちのコミュニティに参加するか、他の方法を通して私たちのパートナーに連絡してください", "support_description_other_links": "私たちのコミュニティに参加するか、他の方法を通して私たちのパートナーに連絡してください",
"support_title_guides": "ケーキウォレットガイド", "support_title_guides": "ケーキウォレットドキュメント",
"support_title_live_chat": "ライブサポート", "support_title_live_chat": "ライブサポート",
"support_title_other_links": "その他のサポートリンク", "support_title_other_links": "その他のサポートリンク",
"sweeping_wallet": "スイープウォレット", "sweeping_wallet": "スイープウォレット",
@ -893,6 +911,7 @@
"variable_pair_not_supported": "この変数ペアは、選択した取引所ではサポートされていません", "variable_pair_not_supported": "この変数ペアは、選択した取引所ではサポートされていません",
"verification": "検証", "verification": "検証",
"verify_message": "メッセージを確認します", "verify_message": "メッセージを確認します",
"verify_seed": "シードを確認します",
"verify_with_2fa": "Cake 2FA で検証する", "verify_with_2fa": "Cake 2FA で検証する",
"version": "バージョン ${currentVersion}", "version": "バージョン ${currentVersion}",
"view_all": "すべて表示", "view_all": "すべて表示",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "전세계 선불 카드와 기프트 카드를 구입하십시오", "cake_pay_subtitle": "전세계 선불 카드와 기프트 카드를 구입하십시오",
"cake_pay_web_cards_subtitle": "전 세계 선불 카드 및 기프트 카드 구매", "cake_pay_web_cards_subtitle": "전 세계 선불 카드 및 기프트 카드 구매",
"cake_pay_web_cards_title": "케이크페이 웹카드", "cake_pay_web_cards_title": "케이크페이 웹카드",
"cake_seeds_save_disclaimer": "이 단어를 안전한 장소에 저장하십시오! 지갑에 대한 접근이 손실되면 케이크 지갑 지지대가 도움이되지 않습니다.", "cake_seeds_save_disclaimer": "이 단어를 안전한 장소에 저장하십시오! 새 장치에서 지갑을 복원하려면이 단어가 필요합니다.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "프록시 나 VPN을 사용하지 않는지 확인합니다.",
"cakepay_confirm_purchase": "구매 확인",
"cakepay_confirm_terms_agreed": "여기에 제시된 이용 약관에 동의합니다.",
"cakepay_confirm_voided_refund": "제한된 국가의 상환 시도는 환불을 무효화한다는 것을 이해합니다.",
"cakepay_ios_not_available": "죄송합니다.이 기프트 카드는 iOS에서 사용할 수 없습니다. Android 또는 웹 사이트를 통해 구매할 수 있습니다.", "cakepay_ios_not_available": "죄송합니다.이 기프트 카드는 iOS에서 사용할 수 없습니다. Android 또는 웹 사이트를 통해 구매할 수 있습니다.",
"cakepay_prepaid_card": "CakePay 선불 직불 카드", "cakepay_prepaid_card": "CakePay 선불 직불 카드",
"camera_consent": "귀하의 카메라는 ${provider}의 식별 목적으로 이미지를 캡처하는 데 사용됩니다. 자세한 내용은 해당 개인정보 보호정책을 확인하세요.", "camera_consent": "귀하의 카메라는 ${provider}의 식별 목적으로 이미지를 캡처하는 데 사용됩니다. 자세한 내용은 해당 개인정보 보호정책을 확인하세요.",
@ -355,12 +359,15 @@
"how_to_use": "사용하는 방법", "how_to_use": "사용하는 방법",
"how_to_use_card": "이 카드를 사용하는 방법", "how_to_use_card": "이 카드를 사용하는 방법",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "위의 장치가 표시되지 않으면 원장이 깨어 있고 잠금 해제되었는지 확인하십시오!",
"ignor": "무시하다", "ignor": "무시하다",
"import": "수입", "import": "수입",
"importNFTs": "NFT 가져오기", "importNFTs": "NFT 가져오기",
"in_store": "매장 내", "in_store": "매장 내",
"incoming": "들어오는", "incoming": "들어오는",
"incorrect_seed": "입력하신 텍스트가 유효하지 않습니다.", "incorrect_seed": "입력하신 텍스트가 유효하지 않습니다.",
"incorrect_seed_option": "잘못된. 다시 시도하십시오",
"incorrect_seed_option_back": "잘못된. 씨앗이 올바르게 저장되어 있는지 확인하고 다시 시도하십시오.",
"inputs": "입력", "inputs": "입력",
"insufficient_funds_for_tx": "거래를 성공적으로 실행하기위한 자금이 충분하지 않습니다.", "insufficient_funds_for_tx": "거래를 성공적으로 실행하기위한 자금이 충분하지 않습니다.",
"insufficient_lamport_for_tx": "거래 및 거래 수수료를 충당하기에 충분한 SOL이 없습니다. 지갑에 더 많은 솔을 추가하거나 보내는 솔을 줄입니다.", "insufficient_lamport_for_tx": "거래 및 거래 수수료를 충당하기에 충분한 SOL이 없습니다. 지갑에 더 많은 솔을 추가하거나 보내는 솔을 줄입니다.",
@ -470,6 +477,7 @@
"online": "온라인", "online": "온라인",
"onramper_option_description": "많은 결제 방법으로 암호화를 신속하게 구입하십시오. 대부분의 국가에서 사용할 수 있습니다. 스프레드와 수수료는 다양합니다.", "onramper_option_description": "많은 결제 방법으로 암호화를 신속하게 구입하십시오. 대부분의 국가에서 사용할 수 있습니다. 스프레드와 수수료는 다양합니다.",
"open_gift_card": "기프트 카드 열기", "open_gift_card": "기프트 카드 열기",
"open_wallet": "오픈 지갑",
"optional_description": "선택적 설명", "optional_description": "선택적 설명",
"optional_email_hint": "선택적 수취인 알림 이메일", "optional_email_hint": "선택적 수취인 알림 이메일",
"optional_name": "선택적 수신자 이름", "optional_name": "선택적 수신자 이름",
@ -502,8 +510,8 @@
"placeholder_transactions": "거래가 여기에 표시됩니다", "placeholder_transactions": "거래가 여기에 표시됩니다",
"please_fill_totp": "다른 기기에 있는 8자리 코드를 입력하세요.", "please_fill_totp": "다른 기기에 있는 8자리 코드를 입력하세요.",
"please_make_selection": "아래에서 선택하십시오 지갑 만들기 또는 복구.", "please_make_selection": "아래에서 선택하십시오 지갑 만들기 또는 복구.",
"please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
"Please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.", "Please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
"please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.",
"please_select": "선택 해주세요:", "please_select": "선택 해주세요:",
"please_select_backup_file": "백업 파일을 선택하고 백업 암호를 입력하십시오.", "please_select_backup_file": "백업 파일을 선택하고 백업 암호를 입력하십시오.",
"please_try_to_connect_to_another_node": "다른 노드에 연결을 시도하십시오", "please_try_to_connect_to_another_node": "다른 노드에 연결을 시도하십시오",
@ -539,6 +547,7 @@
"recipient_address": "받는 사람 주소", "recipient_address": "받는 사람 주소",
"reconnect": "다시 연결", "reconnect": "다시 연결",
"reconnect_alert_text": "다시 연결 하시겠습니까?", "reconnect_alert_text": "다시 연결 하시겠습니까?",
"reconnect_your_hardware_wallet": "하드웨어 지갑을 다시 연결하십시오",
"reconnection": "재 연결", "reconnection": "재 연결",
"red_dark_theme": "빨간 어두운 테마", "red_dark_theme": "빨간 어두운 테마",
"red_light_theme": "빨간불 테마", "red_light_theme": "빨간불 테마",
@ -620,6 +629,7 @@
"seed_alert_title": "주의", "seed_alert_title": "주의",
"seed_alert_yes": "네, 있어요", "seed_alert_yes": "네, 있어요",
"seed_choose": "시드 언어를 선택하십시오", "seed_choose": "시드 언어를 선택하십시오",
"seed_display_path": "메뉴 -> 보안 및 백업 -> 키/씨앗 표시",
"seed_hex_form": "지갑 씨앗 (16 진 양식)", "seed_hex_form": "지갑 씨앗 (16 진 양식)",
"seed_key": "시드 키", "seed_key": "시드 키",
"seed_language": "종자 언어", "seed_language": "종자 언어",
@ -638,9 +648,13 @@
"seed_language_russian": "러시아인", "seed_language_russian": "러시아인",
"seed_language_spanish": "스페인의", "seed_language_spanish": "스페인의",
"seed_phrase_length": "시드 문구 길이", "seed_phrase_length": "시드 문구 길이",
"seed_position_question_one": "무엇입니까",
"seed_position_question_two": "당신의 씨앗 문구의 말?",
"seed_reminder": "휴대 전화를 분실하거나 닦을 경우를 대비해 적어 두세요.", "seed_reminder": "휴대 전화를 분실하거나 닦을 경우를 대비해 적어 두세요.",
"seed_share": "시드 공유", "seed_share": "시드 공유",
"seed_title": "씨", "seed_title": "씨",
"seed_verified": "종자 확인",
"seed_verified_subtext": "나중에 저장된 씨앗을 사용하여 부패 또는 장치를 잃을 때이 지갑을 복원 할 수 있습니다.\n\n이 씨앗을 다시 볼 수 있습니다.",
"seedtype": "시드 타입", "seedtype": "시드 타입",
"seedtype_alert_content": "다른 지갑과 씨앗을 공유하는 것은 BIP39 SeedType에서만 가능합니다.", "seedtype_alert_content": "다른 지갑과 씨앗을 공유하는 것은 BIP39 SeedType에서만 가능합니다.",
"seedtype_alert_title": "종자 경보", "seedtype_alert_title": "종자 경보",
@ -742,6 +756,10 @@
"silent_payments_settings": "조용한 지불 설정", "silent_payments_settings": "조용한 지불 설정",
"single_seed_wallets_group": "단일 씨앗 지갑", "single_seed_wallets_group": "단일 씨앗 지갑",
"slidable": "슬라이딩 가능", "slidable": "슬라이딩 가능",
"solana_create_associated_token_account_exception": "오류 생성 관련 토큰 계정 수령자 주소에 대한 계정.",
"solana_no_associated_token_account_exception": "이 주소에는 관련 토큰 계정이 없습니다.",
"solana_sign_native_transaction_rent_exception": "거래는 완료 될 수 없습니다. 거래 후 SOL이 임대료로 남았습니다. SOL 밸런스를 친절하게 위로 올리거나 보내는 솔의 양을 줄입니다.",
"solana_sign_spl_token_transaction_rent_exception": "거래는 완료 될 수 없습니다. 거래 후 SOL이 임대료로 남았습니다. SOL 균형을 친절하게 위에 올리십시오.",
"sort_by": "정렬 기준", "sort_by": "정렬 기준",
"spend_key_private": "지출 키 (은밀한)", "spend_key_private": "지출 키 (은밀한)",
"spend_key_public": "지출 키 (공공의)", "spend_key_public": "지출 키 (공공의)",
@ -754,7 +772,7 @@
"support_description_guides": "일반적인 문제에 대한 문서화 및 지원", "support_description_guides": "일반적인 문제에 대한 문서화 및 지원",
"support_description_live_chat": "자유롭고 빠릅니다! 훈련 된 지원 담당자가 지원할 수 있습니다", "support_description_live_chat": "자유롭고 빠릅니다! 훈련 된 지원 담당자가 지원할 수 있습니다",
"support_description_other_links": "다른 방법을 통해 커뮤니티에 가입하거나 파트너에게 연락하십시오.", "support_description_other_links": "다른 방법을 통해 커뮤니티에 가입하거나 파트너에게 연락하십시오.",
"support_title_guides": "케이크 지갑 가이드", "support_title_guides": "케이크 지갑 문서",
"support_title_live_chat": "실시간 지원", "support_title_live_chat": "실시간 지원",
"support_title_other_links": "다른 지원 링크", "support_title_other_links": "다른 지원 링크",
"sweeping_wallet": "스위핑 지갑", "sweeping_wallet": "스위핑 지갑",
@ -893,6 +911,7 @@
"variable_pair_not_supported": "이 변수 쌍은 선택한 교환에서 지원되지 않습니다.", "variable_pair_not_supported": "이 변수 쌍은 선택한 교환에서 지원되지 않습니다.",
"verification": "검증", "verification": "검증",
"verify_message": "메시지를 확인하십시오", "verify_message": "메시지를 확인하십시오",
"verify_seed": "씨앗을 확인하십시오",
"verify_with_2fa": "케이크 2FA로 확인", "verify_with_2fa": "케이크 2FA로 확인",
"version": "버전 ${currentVersion}", "version": "버전 ${currentVersion}",
"view_all": "모두 보기", "view_all": "모두 보기",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Worldwide ကြိုတင်ငွေဖြည့်ကဒ်များနှင့်လက်ဆောင်ကဒ်များကို 0 ယ်ပါ", "cake_pay_subtitle": "Worldwide ကြိုတင်ငွေဖြည့်ကဒ်များနှင့်လက်ဆောင်ကဒ်များကို 0 ယ်ပါ",
"cake_pay_web_cards_subtitle": "ကမ္ဘာတစ်ဝှမ်း ကြိုတင်ငွေပေးကတ်များနှင့် လက်ဆောင်ကတ်များကို ဝယ်ယူပါ။", "cake_pay_web_cards_subtitle": "ကမ္ဘာတစ်ဝှမ်း ကြိုတင်ငွေပေးကတ်များနှင့် လက်ဆောင်ကတ်များကို ဝယ်ယူပါ။",
"cake_pay_web_cards_title": "Cake Pay ဝဘ်ကတ်များ", "cake_pay_web_cards_title": "Cake Pay ဝဘ်ကတ်များ",
"cake_seeds_save_disclaimer": "ကျေးဇူးပြုပြီးဒီစကားလုံးတွေကိုလုံခြုံတဲ့နေရာမှာသိမ်းထားပါ။ သင်၏ပိုက်ဆံအိတ်ကိုသင်လက်လှမ်းမမီပါကကိတ်မုန့်ပိုက်ဆံအိတ်အထောက်အပံ့သည်သင့်ကိုမကူညီနိုင်ပါ", "cake_seeds_save_disclaimer": "ကျေးဇူးပြုပြီးဒီစကားလုံးတွေကိုလုံခြုံတဲ့နေရာမှာသိမ်းထားပါ။ သင်၏ပိုက်ဆံအိတ်ကိုကိရိယာအသစ်တစ်ခုတွင်သင်၏ပိုက်ဆံအိတ်ကိုပြန်လည်ရယူရန်ဤစကားလုံးများကိုသင်လိုအပ်လိမ့်မည်။",
"cake_wallet": "Cake ပိုက်ဆံအိတ်", "cake_wallet": "Cake ပိုက်ဆံအိတ်",
"cakepay_confirm_no_vpn": "ငါ proxy သို့မဟုတ် vpn ကိုမသုံးပါ",
"cakepay_confirm_purchase": "ဝယ်ယူမှုအတည်ပြုပါ",
"cakepay_confirm_terms_agreed": "ဒီမှာတင်ပြထားတဲ့စည်းကမ်းချက်များကိုငါသဘောတူတယ်။",
"cakepay_confirm_voided_refund": "ကန့်သတ်ထားသောနိုင်ငံမှရွေးနုတ်ခြင်းကြိုးပမ်းမှုများကိုကျွန်ုပ်နားလည်ပါသည်",
"cakepay_ios_not_available": "တောင်းပန်ပါတယ်, ဒီလက်ဆောင်ကဒ်ကို iOS မှာမရနိုင်ပါ။ ၎င်းကို Android တွင်သို့မဟုတ်ကျွန်ုပ်တို့၏ဝက်ဘ်ဆိုက်တွင် 0 ယ်နိုင်သည်။", "cakepay_ios_not_available": "တောင်းပန်ပါတယ်, ဒီလက်ဆောင်ကဒ်ကို iOS မှာမရနိုင်ပါ။ ၎င်းကို Android တွင်သို့မဟုတ်ကျွန်ုပ်တို့၏ဝက်ဘ်ဆိုက်တွင် 0 ယ်နိုင်သည်။",
"cakepay_prepaid_card": "CakePay ကြိုတင်ငွေဖြည့်ဒက်ဘစ်ကတ်", "cakepay_prepaid_card": "CakePay ကြိုတင်ငွေဖြည့်ဒက်ဘစ်ကတ်",
"camera_consent": "မှတ်ပုံတင်ခြင်းရည်ရွယ်ချက်များအတွက် ${provider} တွင် သင့်ကင်မရာကို အသုံးပြုပါမည်။ အသေးစိတ်အတွက် ၎င်းတို့၏ ကိုယ်ရေးကိုယ်တာမူဝါဒကို စစ်ဆေးပါ။", "camera_consent": "မှတ်ပုံတင်ခြင်းရည်ရွယ်ချက်များအတွက် ${provider} တွင် သင့်ကင်မရာကို အသုံးပြုပါမည်။ အသေးစိတ်အတွက် ၎င်းတို့၏ ကိုယ်ရေးကိုယ်တာမူဝါဒကို စစ်ဆေးပါ။",
@ -355,12 +359,15 @@
"how_to_use": "အသုံးပြုနည်း", "how_to_use": "အသုံးပြုနည်း",
"how_to_use_card": "ဒီကတ်ကို ဘယ်လိုသုံးမလဲ။", "how_to_use_card": "ဒီကတ်ကို ဘယ်လိုသုံးမလဲ။",
"id": "ID:", "id": "ID:",
"if_you_dont_see_your_device": "သင်၏စက်ကိုအထက်တွင်မတွေ့ပါကသင်၏ Ledger သည်နိုးလာပြီးသော့ဖွင့်နေသည်ကိုသေချာပါစေ။",
"ignor": "လျစ်လျူရှုပါ။", "ignor": "လျစ်လျူရှုပါ။",
"import": "သွင်းကုန်", "import": "သွင်းကုန်",
"importNFTs": "NFTs များကို တင်သွင်းပါ။", "importNFTs": "NFTs များကို တင်သွင်းပါ။",
"in_store": "စတိုးတွင်", "in_store": "စတိုးတွင်",
"incoming": "ဝင်လာ", "incoming": "ဝင်လာ",
"incorrect_seed": "ထည့်သွင်းထားသော စာသားသည် မမှန်ကန်ပါ။", "incorrect_seed": "ထည့်သွင်းထားသော စာသားသည် မမှန်ကန်ပါ။",
"incorrect_seed_option": "မမှန်ကန်ပါ ကျေးဇူးပြုပြီးထပ်ကြိုးစားပါ",
"incorrect_seed_option_back": "မမှန်ကန်ပါ သင်၏မျိုးစေ့ကိုမှန်ကန်စွာသိမ်းဆည်းပြီးထပ်မံကြိုးစားပါ။",
"inputs": "သွင်းငေှ", "inputs": "သွင်းငေှ",
"insufficient_funds_for_tx": "ငွေပေးငွေယူအောင်မြင်စွာလုပ်ဆောင်ရန်ရန်ပုံငွေမလုံလောက်ပါ။", "insufficient_funds_for_tx": "ငွေပေးငွေယူအောင်မြင်စွာလုပ်ဆောင်ရန်ရန်ပုံငွေမလုံလောက်ပါ။",
"insufficient_lamport_for_tx": "သငျသညျငွေပေးငွေယူနှင့်၎င်း၏ငွေပေးငွေယူကြေးကိုဖုံးလွှမ်းရန် sol ရှိသည်မဟုတ်ကြဘူး။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုထပ်ထည့်ပါသို့မဟုတ်သင်ပို့လွှတ်ခြင်း sol ပမာဏကိုလျှော့ချပါ။", "insufficient_lamport_for_tx": "သငျသညျငွေပေးငွေယူနှင့်၎င်း၏ငွေပေးငွေယူကြေးကိုဖုံးလွှမ်းရန် sol ရှိသည်မဟုတ်ကြဘူး။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုထပ်ထည့်ပါသို့မဟုတ်သင်ပို့လွှတ်ခြင်း sol ပမာဏကိုလျှော့ချပါ။",
@ -470,6 +477,7 @@
"online": "အွန်လိုင်း", "online": "အွန်လိုင်း",
"onramper_option_description": "ငွေပေးချေမှုနည်းလမ်းများစွာဖြင့် Crypto ကိုလျင်မြန်စွာ 0 ယ်ပါ။ နိုင်ငံအများစုတွင်ရရှိနိုင်ပါသည်။ ဖြန့်ဖြူးနှင့်အခကြေးငွေကွဲပြားခြားနားသည်။", "onramper_option_description": "ငွေပေးချေမှုနည်းလမ်းများစွာဖြင့် Crypto ကိုလျင်မြန်စွာ 0 ယ်ပါ။ နိုင်ငံအများစုတွင်ရရှိနိုင်ပါသည်။ ဖြန့်ဖြူးနှင့်အခကြေးငွေကွဲပြားခြားနားသည်။",
"open_gift_card": "Gift Card ကိုဖွင့်ပါ။", "open_gift_card": "Gift Card ကိုဖွင့်ပါ။",
"open_wallet": "ပွင့်လင်းပိုက်ဆံအိတ်",
"optional_description": "ရွေးချယ်နိုင်သော ဖော်ပြချက်", "optional_description": "ရွေးချယ်နိုင်သော ဖော်ပြချက်",
"optional_email_hint": "ရွေးချယ်နိုင်သော ငွေလက်ခံသူ အကြောင်းကြားချက် အီးမေးလ်", "optional_email_hint": "ရွေးချယ်နိုင်သော ငွေလက်ခံသူ အကြောင်းကြားချက် အီးမေးလ်",
"optional_name": "ရွေးချယ်နိုင်သော လက်ခံသူအမည်", "optional_name": "ရွေးချယ်နိုင်သော လက်ခံသူအမည်",
@ -538,6 +546,7 @@
"recipient_address": "လက်ခံသူလိပ်စာ", "recipient_address": "လက်ခံသူလိပ်စာ",
"reconnect": "ပြန်လည်ချိတ်ဆက်ပါ။", "reconnect": "ပြန်လည်ချိတ်ဆက်ပါ။",
"reconnect_alert_text": "ပြန်လည်ချိတ်ဆက်လိုသည်မှာ သေချာပါသလား။ ?", "reconnect_alert_text": "ပြန်လည်ချိတ်ဆက်လိုသည်မှာ သေချာပါသလား။ ?",
"reconnect_your_hardware_wallet": "သင့်ရဲ့ hardware ပိုက်ဆံအိတ်ကိုပြန်လည်ချိတ်ဆက်ပါ",
"reconnection": "ပြန်လည်ချိတ်ဆက်မှု", "reconnection": "ပြန်လည်ချိတ်ဆက်မှု",
"red_dark_theme": "အနီရောင်မှောင်မိုက်ဆောင်ပုဒ်", "red_dark_theme": "အနီရောင်မှောင်မိုက်ဆောင်ပုဒ်",
"red_light_theme": "အနီရောင်အလင်းအကြောင်းအရာ", "red_light_theme": "အနီရောင်အလင်းအကြောင်းအရာ",
@ -619,6 +628,7 @@
"seed_alert_title": "အာရုံ", "seed_alert_title": "အာရုံ",
"seed_alert_yes": "ဟုတ်ကဲ့၊", "seed_alert_yes": "ဟုတ်ကဲ့၊",
"seed_choose": "မျိုးစေ့ဘာသာစကားကို ရွေးချယ်ပါ။", "seed_choose": "မျိုးစေ့ဘာသာစကားကို ရွေးချယ်ပါ။",
"seed_display_path": "Menu -> Security နှင့် Backup -> သော့ / အစေ့များကိုပြပါ",
"seed_hex_form": "ပိုက်ဆံအိတ်မျိုးစေ့ (Hex Form)", "seed_hex_form": "ပိုက်ဆံအိတ်မျိုးစေ့ (Hex Form)",
"seed_key": "မျိုးစေ့သော့", "seed_key": "မျိုးစေ့သော့",
"seed_language": "မျိုးစေ့ဘာသာ", "seed_language": "မျိုးစေ့ဘာသာ",
@ -637,9 +647,13 @@
"seed_language_russian": "ရုရှ", "seed_language_russian": "ရုရှ",
"seed_language_spanish": "ငပိ", "seed_language_spanish": "ငပိ",
"seed_phrase_length": "မျိုးစေ့စာပိုဒ်တိုအရှည်", "seed_phrase_length": "မျိုးစေ့စာပိုဒ်တိုအရှည်",
"seed_position_question_one": "ဘာလဲ",
"seed_position_question_two": "သင်၏အမျိုးအနွယ်စကားစု၏စကားဟူမူကား,",
"seed_reminder": "ကျေးဇူးပြု၍ သင့်ဖုန်းကို ပျောက်ဆုံးသွားပါက သို့မဟုတ် ဖျက်မိပါက ၎င်းတို့ကို ချရေးပါ။", "seed_reminder": "ကျေးဇူးပြု၍ သင့်ဖုန်းကို ပျောက်ဆုံးသွားပါက သို့မဟုတ် ဖျက်မိပါက ၎င်းတို့ကို ချရေးပါ။",
"seed_share": "မျိုးစေ့မျှဝေပါ။", "seed_share": "မျိုးစေ့မျှဝေပါ။",
"seed_title": "မျိုးစေ့", "seed_title": "မျိုးစေ့",
"seed_verified": "မျိုးစေ့အတည်ပြု",
"seed_verified_subtext": "နောက်မှသင်သိမ်းဆည်းထားသောမျိုးစေ့ကိုနောက်ပိုင်းတွင်ဤပိုက်ဆံအိတ်ကိုအဂတိလိုက်စားမှုသို့မဟုတ်သင်၏စက်ပစ္စည်းကိုဆုံးရှုံးစေသည့်အခါဤပိုက်ဆံအိတ်ကိုပြန်ယူရန်နောက်မှသင်အသုံးပြုနိုင်သည်။ \n\n ဤမျိုးစေ့ကိုနောက်တဖန်ကြည့်ရှုနိုင်သည်",
"seedtype": "မျိုးပွားခြင်း", "seedtype": "မျိုးပွားခြင်း",
"seedtype_alert_content": "အခြားပိုက်ဆံအိတ်များနှင့်မျိုးစေ့များကိုမျှဝေခြင်းသည် BIP39 sebyspe ဖြင့်သာဖြစ်သည်။", "seedtype_alert_content": "အခြားပိုက်ဆံအိတ်များနှင့်မျိုးစေ့များကိုမျှဝေခြင်းသည် BIP39 sebyspe ဖြင့်သာဖြစ်သည်။",
"seedtype_alert_title": "ပျိုးပင်သတိပေးချက်", "seedtype_alert_title": "ပျိုးပင်သတိပေးချက်",
@ -741,6 +755,10 @@
"silent_payments_settings": "အသံတိတ်ငွေပေးချေမှုဆက်တင်များ", "silent_payments_settings": "အသံတိတ်ငွေပေးချေမှုဆက်တင်များ",
"single_seed_wallets_group": "တစ်ခုတည်းမျိုးစေ့ပိုက်ဆံအိတ်", "single_seed_wallets_group": "တစ်ခုတည်းမျိုးစေ့ပိုက်ဆံအိတ်",
"slidable": "လျှောချနိုင်သည်။", "slidable": "လျှောချနိုင်သည်။",
"solana_create_associated_token_account_exception": "Encipient Token အကောင့်ကိုလက်ခံသည့်လိပ်စာအတွက်အကောင့်များဖန်တီးခြင်းအတွက်အမှားအယွင်းများဖန်တီးခြင်း။",
"solana_no_associated_token_account_exception": "ဒီလိပ်စာအတွက်မပေါင်းသင်းတဲ့လက်ခဏာသက်သေအကောင့်မရှိဘူး။",
"solana_sign_native_transaction_rent_exception": "ငွေပေးငွေယူကိုမပြီးစီးနိုင်ပါ။ ငွေပေးငွေယူပြီးနောက်ငှားရန် Sol မလုံလောက်ပါ။ ကြင်နာစွာသင်၏ SOR ချိန်ခွင်လျှာကိုငွေဖြည့်ပါသို့မဟုတ်သင်ပို့နေသည့်ပမာဏကိုလျှော့ချပါ။",
"solana_sign_spl_token_transaction_rent_exception": "ငွေပေးငွေယူကိုမပြီးစီးနိုင်ပါ။ ငွေပေးငွေယူပြီးနောက်ငှားရန် Sol မလုံလောက်ပါ။ ကြင်နာစွာသင်၏ s ကိုချိန်ခွင်လျှာကိုတက်ပါ။",
"sort_by": "အလိုက်စဥ်သည်", "sort_by": "အလိုက်စဥ်သည်",
"spend_key_private": "သော့သုံးရန် (သီးသန့်)", "spend_key_private": "သော့သုံးရန် (သီးသန့်)",
"spend_key_public": "သုံးစွဲရန်သော့ (အများပြည်သူ)", "spend_key_public": "သုံးစွဲရန်သော့ (အများပြည်သူ)",
@ -753,7 +771,7 @@
"support_description_guides": "ဘုံပြ issues နာများအတွက်စာရွက်စာတမ်းများနှင့်ထောက်ခံမှု", "support_description_guides": "ဘုံပြ issues နာများအတွက်စာရွက်စာတမ်းများနှင့်ထောက်ခံမှု",
"support_description_live_chat": "အခမဲ့နှင့်အစာရှောင်ခြင်း! လေ့ကျင့်ထားသောထောက်ခံသူကိုယ်စားလှယ်များသည်ကူညီနိုင်သည်", "support_description_live_chat": "အခမဲ့နှင့်အစာရှောင်ခြင်း! လေ့ကျင့်ထားသောထောက်ခံသူကိုယ်စားလှယ်များသည်ကူညီနိုင်သည်",
"support_description_other_links": "ကျွန်ုပ်တို့၏လူမှုအသိုင်းအဝိုင်းများသို့ 0 င်ရောက်ပါ", "support_description_other_links": "ကျွန်ုပ်တို့၏လူမှုအသိုင်းအဝိုင်းများသို့ 0 င်ရောက်ပါ",
"support_title_guides": "ကိတ်မုန့်ပိုက်ဆံအိတ်လမ်းညွှန်များ", "support_title_guides": "ကိတ်မုန့်ပိုက်ဆံအိတ်များ",
"support_title_live_chat": "တိုက်ရိုက်ပံ့ပိုးမှု", "support_title_live_chat": "တိုက်ရိုက်ပံ့ပိုးမှု",
"support_title_other_links": "အခြားအထောက်အပံ့လင့်များ", "support_title_other_links": "အခြားအထောက်အပံ့လင့်များ",
"sweeping_wallet": "ိုက်ဆံအိတ် တံမြက်လှည်း", "sweeping_wallet": "ိုက်ဆံအိတ် တံမြက်လှည်း",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "ရွေးချယ်ထားသော ဖလှယ်မှုများဖြင့် ဤပြောင်းလဲနိုင်သောအတွဲကို ပံ့ပိုးမထားပါ။", "variable_pair_not_supported": "ရွေးချယ်ထားသော ဖလှယ်မှုများဖြင့် ဤပြောင်းလဲနိုင်သောအတွဲကို ပံ့ပိုးမထားပါ။",
"verification": "စိစစ်ခြင်း။", "verification": "စိစစ်ခြင်း။",
"verify_message": "မက်ဆေ့ခ်ျကိုအတည်ပြုရန်", "verify_message": "မက်ဆေ့ခ်ျကိုအတည်ပြုရန်",
"verify_seed": "မျိုးစေ့ကိုစစ်ဆေးပါ",
"verify_with_2fa": "Cake 2FA ဖြင့် စစ်ဆေးပါ။", "verify_with_2fa": "Cake 2FA ဖြင့် စစ်ဆေးပါ။",
"version": "ဗားရှင်း ${currentVersion}", "version": "ဗားရှင်း ${currentVersion}",
"view_all": "အားလုံးကိုကြည့်ရှုပါ။", "view_all": "အားလုံးကိုကြည့်ရှုပါ။",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Koop wereldwijde prepaid -kaarten en cadeaubonnen", "cake_pay_subtitle": "Koop wereldwijde prepaid -kaarten en cadeaubonnen",
"cake_pay_web_cards_subtitle": "Koop wereldwijd prepaidkaarten en cadeaubonnen", "cake_pay_web_cards_subtitle": "Koop wereldwijd prepaidkaarten en cadeaubonnen",
"cake_pay_web_cards_title": "Cake Pay-webkaarten", "cake_pay_web_cards_title": "Cake Pay-webkaarten",
"cake_seeds_save_disclaimer": "Bewaar deze woorden op een veilige plek! Als u de toegang tot uw portemonnee verliest, kan ondersteuning voor cake -portemonnee u niet helpen", "cake_seeds_save_disclaimer": "Bewaar deze woorden op een veilige plek! U hebt deze woorden nodig om uw portemonnee op een nieuw apparaat te herstellen.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Ik bevestig dat ik geen proxy of VPN gebruik",
"cakepay_confirm_purchase": "Bevestig aankoop",
"cakepay_confirm_terms_agreed": "Ik ga akkoord met de hier gepresenteerde algemene voorwaarden:",
"cakepay_confirm_voided_refund": "Ik begrijp dat de aflossingspogingen van een beperkt land elke terugbetaling zullen ongeldig maken",
"cakepay_ios_not_available": "Sorry, deze cadeaubon is niet beschikbaar op iOS. U kunt het in plaats daarvan kopen op Android of via onze website.", "cakepay_ios_not_available": "Sorry, deze cadeaubon is niet beschikbaar op iOS. U kunt het in plaats daarvan kopen op Android of via onze website.",
"cakepay_prepaid_card": "CakePay Prepaid Debetkaart", "cakepay_prepaid_card": "CakePay Prepaid Debetkaart",
"camera_consent": "Uw camera wordt gebruikt om vóór ${provider} een beeld vast te leggen voor identificatiedoeleinden. Raadpleeg hun privacybeleid voor meer informatie.", "camera_consent": "Uw camera wordt gebruikt om vóór ${provider} een beeld vast te leggen voor identificatiedoeleinden. Raadpleeg hun privacybeleid voor meer informatie.",
@ -355,12 +359,15 @@
"how_to_use": "Hoe te gebruiken", "how_to_use": "Hoe te gebruiken",
"how_to_use_card": "Hoe deze kaart te gebruiken", "how_to_use_card": "Hoe deze kaart te gebruiken",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Als u uw apparaat hierboven niet ziet, zorg er dan voor dat uw grootboek wakker is en ontgrendeld is!",
"ignor": "Negeren", "ignor": "Negeren",
"import": "Importeren", "import": "Importeren",
"importNFTs": "NFT's importeren", "importNFTs": "NFT's importeren",
"in_store": "In winkel", "in_store": "In winkel",
"incoming": "inkomend", "incoming": "inkomend",
"incorrect_seed": "De ingevoerde tekst is niet geldig.", "incorrect_seed": "De ingevoerde tekst is niet geldig.",
"incorrect_seed_option": "Onjuist. Probeer het opnieuw",
"incorrect_seed_option_back": "Onjuist. Zorg ervoor dat uw zaad correct is opgeslagen en probeer het opnieuw.",
"inputs": "Invoer", "inputs": "Invoer",
"insufficient_funds_for_tx": "Onvoldoende fondsen om de transactie met succes uit te voeren.", "insufficient_funds_for_tx": "Onvoldoende fondsen om de transactie met succes uit te voeren.",
"insufficient_lamport_for_tx": "U hebt niet genoeg SOL om de transactie en de transactiekosten te dekken. Voeg vriendelijk meer SOL toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt.", "insufficient_lamport_for_tx": "U hebt niet genoeg SOL om de transactie en de transactiekosten te dekken. Voeg vriendelijk meer SOL toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt.",
@ -470,6 +477,7 @@
"online": "online", "online": "online",
"onramper_option_description": "Koop snel crypto met veel betaalmethoden. Beschikbaar in de meeste landen. Spreads en vergoedingen variëren.", "onramper_option_description": "Koop snel crypto met veel betaalmethoden. Beschikbaar in de meeste landen. Spreads en vergoedingen variëren.",
"open_gift_card": "Geschenkkaart openen", "open_gift_card": "Geschenkkaart openen",
"open_wallet": "Open portemonnee",
"optional_description": "Optionele beschrijving", "optional_description": "Optionele beschrijving",
"optional_email_hint": "Optionele kennisgeving per e-mail aan de begunstigde", "optional_email_hint": "Optionele kennisgeving per e-mail aan de begunstigde",
"optional_name": "Optionele naam ontvanger", "optional_name": "Optionele naam ontvanger",
@ -538,6 +546,7 @@
"recipient_address": "Adres ontvanger", "recipient_address": "Adres ontvanger",
"reconnect": "Sluit", "reconnect": "Sluit",
"reconnect_alert_text": "Weet u zeker dat u opnieuw verbinding wilt maken?", "reconnect_alert_text": "Weet u zeker dat u opnieuw verbinding wilt maken?",
"reconnect_your_hardware_wallet": "Sluit uw hardware -portemonnee opnieuw aan",
"reconnection": "Reconnection", "reconnection": "Reconnection",
"red_dark_theme": "Rood donker thema", "red_dark_theme": "Rood donker thema",
"red_light_theme": "Rood licht thema", "red_light_theme": "Rood licht thema",
@ -619,6 +628,7 @@
"seed_alert_title": "Aandacht", "seed_alert_title": "Aandacht",
"seed_alert_yes": "Ja ik heb", "seed_alert_yes": "Ja ik heb",
"seed_choose": "Kies een starttaal", "seed_choose": "Kies een starttaal",
"seed_display_path": "Menu -> Beveiliging en back -up -> Key/Seeds tonen",
"seed_hex_form": "Portemonnee zaad (hexvorm)", "seed_hex_form": "Portemonnee zaad (hexvorm)",
"seed_key": "Zaadsleutel", "seed_key": "Zaadsleutel",
"seed_language": "Zaadtaal", "seed_language": "Zaadtaal",
@ -637,9 +647,13 @@
"seed_language_russian": "Russisch", "seed_language_russian": "Russisch",
"seed_language_spanish": "Spaans", "seed_language_spanish": "Spaans",
"seed_phrase_length": "Lengte van de zaadzin", "seed_phrase_length": "Lengte van de zaadzin",
"seed_position_question_one": "Wat is de",
"seed_position_question_two": "woord van je zaadzin?",
"seed_reminder": "Schrijf deze op voor het geval u uw telefoon kwijtraakt of veegt", "seed_reminder": "Schrijf deze op voor het geval u uw telefoon kwijtraakt of veegt",
"seed_share": "Deel zaad", "seed_share": "Deel zaad",
"seed_title": "Zaad", "seed_title": "Zaad",
"seed_verified": "Zaad geverifieerd",
"seed_verified_subtext": "U kunt uw opgeslagen zaad later gebruiken om deze portemonnee te herstellen in het geval van corruptie of het verliezen van uw apparaat. \n\n U kunt dit zaad opnieuw bekijken van de",
"seedtype": "Zaadtype", "seedtype": "Zaadtype",
"seedtype_alert_content": "Het delen van zaden met andere portefeuilles is alleen mogelijk met BIP39 SeedType.", "seedtype_alert_content": "Het delen van zaden met andere portefeuilles is alleen mogelijk met BIP39 SeedType.",
"seedtype_alert_title": "Zaadtype alert", "seedtype_alert_title": "Zaadtype alert",
@ -741,6 +755,10 @@
"silent_payments_settings": "Stille betalingsinstellingen", "silent_payments_settings": "Stille betalingsinstellingen",
"single_seed_wallets_group": "Enkele zaadportefeuilles", "single_seed_wallets_group": "Enkele zaadportefeuilles",
"slidable": "Verschuifbaar", "slidable": "Verschuifbaar",
"solana_create_associated_token_account_exception": "Fout bij het maken van een geassocieerd tokenaccount voor ontvangingsadres.",
"solana_no_associated_token_account_exception": "Er is geen bijbehorende tokenaccount voor dit adres.",
"solana_sign_native_transaction_rent_exception": "Transactie kan niet worden voltooid. Onvoldoende Sol vertrok naar huur na transactie. Vul uw SOL -balans aan of verminder de hoeveelheid SOL die u verzendt.",
"solana_sign_spl_token_transaction_rent_exception": "Transactie kan niet worden voltooid. Onvoldoende Sol vertrok naar huur na transactie. Vul uw SOL -balans op.",
"sort_by": "Sorteer op", "sort_by": "Sorteer op",
"spend_key_private": "Sleutel uitgeven (privaat)", "spend_key_private": "Sleutel uitgeven (privaat)",
"spend_key_public": "Sleutel uitgeven (openbaar)", "spend_key_public": "Sleutel uitgeven (openbaar)",
@ -753,7 +771,7 @@
"support_description_guides": "Documentatie en ondersteuning voor gemeenschappelijke problemen", "support_description_guides": "Documentatie en ondersteuning voor gemeenschappelijke problemen",
"support_description_live_chat": "Gratis en snel! Getrainde ondersteuningsvertegenwoordigers zijn beschikbaar om te helpen", "support_description_live_chat": "Gratis en snel! Getrainde ondersteuningsvertegenwoordigers zijn beschikbaar om te helpen",
"support_description_other_links": "Word lid van onze gemeenschappen of bereik ons onze partners via andere methoden", "support_description_other_links": "Word lid van onze gemeenschappen of bereik ons onze partners via andere methoden",
"support_title_guides": "Cake -portemonnee gidsen", "support_title_guides": "Cake -portemonnee documenten",
"support_title_live_chat": "Live ondersteuning", "support_title_live_chat": "Live ondersteuning",
"support_title_other_links": "Andere ondersteuningslinks", "support_title_other_links": "Andere ondersteuningslinks",
"sweeping_wallet": "Vegende portemonnee", "sweeping_wallet": "Vegende portemonnee",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "Dit variabelenpaar wordt niet ondersteund met de geselecteerde uitwisselingen", "variable_pair_not_supported": "Dit variabelenpaar wordt niet ondersteund met de geselecteerde uitwisselingen",
"verification": "Verificatie", "verification": "Verificatie",
"verify_message": "Verifieer bericht", "verify_message": "Verifieer bericht",
"verify_seed": "Controleer zaad",
"verify_with_2fa": "Controleer met Cake 2FA", "verify_with_2fa": "Controleer met Cake 2FA",
"version": "Versie ${currentVersion}", "version": "Versie ${currentVersion}",
"view_all": "Alles bekijken", "view_all": "Alles bekijken",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Kup na całym świecie karty przedpłacone i karty podarunkowe", "cake_pay_subtitle": "Kup na całym świecie karty przedpłacone i karty podarunkowe",
"cake_pay_web_cards_subtitle": "Kupuj na całym świecie karty przedpłacone i karty podarunkowe", "cake_pay_web_cards_subtitle": "Kupuj na całym świecie karty przedpłacone i karty podarunkowe",
"cake_pay_web_cards_title": "Cake Pay Web Cards", "cake_pay_web_cards_title": "Cake Pay Web Cards",
"cake_seeds_save_disclaimer": "Zapisz te słowa w bezpiecznym miejscu! Jeśli stracisz dostęp do portfela, wsparcie portfela ciasta nie może ci pomóc", "cake_seeds_save_disclaimer": "Zapisz te słowa w bezpiecznym miejscu! Będziesz potrzebować tych słów, aby przywrócić portfel na nowym urządzeniu.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Potwierdzam, że nie używam proxy ani VPN",
"cakepay_confirm_purchase": "Potwierdź zakup",
"cakepay_confirm_terms_agreed": "Zgadzam się na przedstawione tutaj warunki:",
"cakepay_confirm_voided_refund": "Rozumiem, że próby odkupienia z ograniczonego kraju nie unieważają wszelkich",
"cakepay_ios_not_available": "Przepraszam, ta karta podarunkowa nie jest dostępna na iOS. Zamiast tego możesz go kupić na Android lub za pośrednictwem naszej strony internetowej.", "cakepay_ios_not_available": "Przepraszam, ta karta podarunkowa nie jest dostępna na iOS. Zamiast tego możesz go kupić na Android lub za pośrednictwem naszej strony internetowej.",
"cakepay_prepaid_card": "Przedpłacona karta debetowa CakePay", "cakepay_prepaid_card": "Przedpłacona karta debetowa CakePay",
"camera_consent": "Twój aparat zostanie użyty do przechwycenia obrazu w celach identyfikacyjnych przez ${provider}. Aby uzyskać szczegółowe informacje, sprawdź ich Politykę prywatności.", "camera_consent": "Twój aparat zostanie użyty do przechwycenia obrazu w celach identyfikacyjnych przez ${provider}. Aby uzyskać szczegółowe informacje, sprawdź ich Politykę prywatności.",
@ -355,12 +359,15 @@
"how_to_use": "Jak używać", "how_to_use": "Jak używać",
"how_to_use_card": "Jak korzystać z tej karty?", "how_to_use_card": "Jak korzystać z tej karty?",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Jeśli nie widzisz swojego urządzenia powyżej, upewnij się, że Twoja księga nie śpi i odblokowana!",
"ignor": "Ignorować", "ignor": "Ignorować",
"import": "Import", "import": "Import",
"importNFTs": "Importuj NFT", "importNFTs": "Importuj NFT",
"in_store": "W Sklepie", "in_store": "W Sklepie",
"incoming": "Przychodzące", "incoming": "Przychodzące",
"incorrect_seed": "Wprowadzony seed jest nieprawidłowy.", "incorrect_seed": "Wprowadzony seed jest nieprawidłowy.",
"incorrect_seed_option": "Błędny. Spróbuj ponownie",
"incorrect_seed_option_back": "Błędny. Upewnij się, że twoje ziarno jest prawidłowo zapisane i spróbuj ponownie.",
"inputs": "Wejścia", "inputs": "Wejścia",
"insufficient_funds_for_tx": "Niewystarczające fundusze na skuteczne wykonanie transakcji.", "insufficient_funds_for_tx": "Niewystarczające fundusze na skuteczne wykonanie transakcji.",
"insufficient_lamport_for_tx": "Nie masz wystarczającej ilości SOL, aby pokryć transakcję i opłatę za transakcję. Uprzejmie dodaj więcej sol do portfela lub zmniejsz wysyłaną kwotę SOL.", "insufficient_lamport_for_tx": "Nie masz wystarczającej ilości SOL, aby pokryć transakcję i opłatę za transakcję. Uprzejmie dodaj więcej sol do portfela lub zmniejsz wysyłaną kwotę SOL.",
@ -470,6 +477,7 @@
"online": "online", "online": "online",
"onramper_option_description": "Szybko kup kryptowaluty z wieloma metodami płatności. Dostępne w większości krajów. Spready i opłaty różnią się.", "onramper_option_description": "Szybko kup kryptowaluty z wieloma metodami płatności. Dostępne w większości krajów. Spready i opłaty różnią się.",
"open_gift_card": "Otwórz kartę podarunkową", "open_gift_card": "Otwórz kartę podarunkową",
"open_wallet": "Otwarty portfel",
"optional_description": "Opcjonalny opis", "optional_description": "Opcjonalny opis",
"optional_email_hint": "Opcjonalny e-mail z powiadomieniem odbiorcy płatności", "optional_email_hint": "Opcjonalny e-mail z powiadomieniem odbiorcy płatności",
"optional_name": "Opcjonalna nazwa odbiorcy", "optional_name": "Opcjonalna nazwa odbiorcy",
@ -538,6 +546,7 @@
"recipient_address": "Adres odbiorcy", "recipient_address": "Adres odbiorcy",
"reconnect": "Połącz ponownie", "reconnect": "Połącz ponownie",
"reconnect_alert_text": "Czy na pewno ponownie się ponownie połączysz?", "reconnect_alert_text": "Czy na pewno ponownie się ponownie połączysz?",
"reconnect_your_hardware_wallet": "Ponownie podłącz portfel sprzętowy",
"reconnection": "Ponowne łączenie", "reconnection": "Ponowne łączenie",
"red_dark_theme": "Czerwony Mroczny motyw", "red_dark_theme": "Czerwony Mroczny motyw",
"red_light_theme": "Motyw czerwony światło", "red_light_theme": "Motyw czerwony światło",
@ -619,6 +628,7 @@
"seed_alert_title": "Uwaga", "seed_alert_title": "Uwaga",
"seed_alert_yes": "Tak", "seed_alert_yes": "Tak",
"seed_choose": "Wybierz język", "seed_choose": "Wybierz język",
"seed_display_path": "Menu -> Bezpieczeństwo i kopia zapasowa -> Pokaż klucz/nasiona",
"seed_hex_form": "Nasiona portfela (forma sześciokątna)", "seed_hex_form": "Nasiona portfela (forma sześciokątna)",
"seed_key": "Klucz nasion", "seed_key": "Klucz nasion",
"seed_language": "Język nasion", "seed_language": "Język nasion",
@ -637,9 +647,13 @@
"seed_language_russian": "Rosyjski", "seed_language_russian": "Rosyjski",
"seed_language_spanish": "Hiszpański", "seed_language_spanish": "Hiszpański",
"seed_phrase_length": "Długość frazy początkowej", "seed_phrase_length": "Długość frazy początkowej",
"seed_position_question_one": "Co to jest",
"seed_position_question_two": "Słowo twojego wyrażenia nasion?",
"seed_reminder": "Musisz zapisać tą fraze, bo bez niej możesz nie odzyskać portfela!", "seed_reminder": "Musisz zapisać tą fraze, bo bez niej możesz nie odzyskać portfela!",
"seed_share": "Udostępnij seed", "seed_share": "Udostępnij seed",
"seed_title": "Seed", "seed_title": "Seed",
"seed_verified": "Ziarno zweryfikowane",
"seed_verified_subtext": "Możesz później użyć zapisanego ziarna, aby przywrócić ten portfel w przypadku uszkodzenia lub utraty urządzenia. \n\n Możesz ponownie obejrzeć to ziarno z",
"seedtype": "Sedtype", "seedtype": "Sedtype",
"seedtype_alert_content": "Dzielenie się nasionami z innymi portfelami jest możliwe tylko z BIP39 sededType.", "seedtype_alert_content": "Dzielenie się nasionami z innymi portfelami jest możliwe tylko z BIP39 sededType.",
"seedtype_alert_title": "Ustanowienie typu sedype", "seedtype_alert_title": "Ustanowienie typu sedype",
@ -741,6 +755,10 @@
"silent_payments_settings": "Ustawienia o cichej płatności", "silent_payments_settings": "Ustawienia o cichej płatności",
"single_seed_wallets_group": "Pojedyncze portfele nasion", "single_seed_wallets_group": "Pojedyncze portfele nasion",
"slidable": "Przesuwne", "slidable": "Przesuwne",
"solana_create_associated_token_account_exception": "Błąd tworzenia powiązanego konta tokena dla adresu wpływającego.",
"solana_no_associated_token_account_exception": "Nie ma powiązanego konta tokena dla tego adresu.",
"solana_sign_native_transaction_rent_exception": "Transakcji nie można zakończyć. Niewystarczający SOL w lewo do czynszu po transakcji. Uprzejmie uzupełnij saldo Sol lub zmniejsz ilość wysyłanej przez Ciebie rozwiązania.",
"solana_sign_spl_token_transaction_rent_exception": "Transakcji nie można zakończyć. Niewystarczający SOL w lewo do czynszu po transakcji. Uprzejmie uzupełnij saldo Sol.",
"sort_by": "Sortuj według", "sort_by": "Sortuj według",
"spend_key_private": "Klucz prywatny", "spend_key_private": "Klucz prywatny",
"spend_key_public": "Klucz publiczny", "spend_key_public": "Klucz publiczny",
@ -753,7 +771,7 @@
"support_description_guides": "Dokumentacja i wsparcie dla typowych problemów", "support_description_guides": "Dokumentacja i wsparcie dla typowych problemów",
"support_description_live_chat": "Darmowe i szybkie! Do pomocy są dostępni przeszkoleni przedstawiciele wsparcia", "support_description_live_chat": "Darmowe i szybkie! Do pomocy są dostępni przeszkoleni przedstawiciele wsparcia",
"support_description_other_links": "Dołącz do naszych społeczności lub skontaktuj się z nami naszymi partnerami za pomocą innych metod", "support_description_other_links": "Dołącz do naszych społeczności lub skontaktuj się z nami naszymi partnerami za pomocą innych metod",
"support_title_guides": "Przewodniki portfela ciasta", "support_title_guides": "Dokumenty portfela ciasta",
"support_title_live_chat": "Wsparcie na żywo", "support_title_live_chat": "Wsparcie na żywo",
"support_title_other_links": "Inne linki wsparcia", "support_title_other_links": "Inne linki wsparcia",
"sweeping_wallet": "Zamiatanie portfela", "sweeping_wallet": "Zamiatanie portfela",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "Ta para zmiennych nie jest obsługiwana na wybranych giełdach", "variable_pair_not_supported": "Ta para zmiennych nie jest obsługiwana na wybranych giełdach",
"verification": "Weryfikacja", "verification": "Weryfikacja",
"verify_message": "Sprawdź wiadomość", "verify_message": "Sprawdź wiadomość",
"verify_seed": "Zweryfikować ziarno",
"verify_with_2fa": "Sprawdź za pomocą Cake 2FA", "verify_with_2fa": "Sprawdź za pomocą Cake 2FA",
"version": "Wersja ${currentVersion}", "version": "Wersja ${currentVersion}",
"view_all": "Wyświetl wszystko", "view_all": "Wyświetl wszystko",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Compre cartões pré -pagos em todo o mundo e cartões -presente", "cake_pay_subtitle": "Compre cartões pré -pagos em todo o mundo e cartões -presente",
"cake_pay_web_cards_subtitle": "Compre cartões pré-pagos e cartões-presente em todo o mundo", "cake_pay_web_cards_subtitle": "Compre cartões pré-pagos e cartões-presente em todo o mundo",
"cake_pay_web_cards_title": "Cartões Cake Pay Web", "cake_pay_web_cards_title": "Cartões Cake Pay Web",
"cake_seeds_save_disclaimer": "Por favor, salve estas palavras em um local seguro! Se você perder o acesso à sua carteira, o suporte da carteira de bolo não poderá ajudá -lo", "cake_seeds_save_disclaimer": "Por favor, salve estas palavras em um local seguro! Você precisará dessas palavras para restaurar sua carteira em um novo dispositivo.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Eu confirmo que não estou usando um proxy ou VPN",
"cakepay_confirm_purchase": "Confirme a compra",
"cakepay_confirm_terms_agreed": "Eu concordo com os termos e condições apresentados aqui:",
"cakepay_confirm_voided_refund": "Eu entendo que as tentativas de resgate de um país restrito anularão qualquer reembolso",
"cakepay_ios_not_available": "Desculpe, este cartão -presente não está disponível no iOS. Você pode comprá -lo no Android ou através do nosso site.", "cakepay_ios_not_available": "Desculpe, este cartão -presente não está disponível no iOS. Você pode comprá -lo no Android ou através do nosso site.",
"cakepay_prepaid_card": "Cartão de débito pré-pago CakePay", "cakepay_prepaid_card": "Cartão de débito pré-pago CakePay",
"camera_consent": "Sua câmera será usada para capturar uma imagem para fins de identificação por ${provider}. Por favor, verifique a Política de Privacidade para obter detalhes.", "camera_consent": "Sua câmera será usada para capturar uma imagem para fins de identificação por ${provider}. Por favor, verifique a Política de Privacidade para obter detalhes.",
@ -355,12 +359,15 @@
"how_to_use": "Como usar", "how_to_use": "Como usar",
"how_to_use_card": "Como usar este cartão", "how_to_use_card": "Como usar este cartão",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Se você não vê seu dispositivo acima, certifique -se de que seu livro esteja acordado e desbloqueado!",
"ignor": "Ignorar", "ignor": "Ignorar",
"import": "Importar", "import": "Importar",
"importNFTs": "Importar NFTs", "importNFTs": "Importar NFTs",
"in_store": "Na loja", "in_store": "Na loja",
"incoming": "Recebidas", "incoming": "Recebidas",
"incorrect_seed": "O texto digitado não é válido.", "incorrect_seed": "O texto digitado não é válido.",
"incorrect_seed_option": "Incorreto. Por favor, tente novamente",
"incorrect_seed_option_back": "Incorreto. Certifique -se de que sua semente seja salva corretamente e tente novamente.",
"inputs": "Entradas", "inputs": "Entradas",
"insufficient_funds_for_tx": "Fundos insuficientes para executar com sucesso a transação.", "insufficient_funds_for_tx": "Fundos insuficientes para executar com sucesso a transação.",
"insufficient_lamport_for_tx": "Você não tem Sol suficiente para cobrir a transação e sua taxa de transação. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você envia.", "insufficient_lamport_for_tx": "Você não tem Sol suficiente para cobrir a transação e sua taxa de transação. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você envia.",
@ -472,6 +479,7 @@
"onramper_option_description": "Compre rapidamente criptografia com muitos métodos de pagamento. Disponível na maioria dos países. Os spreads e taxas variam.", "onramper_option_description": "Compre rapidamente criptografia com muitos métodos de pagamento. Disponível na maioria dos países. Os spreads e taxas variam.",
"opcionalmente_order_card": "Opcionalmente, peça um cartão físico.", "opcionalmente_order_card": "Opcionalmente, peça um cartão físico.",
"open_gift_card": "Abrir vale-presente", "open_gift_card": "Abrir vale-presente",
"open_wallet": "Carteira aberta",
"optional_description": "Descrição opcional", "optional_description": "Descrição opcional",
"optional_email_hint": "E-mail opcional de notificação do beneficiário", "optional_email_hint": "E-mail opcional de notificação do beneficiário",
"optional_name": "Nome do destinatário opcional", "optional_name": "Nome do destinatário opcional",
@ -540,6 +548,7 @@
"recipient_address": "Endereço do destinatário", "recipient_address": "Endereço do destinatário",
"reconnect": "Reconectar", "reconnect": "Reconectar",
"reconnect_alert_text": "Você tem certeza de que deseja reconectar?", "reconnect_alert_text": "Você tem certeza de que deseja reconectar?",
"reconnect_your_hardware_wallet": "Reconecte sua carteira de hardware",
"reconnection": "Reconectar", "reconnection": "Reconectar",
"red_dark_theme": "Tema escuro vermelho", "red_dark_theme": "Tema escuro vermelho",
"red_light_theme": "Tema da luz vermelha", "red_light_theme": "Tema da luz vermelha",
@ -621,6 +630,7 @@
"seed_alert_title": "Atenção", "seed_alert_title": "Atenção",
"seed_alert_yes": "Sim, eu tenho", "seed_alert_yes": "Sim, eu tenho",
"seed_choose": "Escolha o idioma da semente", "seed_choose": "Escolha o idioma da semente",
"seed_display_path": "Menu -> Segurança e Backup -> Mostrar chave/sementes",
"seed_hex_form": "Semente de carteira (forma hexadecimal)", "seed_hex_form": "Semente de carteira (forma hexadecimal)",
"seed_key": "Chave de semente", "seed_key": "Chave de semente",
"seed_language": "Linguagem de semente", "seed_language": "Linguagem de semente",
@ -639,9 +649,13 @@
"seed_language_russian": "Russa", "seed_language_russian": "Russa",
"seed_language_spanish": "Espanhola", "seed_language_spanish": "Espanhola",
"seed_phrase_length": "Comprimento da frase-semente", "seed_phrase_length": "Comprimento da frase-semente",
"seed_position_question_one": "Qual é o",
"seed_position_question_two": "Palavra da sua frase de semente?",
"seed_reminder": "Anote-os para o caso de perder ou limpar seu telefone", "seed_reminder": "Anote-os para o caso de perder ou limpar seu telefone",
"seed_share": "Compartilhar semente", "seed_share": "Compartilhar semente",
"seed_title": "Semente", "seed_title": "Semente",
"seed_verified": "Semente verificada",
"seed_verified_subtext": "Você pode usar sua semente salva mais tarde para restaurar esta carteira em caso de corrupção ou perda do seu dispositivo. \n\n Você pode ver essa semente novamente do",
"seedtype": "SeedType", "seedtype": "SeedType",
"seedtype_alert_content": "Compartilhar sementes com outras carteiras só é possível com o BIP39 SeedType.", "seedtype_alert_content": "Compartilhar sementes com outras carteiras só é possível com o BIP39 SeedType.",
"seedtype_alert_title": "Alerta de SeedType", "seedtype_alert_title": "Alerta de SeedType",
@ -743,6 +757,10 @@
"silent_payments_settings": "Configurações de pagamentos silenciosos", "silent_payments_settings": "Configurações de pagamentos silenciosos",
"single_seed_wallets_group": "Carteiras de sementes únicas", "single_seed_wallets_group": "Carteiras de sementes únicas",
"slidable": "Deslizável", "slidable": "Deslizável",
"solana_create_associated_token_account_exception": "Erro a criação de um token associado Conta do endereço de recebimento.",
"solana_no_associated_token_account_exception": "Não existe uma conta de token associada para este endereço.",
"solana_sign_native_transaction_rent_exception": "A transação não pode ser concluída. Sol insuficiente deixou para alugar após a transação. Por favor, complete seu saldo sol ou reduza a quantidade de sol que você está enviando.",
"solana_sign_spl_token_transaction_rent_exception": "A transação não pode ser concluída. Sol insuficiente deixou para alugar após a transação. Por favor, complete seu equilíbrio sol.",
"sort_by": "Ordenar por", "sort_by": "Ordenar por",
"spend_key_private": "Chave de gastos (privada)", "spend_key_private": "Chave de gastos (privada)",
"spend_key_public": "Chave de gastos (pública)", "spend_key_public": "Chave de gastos (pública)",
@ -755,7 +773,7 @@
"support_description_guides": "Documentação e suporte para problemas comuns", "support_description_guides": "Documentação e suporte para problemas comuns",
"support_description_live_chat": "Livre e rápido! Representantes de suporte treinado estão disponíveis para ajudar", "support_description_live_chat": "Livre e rápido! Representantes de suporte treinado estão disponíveis para ajudar",
"support_description_other_links": "Junte -se às nossas comunidades ou chegue a nós nossos parceiros por meio de outros métodos", "support_description_other_links": "Junte -se às nossas comunidades ou chegue a nós nossos parceiros por meio de outros métodos",
"support_title_guides": "Guias da carteira de bolo", "support_title_guides": "Documentos da carteira de bolo",
"support_title_live_chat": "Apoio ao vivo", "support_title_live_chat": "Apoio ao vivo",
"support_title_other_links": "Outros links de suporte", "support_title_other_links": "Outros links de suporte",
"sweeping_wallet": "Carteira varrendo", "sweeping_wallet": "Carteira varrendo",
@ -894,6 +912,7 @@
"variable_pair_not_supported": "Este par de variáveis não é compatível com as trocas selecionadas", "variable_pair_not_supported": "Este par de variáveis não é compatível com as trocas selecionadas",
"verification": "Verificação", "verification": "Verificação",
"verify_message": "Verifique a mensagem", "verify_message": "Verifique a mensagem",
"verify_seed": "Verifique a semente",
"verify_with_2fa": "Verificar com Cake 2FA", "verify_with_2fa": "Verificar com Cake 2FA",
"version": "Versão ${currentVersion}", "version": "Versão ${currentVersion}",
"view_all": "Ver todos", "view_all": "Ver todos",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "Купить карты с предоплатой и подарочными картами по всему миру", "cake_pay_subtitle": "Купить карты с предоплатой и подарочными картами по всему миру",
"cake_pay_web_cards_subtitle": "Покупайте карты предоплаты и подарочные карты по всему миру", "cake_pay_web_cards_subtitle": "Покупайте карты предоплаты и подарочные карты по всему миру",
"cake_pay_web_cards_title": "Веб-карты Cake Pay", "cake_pay_web_cards_title": "Веб-карты Cake Pay",
"cake_seeds_save_disclaimer": "Пожалуйста, сохраните эти слова в безопасном месте! Если вы теряете доступ к своему кошельку, поддержка кошелька для торта не может вам помочь", "cake_seeds_save_disclaimer": "Пожалуйста, сохраните эти слова в безопасном месте! Вам понадобятся эти слова, чтобы восстановить свой кошелек на новом устройстве.",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "Я подтверждаю, что не использую прокси или VPN",
"cakepay_confirm_purchase": "Подтвердите покупку",
"cakepay_confirm_terms_agreed": "Я согласен с условиями, представленными здесь:",
"cakepay_confirm_voided_refund": "Я понимаю, что попытки выкупа из ограниченной страны будут аннулировать любые возмещение",
"cakepay_ios_not_available": "Извините, эта подарочная карта недоступна на iOS. Вместо этого вы можете приобрести его на Android или через наш веб -сайт.", "cakepay_ios_not_available": "Извините, эта подарочная карта недоступна на iOS. Вместо этого вы можете приобрести его на Android или через наш веб -сайт.",
"cakepay_prepaid_card": "Предоплаченная дебетовая карта CakePay", "cakepay_prepaid_card": "Предоплаченная дебетовая карта CakePay",
"camera_consent": "Ваша камера будет использоваться для захвата изображения в целях идентификации ${provider}. Пожалуйста, ознакомьтесь с их Политикой конфиденциальности для получения подробной информации.", "camera_consent": "Ваша камера будет использоваться для захвата изображения в целях идентификации ${provider}. Пожалуйста, ознакомьтесь с их Политикой конфиденциальности для получения подробной информации.",
@ -355,12 +359,15 @@
"how_to_use": "Как использовать", "how_to_use": "Как использовать",
"how_to_use_card": "Как использовать эту карту", "how_to_use_card": "Как использовать эту карту",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "Если вы не видите свое устройство выше, пожалуйста, убедитесь, что ваша бухгалтерская книга бодрствует и разблокирована!",
"ignor": "Игнорировать", "ignor": "Игнорировать",
"import": "Импортировать", "import": "Импортировать",
"importNFTs": "Импортировать NFT", "importNFTs": "Импортировать NFT",
"in_store": "В магазине", "in_store": "В магазине",
"incoming": "Входящие", "incoming": "Входящие",
"incorrect_seed": "Введённый текст некорректный.", "incorrect_seed": "Введённый текст некорректный.",
"incorrect_seed_option": "Неверный. Пожалуйста, попробуйте еще раз",
"incorrect_seed_option_back": "Неверный. Пожалуйста, убедитесь, что ваше семя сохранено правильно, и попробуйте еще раз.",
"inputs": "Входы", "inputs": "Входы",
"insufficient_funds_for_tx": "Недостаточно средств для успешного выполнения транзакции.", "insufficient_funds_for_tx": "Недостаточно средств для успешного выполнения транзакции.",
"insufficient_lamport_for_tx": "У вас недостаточно Sol, чтобы покрыть транзакцию и плату за транзакцию. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете.", "insufficient_lamport_for_tx": "У вас недостаточно Sol, чтобы покрыть транзакцию и плату за транзакцию. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете.",
@ -470,6 +477,7 @@
"online": "Онлайн", "online": "Онлайн",
"onramper_option_description": "Быстро купите крипто со многими способами оплаты. Доступно в большинстве стран. Спреды и сборы различаются.", "onramper_option_description": "Быстро купите крипто со многими способами оплаты. Доступно в большинстве стран. Спреды и сборы различаются.",
"open_gift_card": "Открыть подарочную карту", "open_gift_card": "Открыть подарочную карту",
"open_wallet": "Открытый кошелек",
"optional_description": "Дополнительное описание", "optional_description": "Дополнительное описание",
"optional_email_hint": "Необязательное электронное письмо с уведомлением получателя платежа", "optional_email_hint": "Необязательное электронное письмо с уведомлением получателя платежа",
"optional_name": "Необязательное имя получателя", "optional_name": "Необязательное имя получателя",
@ -539,6 +547,7 @@
"recipient_address": "Адрес получателя", "recipient_address": "Адрес получателя",
"reconnect": "Переподключиться", "reconnect": "Переподключиться",
"reconnect_alert_text": "Вы хотите переподключиться?", "reconnect_alert_text": "Вы хотите переподключиться?",
"reconnect_your_hardware_wallet": "Воссоедините свой аппаратный кошелек",
"reconnection": "Переподключение", "reconnection": "Переподключение",
"red_dark_theme": "Красная темная тема", "red_dark_theme": "Красная темная тема",
"red_light_theme": "Тема красного света", "red_light_theme": "Тема красного света",
@ -620,6 +629,7 @@
"seed_alert_title": "Внимание", "seed_alert_title": "Внимание",
"seed_alert_yes": "Да", "seed_alert_yes": "Да",
"seed_choose": "Выберите язык мнемонической фразы", "seed_choose": "Выберите язык мнемонической фразы",
"seed_display_path": "Меню -> Безопасность и резервное копирование -> Показать ключ/семена",
"seed_hex_form": "Семя кошелька (шестнадцатеричная форма)", "seed_hex_form": "Семя кошелька (шестнадцатеричная форма)",
"seed_key": "Ключ семян", "seed_key": "Ключ семян",
"seed_language": "Язык семян", "seed_language": "Язык семян",
@ -638,9 +648,13 @@
"seed_language_russian": "Русский", "seed_language_russian": "Русский",
"seed_language_spanish": "Испанский", "seed_language_spanish": "Испанский",
"seed_phrase_length": "Длина исходной фразы", "seed_phrase_length": "Длина исходной фразы",
"seed_position_question_one": "Что такое",
"seed_position_question_two": "Слово вашей семенной фразы?",
"seed_reminder": "Пожалуйста, запишите мнемоническую фразу на случай потери или очистки телефона", "seed_reminder": "Пожалуйста, запишите мнемоническую фразу на случай потери или очистки телефона",
"seed_share": "Поделиться мнемонической фразой", "seed_share": "Поделиться мнемонической фразой",
"seed_title": "Мнемоническая фраза", "seed_title": "Мнемоническая фраза",
"seed_verified": "Семя проверено",
"seed_verified_subtext": "Позже вы можете использовать сохраненное семя, чтобы восстановить этот кошелек в случае коррупции или потери вашего устройства. \n\n Вы можете снова просмотреть это семя из",
"seedtype": "SEEDTYPE", "seedtype": "SEEDTYPE",
"seedtype_alert_content": "Обмен семенами с другими кошельками возможно только с BIP39 SeedType.", "seedtype_alert_content": "Обмен семенами с другими кошельками возможно только с BIP39 SeedType.",
"seedtype_alert_title": "SEEDTYPE ALERT", "seedtype_alert_title": "SEEDTYPE ALERT",
@ -742,6 +756,10 @@
"silent_payments_settings": "Silent Payments Settings", "silent_payments_settings": "Silent Payments Settings",
"single_seed_wallets_group": "Одиночные кошельки", "single_seed_wallets_group": "Одиночные кошельки",
"slidable": "Скользящий", "slidable": "Скользящий",
"solana_create_associated_token_account_exception": "Ошибка создания ассоциированной учетной записи для адреса для адреса.",
"solana_no_associated_token_account_exception": "Для этого адреса нет связанной учетной записи токена.",
"solana_sign_native_transaction_rent_exception": "Сделка не может быть завершена. Недостаточный соль ушел в аренду после транзакции. Пожалуйста, поместите свой баланс Sol или уменьшите количество Sol, которое вы отправляете.",
"solana_sign_spl_token_transaction_rent_exception": "Сделка не может быть завершена. Недостаточный соль ушел в аренду после транзакции. Пожалуйста, пополните свой баланс Sol.",
"sort_by": "Сортировать по", "sort_by": "Сортировать по",
"spend_key_private": "Приватный ключ траты", "spend_key_private": "Приватный ключ траты",
"spend_key_public": "Публичный ключ траты", "spend_key_public": "Публичный ключ траты",
@ -754,7 +772,7 @@
"support_description_guides": "Документация и поддержка общих вопросов", "support_description_guides": "Документация и поддержка общих вопросов",
"support_description_live_chat": "Бесплатно и быстро! Обученные представители поддержки доступны для оказания помощи", "support_description_live_chat": "Бесплатно и быстро! Обученные представители поддержки доступны для оказания помощи",
"support_description_other_links": "Присоединяйтесь к нашим сообществам или охватите нас наших партнеров с помощью других методов", "support_description_other_links": "Присоединяйтесь к нашим сообществам или охватите нас наших партнеров с помощью других методов",
"support_title_guides": "Корт -гиды", "support_title_guides": "Корт кошелек документов",
"support_title_live_chat": "Живая поддержка", "support_title_live_chat": "Живая поддержка",
"support_title_other_links": "Другие ссылки на поддержку", "support_title_other_links": "Другие ссылки на поддержку",
"sweeping_wallet": "Подметание кошелька", "sweeping_wallet": "Подметание кошелька",
@ -893,6 +911,7 @@
"variable_pair_not_supported": "Эта пара переменных не поддерживается выбранными биржами.", "variable_pair_not_supported": "Эта пара переменных не поддерживается выбранными биржами.",
"verification": "Проверка", "verification": "Проверка",
"verify_message": "Проверьте сообщение", "verify_message": "Проверьте сообщение",
"verify_seed": "Проверьте семя",
"verify_with_2fa": "Подтвердить с помощью Cake 2FA", "verify_with_2fa": "Подтвердить с помощью Cake 2FA",
"version": "Версия ${currentVersion}", "version": "Версия ${currentVersion}",
"view_all": "Просмотреть все", "view_all": "Просмотреть все",

View file

@ -101,8 +101,12 @@
"cake_pay_subtitle": "ซื้อบัตรเติมเงินและบัตรของขวัญทั่วโลก", "cake_pay_subtitle": "ซื้อบัตรเติมเงินและบัตรของขวัญทั่วโลก",
"cake_pay_web_cards_subtitle": "ซื้อบัตรพร้อมเงินระดับโลกและบัตรของขวัญ", "cake_pay_web_cards_subtitle": "ซื้อบัตรพร้อมเงินระดับโลกและบัตรของขวัญ",
"cake_pay_web_cards_title": "Cake Pay Web Cards", "cake_pay_web_cards_title": "Cake Pay Web Cards",
"cake_seeds_save_disclaimer": "โปรดบันทึกคำเหล่านี้ในสถานที่ที่ปลอดภัย! หากคุณสูญเสียการเข้าถึงกระเป๋าเงินของคุณการสนับสนุนกระเป๋าเงินเค้กไม่สามารถช่วยคุณได้", "cake_seeds_save_disclaimer": "โปรดบันทึกคำเหล่านี้ในสถานที่ที่ปลอดภัย! คุณจะต้องใช้คำเหล่านี้เพื่อกู้คืนกระเป๋าเงินของคุณในอุปกรณ์ใหม่",
"cake_wallet": "Cake Wallet", "cake_wallet": "Cake Wallet",
"cakepay_confirm_no_vpn": "ฉันยืนยันว่าฉันไม่ได้ใช้พร็อกซีหรือ VPN",
"cakepay_confirm_purchase": "ยืนยันการซื้อ",
"cakepay_confirm_terms_agreed": "ฉันเห็นด้วยกับข้อกำหนดและเงื่อนไขที่นำเสนอที่นี่:",
"cakepay_confirm_voided_refund": "ฉันเข้าใจความพยายามในการไถ่ถอนจากประเทศที่ถูก จำกัด จะทำให้คืนเงินใด ๆ",
"cakepay_ios_not_available": "ขออภัยบัตรของขวัญนี้ไม่มีใน iOS คุณสามารถซื้อได้บน Android หรือผ่านเว็บไซต์ของเราแทน", "cakepay_ios_not_available": "ขออภัยบัตรของขวัญนี้ไม่มีใน iOS คุณสามารถซื้อได้บน Android หรือผ่านเว็บไซต์ของเราแทน",
"cakepay_prepaid_card": "บัตรเดบิตเติมเงินของ CakePay", "cakepay_prepaid_card": "บัตรเดบิตเติมเงินของ CakePay",
"camera_consent": "กล้องของคุณจะถูกนำมาใช้เพื่อจับภาพเพื่อวัตถุประสงค์ในการระบุตัวตนภายใน ${provider} โปรดตรวจสอบนโยบายความเป็นส่วนตัวเพื่อดูรายละเอียด", "camera_consent": "กล้องของคุณจะถูกนำมาใช้เพื่อจับภาพเพื่อวัตถุประสงค์ในการระบุตัวตนภายใน ${provider} โปรดตรวจสอบนโยบายความเป็นส่วนตัวเพื่อดูรายละเอียด",
@ -355,12 +359,15 @@
"how_to_use": "วิธีใช้", "how_to_use": "วิธีใช้",
"how_to_use_card": "วิธีใช้บัตรนี้", "how_to_use_card": "วิธีใช้บัตรนี้",
"id": "ID: ", "id": "ID: ",
"if_you_dont_see_your_device": "หากคุณไม่เห็นอุปกรณ์ของคุณด้านบนโปรดตรวจสอบให้แน่ใจว่าบัญชีแยกประเภทของคุณตื่นและปลดล็อค!",
"ignor": "ละเว้น", "ignor": "ละเว้น",
"import": "นำเข้า", "import": "นำเข้า",
"importNFTs": "นำเข้า NFT", "importNFTs": "นำเข้า NFT",
"in_store": "ในร้าน", "in_store": "ในร้าน",
"incoming": "ขาเข้า", "incoming": "ขาเข้า",
"incorrect_seed": "ข้อความที่ป้อนไม่ถูกต้อง", "incorrect_seed": "ข้อความที่ป้อนไม่ถูกต้อง",
"incorrect_seed_option": "ไม่ถูกต้อง. โปรดลองอีกครั้ง",
"incorrect_seed_option_back": "ไม่ถูกต้อง. โปรดตรวจสอบให้แน่ใจว่าเมล็ดพันธุ์ของคุณได้รับการบันทึกอย่างถูกต้องและลองอีกครั้ง",
"inputs": "อินพุต", "inputs": "อินพุต",
"insufficient_funds_for_tx": "เงินทุนไม่เพียงพอที่จะดำเนินการทำธุรกรรมได้สำเร็จ", "insufficient_funds_for_tx": "เงินทุนไม่เพียงพอที่จะดำเนินการทำธุรกรรมได้สำเร็จ",
"insufficient_lamport_for_tx": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมการทำธุรกรรมและค่าธรรมเนียมการทำธุรกรรม กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณส่งมา", "insufficient_lamport_for_tx": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมการทำธุรกรรมและค่าธรรมเนียมการทำธุรกรรม กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณส่งมา",
@ -470,6 +477,7 @@
"online": "ออนไลน์", "online": "ออนไลน์",
"onramper_option_description": "ซื้อ crypto อย่างรวดเร็วด้วยวิธีการชำระเงินจำนวนมาก มีให้บริการในประเทศส่วนใหญ่ สเปรดและค่าธรรมเนียมแตกต่างกันไป", "onramper_option_description": "ซื้อ crypto อย่างรวดเร็วด้วยวิธีการชำระเงินจำนวนมาก มีให้บริการในประเทศส่วนใหญ่ สเปรดและค่าธรรมเนียมแตกต่างกันไป",
"open_gift_card": "เปิดบัตรของขวัญ", "open_gift_card": "เปิดบัตรของขวัญ",
"open_wallet": "กระเป๋าสตางค์เปิด",
"optional_description": "คำอธิบายเพิ่มเติม", "optional_description": "คำอธิบายเพิ่มเติม",
"optional_email_hint": "อีเมลแจ้งผู้รับเงินเพิ่มเติม", "optional_email_hint": "อีเมลแจ้งผู้รับเงินเพิ่มเติม",
"optional_name": "ชื่อผู้รับเพิ่มเติม", "optional_name": "ชื่อผู้รับเพิ่มเติม",
@ -538,6 +546,7 @@
"recipient_address": "ที่อยู่ผู้รับ", "recipient_address": "ที่อยู่ผู้รับ",
"reconnect": "เชื่อมต่อใหม่", "reconnect": "เชื่อมต่อใหม่",
"reconnect_alert_text": "คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อใหม่?", "reconnect_alert_text": "คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อใหม่?",
"reconnect_your_hardware_wallet": "เชื่อมต่อกระเป๋าเงินฮาร์ดแวร์ของคุณอีกครั้ง",
"reconnection": "เชื่อมต่อใหม่", "reconnection": "เชื่อมต่อใหม่",
"red_dark_theme": "ธีมสีแดงเข้ม", "red_dark_theme": "ธีมสีแดงเข้ม",
"red_light_theme": "ธีมแสงสีแดง", "red_light_theme": "ธีมแสงสีแดง",
@ -619,6 +628,7 @@
"seed_alert_title": "ความสนใจ", "seed_alert_title": "ความสนใจ",
"seed_alert_yes": "ใช่ ฉันได้เขียน", "seed_alert_yes": "ใช่ ฉันได้เขียน",
"seed_choose": "เลือกภาษาของ seed", "seed_choose": "เลือกภาษาของ seed",
"seed_display_path": "เมนู -> ความปลอดภัยและการสำรองข้อมูล -> แสดงคีย์/เมล็ดพันธุ์",
"seed_hex_form": "เมล็ดกระเป๋าเงิน (รูปแบบฐานสิบหก)", "seed_hex_form": "เมล็ดกระเป๋าเงิน (รูปแบบฐานสิบหก)",
"seed_key": "คีย์เมล็ดพันธุ์", "seed_key": "คีย์เมล็ดพันธุ์",
"seed_language": "ภาษาเมล็ด", "seed_language": "ภาษาเมล็ด",
@ -637,9 +647,13 @@
"seed_language_russian": "รัสเซีย", "seed_language_russian": "รัสเซีย",
"seed_language_spanish": "สเปน", "seed_language_spanish": "สเปน",
"seed_phrase_length": "ความยาววลีของเมล็ด", "seed_phrase_length": "ความยาววลีของเมล็ด",
"seed_position_question_one": "ไฟล์",
"seed_position_question_two": "คำพูดของวลีเมล็ด?",
"seed_reminder": "โปรดเขียนข้อมูลนี้ลงสมุดเพื่อความปลอดภัยหากคุณสูญเสียหรือล้างโทรศัพท์ของคุณ", "seed_reminder": "โปรดเขียนข้อมูลนี้ลงสมุดเพื่อความปลอดภัยหากคุณสูญเสียหรือล้างโทรศัพท์ของคุณ",
"seed_share": "แบ่งปัน seed", "seed_share": "แบ่งปัน seed",
"seed_title": "Seed", "seed_title": "Seed",
"seed_verified": "ตรวจสอบเมล็ดพันธุ์",
"seed_verified_subtext": "คุณสามารถใช้เมล็ดพันธุ์ที่บันทึกไว้ในภายหลังเพื่อคืนค่ากระเป๋าเงินนี้ในกรณีที่เกิดการทุจริตหรือสูญเสียอุปกรณ์ของคุณ \n\n คุณสามารถดูเมล็ดพันธุ์นี้ได้อีกครั้งจากไฟล์",
"seedtype": "เมล็ดพันธุ์", "seedtype": "เมล็ดพันธุ์",
"seedtype_alert_content": "การแบ่งปันเมล็ดกับกระเป๋าเงินอื่น ๆ เป็นไปได้เฉพาะกับ bip39 seedtype", "seedtype_alert_content": "การแบ่งปันเมล็ดกับกระเป๋าเงินอื่น ๆ เป็นไปได้เฉพาะกับ bip39 seedtype",
"seedtype_alert_title": "การแจ้งเตือน seedtype", "seedtype_alert_title": "การแจ้งเตือน seedtype",
@ -741,6 +755,10 @@
"silent_payments_settings": "การตั้งค่าการชำระเงินแบบเงียบ", "silent_payments_settings": "การตั้งค่าการชำระเงินแบบเงียบ",
"single_seed_wallets_group": "กระเป๋าเงินเดียว", "single_seed_wallets_group": "กระเป๋าเงินเดียว",
"slidable": "เลื่อนได้", "slidable": "เลื่อนได้",
"solana_create_associated_token_account_exception": "ข้อผิดพลาดในการสร้างบัญชีโทเค็นที่เกี่ยวข้องสำหรับที่อยู่รับ",
"solana_no_associated_token_account_exception": "ไม่มีบัญชีโทเค็นที่เกี่ยวข้องสำหรับที่อยู่นี้",
"solana_sign_native_transaction_rent_exception": "การทำธุรกรรมไม่สามารถเสร็จสิ้นได้ SOL ไม่เพียงพอเหลือให้เช่าหลังการทำธุรกรรม กรุณาเติมยอดคงเหลือโซลของคุณหรือลดจำนวนโซลที่คุณกำลังส่ง",
"solana_sign_spl_token_transaction_rent_exception": "การทำธุรกรรมไม่สามารถเสร็จสิ้นได้ SOL ไม่เพียงพอเหลือให้เช่าหลังการทำธุรกรรม กรุณาเติมยอดสมดุลโซลของคุณ",
"sort_by": "เรียงตาม", "sort_by": "เรียงตาม",
"spend_key_private": "คีย์จ่าย (ส่วนตัว)", "spend_key_private": "คีย์จ่าย (ส่วนตัว)",
"spend_key_public": "คีย์จ่าย (สาธารณะ)", "spend_key_public": "คีย์จ่าย (สาธารณะ)",
@ -753,7 +771,7 @@
"support_description_guides": "เอกสารและการสนับสนุนสำหรับปัญหาทั่วไป", "support_description_guides": "เอกสารและการสนับสนุนสำหรับปัญหาทั่วไป",
"support_description_live_chat": "ฟรีและรวดเร็ว! ตัวแทนฝ่ายสนับสนุนที่ผ่านการฝึกอบรมพร้อมให้ความช่วยเหลือ", "support_description_live_chat": "ฟรีและรวดเร็ว! ตัวแทนฝ่ายสนับสนุนที่ผ่านการฝึกอบรมพร้อมให้ความช่วยเหลือ",
"support_description_other_links": "เข้าร่วมชุมชนของเราหรือเข้าถึงเราพันธมิตรของเราผ่านวิธีการอื่น ๆ", "support_description_other_links": "เข้าร่วมชุมชนของเราหรือเข้าถึงเราพันธมิตรของเราผ่านวิธีการอื่น ๆ",
"support_title_guides": "คู่มือกระเป๋าเงินเค้ก", "support_title_guides": "เอกสารกระเป๋าเงินเค้ก",
"support_title_live_chat": "การสนับสนุนสด", "support_title_live_chat": "การสนับสนุนสด",
"support_title_other_links": "ลิงค์สนับสนุนอื่น ๆ", "support_title_other_links": "ลิงค์สนับสนุนอื่น ๆ",
"sweeping_wallet": "กวาดกระเป๋าสตางค์", "sweeping_wallet": "กวาดกระเป๋าสตางค์",
@ -892,6 +910,7 @@
"variable_pair_not_supported": "คู่ความสัมพันธ์ที่เปลี่ยนแปลงได้นี้ไม่สนับสนุนกับหุ้นที่เลือก", "variable_pair_not_supported": "คู่ความสัมพันธ์ที่เปลี่ยนแปลงได้นี้ไม่สนับสนุนกับหุ้นที่เลือก",
"verification": "การตรวจสอบ", "verification": "การตรวจสอบ",
"verify_message": "ยืนยันข้อความ", "verify_message": "ยืนยันข้อความ",
"verify_seed": "ตรวจสอบเมล็ดพันธุ์",
"verify_with_2fa": "ตรวจสอบกับ Cake 2FA", "verify_with_2fa": "ตรวจสอบกับ Cake 2FA",
"version": "เวอร์ชัน ${currentVersion}", "version": "เวอร์ชัน ${currentVersion}",
"view_all": "ดูทั้งหมด", "view_all": "ดูทั้งหมด",

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