From 22c6bf2394b1a3b876e9bcbdfad54a75063c02bb Mon Sep 17 00:00:00 2001 From: andreasgriffin Date: Thu, 16 May 2024 16:45:12 +0200 Subject: [PATCH 1/3] Code quality improvements and bug fixes - improved translation management - fixed update bug - improved search UI popup - locked build script version - upgraded nostr_sdk - added UI pytests workflow update --- .github/workflows/python-tests.yml | 38 + bitcoin_safe/__init__.py | 2 +- bitcoin_safe/config.py | 7 + bitcoin_safe/gui/locales/app_ar_AE.qm | Bin 58200 -> 59543 bytes bitcoin_safe/gui/locales/app_ar_AE.ts | 2443 ++++++++-------- bitcoin_safe/gui/locales/app_es_ES.qm | Bin 65036 -> 66495 bytes bitcoin_safe/gui/locales/app_es_ES.ts | 2477 ++++++++-------- bitcoin_safe/gui/locales/app_hi_IN.qm | Bin 61014 -> 62391 bytes bitcoin_safe/gui/locales/app_hi_IN.ts | 2495 +++++++++-------- bitcoin_safe/gui/locales/app_ja_JP.qm | Bin 49618 -> 50797 bytes bitcoin_safe/gui/locales/app_ja_JP.ts | 2451 ++++++++-------- bitcoin_safe/gui/locales/app_pt_PT.qm | Bin 64424 -> 65905 bytes bitcoin_safe/gui/locales/app_pt_PT.ts | 2439 ++++++++-------- bitcoin_safe/gui/locales/app_ru_RU.qm | Bin 65468 -> 66855 bytes bitcoin_safe/gui/locales/app_ru_RU.ts | 2431 ++++++++-------- bitcoin_safe/gui/locales/app_zh_CN.qm | Bin 44318 -> 45301 bytes bitcoin_safe/gui/locales/app_zh_CN.ts | 2455 ++++++++-------- bitcoin_safe/gui/qt/block_change_signals.py | 3 + bitcoin_safe/gui/qt/descriptor_ui.py | 23 +- bitcoin_safe/gui/qt/downloader.py | 6 +- bitcoin_safe/gui/qt/extended_tabwidget.py | 47 +- bitcoin_safe/gui/qt/main.py | 81 +- bitcoin_safe/gui/qt/nostr_sync/nostr.py | 75 +- bitcoin_safe/gui/qt/qt_wallet.py | 38 +- bitcoin_safe/gui/qt/search_tree_view.py | 22 +- bitcoin_safe/gui/qt/sync_tab.py | 2 +- .../gui/qt/update_notification_bar.py | 71 +- bitcoin_safe/gui/qt/util.py | 36 +- bitcoin_safe/signature_manager.py | 6 +- bitcoin_safe/threading_manager.py | 6 +- poetry.lock | 524 ++-- pyproject.toml | 14 +- tests/gui/qt/test_gui_setup_wallet.py | 59 +- tests/gui/qt/test_gui_setup_wallet_custom.py | 228 ++ tests/gui/qt/test_helpers.py | 86 +- tests/test_signature_manager.py | 14 +- tests/test_signers.py | 9 +- tools/build.py | 49 +- 38 files changed, 9695 insertions(+), 8942 deletions(-) create mode 100644 .github/workflows/python-tests.yml create mode 100644 tests/gui/qt/test_gui_setup_wallet_custom.py diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml new file mode 100644 index 0000000..4e04c50 --- /dev/null +++ b/.github/workflows/python-tests.yml @@ -0,0 +1,38 @@ +name: Python Tests + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.10' + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y xvfb libegl1-mesa + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install poetry + poetry install + + - name: Run tests + run: | + poetry run pytest -vvv --log-cli-level=DEBUG --setup-show --maxfail=1 diff --git a/bitcoin_safe/__init__.py b/bitcoin_safe/__init__.py index 09dd12d..035d5ae 100644 --- a/bitcoin_safe/__init__.py +++ b/bitcoin_safe/__init__.py @@ -1 +1 @@ -__version__ = "0.6.1a0" +__version__ = "0.6.2a0" diff --git a/bitcoin_safe/config.py b/bitcoin_safe/config.py index 272106c..9c66753 100644 --- a/bitcoin_safe/config.py +++ b/bitcoin_safe/config.py @@ -84,6 +84,13 @@ def __init__(self): } self.language_code = None + def add_recently_open_wallet(self, file_path: str): + # ensure that the newest open file moves to the top of the queue, but isn't added multiple times + recent_wallets = self.recently_open_wallets[self.network] + if file_path in recent_wallets: + recent_wallets.remove(file_path) + recent_wallets.append(file_path) + @property def network_config(self) -> NetworkConfig: return self.network_configs.configs[self.network.name] diff --git a/bitcoin_safe/gui/locales/app_ar_AE.qm b/bitcoin_safe/gui/locales/app_ar_AE.qm index fc5203618e4ec289403cbc0138c5fde3a2e370e6..35bba9bfd972523aecc94e466938adf14ebb5722 100644 GIT binary patch delta 5151 zcmb7H2UJwo7Ckfb%DkC3Ga?w!pbml}gcdAOVu=bw5m5ob5(~-*C_;pxSYR|@i-~Pe z(Ey5FP((q*h6OdCf*LU(Mq_M=G1#Js8jXJsPxF(%{`zbE#e)6nx%-^G&v}=IQ;O9W z6sBI~k#?sa(|M1oRL@kJj{gCMWml6i_kZ|5X2^ZiQww#E;{lL9MPWD8` zuZcpG#B7;C6lx-7+h!tBA>pwKdY=RV zZ{l}s0x@9y9wMK)B)*qRbm9he+~1Q(mqMoI1K;P=DRTl*K{7c%yiVlNfjWPuMFpIw zcT*hEdx6x?`YQw~pn&cxiL9njfME*J_zVhMGm$7}jf4d<8WvE6%H&XR>LFl_gl_H< zdT|n_lu4NP)I=epW)q$5Dq(#Cg^vE5C|pJ1F*AXU6ut@z8SH3`EixUlou&j?6Q$Nl zm^+B3?n5Q|_*3H4YeW^#D065n(dRXk`4D)>n+hH*LFPYE;c7g$!J789s~|e{GnET5 zM6RYOv_JhKk+zaf%22|O`q9}sPola;s=bj#1uP0jclgzs6D$&{)*}Fm#QOowSaNT$!O_l7E5X7I#%OdW25M_^% z#UCF-h9}57rz5ld*X6F0uMus!D(`V%E>TIg+$S-esF%0A?~W1h z%tQHr`Whs1U;gp0H_1dhyySx%D~W1qGI5>Ts zJoRS{(YLeYo2=ma_Nnr%t4^Q-?(##Y@tn1d{DO}a(cA^{`ZUA~?n ziRu*gDiCcuP@#VwNfh0n7?Togf_pTIu2%Vm+_`aj*Dbd0Miq{b!axR}?sV`B+ZN^G3Bbw5d@wpR1at5lV`FVl+9)GKdmK-VwfG5>yY7U2}7DBtZ|jFftcOZAT*|k*=NDA z8O*^1WWIVfb12>$Q>zPeIM4}_shGnrJ7FPb=Gf~dqS8ss`C-{acFUOa&GDlptlz^`AZZX@kijB{RzEQAD zau&M8ie+b)5ao1ZZJa^q%nsHj{|F?z#kQJXf%e=YkxRsIqHnHnX`x<3MYp&)i(e9bqU08yyh*ffG-vMi zB~ix)uGv&^JAU7>KZ$~O z@P}L=WquA{as4n%oW@sI>52OH;?JyqLgekt*O(UB5e*IHe{dO!0d$vtJPd9Lq*H1;2?^s1{Ms%)?HQKSEh<|=*tClPfp zCZqpNb`%kD&bQk8|*1#BSvm4!Eeis=%%$tBD?t=!Z5 zG0}%pm3wDSBT71=EX#l=_EahNA6-c_{e`kB`aaR&UMA&L2Qce3S9v`)6Q57Lgt@zw zcb~EF#$x58*ciBCA~5QU@Jzhe*A zO2TrJaI_rfoR@HFECR;3n$uM6OdmA}mkZ#zv!jJZKUhQAB>d?GEc{tz)3y|IX^qOc zC+_#&sp{PBBGJHLm77q3iuX}@t?vc}r>nXKHxW6+sfM<~{E7NrHQwMtG~g4}q%CRK zcDSnI?{9>1H&qD^ThKI{RcX_Z$5K(X=wT7Yh0A2saw{Y-`i^QvM-5u0R<&XmgAMQ# zRaQMDj}KF=Zuqt{QRzqaaPfEKhaSLk}X`HtMsN#=~%()#qJ4v^feQ>y4t*@N4++IEdZ) zpuX!$#2y3i{N7rz??xohqgd>}AOpSsQuI%@gODlr#35a<(>*7O!C_0V|Jx`AFI|obX4P|i$Wp|{FF@4eg4lQzMmT>#ymE}i++Q9c-s*=QcW@PN2V$Yw zA>tht4(VDaK1x%dwMK|fm;{vcx%g!1ZS?q2jZF!I@4_z{+jBVYAlJ0{^-rRpTN=F! zgdaLj<67GjW7l8f840Pr?V{;X{3X!`Q#3t(4ken9sY#lT%9+P$=AAPI5p9XnEIsin zGz`x&^DeYStPKylU z#3p5)NYWiCEYMY^sxAkpbxbRRBkk15qfH{8F5$hp*{8z+ZW zvYk51v?cc}35~pjIh7Lb-m5c>o{0bJJaw5_(A@EiZr-GM_>%3=Er05WO~fPJ>Pfq> zYwD!S4o78%rR&x&1%cH0x~(|_;F*rP{e}$elh77*1$B$@m1#&bFKg*k@|*5Edy_rq%Jt_wIX}{K&YUmK+&Mokfb%6i>6M^N9Dc2Q z<5S{d<0B&V!xG}75)6rnJg%zVUNt1h6gaoR+y0#Qo403C+CO5b-#)FMmG;-$qb)(- zyza#Ho5yBb-%8bbJaz>0{#b{_(L0@>ftPW=V~kYp`t? zvgwJ;{1Cte;oOjG0Ox5|dA@7j+oFXjjhxA+c}XLsQsRGbelN(7qBkZ)#3e>dGRDNm zSr$u)h>bNE_0F@TgEVI!)huIbVslQ);i2Kpx0~xR@^5Q9bFTkhy_rdKdS)9>D+`ao z|C@)~fAC2BUqni7r-#X8bIiqSZB!`bo4m}TXY0Q*)Z_SZ!W-p<)lwBBpCDwhH3H1hDiP7g!mTI^hUfM9g}E` zPnhB0;85Z+C*ECVH2c)+&94Im(_065fJp#2xN(EtaPosUowS5kG+IiPd~8?0|mU2e{Xn>;JY={}=0j@^lM{iHeIb zCZS}J@rJ}WXQO^vgmF@|gN=j3-$^!eY-Y!MNK%@c0^fCgOYWaRt^XagIr$hvq?B0s I?)C5g3y8GfN&o-= delta 4136 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 B_k{oe diff --git a/bitcoin_safe/gui/locales/app_ar_AE.ts b/bitcoin_safe/gui/locales/app_ar_AE.ts index d82dff3..85afe38 100644 --- a/bitcoin_safe/gui/locales/app_ar_AE.ts +++ b/bitcoin_safe/gui/locales/app_ar_AE.ts @@ -2,920 +2,971 @@ - WalletSteps + AddressDialog - and - و + Address + عنوان - Send Test - إرسال الاختبار + Receiving address of wallet '{wallet_id}' (with index {index}) + عنوان استقبال المحفظة '{wallet_id}' (بالفهرس {index}) - Send test - إرسال الاختبار + Change address of wallet '{wallet_id}' (with index {index}) + عنوان التغيير للمحفظة '{wallet_id}' (بالفهرس {index}) - Send test {j} - إرسال الاختبار {j} + Script Pubkey + سكريبت ببلكي - Import signer info - استيراد معلومات الموقع + Address descriptor + وصف العنوان - Backup Seed - البذور الاحتياطية + Details + تفاصيل - Validate Backup - التحقق من صحة النسخ الاحتياطي + Advanced + متقدم + + + AddressList - Sign with {label} - التوقيع باستخدام {label} + Address {address} + العنوان {address} - Register multisig on signers - تسجيل multisig على الموقعين + change + تغيير - Receive Test - تلقي الاختبار + receiving + استقبال - Generate Seed - توليد البذور + change address + عنوان التغيير - Turn on hardware signer - قم بتشغيل موقع الأجهزة + receiving address + عنوان الاستقبال - The wallet is not funded. Please fund the wallet. - لم يتم تمويل المحفظة. يرجى تمويل المحفظة. + Details + تفاصيل - Put in secure locations - وضع في أماكن آمنة + View on block explorer + عرض على مستكشف البلوكات - You must have an initilized wallet first - يجب أن يكون لديك محفظة مهيأة أولاً + Copy as csv + نسخ كملف csv - - - MainWindow - Please open the sender wallet to edit this thransaction. - يرجى فتح محفظة الإرسال لتعديل هذه الصفقة. + Export Labels + تصدير التسميات - &Rename Wallet - &إعادة تسمية المحفظة + Tx + تحويلة - &Network Settings - &إعدادات الشبكة + Type + نوع - &Version: {} - &الإصدار: {} + Index + الفهرس - &Settings - &الإعدادات + Address + عنوان - &Check for update - &التحقق من التحديث + Category + فئة - &Languages - &اللغات + Label + تصنيف - &Wallet - &المحفظة + Balance + رصيد - &Export for Coldcard - &تصدير لـ Coldcard + Fiat Balance + رصيد نقدي + + + AddressListWithToolbar - &Change Password - &تغيير كلمة المرور + Show Filter + عرض مرشح - &Change/Export - &تغيير/تصدير + Export Labels + تصدير التسميات - &Save Current Wallet - &حفظ المحفظة الحالية + Generate to selected adddresses + توليف إلى العناوين المحددة + + + BTCSpinBox - &About - &حول + Max ≈ {amount} + الحد الأقصى ≈ {amount} + + + BackupSeed - &License - &رخصة الاستخدام + Please complete the previous steps. + الرجاء إكمال الخطوات السابقة. - &Transaction - &صفقة + Print recovery sheet + طباعة ورقة الاسترداد - &Transaction and PSBT - &صفقة و PSBT + Previous Step + الخطوة السابقة - &Show/Hide Tutorial - &عرض/إخفاء البرنامج التعليمي + Print the pdf (it also contains the wallet descriptor) + طباعة ملف PDF (يحتوي أيضًا على وصف المحفظة) - &Open Wallet - &فتح المحفظة + Write each 24-word seed onto the printed pdf. + اكتب كل كلمة بذور مكونة من 24 كلمة على ملف PDF المطبوع. - &New Wallet - &محفظة جديدة + Write the 24-word seed onto the printed pdf. + اكتب كلمة البذور المكونة من 24 كلمة على ملف PDF المطبوع. + + + Balance - KYC-Exchange - KYC-التبادل + Confirmed + تأكيد - PSBT {txid} - PSBT {txid} + Unconfirmed + غير مؤكد - Friends - أصدقاء + Unmatured + غير ناضج + + + BalanceChart - Close wallet - إغلاق المحفظة + Date + تاريخ + + + BitcoinQuickReceive - test - اختبار + Quick Receive + استقبال سريع - The wallet {file_path} is already open. - المحفظة {مسار_الملف} مفتوحة بالفعل. + Receive Address + عنوان الاستقبال + + + BlockingWaitingDialog - The wallet {file_path} is already open. Do you want to open the wallet anyway? - المحفظة {مسار_الملف} مفتوحة بالفعل. هل تريد فتح المحفظة على أي حال؟ + Please wait + الرجاء الانتظار + + + BuyHardware - Wallet already open - المحفظة مفتوحة بالفعل + Do you need to buy a hardware signer? + هل تحتاج إلى شراء جهاز توقيع معدني؟ - Selected file: {file_path} - الملف المحدد: {مسار_الملف} + Buy a {name} + شراء {name} - Re&fresh - تحديث + Buy a Coldcard +5% off + شراء Coldcard بخصم 5٪ - Export labels - تصدير التسميات + Turn on your {n} hardware signers + تشغيل {n} من جهاز التوقيع المعدني - Closing tab {name} - جارٍ إغلاق التبويب {name} + Turn on your hardware signer + تشغيل جهاز التوقيع المعدني + + + CategoryEditor - Closing wallet {id} - جارٍ إغلاق المحفظة {id} + category + فئة + + + ChatGui - new - جديد + Type your message here... + اكتب رسالتك هنا... - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - جميع الملفات (*);;PSBT (*.psbt);;صفقة (*.tx) + Share a PSBT + مشاركة PSBT - All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) - جميع الملفات (*);;ملفات JSON (*.jsonl);;ملفات JSON (*.json) + Send + إرسال - Open &Recent - فتح &الأخيرة + Open Transaction/PSBT + فتح المعاملة/PSBT - Open Transaction or PSBT - فتح الصفقة أو PSBT + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + جميع الملفات ();;PSBT (.psbt);;معاملة (*.tx) - Open Transaction/PSBT - فتح الصفقة/PSBT + Me: {text} + أنا: {text} + + + CloseButton - Open Wallet - فتح المحفظة + Close + إغلاق + + + ConfirmedBlock - No wallet open. Please open the sender wallet to edit this thransaction. - لا توجد محفظة مفتوحة. يرجى فتح محفظة الإرسال لتعديل هذه الصفقة. + Block {n} + البلوك {n} + + + ConnectedDevices - There is no such file: {file_path} - لا يوجد ملف بهذا الاسم: {مسار_الملف} + Reset identity for this device + إعادة تعيين الهوية لهذا الجهاز - Paste your Bitcoin Transaction or PSBT in here or drop a file - لصق معاملات البيتكوين الخاصة بك أو PSBT هنا أو إسقاط ملف + Trusted + موثوق - Transaction {txid} - معاملة {txid} + UnTrusted + غير موثوق - Wallet Files (*.wallet) - ملفات المحفظة (*.wallet) + My id: {id} + هويتي: {id} + + + DescriptorEdit - From &QR Code - من &رمز الاستجابة السريعة + Wallet setup not finished. Please finish before creating a Backup pdf. + لم يتم الانتهاء من إعداد المحفظة. يرجى الانتهاء قبل إنشاء ملف PDF للنسخ الاحتياطي. + + + DescriptorUI - From &file - من &ملف + Required Signers + التوقيعات المطلوبة - From &text - من &نص + Scan Address Limit + حد مسح العنوان - OK - موافق + Paste or scan your descriptor, if you restore a wallet. + لصق أو مسح وصفك، إذا قمت بإعادة تعيين محفظة. - Close wallet {id}? - هل تريد إغلاق المحفظة {id}؟ + This "descriptor" contains all information to reconstruct the wallet. +Please back up this descriptor to be able to recover the funds! + يحتوي "الوصف" هذا على جميع المعلومات لإعادة بناء المحفظة. يرجى عمل نسخة احتياطية من هذا الوصف لتكون قادرًا على استعادة الأموال! + + + DistributeSeeds - A wallet with id {name} is already open. - هناك محفظة برقم {اسم} مفتوحة بالفعل. + Place each seed backup and hardware signer in a secure location, such: + ضع كل نسخة احتياطية للبذور وجهاز التوقيع المعدني في مكان آمن، مثل: - Please enter the password for {filename}: - يرجى إدخال كلمة المرور لـ {اسم_الملف}: + Seed backup {j} and hardware signer {j} should be in location {j} + يجب أن تكون نسخة البذور {j} وجهاز التوقيع المعدني {j} في الموقع {j} - Please complete the wallet setup. - يرجى استكمال إعداد المحفظة. + Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. + اختر أماكن آمنة بعناية، مع النظر في أنك بحاجة إلى الذهاب إلى {m} من {n}، للإنفاق من محفظتك المتعددة التوقيع. - Please select the wallet - يرجى تحديد المحفظة + Store the seed backup in a <b>very</b> secure location (like a vault). + حافظ على نسخة احتياطية من البذور في مكان آمن جدًا (مثل خزنة). - Please select the wallet first. - يرجى تحديد المحفظة أولاً. + The seed backup (24 words) give total control over the funds. + تعطي نسخة البذور (24 كلمة) السيطرة الكاملة على الأموال. - Please paste your Bitcoin Transaction or PSBT in here, or drop a file - يرجى لصق معاملات البيتكوين الخاصة بك أو PSBT هنا، أو إسقاط ملف + Store the hardware signer in secure location. + حافظ على جهاز التوقيع المعدني في مكان آمن. - All Files (*);;JSON Files (*.json) - جميع الملفات (*);;ملفات JSON (*.json) + Finish + انتهى + + + Downloader - All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) - جميع الملفات (*);;ملفات JSONL (*.jsonl);;ملفات JSON (*.json) + Download Progress + تقدم التحميل - Import Electrum Wallet labels - استيراد تسميات محفظة إلكتروم + Download {} + تنزيل {} - Import labels - استيراد التسميات + Show {} in Folder + عرض {} في المجلد - FeeGroup + ExportDataSimple - ... is the minimum to replace the existing transactions. - ... هو الحد الأدنى لاستبدال المعاملات الحالية. + Enlarge + تكبير - {rate} is the minimum for {rbf} - {rate} هو الحد الأدنى لـ {rbf} + Share with single device + مشاركة مع جهاز واحد - Fee rate could not be determined - تعذر تحديد معدل الرسوم + PSBT + PSBT - The estimated transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - تم تقدير رسوم المعاملة بمقدار: {fee}، والتي تمثل {percent}% من قيمة الإرسال {sent} + Transaction + معاملة - Fee - رسوم + Not available + غير متوفر - The transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - رسوم المعاملة هي: {fee}، والتي تمثل {percent}% من قيمة الإرسال {sent} + Please enable the sync tab first + يرجى تمكين علامة المزامنة أولاً - High fee - رسوم عالية + Please enable syncing in the wallet {wallet_id} first + يرجى تمكين المزامنة في المحفظة {wallet_id} أولاً - in ~{n}. Block - في ~{n}. بلوك + Save as image + حفظ كصورة - The high prio mempool fee rate is {rate} - معدل الرسوم عالية الأولوية في مجموعة الذاكرة الرئيسية هو {rate} + Export file + تصدير ملف - Approximate fee rate - معدل رسوم تقريبي + Copy to clipboard + نسخ إلى الحافظة - High fee rate - معدل رسوم عال + Copy {name} + نسخ {name} - High fee rate! - معدل رسوم عال! + Copy TxId + نسخ معرف المعاملة - High fee ratio: {ratio}% - نسبة رسوم عالية: {ratio}% + Copy JSON + نسخ JSON - - - util - {} seconds ago - {} منذ ثوانى + Share with trusted devices + مشاركة مع الأجهزة الموثوق بها - Balance: {amount} - الرصيد: {amount} + Share with all devices in {wallet_id} + مشاركة مع جميع الأجهزة في {wallet_id} + + + FeeGroup - Transaction is unrelated to this wallet. - المعاملة لا علاقة لها بهذه المحفظة. + Fee + رسوم - Dynamic fee estimates not available - تقديرات الرسوم الديناميكية غير متوفرة + The transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + رسوم المعاملة هي: {fee}، والتي تمثل {percent}% من قيمة الإرسال {sent} - Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files - تم اكتشاف تلف في ملف المحفظة. يرجى استعادة محفظتك من البذور، ومقارنة العناوين في كلا الملفين + The estimated transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + تم تقدير رسوم المعاملة بمقدار: {fee}، والتي تمثل {percent}% من قيمة الإرسال {sent} - Insufficient funds - رصيد غير كاف + High fee rate! + معدل رسوم عال! - Unconfirmed - غير مؤكد + The high prio mempool fee rate is {rate} + معدل الرسوم عالية الأولوية في مجموعة الذاكرة الرئيسية هو {rate} - Failed to import from file. - فشل الاستيراد من الملف. + ... is the minimum to replace the existing transactions. + ... هو الحد الأدنى لاستبدال المعاملات الحالية. - Failed to export to file. - فشل التصدير إلى الملف. + High fee rate + معدل رسوم عال - in less than a minute - في أقل من دقيقة + High fee + رسوم عالية - in over {} years - في أكثر من {} سنة + Approximate fee rate + معدل رسوم تقريبي - in {} seconds - في ثوان + in ~{n}. Block + في ~{n}. بلوك - in about {} days - في حوالي {} أيام + {rate} is the minimum for {rbf} + {rate} هو الحد الأدنى لـ {rbf} - in about {} minutes - في حوالي {} دقيقة + Fee rate could not be determined + تعذر تحديد معدل الرسوم - in about {} hours - في حوالي {} ساعة + High fee ratio: {ratio}% + نسبة رسوم عالية: {ratio}% + + + FloatingButtonBar - in about {} months - في حوالي {} شهرًا + Fill the transaction fields + املأ حقول المعاملة - in about 1 hour - في حوالي 1 ساعة + Create Transaction + إنشاء معاملة - in about 1 year - في حوالي 1 سنة + Yes, I see the transaction in the history + نعم، أرى المعاملة في السجل - in about 1 month - في حوالي شهر واحد + Previous Step + الخطوة السابقة + + + HistList - in about 1 day - في حوالي يوم واحد + Wallet + محفظة - less than a minute ago - قبل أقل من دقيقة + Status + الحالة - about 1 month ago - قبل حوالي 1 شهر + Category + فئة - Incorrect password - كلمة سر خاطئة - - - Cannot cancel transaction - لا يمكن إلغاء المعاملة - - - Cannot create child transaction - لا يمكن إنشاء معاملة فرعية + Label + تصنيف - Cannot bump fee - لا يمكن عثرة الرسوم + Amount + المبلغ - Not Verified - لم يتم التحقق منها + Balance + الرصيد - Unknown - مجهول + Txid + معرف المعاملة - Local - محلي + Cannot fetch wallet '{id}'. Please open the wallet first. + تعذر جلب المحفظة '{id}'. يرجى فتح المحفظة أولاً. + + + ImportXpubs - about {} minutes ago - منذ {} دقيقة تقريبًا + 2. Import wallet information into Bitcoin Safe + 2. استيراد معلومات المحفظة إلى Bitcoin Safe - over {} years ago - منذ أكثر من {} سنة + Skip step + تخطي الخطوة - about {} months ago - منذ حوالي {} أشهر + Next step + الخطوة التالية - about {} days ago - منذ حوالي {} أيام + Previous Step + الخطوة السابقة + + + KeyStoreUI - about {} hours ago - منذ حوالي {} ساعة + Import fingerprint and xpub + استيراد بصمة الإصبع و xpub - about 1 hour ago - منذ حوالي 1 ساعة + {data_type} cannot be used here. + {data_type} لا يمكن استخدامها هنا. - about 1 year ago - منذ حوالي سنة واحدة + The xpub is in SLIP132 format. Converting to standard format. + xpub في تنسيق SLIP132. تحويل إلى تنسيق قياسي. - about 1 day ago - منذ حوالي يوم واحد + Import + استيراد - Unconfirmed parent - والد غير مؤكد + Manual + يدوي - - - d - {} copied to Clipboard - {} نسخ إلى الحافظة + Description + الوصف - Create random mnemonic - إنشاء تذكير عشوائي + Label + تسمية - Create PDF - إنشاء قوات الدفاع الشعبي + Fingerprint + بصمة الإصبع - Open file - افتح الملف + xPub Origin + منشأ xPub - Signer {i} - الموقّع {i} + xPub + xPub - Text copied to Clipboard - تم نسخ النص إلى الحافظة + Seed + بذرة - Open Transaction/PSBT - فتح المعاملة/PSBT + OK + موافق - Read QR code from camera - قراءة رمز الاستجابة السريعة من الكاميرا + Name of signing device: ...... +Location of signing device: ..... + اسم الجهاز الموقع: ...... موقع جهاز التوقيع: ..... - Recovery Signer {i} - مُوقع الاسترداد {i} + Import file or text + استيراد ملف أو نص - Copy to clipboard - نسخ إلى الحافظة + Scan + فحص - - - KeyStoreUI - {data_type} cannot be used here. - {data_type} لا يمكن استخدامها هنا. + Connect USB + توصيل USB {xpub} is not a valid public xpub {xpub} ليس xpub عامًا صالحًا - xPub - xPub + Please import the public key information from the hardware wallet first + يرجى استيراد معلومات المفتاح العام من محفظة الأجهزة أولاً - The xpub is in SLIP132 format. Converting to standard format. - xpub في تنسيق SLIP132. تحويل إلى تنسيق قياسي. + Please paste the exported file (like coldcard-export.json or sparrow-export.json): + يرجى لصق الملف المصدر (مثل coldcard-export.json أو sparrow-export.json): - The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} - أصل xPub {key_origin} ليس الأصل المتوقع {expected_key_origin} لـ {self.get_address_type().name} + Please paste the exported file (like coldcard-export.json or sparrow-export.json) + يرجى لصق الملف المصدر (مثل coldcard-export.json أو sparrow-export.json) + + + Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. + المعيار لنوع العنوان المحدد {type} هو {expected_key_origin}. يرجى تصحيحه إذا كنت غير متأكد. The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. أصل xPub {key_origin} و xPub ينتميان معًا. يرجى اختيار زوج أصل xPub الصحيح. - Import - استيراد + The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} + أصل xPub {key_origin} ليس الأصل المتوقع {expected_key_origin} لـ {self.get_address_type().name} - Import fingerprint and xpub - استيراد بصمة الإصبع و xpub + No signer data for the expected key_origin {expected_key_origin} found. + لا توجد بيانات موقع للموقع المتوقع {expected_key_origin}. - Import file or text - استيراد ملف أو نص + Please paste descriptors into the descriptor field in the top right. + يرجى لصق الوصفات في حقل الوصفات في الزاوية اليمنى العلوية. + + + LabelTimeEstimation - Name of signing device: ...... -Location of signing device: ..... - اسم الجهاز الموقع: ...... موقع جهاز التوقيع: ..... + ~in {t} min + ~ في {t} دقيقة - Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. - المعيار لنوع العنوان المحدد {type} هو {expected_key_origin}. يرجى تصحيحه إذا كنت غير متأكد. + ~in {t} hours + ~ في {t} ساعة + + + MainWindow - Description - الوصف + &Wallet + &المحفظة - Seed - بذرة + Re&fresh + تحديث - Fingerprint - بصمة الإصبع + &Transaction + &صفقة - Label - تسمية + &Transaction and PSBT + &صفقة و PSBT - Connect USB - توصيل USB + From &file + من &ملف - Scan - فحص + From &text + من &نص - No signer data for the expected key_origin {expected_key_origin} found. - لا توجد بيانات موقع للموقع المتوقع {expected_key_origin}. + From &QR Code + من &رمز الاستجابة السريعة - xPub Origin - منشأ xPub + &Settings + &الإعدادات - OK - موافق + &Network Settings + &إعدادات الشبكة - Manual - يدوي + &Show/Hide Tutorial + &عرض/إخفاء البرنامج التعليمي - Please import the public key information from the hardware wallet first - يرجى استيراد معلومات المفتاح العام من محفظة الأجهزة أولاً + &Languages + &اللغات - Please paste the exported file (like coldcard-export.json or sparrow-export.json) - يرجى لصق الملف المصدر (مثل coldcard-export.json أو sparrow-export.json) + &New Wallet + &محفظة جديدة - Please paste the exported file (like coldcard-export.json or sparrow-export.json): - يرجى لصق الملف المصدر (مثل coldcard-export.json أو sparrow-export.json): + &About + &حول - Please paste descriptors into the descriptor field in the top right. - يرجى لصق الوصفات في حقل الوصفات في الزاوية اليمنى العلوية. + &Version: {} + &الإصدار: {} - - - MempoolButtons - {n}. Block - {n}. الكتلة + &Check for update + &التحقق من التحديث - Next Block - الكتلة التالية + &License + &رخصة الاستخدام - - - UITx_Creator - {num_inputs} Inputs: {inputs} - {num_inputs} المدخلات: {inputs} + Please select the wallet + يرجى تحديد المحفظة - Send Category - إرسال الفئة + test + اختبار - Add foreign UTXOs - إضافة UTXOs الأجنبية + Please select the wallet first. + يرجى تحديد المحفظة أولاً. - Add Inputs - إضافة المدخلات + Open Transaction/PSBT + فتح الصفقة/PSBT - Adding outpoints {outpoints} - إضافة نقاط خارجية {outpoints} + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + جميع الملفات (*);;PSBT (*.psbt);;صفقة (*.tx) - The inputs {inputs} conflict with these confirmed txids {txids}. - تتعارض المدخلات {inputs} مع txids المؤكدة {txids}. + Selected file: {file_path} + الملف المحدد: {مسار_الملف} - Load UTXOs - تحميل UTXOs + &Open Wallet + &فتح المحفظة - Reduce future fees -by merging address balances - تقليل الرسوم المستقبلية عن طريق دمج أرصدة العناوين + No wallet open. Please open the sender wallet to edit this thransaction. + لا توجد محفظة مفتوحة. يرجى فتح محفظة الإرسال لتعديل هذه الصفقة. - Select a category that fits the recipient best - حدد الفئة التي تناسب المستلم بشكل أفضل + Please open the sender wallet to edit this thransaction. + يرجى فتح محفظة الإرسال لتعديل هذه الصفقة. - The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. - ستتم إزالة المعاملات التابعة غير المؤكدة {txids} بواسطة هذه المعاملة الجديدة التي تقوم بإنشائها. + Open Transaction or PSBT + فتح الصفقة أو PSBT - Advanced - متقدم + OK + موافق - Please paste UTXO here - من فضلك قم بلصق UTXO هنا + Please paste your Bitcoin Transaction or PSBT in here, or drop a file + يرجى لصق معاملات البيتكوين الخاصة بك أو PSBT هنا، أو إسقاط ملف - This checkbox automatically checks -below {rate} - يتم تحديد مربع الاختيار هذا تلقائيًا أسفل {rate} + Paste your Bitcoin Transaction or PSBT in here or drop a file + لصق معاملات البيتكوين الخاصة بك أو PSBT هنا أو إسقاط ملف - Please select an input category on the left, that fits the transaction recipients. - يرجى تحديد فئة الإدخال على اليسار، والتي تناسب مستلمي المعاملة. + Transaction {txid} + معاملة {txid} - Please paste UTXO here in the format txid:outpoint -txid:outpoint - يرجى لصق UTXO هنا بالتنسيق txid:outpoint txid:outpoint + PSBT {txid} + PSBT {txid} - - - Recipients - + Add Recipient - + إضافة مستلم + Open Wallet + فتح المحفظة - Recipients - المستلمون + Wallet Files (*.wallet) + ملفات المحفظة (*.wallet) - - - LabelTimeEstimation - ~in {t} min - ~ في {t} دقيقة + Open &Recent + فتح &الأخيرة - ~in {t} hours - ~ في {t} ساعة + The wallet {file_path} is already open. + المحفظة {مسار_الملف} مفتوحة بالفعل. - - - MempoolProjectedBlock - ~{n}. Block - ~{n}. الكتلة + The wallet {file_path} is already open. Do you want to open the wallet anyway? + المحفظة {مسار_الملف} مفتوحة بالفعل. هل تريد فتح المحفظة على أي حال؟ - Unconfirmed - غير مؤكد + Wallet already open + المحفظة مفتوحة بالفعل - - - RegisterMultisig - 1. Export wallet descriptor - 1. تصدير وصف المحفظة + There is no such file: {file_path} + لا يوجد ملف بهذا الاسم: {مسار_الملف} - 2. Import in the hardware signer - 2. استيراد في جهاز التوقيع الخاص بك + Please enter the password for {filename}: + يرجى إدخال كلمة المرور لـ {اسم_الملف}: - 2. Import in each hardware signer - 2. استيراد في كل جهاز توقيع عتادي + Export labels + تصدير التسميات - Previous Step - الخطوة السابقة + All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) + جميع الملفات (*);;ملفات JSON (*.jsonl);;ملفات JSON (*.json) - Export file to register the multisig on Coldcard - تصدير ملف لتسجيل المتعددة التوقيع على Coldcard + Import labels + استيراد التسميات - Your balance {balance} is greater than a maximally allowed test amount of {amount}! -Please do the hardware signer reset only with a lower balance! (Send some funds out before) - رصيدك {balance} أكبر من الحد الأقصى المسموح به للمبلغ الاختباري {amount}! يرجى إجراء إعادة تعيين لجهاز التوقيع الخاص بك فقط برصيد أقل! (أرسل بعض الأموال قبل ذلك) + All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) + جميع الملفات (*);;ملفات JSONL (*.jsonl);;ملفات JSON (*.json) - Yes, I registered the multisig on the {n} hardware signer - نعم، قمت بتسجيل المتعددة التوقيع على {n} جهاز توقيع عتادي + Import Electrum Wallet labels + استيراد تسميات محفظة إلكتروم - - - ScreenshotsExportXpub - 1. Export the wallet information from the hardware signer - 1. قم بتصدير معلومات المحفظة من موقع الجهاز + &Save Current Wallet + &حفظ المحفظة الحالية - - - ImportXpubs - 2. Import wallet information into Bitcoin Safe - 2. استيراد معلومات المحفظة إلى Bitcoin Safe + All Files (*);;JSON Files (*.json) + جميع الملفات (*);;ملفات JSON (*.json) - Next step - الخطوة التالية + new + جديد - Previous Step - الخطوة السابقة + Friends + أصدقاء - Skip step - تخطي الخطوة + KYC-Exchange + KYC-التبادل - - - ExportDataSimple - PSBT - PSBT + A wallet with id {name} is already open. + هناك محفظة برقم {اسم} مفتوحة بالفعل. - Export file - تصدير ملف + Please complete the wallet setup. + يرجى استكمال إعداد المحفظة. - Enlarge - تكبير + Close wallet {id}? + هل تريد إغلاق المحفظة {id}؟ - Save as image - حفظ كصورة + Close wallet + إغلاق المحفظة - Not available - غير متوفر + Closing wallet {id} + جارٍ إغلاق المحفظة {id} - Share with trusted devices - مشاركة مع الأجهزة الموثوق بها + Closing tab {name} + جارٍ إغلاق التبويب {name} - Share with all devices in {wallet_id} - مشاركة مع جميع الأجهزة في {wallet_id} + &Change/Export + &تغيير/تصدير - Share with single device - مشاركة مع جهاز واحد + &Rename Wallet + &إعادة تسمية المحفظة - Transaction - معاملة + &Change Password + &تغيير كلمة المرور - Copy {name} - نسخ {name} + &Export for Coldcard + &تصدير لـ Coldcard + + + MempoolButtons - Copy JSON - نسخ JSON + Next Block + الكتلة التالية - Copy to clipboard - نسخ إلى الحافظة + {n}. Block + {n}. الكتلة + + + MempoolProjectedBlock - Copy TxId - نسخ معرف المعاملة + Unconfirmed + غير مؤكد - Please enable syncing in the wallet {wallet_id} first - يرجى تمكين المزامنة في المحفظة {wallet_id} أولاً + ~{n}. Block + ~{n}. الكتلة + + + + MyTreeView + + Copy as csv + نسخ كـ csv - Please enable the sync tab first - يرجى تمكين علامة المزامنة أولاً + Copy + نسخ NetworkSettingsUI - SSL: - SSL: + Manual + يدوي - Network Settings - إعدادات الشبكة + Port: + المنفذ: - Test Connection - اختبار الاتصال + Mode: + الوضع: + + + IP Address: + عنوان IP: Username: اسم المستخدم: - URL: - الرابط: + Password: + كلمة المرور: + + + Mempool Instance URL + عنوان Mempool Instance Responses: @@ -924,417 +975,401 @@ Please do the hardware signer reset only with a lower balance! (Send some fund الردود: {name}: {status} Mempool Instance: {server} - Port: - المنفذ: - - - Mode: - الوضع: + Automatic + تلقائي Apply && Restart تطبيق && إعادة التشغيل - Automatic - تلقائي + Test Connection + اختبار الاتصال - Enable SSL - تمكين SSL + Network Settings + إعدادات الشبكة - IP Address: - عنوان IP: + Blockchain data source + مصدر بيانات البلوكتشين - Mempool Instance URL - عنوان Mempool Instance + Enable SSL + تمكين SSL - Password: - كلمة المرور: - - - Blockchain data source - مصدر بيانات البلوكتشين + URL: + الرابط: - Manual - يدوي + SSL: + SSL: - utxo_list + NewWalletWelcomeScreen - Unconfirmed UTXO - UTXO غير مؤكد + Create new wallet + إنشاء محفظة جديدة - Copy txid:out - انسخ txid:out + Choose Single Signature + اختر توقيع واحد - Copy as csv - انسخ كملف CSV + 2 of 3 Multi-Signature Wal + محفظة توقيعات متعددة 2 من 3 - Open transaction - صفقة مفتوحة + Best for large funds + الأفضل للأموال الكبيرة - View on block explorer - عرض على كتلة اكسبلورر + If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) + إذا فُقدت بذرة واحدة أو تمت سرقتها، يمكن نقل جميع الأموال إلى محفظة جديدة باستخدام البذور المتبقية 2 + وصف المحفظة (رمز الاستجابة السريعة) - Unconfirmed UTXO is spent by transaction {is_spent_by_txid} - يتم إنفاق UTXO غير المؤكد من خلال المعاملة {is_spent_by_txid} + 3 secure locations (each with 1 seed backup + wallet descriptor are needed) + مكان آمن 3 (كل منها مع نسخة احتياطية من البذرة + وصف المحفظة) مطلوب - - - UTXOList - Parents - آباء + The wallet descriptor (QR-code) is necessary to recover the wallet + الوصف المحفظة (رمز الاستجابة السريعة) ضروري لاستعادة المحفظة - Address - عنوان + 3 signing devices + جهاز توقيع 3 - Category - فئة + Choose Multi-Signature + اختر متعدد التوقيعات - Amount - كمية + Custom or restore existing Wallet + محفظة مخصصة أو استعادة محفظة موجودة - Wallet - محفظة + Customize the wallet to your needs + قم بتخصيص المحفظة حسب احتياجاتك - Label - ملصق + Single Signature Wallet + محفظة توقيع واحد - Outpoint - نقطة خارجية + Less support material online in case of recovery + الدعم الأقل عبر الإنترنت في حالة الاستعادة - - - RecipientGroupBox - Enter label for recipient address - أدخل التسمية لعنوان المستلم + Create custom wallet + إنشاء محفظة مخصصة - Enter label here - أدخل التسمية هنا + Best for medium-sized funds + الأفضل للأموال بحجم متوسط - Enter address here - أدخل العنوان هنا + Pros: + الإيجابيات: - Send max - إرسال الحد الأقصى + 1 seed (24 secret words) is all you need to access your funds + يكفي بذرة واحدة (24 كلمة سرية) للوصول إلى أموالك - Address - العنوان + 1 secure location to store the seed backup (on paper or steel) is needed + مكان آمن واحد لتخزين نسخة احتياطية من البذرة (على ورق أو فولاذ) مطلوب - Amount - الكمية + Cons: + السلبيات: - Label - تصنيف + If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately + إذا تم خداعك لتقديم بذرتك للمخترقين، ستسرق بيتكويناتك على الفور - Wallet "{id}" - محفظة "{id}" + 1 signing devices + جهاز توقيع واحد + + + + NostrSync + + Go to {untrusted} + الانتقال إلى {untrusted} + + + To complete the connection, accept my {id} request on the other device {other}. + لإكمال الاتصال، قبل طلبي {id} على الجهاز الآخر {other}. + + + + NotificationBarRegtest + + Change Network + تغيير الشبكة + + + Network = {network}. The coins are worthless! + الشبكة = {network}. العملات لا قيمة لها! PasswordCreation + + Create Password + إنشاء كلمة مرور + Enter your password: أدخل كلمة المرور الخاصة بك: - Re-enter your password: - أعد إدخال كلمة المرور الخاصة بك: + Show Password + إظهار كلمة المرور - Hide Password - إخفاء كلمة المرور + Re-enter your password: + أعد إدخال كلمة المرور الخاصة بك: Submit إرسال - Show Password - إظهار كلمة المرور + Hide Password + إخفاء كلمة المرور - Create Password - إنشاء كلمة مرور + Passwords do not match! + كلمات المرور غير متطابقة! Error خطأ - - Passwords do not match! - كلمات المرور غير متطابقة! - - SendTest + PasswordQuestion - Complete the send test to ensure the hardware signer works! - أكمل اختبار الإرسال للتأكد من عمل مُوقع الأجهزة! + Password Input + إدخال كلمة المرور - You made {n} outgoing transactions already. Would you like to skip this spend test? - لقد أجريت {n} من المعاملات الصادرة بالفعل. هل ترغب في تخطي اختبار الإنفاق هذا؟ + Please enter your password: + الرجاء إدخال كلمة المرور الخاصة بك: - Skip spend test? - هل تريد تخطي اختبار الإنفاق؟ + Submit + إرسال - ChatGui + QTProtoWallet - Me: {text} - أنا: {text} + Setup wallet + إعداد المحفظة + + + QTWallet Send إرسال - Type your message here... - اكتب رسالتك هنا... + Password incorrect + كلمة المرور غير صحيحة - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - جميع الملفات ();;PSBT (.psbt);;معاملة (*.tx) + Change password + تغيير كلمة المرور - Open Transaction/PSBT - فتح المعاملة/PSBT + New password: + كلمة مرور جديدة: - Share a PSBT - مشاركة PSBT + Wallet saved + تم حفظ المحفظة - - - lib_load - You are missing the {link} -Please install it. - أنت تفتقد {link} الرجاء تثبيته. + The transactions {txs} in wallet '{wallet}' were removed from the history!!! + المعاملات {txs} في المحفظة '{wallet}' تم إزالتها من التاريخ!!! - - - PasswordQuestion - Password Input - إدخال كلمة المرور + New transaction in wallet '{wallet}': +{txs} + معاملة جديدة في المحفظة '{wallet}': {txs} - Submit - إرسال + New transactions in wallet '{wallet}': +{txs} + معاملات جديدة في المحفظة '{wallet}': {txs} - Please enter your password: - الرجاء إدخال كلمة المرور الخاصة بك: + Click for new address + انقر للحصول على عنوان جديد - - - NewWalletWelcomeScreen - If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately - إذا تم خداعك لتقديم بذرتك للمخترقين، ستسرق بيتكويناتك على الفور + Descriptor + وصف - If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) - إذا فُقدت بذرة واحدة أو تمت سرقتها، يمكن نقل جميع الأموال إلى محفظة جديدة باستخدام البذور المتبقية 2 + وصف المحفظة (رمز الاستجابة السريعة) + Sync + مزامنة - Create new wallet - إنشاء محفظة جديدة + History + التاريخ - Create custom wallet - إنشاء محفظة مخصصة + Receive + استلام - Choose Single Signature - اختر توقيع واحد + No changes to apply. + لا توجد تغييرات لتطبيقها. - Choose Multi-Signature - اختر متعدد التوقيعات + Backup saved to {filename} + تم حفظ النسخ الاحتياطي إلى {filename} - Best for large funds - الأفضل للأموال الكبيرة + Backup failed. Aborting Changes. + فشلت النسخ الاحتياطي. إحباط التغييرات. - Best for medium-sized funds - الأفضل للأموال بحجم متوسط + Cannot move the wallet file, because {file_path} exists + لا يمكن نقل ملف المحفظة، لأن {file_path} موجود + + + ReceiveTest - Pros: - الإيجابيات: + Received {amount} + تم الاستلام {amount} - Less support material online in case of recovery - الدعم الأقل عبر الإنترنت في حالة الاستعادة + No wallet setup yet + لا توجد محفظة معدة بعد - Cons: - السلبيات: + Receive a small amount {test_amount} to an address of this wallet + استلام كمية صغيرة {test_amount} إلى عنوان هذه المحفظة - The wallet descriptor (QR-code) is necessary to recover the wallet - الوصف المحفظة (رمز الاستجابة السريعة) ضروري لاستعادة المحفظة - - - 3 signing devices - جهاز توقيع 3 - - - 1 signing devices - جهاز توقيع واحد - - - Customize the wallet to your needs - قم بتخصيص المحفظة حسب احتياجاتك - - - Single Signature Wallet - محفظة توقيع واحد - - - 2 of 3 Multi-Signature Wal - محفظة توقيعات متعددة 2 من 3 - - - Custom or restore existing Wallet - محفظة مخصصة أو استعادة محفظة موجودة - - - 3 secure locations (each with 1 seed backup + wallet descriptor are needed) - مكان آمن 3 (كل منها مع نسخة احتياطية من البذرة + وصف المحفظة) مطلوب + Next step + الخطوة التالية - 1 secure location to store the seed backup (on paper or steel) is needed - مكان آمن واحد لتخزين نسخة احتياطية من البذرة (على ورق أو فولاذ) مطلوب + Check if received + تحقق مما تم استلامه - 1 seed (24 secret words) is all you need to access your funds - يكفي بذرة واحدة (24 كلمة سرية) للوصول إلى أموالك + Previous Step + الخطوة السابقة - QTWallet + RecipientGroupBox - Send - إرسال + Address + العنوان - Receive - استلام + Label + تصنيف - History - التاريخ + Amount + الكمية - Click for new address - انقر للحصول على عنوان جديد + Enter label here + أدخل التسمية هنا - Change password - تغيير كلمة المرور + Send max + إرسال الحد الأقصى - Wallet saved - تم حفظ المحفظة + Enter address here + أدخل العنوان هنا - Backup saved to {filename} - تم حفظ النسخ الاحتياطي إلى {filename} + Enter label for recipient address + أدخل التسمية لعنوان المستلم - Backup failed. Aborting Changes. - فشلت النسخ الاحتياطي. إحباط التغييرات. + Wallet "{id}" + محفظة "{id}" + + + Recipients - Password incorrect - كلمة المرور غير صحيحة + Recipients + المستلمون - New password: - كلمة مرور جديدة: + + Add Recipient + + إضافة مستلم + + + RegisterMultisig - No changes to apply. - لا توجد تغييرات لتطبيقها. + Export file to register the multisig on Coldcard + تصدير ملف لتسجيل المتعددة التوقيع على Coldcard - Cannot move the wallet file, because {file_path} exists - لا يمكن نقل ملف المحفظة، لأن {file_path} موجود + Your balance {balance} is greater than a maximally allowed test amount of {amount}! +Please do the hardware signer reset only with a lower balance! (Send some funds out before) + رصيدك {balance} أكبر من الحد الأقصى المسموح به للمبلغ الاختباري {amount}! يرجى إجراء إعادة تعيين لجهاز التوقيع الخاص بك فقط برصيد أقل! (أرسل بعض الأموال قبل ذلك) - Sync - مزامنة + 1. Export wallet descriptor + 1. تصدير وصف المحفظة - Descriptor - وصف + Yes, I registered the multisig on the {n} hardware signer + نعم، قمت بتسجيل المتعددة التوقيع على {n} جهاز توقيع عتادي - - - tageditor - Add new {name} - إضافة {name} جديد + Previous Step + الخطوة السابقة - Delete {name} - حذف {name} + 2. Import in each hardware signer + 2. استيراد في كل جهاز توقيع عتادي - This {name} exists already. - هذا {name} موجود بالفعل. + 2. Import in the hardware signer + 2. استيراد في جهاز التوقيع الخاص بك - ConnectedDevices - - Reset identity for this device - إعادة تعيين الهوية لهذا الجهاز - + ScreenshotsExportXpub - UnTrusted - غير موثوق + 1. Export the wallet information from the hardware signer + 1. قم بتصدير معلومات المحفظة من موقع الجهاز + + + ScreenshotsGenerateSeed - Trusted - موثوق + Generate 24 secret seed words on each hardware signer + قم بإنشاء 24 كلمة أولية سرية على كل جهاز موقع + + + ScreenshotsRegisterMultisig - My id: {id} - هويتي: {id} + Import the multisig information in the hardware signer + قم باستيراد معلومات multisig في موقع الأجهزة @@ -1345,931 +1380,937 @@ Please install it. - QTProtoWallet + ScreenshotsRestoreSigner - Setup wallet - إعداد المحفظة + Restore the hardware signer. + استعادة موقع الأجهزة. - CloseButton + ScreenshotsViewSeed - Close - إغلاق + Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. +If you make a mistake here, your money is lost! + قارن الكلمات الـ 24 الموجودة على الورقة الاحتياطية بـ "عرض الكلمات الأساسية" من Coldcard. إذا قمت بخطأ ما هنا، سيتم فقدان أموالك! - FloatingButtonBar - - Create Transaction - إنشاء معاملة - + SendTest - Previous Step - الخطوة السابقة + You made {n} outgoing transactions already. Would you like to skip this spend test? + لقد أجريت {n} من المعاملات الصادرة بالفعل. هل ترغب في تخطي اختبار الإنفاق هذا؟ - Fill the transaction fields - املأ حقول المعاملة + Skip spend test? + هل تريد تخطي اختبار الإنفاق؟ - Yes, I see the transaction in the history - نعم، أرى المعاملة في السجل + Complete the send test to ensure the hardware signer works! + أكمل اختبار الإرسال للتأكد من عمل مُوقع الأجهزة! - DistributeSeeds + SignatureImporterClipboard - Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. - اختر أماكن آمنة بعناية، مع النظر في أنك بحاجة إلى الذهاب إلى {m} من {n}، للإنفاق من محفظتك المتعددة التوقيع. + Import signed PSBT + استيراد موقعة PSBT - Finish - انتهى + OK + نعم - The seed backup (24 words) give total control over the funds. - تعطي نسخة البذور (24 كلمة) السيطرة الكاملة على الأموال. + Please paste your PSBT in here, or drop a file + يرجى لصق PSBT الخاص بك هنا، أو إسقاط ملف - Store the hardware signer in secure location. - حافظ على جهاز التوقيع المعدني في مكان آمن. + Paste your PSBT in here or drop a file + الصق PSBT الخاص بك هنا أو قم بإسقاط ملف + + + SignatureImporterFile - Store the seed backup in a <b>very</b> secure location (like a vault). - حافظ على نسخة احتياطية من البذور في مكان آمن جدًا (مثل خزنة). + OK + نعم - Place each seed backup and hardware signer in a secure location, such: - ضع كل نسخة احتياطية للبذور وجهاز التوقيع المعدني في مكان آمن، مثل: + Please paste your PSBT in here, or drop a file + يرجى لصق PSBT الخاص بك هنا، أو إسقاط ملف - Seed backup {j} and hardware signer {j} should be in location {j} - يجب أن تكون نسخة البذور {j} وجهاز التوقيع المعدني {j} في الموقع {j} + Paste your PSBT in here or drop a file + الصق PSBT الخاص بك هنا أو قم بإسقاط ملف - WalletIdDialog + SignatureImporterQR - Choose wallet name - اختر اسم المحفظة + Scan QR code + مسح رمز الاستجابة السريعة - Wallet name: - اسم المحفظة: + The txid of the signed psbt doesnt match the original txid + لا يتطابق txid الخاص بـ psbt المُوقع مع txid الأصلي - A wallet with the same name already exists. - توجد محفظة بنفس الاسم بالفعل. + bitcoin_tx libary error. The txid should not be changed during finalizing + خطأ في مكتبة bitcoin_tx. لا ينبغي تغيير txid أثناء الإنهاء + + + + SignatureImporterUSB + + USB Signing + توقيع USB - Error - خطأ + Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. + يرجى القيام بـ "المحفظة --> تصدير --> تصدير لـ..." وتسجيل المحفظة متعددة التوقيع على موقع الجهاز. - ScreenshotsRestoreSigner + SignatureImporterWallet - Restore the hardware signer. - استعادة موقع الأجهزة. + The txid of the signed psbt doesnt match the original txid. Aborting + لا يتطابق txid الخاص بـ psbt المُوقع مع txid الأصلي. الإجهاض - AddressList + SyncTab - receiving - استقبال + Encrypted syncing to trusted devices + مزامنة مشفرة مع الأجهزة الموثوقة - Address {address} - العنوان {address} + Open received Transactions and PSBTs automatically in a new tab + افتح المعاملات المستلمة وPSBTs تلقائيًا في علامة تبويب جديدة - Index - الفهرس + Opening {name} from {author} + فتح {name} من {author} - Tx - تحويلة - - - Export Labels - تصدير التسميات - - - Label - تصنيف + Received message '{description}' from {author} + تم استلام الرسالة "{description}" من {author} + + + TrustedDevice - change - تغيير + Device id: {id} + معرف الجهاز: {id} - Details - تفاصيل + Syncing Address labels + مزامنة تسميات العناوين - Balance - رصيد + Can share Transactions + يمكن مشاركة المعاملات + + + TxSigningSteps - Fiat Balance - رصيد نقدي + Export transaction to any hardware signer + تصدير المعاملة إلى أي موقع على الأجهزة - View on block explorer - عرض على مستكشف البلوكات + Sign with a different hardware signer + قم بالتوقيع مع موقّع أجهزة مختلف - Address - عنوان + Import signature + استيراد التوقيع - receiving address - عنوان الاستقبال + Transaction signed with the private key belonging to {label} + تم توقيع المعاملة باستخدام المفتاح الخاص الذي ينتمي إلى {label} + + + UITx_Creator - change address - عنوان التغيير + Select a category that fits the recipient best + حدد الفئة التي تناسب المستلم بشكل أفضل - Category - فئة + Add Inputs + إضافة المدخلات - Copy as csv - نسخ كملف csv + Load UTXOs + تحميل UTXOs - Type - نوع + Please paste UTXO here in the format txid:outpoint +txid:outpoint + يرجى لصق UTXO هنا بالتنسيق txid:outpoint txid:outpoint - - - BitcoinQuickReceive - Quick Receive - استقبال سريع + Please paste UTXO here + من فضلك قم بلصق UTXO هنا - Receive Address - عنوان الاستقبال + The inputs {inputs} conflict with these confirmed txids {txids}. + تتعارض المدخلات {inputs} مع txids المؤكدة {txids}. - - - ReceiveTest - Receive a small amount {test_amount} to an address of this wallet - استلام كمية صغيرة {test_amount} إلى عنوان هذه المحفظة + The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. + ستتم إزالة المعاملات التابعة غير المؤكدة {txids} بواسطة هذه المعاملة الجديدة التي تقوم بإنشائها. - Next step - الخطوة التالية + Reduce future fees +by merging address balances + تقليل الرسوم المستقبلية عن طريق دمج أرصدة العناوين - Previous Step - الخطوة السابقة + Send Category + إرسال الفئة - Check if received - تحقق مما تم استلامه + Advanced + متقدم - Received {amount} - تم الاستلام {amount} + Add foreign UTXOs + إضافة UTXOs الأجنبية - No wallet setup yet - لا توجد محفظة معدة بعد + This checkbox automatically checks +below {rate} + يتم تحديد مربع الاختيار هذا تلقائيًا أسفل {rate} - - - menu - Import Labels - استيراد التسميات + Please select an input category on the left, that fits the transaction recipients. + يرجى تحديد فئة الإدخال على اليسار، والتي تناسب مستلمي المعاملة. - Import Labels (BIP329 / Sparrow) - استيراد التسميات (BIP329 / Sparrow) + {num_inputs} Inputs: {inputs} + {num_inputs} المدخلات: {inputs} - Import Labels (Electrum Wallet) - استيراد التسميات (محفظة إلكتروم) + Adding outpoints {outpoints} + إضافة نقاط خارجية {outpoints} - TxSigningSteps + UITx_Viewer - Import signature - استيراد التوقيع + Inputs + المدخلات - Export transaction to any hardware signer - تصدير المعاملة إلى أي موقع على الأجهزة + Recipients + المستلمون - Transaction signed with the private key belonging to {label} - تم توقيع المعاملة باستخدام المفتاح الخاص الذي ينتمي إلى {label} + Edit + يحرر - Sign with a different hardware signer - قم بالتوقيع مع موقّع أجهزة مختلف + Edit with increased fee (RBF) + تحرير مع زيادة الرسوم (RBF) - - - SignatureImporterClipboard - Import signed PSBT - استيراد موقعة PSBT + Previous step + خطوة سابقة - Paste your PSBT in here or drop a file - الصق PSBT الخاص بك هنا أو قم بإسقاط ملف + Next step + الخطوة التالية - OK - نعم + Send + يرسل - Please paste your PSBT in here, or drop a file - يرجى لصق PSBT الخاص بك هنا، أو إسقاط ملف + Invalid Signatures + التوقيعات غير صالحة - - - SyncTab - Open received Transactions and PSBTs automatically in a new tab - افتح المعاملات المستلمة وPSBTs تلقائيًا في علامة تبويب جديدة + The txid of the signed psbt doesnt match the original txid + لا يتطابق txid الخاص بـ psbt المُوقع مع txid الأصلي + + + UTXOList - Received message '{description}' from {author} - تم استلام الرسالة "{description}" من {author} + Wallet + محفظة - Opening {name} from {author} - فتح {name} من {author} + Outpoint + نقطة خارجية - Encrypted syncing to trusted devices - مزامنة مشفرة مع الأجهزة الموثوقة + Address + عنوان - - - BackupSeed - Write each 24-word seed onto the printed pdf. - اكتب كل كلمة بذور مكونة من 24 كلمة على ملف PDF المطبوع. + Category + فئة - Write the 24-word seed onto the printed pdf. - اكتب كلمة البذور المكونة من 24 كلمة على ملف PDF المطبوع. + Label + ملصق - Previous Step - الخطوة السابقة + Amount + كمية - Please complete the previous steps. - الرجاء إكمال الخطوات السابقة. + Parents + آباء + + + UnTrustedDevice - Print the pdf (it also contains the wallet descriptor) - طباعة ملف PDF (يحتوي أيضًا على وصف المحفظة) + Trust {id} + الثقة {المعرف} - Print recovery sheet - طباعة ورقة الاسترداد + Accept trust request from {other} + قبول طلب الثقة من {other} - mytreeview - - Type to search... - اكتب للبحث... - + UpdateNotificationBar - Type to filter - اكتب للتصفية + Check for Update + فحص التحديثات - Export as CSV - تصدير كملف CSV + Signature verified. + تم التحقق من التوقيع. - - - UpdateNotificationBar New version available {tag} الإصدار الجديد متاح {tag} - Please install {link} to automatically verify the signature of the update. - الرجاء تثبيت {link} للتحقق تلقائيًا من توقيع التحديث. + You have already the newest version. + لديك بالفعل الإصدار الأحدث. - Please install GPG via "brew install gnupg" to automatically verify the signature of the update. - الرجاء تثبيت GPG عبر "brew install gnupg" للتحقق تلقائيًا من توقيع التحديث. + No update found + لم يتم العثور على أي تحديث + + + Could not verify the download. Please try again later. + لم يتم التحقق من التنزيل. يرجى المحاولة مرة أخرى لاحقًا. + + + Please install {link} to automatically verify the signature of the update. + الرجاء تثبيت {link} للتحقق تلقائيًا من توقيع التحديث. Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. الرجاء تثبيت GPG عبر "sudo apt-get -y install gpg" للتحقق تلقائيًا من توقيع التحديث. - Check for Update - فحص التحديثات + Please install GPG via "brew install gnupg" to automatically verify the signature of the update. + الرجاء تثبيت GPG عبر "brew install gnupg" للتحقق تلقائيًا من توقيع التحديث. - You have already the newest version. - لديك بالفعل الإصدار الأحدث. + Signature doesn't match!!! Please try again. + التوقيع غير مطابق!!! يرجى المحاولة مرة أخرى. + + + UtxoListWithToolbar - No update found - لم يتم العثور على أي تحديث + {amount} selected + {amount} محدد - NostrSync + ValidateBackup - Go to {untrusted} - الانتقال إلى {untrusted} + Yes, I am sure all 24 words are correct + نعم، أنا متأكد من أن جميع الكلمات الـ 24 صحيحة - To complete the connection, accept my {id} request on the other device {other}. - لإكمال الاتصال، قبل طلبي {id} على الجهاز الآخر {other}. + Previous Step + خطوة سابقة - ConfirmedBlock + WalletBalanceChart - Block {n} - البلوك {n} + Balance ({unit}) + الرصيد ({unit}) + + + Date + تاريخ - hist_list + WalletIdDialog - Edit with higher fee (RBF) - التعديل برسوم أعلى (RBF) + Choose wallet name + اختر اسم المحفظة - Funded or Unused - الممولة أو غير المستخدمة + Wallet name: + اسم المحفظة: - Copy as csv - انسخ كملف CSV + Error + خطأ - Export binary transactions - تصدير المعاملات الثنائية + A wallet with the same name already exists. + توجد محفظة بنفس الاسم بالفعل. + + + WalletSteps - Details - تفاصيل + You must have an initilized wallet first + يجب أن يكون لديك محفظة مهيأة أولاً - Try cancel transaction (RBF) - حاول إلغاء المعاملة (RBF) + Validate Backup + التحقق من صحة النسخ الاحتياطي - View on block explorer - عرض على كتلة اكسبلورر + Receive Test + تلقي الاختبار - Unused - غير مستعمل + Put in secure locations + وضع في أماكن آمنة - All types - كل الانواع + Register multisig on signers + تسجيل multisig على الموقعين - All status - كل الوضع + Send test {j} + إرسال الاختبار {j} - Used - مستخدم + Send test + إرسال الاختبار - Funded - ممولة + and + و - Change - يتغير + Send Test + إرسال الاختبار - Receiving - يستلم + Sign with {label} + التوقيع باستخدام {label} - - - DescriptorUI - Required Signers - التوقيعات المطلوبة + The wallet is not funded. Please fund the wallet. + لم يتم تمويل المحفظة. يرجى تمويل المحفظة. - Scan Address Limit - حد مسح العنوان + Turn on hardware signer + قم بتشغيل موقع الأجهزة - Paste or scan your descriptor, if you restore a wallet. - لصق أو مسح وصفك، إذا قمت بإعادة تعيين محفظة. + Generate Seed + توليد البذور - This "descriptor" contains all information to reconstruct the wallet. -Please back up this descriptor to be able to recover the funds! - يحتوي "الوصف" هذا على جميع المعلومات لإعادة بناء المحفظة. يرجى عمل نسخة احتياطية من هذا الوصف لتكون قادرًا على استعادة الأموال! + Import signer info + استيراد معلومات الموقع - - - UITx_Viewer - Invalid Signatures - التوقيعات غير صالحة + Backup Seed + البذور الاحتياطية + + + address_list - Next step - الخطوة التالية + All status + كل الوضع - Inputs - المدخلات + Unused + غير مستعمل - Recipients - المستلمون + Funded + ممولة - Edit with increased fee (RBF) - تحرير مع زيادة الرسوم (RBF) + Used + مستخدم - Previous step - خطوة سابقة + Funded or Unused + الممولة أو غير المستخدمة - The txid of the signed psbt doesnt match the original txid - لا يتطابق txid الخاص بـ psbt المُوقع مع txid الأصلي + All types + كل الانواع - Edit - يحرر + Receiving + يستلم - Send - يرسل + Change + يتغير - UnTrustedDevice + basetab - Trust {id} - الثقة {المعرف} + Next step + الخطوة التالية - Accept trust request from {other} - قبول طلب الثقة من {other} + Previous Step + خطوة سابقة - HistList + d - Status - الحالة + Signer {i} + الموقّع {i} - Balance - الرصيد + Open Transaction/PSBT + فتح المعاملة/PSBT - Amount - المبلغ + Recovery Signer {i} + مُوقع الاسترداد {i} - Label - تصنيف + Text copied to Clipboard + تم نسخ النص إلى الحافظة - Cannot fetch wallet '{id}'. Please open the wallet first. - تعذر جلب المحفظة '{id}'. يرجى فتح المحفظة أولاً. + {} copied to Clipboard + {} نسخ إلى الحافظة - Category - فئة + Read QR code from camera + قراءة رمز الاستجابة السريعة من الكاميرا - Wallet - محفظة + Copy to clipboard + نسخ إلى الحافظة - Txid - معرف المعاملة + Create PDF + إنشاء قوات الدفاع الشعبي - - - BTCSpinBox - Max ≈ {amount} - الحد الأقصى ≈ {amount} + Create random mnemonic + إنشاء تذكير عشوائي + + + Open file + افتح الملف - basetab + descriptor - Next step - الخطوة التالية + Wallet Type + نوع المحفظة - Previous Step - خطوة سابقة + Address Type + نوع العنوان + + + Wallet Descriptor + واصف المحفظة - net_conf + hist_list - A good option is {link} and a block explorer on {explorer}. - الخيار الجيد هو {link} ومستكشف الكتل على {explorer}. + All status + كل الوضع - A good option is {link} and a block explorer on {explorer}. There is a {faucet}. - الخيار الجيد هو {link} ومستكشف الكتل على {explorer}. هناك {faucet}. + View on block explorer + عرض على كتلة اكسبلورر - Run your bitcoind with "bitcoind -chain=regtest" - قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=regtest" + Copy as csv + انسخ كملف CSV - Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. - قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=signet" ومع ذلك، فإن هذا التوقيع مختلف عن mutinynet.com. + Export binary transactions + تصدير المعاملات الثنائية - Run your bitcoind with "bitcoind -chain=test" - قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=test" + Edit with higher fee (RBF) + التعديل برسوم أعلى (RBF) - This is a private and fast way to connect to the bitcoin network. - هذه طريقة خاصة وسريعة للاتصال بشبكة البيتكوين. + Try cancel transaction (RBF) + حاول إلغاء المعاملة (RBF) - The server can associate your IP address with the wallet addresses. -It is best to use your own server, such as {link}. - يمكن للخادم ربط عنوان IP الخاص بك بعناوين المحفظة. من الأفضل استخدام خادمك الخاص، مثل {link}. + Unused + غير مستعمل - You can setup {link} with an electrum server on {server} and a block explorer on {explorer} - يمكنك إعداد {link} مع خادم إليكتروم على {server} ومستكشف الكتل على {explorer} + Funded + ممولة - You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} - يمكنك إعداد {setup} باستخدام خادم esplora على {server} ومستكشف الكتل على {explorer} + Used + مستخدم - You can connect your own Bitcoin node, such as {link}. - يمكنك ربط عقدة البيتكوين الخاصة بك، مثل {link}. + Funded or Unused + الممولة أو غير المستخدمة - - - BlockingWaitingDialog - Please wait - الرجاء الانتظار + All types + كل الانواع - - - WalletBalanceChart - Balance ({unit}) - الرصيد ({unit}) + Receiving + يستلم - Date - تاريخ + Change + يتغير - - - NotificationBarRegtest - Network = {network}. The coins are worthless! - الشبكة = {network}. العملات لا قيمة لها! + Details + تفاصيل + + + lib_load - Change Network - تغيير الشبكة + You are missing the {link} +Please install it. + أنت تفتقد {link} الرجاء تثبيته. - SignatureImporterFile + menu - Paste your PSBT in here or drop a file - الصق PSBT الخاص بك هنا أو قم بإسقاط ملف + Import Labels + استيراد التسميات - OK - نعم + Import Labels (BIP329 / Sparrow) + استيراد التسميات (BIP329 / Sparrow) - Please paste your PSBT in here, or drop a file - يرجى لصق PSBT الخاص بك هنا، أو إسقاط ملف + Import Labels (Electrum Wallet) + استيراد التسميات (محفظة إلكتروم) - recipients + mytreeview - Address Already Used - العنوان مستخدم بالفعل + Type to search... + اكتب للبحث... + + + Type to filter + اكتب للتصفية + + + Export as CSV + تصدير كملف CSV - address_list + net_conf - Funded or Unused - الممولة أو غير المستخدمة + This is a private and fast way to connect to the bitcoin network. + هذه طريقة خاصة وسريعة للاتصال بشبكة البيتكوين. - Unused - غير مستعمل + Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. + قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=signet" ومع ذلك، فإن هذا التوقيع مختلف عن mutinynet.com. - All types - كل الانواع + The server can associate your IP address with the wallet addresses. +It is best to use your own server, such as {link}. + يمكن للخادم ربط عنوان IP الخاص بك بعناوين المحفظة. من الأفضل استخدام خادمك الخاص، مثل {link}. - All status - كل الوضع + You can setup {link} with an electrum server on {server} and a block explorer on {explorer} + يمكنك إعداد {link} مع خادم إليكتروم على {server} ومستكشف الكتل على {explorer} - Used - مستخدم + A good option is {link} and a block explorer on {explorer}. + الخيار الجيد هو {link} ومستكشف الكتل على {explorer}. - Funded - ممولة + A good option is {link} and a block explorer on {explorer}. There is a {faucet}. + الخيار الجيد هو {link} ومستكشف الكتل على {explorer}. هناك {faucet}. - Change - يتغير + You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} + يمكنك إعداد {setup} باستخدام خادم esplora على {server} ومستكشف الكتل على {explorer} - Receiving - يستلم + You can connect your own Bitcoin node, such as {link}. + يمكنك ربط عقدة البيتكوين الخاصة بك، مثل {link}. + + + Run your bitcoind with "bitcoind -chain=regtest" + قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=regtest" + + + Run your bitcoind with "bitcoind -chain=test" + قم بتشغيل bitcoind الخاص بك باستخدام "bitcoind -chain=test" - Balance + recipients - Confirmed - تأكيد + Address Already Used + العنوان مستخدم بالفعل + + + tageditor - Unconfirmed - غير مؤكد + Delete {name} + حذف {name} - Unmatured - غير ناضج + Add new {name} + إضافة {name} جديد + + + This {name} exists already. + هذا {name} موجود بالفعل. - BalanceChart + tutorial - Date - تاريخ + Never share the 24 secret words with anyone! + لا تشارك الكلمات السرية الـ 24 مع أي شخص أبدًا! + + + Never type them into any computer or cellphone! + لا تكتبها أبدًا في أي جهاز كمبيوتر أو هاتف محمول! + + + Never make a picture of them! + لا تجعل صورة لهم! - BuyHardware + util - Turn on your {n} hardware signers - تشغيل {n} من جهاز التوقيع المعدني + Unconfirmed + غير مؤكد - Turn on your hardware signer - تشغيل جهاز التوقيع المعدني + Failed to export to file. + فشل التصدير إلى الملف. - Buy a {name} - شراء {name} + Balance: {amount} + الرصيد: {amount} - Buy a Coldcard -5% off - شراء Coldcard بخصم 5٪ + Unknown + مجهول - Do you need to buy a hardware signer? - هل تحتاج إلى شراء جهاز توقيع معدني؟ + {} seconds ago + {} منذ ثوانى - - - AddressListWithToolbar - Export Labels - تصدير التسميات + in {} seconds + في ثوان - Generate to selected adddresses - توليف إلى العناوين المحددة + less than a minute ago + قبل أقل من دقيقة - Show Filter - عرض مرشح + in less than a minute + في أقل من دقيقة - - - AddressDialog - Details - تفاصيل + about {} minutes ago + منذ {} دقيقة تقريبًا - Script Pubkey - سكريبت ببلكي + in about {} minutes + في حوالي {} دقيقة - Address - عنوان + about 1 hour ago + منذ حوالي 1 ساعة - Receiving address of wallet '{wallet_id}' (with index {index}) - عنوان استقبال المحفظة '{wallet_id}' (بالفهرس {index}) + Unconfirmed parent + والد غير مؤكد - Change address of wallet '{wallet_id}' (with index {index}) - عنوان التغيير للمحفظة '{wallet_id}' (بالفهرس {index}) + in about 1 hour + في حوالي 1 ساعة - Advanced - متقدم + about {} hours ago + منذ حوالي {} ساعة - Address descriptor - وصف العنوان + in about {} hours + في حوالي {} ساعة - - - SignatureImporterUSB - USB Signing - توقيع USB + about 1 day ago + منذ حوالي يوم واحد - Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. - يرجى القيام بـ "المحفظة --> تصدير --> تصدير لـ..." وتسجيل المحفظة متعددة التوقيع على موقع الجهاز. + in about 1 day + في حوالي يوم واحد - - - SignatureImporterQR - bitcoin_tx libary error. The txid should not be changed during finalizing - خطأ في مكتبة bitcoin_tx. لا ينبغي تغيير txid أثناء الإنهاء + about {} days ago + منذ حوالي {} أيام - The txid of the signed psbt doesnt match the original txid - لا يتطابق txid الخاص بـ psbt المُوقع مع txid الأصلي + in about {} days + في حوالي {} أيام - Scan QR code - مسح رمز الاستجابة السريعة + about 1 month ago + قبل حوالي 1 شهر - - - ValidateBackup - Previous Step - خطوة سابقة + in about 1 month + في حوالي شهر واحد - Yes, I am sure all 24 words are correct - نعم، أنا متأكد من أن جميع الكلمات الـ 24 صحيحة + about {} months ago + منذ حوالي {} أشهر - - - wallet - Unconfirmed - غير مؤكد + Not Verified + لم يتم التحقق منها - Confirmed - مؤكد + in about {} months + في حوالي {} شهرًا - Local - محلي + about 1 year ago + منذ حوالي سنة واحدة - Unconfirmed parent - والد غير مؤكد + in about 1 year + في حوالي 1 سنة - - - CategoryEditor - category - فئة + over {} years ago + منذ أكثر من {} سنة - - - ScreenshotsViewSeed - Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. -If you make a mistake here, your money is lost! - قارن الكلمات الـ 24 الموجودة على الورقة الاحتياطية بـ "عرض الكلمات الأساسية" من Coldcard. إذا قمت بخطأ ما هنا، سيتم فقدان أموالك! + in over {} years + في أكثر من {} سنة - - - ScreenshotsGenerateSeed - Generate 24 secret seed words on each hardware signer - قم بإنشاء 24 كلمة أولية سرية على كل جهاز موقع + Cannot bump fee + لا يمكن عثرة الرسوم - - - ScreenshotsRegisterMultisig - Import the multisig information in the hardware signer - قم باستيراد معلومات multisig في موقع الأجهزة + Cannot cancel transaction + لا يمكن إلغاء المعاملة - - - tutorial - Never make a picture of them! - لا تجعل صورة لهم! + Cannot create child transaction + لا يمكن إنشاء معاملة فرعية - Never share the 24 secret words with anyone! - لا تشارك الكلمات السرية الـ 24 مع أي شخص أبدًا! + Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files + تم اكتشاف تلف في ملف المحفظة. يرجى استعادة محفظتك من البذور، ومقارنة العناوين في كلا الملفين - Never type them into any computer or cellphone! - لا تكتبها أبدًا في أي جهاز كمبيوتر أو هاتف محمول! + Local + محلي - - - SignatureImporterWallet - The txid of the signed psbt doesnt match the original txid. Aborting - لا يتطابق txid الخاص بـ psbt المُوقع مع txid الأصلي. الإجهاض + Insufficient funds + رصيد غير كاف - - - DescriptorEdit - Wallet setup not finished. Please finish before creating a Backup pdf. - لم يتم الانتهاء من إعداد المحفظة. يرجى الانتهاء قبل إنشاء ملف PDF للنسخ الاحتياطي. + Dynamic fee estimates not available + تقديرات الرسوم الديناميكية غير متوفرة - - - TrustedDevice - Syncing Address labels - مزامنة تسميات العناوين + Incorrect password + كلمة سر خاطئة - Device id: {id} - معرف الجهاز: {id} + Transaction is unrelated to this wallet. + المعاملة لا علاقة لها بهذه المحفظة. - Can share Transactions - يمكن مشاركة المعاملات + Failed to import from file. + فشل الاستيراد من الملف. - MyTreeView + utxo_list - Copy - نسخ + Unconfirmed UTXO is spent by transaction {is_spent_by_txid} + يتم إنفاق UTXO غير المؤكد من خلال المعاملة {is_spent_by_txid} + + + Unconfirmed UTXO + UTXO غير مؤكد + + + Open transaction + صفقة مفتوحة + + + View on block explorer + عرض على كتلة اكسبلورر + + + Copy txid:out + انسخ txid:out Copy as csv - نسخ كـ csv + انسخ كملف CSV - descriptor + wallet - Address Type - نوع العنوان + Confirmed + مؤكد - Wallet Type - نوع المحفظة + Unconfirmed + غير مؤكد - Wallet Descriptor - واصف المحفظة + Unconfirmed parent + والد غير مؤكد - - - UtxoListWithToolbar - {amount} selected - {amount} محدد + Local + محلي diff --git a/bitcoin_safe/gui/locales/app_es_ES.qm b/bitcoin_safe/gui/locales/app_es_ES.qm index 4e016b94cf96a4b303f164ca4b4f47da8811106e..021a0ecaa47eaae3243fe3639990f2ac869e150d 100644 GIT binary patch delta 5250 zcma)930PEh_kNkVcV_OaDJp8}HwcKDyJSeIUoI4ih=7`!3c@HDiw%Q_3L}YIt_g@1 zq9~%N83FEsf*YEmhUS*LY3?AFxupMhxb@Z7)AK$5#|Pg#ckVssJ?FgV{LajOq1-cD zu)niCqVbW3*_p>&o9zkBExFhmcnyH~HsC!=#^A9sW_rrFbSH5;|8fBTEkNrBfb9@4 z$_GMz5-_?9!uqvcm}bc4`3exvGg&}r4_`z782PH@i5;%G(yJX51{ICfCQ{iZ^|RF zaZsNr1bU}J|Hca7hZK11=nm9t4}0Ckz#V9n77Fay4$tZK|QKOtnqr$AT^hDA*Q#!kSnrF8VMJ4U)N(qVltA;1}!RV-scGCtbI zO!%%s{7097?=?spR0({38EMtTDm^wlT*%1pVPh7b+p5F17Nx+YQf!x^fR6U{*pX7j znup_n6I1y9N*q1a5#URe*D`=NJK?w^^3gUNZ$xar1t;ER-51&MV^h|&Uk+~lN}M{> zNi*yWusp}fx#A-5)m*37r39dXi_0gGby5kA+@OL5Yt9Weilo|cLFP?meAH8Exl4v`JXhLMS+kEvD-%XCbpc7rc^M>V&?pxdD1qqp z%FGR}%*YqY+)^7bJyW^yvcT^7O1bremq51|W$Eo4U|)#x=-~bo_ZVemC{ylpR(YW@ z30*5xUiPs63@q!Zd=*9_x19wMy?}H-p`O`^s$L}c+zbXfoDd>@y?GV?c;q|J160ZvOREBD>|vzEqS@3a?P*6Jr_}!lmU1>7sY8sz}Hb? z15XmV;Vm}E-NTaY6&ubfW&3Rsn>F6d_M0zyk7T=ddq>95U+iMQt!p$iQ4G|s2JV)K zqqfq)-n(Mxb=LT#Ssd%h2+B8!3>d6^P0fKN-Cr2+0y>#kOR- zE)nN^Mk1@q#ZNo1#%;bAm$zcgwISjPzZed#&%_n?nDNXHWn5~%Bj)#g41CmC+%Rt+ z(D{kDF+*UV9+q+PW${4WXnkGA7&?Icf_+@=(vkr#-c9bP5)s)c8ORsi5YWo z6@NUSu@paH6uOHTp&ud2GoGLs)RR|O<}#QqwOuwWm@AoASu9K?6L%(DHf4fX|+|URRTxA?x zE#uKwGFE%4e%L_uuW6~eG_jUqb5`BB&kXrpRy}ac3%4rOv!!d9(&sW}rKz2#DFL;I zx>?&;;9Qov*I8;{v0mM;Ej4hhgL=@A6ySQPdT{3%Y`e4=_3$7*&?8Y@SM$N!)ngqs zeP69ka&G{*?@~|sf^D|>j(U1_6>zLpo%$LbyG&8f$S3Z;qF#KS-Sh4Wb;dAvpru*H z3WGZ1%Ym%YR@JJVmL_85a!XW~$d3?PNaFUA=KWQ%TNssB9(Uj5Ha) zxv$1_2CLL(7#aq?W)JzFE*-=+2=L}hWA!qZ8L}i=wtPxK&tiR1Wo<7=-}#B zP2&rBK*nxOD?2}TKcMOOB$?;-9Zjc7)_BnCnog%mf%8ckA07LDzpJLNZ#dBEiN}Vz3rNdu4LACp5{t)8b|TxG8WWmZvQIs z#aEh|=qMm&pr+0Bc@dA_?|%cE?>wb%}wj?JqSma-J+)A(?-p zJ!4zRwY8C_Xqx1ftp`HGB+n9NvTCf5Bz8s4K54GR&n+UPtmXV{x+UeD-^uwQ zN~=4L0-7zA*1zMzxsWJrR0RR^4@iacihu_XrJ{q(K-+B(rQ+&+ypbpEUG{_{__B3ly*L%Jos%@#T@lBw4UAh zeZN|5>lRhO;I`U!QYka;qwTcnP5K+D^$NNVcvNTyHRSxU_0o>9v;hX((}w3KbDTWW z#ywcW%GGMEuK64vaoXe<#<9w*om;(`@rW+DksJEQC6#&r?7Ub;cu&I3c2>q5U|WX(6~!ppk?V={E( zD;U8AFI{ZC&A`rux@qf}kul!7*#k*1WrZ%?qai1;Mwh+e1~;<;UG^_�R?7V`p%K z%hwfFE$3jJsoU~2g&BTNSLTq8U$(Ad;C>E=6+}BP)>i2%syhHp3Ux-MJ~%ELpCM9Y@O8^(z@upU5~j zO2*wwWju65cfLC_YM-yWV0RcO=%%~Zs|z*SRj>M-B0l_{-dN6>O_{8BzLW-}rsx~& zC6QuZz5C!xK%U+;-3*$RnqxVXcdendl&6tv$$)@65>SyUQ5zmW&nEhV2K7 z*?xBo<)NEtXrprkciTh8X#v-H)KtoN^i$)E0qyyF#nm|XrWZBPrm1n>I;Ie3j4Lu)kjN9`zKF|A zVJG9agG+cymm4nyR`RFfI^&h}zFeM<8gCZ6bDM|p=HcIHD8YDl@jh;9D~ zG{t0A@8Q{1X=-_f5zW$>+zLIow+u41c1d6=^Gt0L@`$%h?O&{5mrOBvU1N!^2bkWT z^DiEriKfB6$AEULO`{bomDA5A$NWXtNEuVR%lLJT1MU2gJJ)0%F%~#I+?1BVnz#PK zG&6iA54Td&XFt1f_grAg3jdmm6imy8F*76Pm{u(!fmtI=>$3assF-QmVVS|z@eR|? zAuGA<=bLutXHYY5o6bkFG;K0XchlJg4?FYRsa>lim-^_7C|F@Z`n^Rhie8$$%=Rt_ zEYagc;EY`~5l|;k>r;8OI&7hNht6U%kF@iLudfVG-s)YutFNB|cuw zyV^hQTC7eEug&Pyg1_3Z(#ljMJ8aqiV@&tQYv!rR|76As14%9(HWG1=`NM<-vAmYa z$}}g^o$c>bgCpY-Y1teVYxa$cj<8r|AJXp;Sgb|uJK07`;}C!ZzCS6w-izkx&$~3U zdy;A*twr;n!)`J>;Zx_`Mm5IEVf-hGHv%k)W}7uEHa;xe78Muk@Rt}C9c{6hJ*UbS z$(}yiskX`Sbx~>thYYLxx-M1Ge|V?Ac=}+h>7F}G={~EpO2(OeSh((>0-#hdH0@{eTAi59EHY_-HRj+L%}k?i7aIV;?h4Zcd`Gonmh1WKeD#rcHRFD z=6`lTtSp7PJ2ANWdr2ITI%0IZ`)4%W`otwfN0?*dZ01Q8Yt*=;I(`wq%d3NnIWXE1 z7Vii+$s9I5jIxLhvstX^(+--8RAqwb{K4-fFk>9kWo25!(hEwOggKJ-|DpKbblL?+ zjgJkpB`|9dahCX4Pn$U=%oZNWO#Pin`qYE2QY-k%Uen{s8+t^rT>ov)`A>Uw;YC>@ L>ZofED!l&>;S@2B delta 4136 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 HNj~I%l>Hd3 diff --git a/bitcoin_safe/gui/locales/app_es_ES.ts b/bitcoin_safe/gui/locales/app_es_ES.ts index 1ffbd5f..fa214db 100644 --- a/bitcoin_safe/gui/locales/app_es_ES.ts +++ b/bitcoin_safe/gui/locales/app_es_ES.ts @@ -2,592 +2,580 @@ - MainWindow - - Please open the sender wallet to edit this thransaction. - Por favor, abre la cartera emisora para editar esta transacción. - + AddressDialog - Close wallet {id}? - ¿Cerrar cartera {id}? + Address + Dirección - &Open Wallet - &Abrir Cartera + Receiving address of wallet '{wallet_id}' (with index {index}) + Dirección receptora de la cartera '{wallet_id}' (con índice {index}) - &About - &Acerca de + Change address of wallet '{wallet_id}' (with index {index}) + Dirección de cambio de la cartera '{wallet_id}' (con índice {index}) - &Settings - &Ajustes + Script Pubkey + Script Pubkey - &Network Settings - &Ajustes de Red + Address descriptor + Descriptor de dirección - &Check for update - &Buscar actualizaciones + Details + Detalles - &Change Password - &Cambiar Contraseña + Advanced + Avanzado + + + AddressList - &Change/Export - &Cambiar/Exportar + Address {address} + Dirección {address} - &Wallet - &Cartera + change + cambio - &New Wallet - &Cartera Nueva + receiving + receptora - &Export for Coldcard - &Exportar para Coldcard + change address + dirección de cambio - &Save Current Wallet - &Guardar Cartera Actual + receiving address + dirección receptora - &Languages - &Idiomas + Details + Detalles - &License - &Licencia + View on block explorer + Ver en el explorador de bloques - &Show/Hide Tutorial - &Mostrar/Ocultar Tutorial + Copy as csv + Copiar como csv - &Rename Wallet - &Renombrar Cartera + Export Labels + Exportar Etiquetas - &Transaction - &Transacción + Tx + Tx - &Transaction and PSBT - &Transacción y PSBT + Type + Tipo - &Version: {} - &Versión: {} + Index + Índice - Open &Recent - Abrir &Reciente + Address + Dirección - Open Wallet - Abrir Cartera + Category + Categoría - Open Transaction or PSBT - Abrir Transacción o PSBT + Label + Etiqueta - Open Transaction/PSBT - Abrir Transacción/PSBT + Balance + Saldo - Friends - Amigos + Fiat Balance + Saldo en Fiat + + + AddressListWithToolbar - Selected file: {file_path} - Archivo seleccionado: {file_path} + Show Filter + Mostrar Filtro - Wallet Files (*.wallet) - Archivos de Cartera (*.wallet) + Export Labels + Exportar Etiquetas - Wallet already open - Cartera ya abierta + Generate to selected adddresses + Generar para direcciones seleccionadas + + + BTCSpinBox - Closing wallet {id} - Cerrando cartera {id} + Max ≈ {amount} + Máx. ≈ {amount} + + + BackupSeed - Closing tab {name} - Cerrando pestaña {name} + Please complete the previous steps. + Por favor, completa los pasos anteriores. - Close wallet - Cerrar cartera + Print recovery sheet + Imprimir hoja de recuperación - From &file - Desde &archivo + Previous Step + Paso Anterior - From &QR Code - Desde &Código QR + Print the pdf (it also contains the wallet descriptor) + Imprime el PDF (también contiene el descriptor de la cartera) - From &text - Desde &texto + Write each 24-word seed onto the printed pdf. + Escribe cada semilla de 24 palabras en el PDF impreso. - Export labels - Exportar etiquetas + Write the 24-word seed onto the printed pdf. + Escribe la semilla de 24 palabras en el PDF impreso. + + + Balance - KYC-Exchange - KYC-Exchange + Confirmed + Confirmado - The wallet {file_path} is already open. - La cartera {file_path} ya está abierta. + Unconfirmed + No confirmado - The wallet {file_path} is already open. Do you want to open the wallet anyway? - La cartera {file_path} ya está abierta. ¿Quieres abrir la cartera de todos modos? + Unmatured + No madurado + + + BalanceChart - There is no such file: {file_path} - No existe tal archivo: {file_path} + Date + Fecha + + + BitcoinQuickReceive - No wallet open. Please open the sender wallet to edit this thransaction. - No hay cartera abierta. Por favor, abre la cartera emisora para editar esta transacción. + Quick Receive + Recepción rápida - new - nuevo + Receive Address + Dirección de recepción + + + BlockingWaitingDialog - OK - OK + Please wait + Por favor espera + + + BuyHardware - Paste your Bitcoin Transaction or PSBT in here or drop a file - Pega tu Transacción de Bitcoin o PSBT aquí o suelta un archivo + Do you need to buy a hardware signer? + ¿Necesitas comprar un firmante de hardware? - Please complete the wallet setup. - Por favor, completa la configuración de la cartera. + Buy a {name} + Compra un {name} - Please enter the password for {filename}: - Por favor, ingresa la contraseña para {filename}: + Buy a Coldcard +5% off + Compra un Coldcard con 5% de descuento - Please paste your Bitcoin Transaction or PSBT in here, or drop a file - Por favor, pega tu Transacción de Bitcoin o PSBT aquí, o suelta un archivo + Turn on your {n} hardware signers + Enciende tus {n} firmantes de hardware - Please select the wallet - Por favor, selecciona la cartera + Turn on your hardware signer + Enciende tu firmante de hardware + + + CategoryEditor - Please select the wallet first. - Por favor, selecciona primero la cartera. + category + categoría + + + ChatGui - test - prueba + Type your message here... + Escribe tu mensaje aquí... - PSBT {txid} - PSBT {txid} + Share a PSBT + Compartir un PSBT - Re&fresh - Re&fresh + Send + Enviar - All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) - Todos los archivos (*);;Archivos JSON (*.jsonl);;Archivos JSON (*.json) + Open Transaction/PSBT + Abrir Transacción/PSBT All Files (*);;PSBT (*.psbt);;Transation (*.tx) Todos los archivos (*);;PSBT (*.psbt);;Transacción (*.tx) - Transaction {txid} - Transacción {txid} + Me: {text} + Yo: {text} + + + CloseButton - A wallet with id {name} is already open. - Una cartera con id {name} ya está abierta. - - - All Files (*);;JSON Files (*.json) - Todos los archivos (*);;Archivos JSON (*.json) - - - All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) - Todos los archivos (*);;Archivos JSONL (*.jsonl);;Archivos JSON (*.json) - - - Import Electrum Wallet labels - Importar etiquetas de la cartera Electrum + Close + Cerrar + + + ConfirmedBlock - Import labels - Importar etiquetas + Block {n} + Bloque {n} - tutorial + ConnectedDevices - Never share the 24 secret words with anyone! - ¡Nunca compartas las 24 palabras secretas con nadie! + Reset identity for this device + Restablecer identidad para este dispositivo - Never make a picture of them! - ¡Nunca hagas una foto de ellas! + Trusted + Confiable - Never type them into any computer or cellphone! - ¡Nunca las escribas en ningún ordenador o teléfono móvil! + UnTrusted + No confiable - - - FeeGroup - High fee rate! - ¡Tarifa alta! + My id: {id} + Mi id: {id} + + + DescriptorEdit - ... is the minimum to replace the existing transactions. - ... es el mínimo para reemplazar las transacciones existentes. + Wallet setup not finished. Please finish before creating a Backup pdf. + Configuración de la cartera no terminada. Por favor, termina antes de crear un PDF de respaldo. + + + DescriptorUI - {rate} is the minimum for {rbf} - {rate} es el mínimo para {rbf} + Required Signers + Firmantes necesarios - in ~{n}. Block - en ~{n}. Bloque + Scan Address Limit + Límite de escaneo de dirección - The transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - La tarifa de la transacción es: {fee}, que es el {percent}% del valor enviado {sent} + Paste or scan your descriptor, if you restore a wallet. + Pega o escanea tu descriptor, si restauras una cartera. - The high prio mempool fee rate is {rate} - La tarifa del mempool de alta prioridad es {rate} + This "descriptor" contains all information to reconstruct the wallet. +Please back up this descriptor to be able to recover the funds! + Este "descriptor" contiene toda la información para reconstruir la cartera. ¡Por favor, respalda este descriptor para poder recuperar los fondos! + + + DistributeSeeds - The estimated transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - La tarifa estimada de la transacción es: {fee}, que es el {percent}% del valor enviado {sent} + Place each seed backup and hardware signer in a secure location, such: + Coloca cada respaldo de semilla y firmante de hardware en un lugar seguro, como: - Fee rate could not be determined - No se pudo determinar la tarifa + Seed backup {j} and hardware signer {j} should be in location {j} + El respaldo de semilla {j} y el firmante de hardware {j} deben estar en la ubicación {j} - High fee ratio: {ratio}% - Ratio de tarifa alta: {ratio}% + Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. + Elige los lugares seguros cuidadosamente, considerando que necesitas ir a {m} de los {n}, para gastar desde tu cartera multisig. - Fee - Tarifa + Store the seed backup in a <b>very</b> secure location (like a vault). + Guarda el respaldo de semilla en un lugar <b>muy</b> seguro (como una bóveda). - High fee rate - Tarifa alta + The seed backup (24 words) give total control over the funds. + El respaldo de semilla (24 palabras) da control total sobre los fondos. - Approximate fee rate - Tarifa aproximada + Store the hardware signer in secure location. + Guarda el firmante de hardware en un lugar seguro. - High fee - Tarifa elevada + Finish + Finalizar - BuyHardware + Downloader - Do you need to buy a hardware signer? - ¿Necesitas comprar un firmante de hardware? + Download Progress + Progreso de la descarga - Buy a {name} - Compra un {name} + Download {} + Descargar {} - Buy a Coldcard -5% off - Compra un Coldcard con 5% de descuento + Show {} in Folder + Mostrar {} en la carpeta + + + ExportDataSimple - Turn on your hardware signer - Enciende tu firmante de hardware + Enlarge + Ampliar - Turn on your {n} hardware signers - Enciende tus {n} firmantes de hardware + Share with single device + Compartir con un solo dispositivo - - - SendTest - Skip spend test? - ¿Omitir prueba de gasto? + PSBT + PSBT - Complete the send test to ensure the hardware signer works! - Completa la prueba de envío para asegurar que el firmante de hardware funciona! + Transaction + Transacción - You made {n} outgoing transactions already. Would you like to skip this spend test? - Ya has hecho {n} transacciones salientes. ¿Te gustaría omitir esta prueba de gasto? + Not available + No disponible - - - d - {} copied to Clipboard - {} copiado al Portapapeles + Please enable the sync tab first + Por favor, habilita primero la pestaña de sincronización - Open file - Abrir archivo + Please enable syncing in the wallet {wallet_id} first + Por favor, habilita primero la sincronización en la cartera {wallet_id} - Open Transaction/PSBT - Abrir Transacción/PSBT + Save as image + Guardar como imagen - Copy to clipboard - Copiar al portapapeles + Export file + Exportar archivo - Create random mnemonic - Crear mnemónico aleatorio + Copy to clipboard + Copiar al portapapeles - Create PDF - Crear PDF + Copy {name} + Copiar {name} - Signer {i} - Firmante {i} + Copy TxId + Copiar identificador de transacción - Recovery Signer {i} - Firmante de Recuperación {i} + Copy JSON + Copiar JSON - Read QR code from camera - Leer código QR desde la cámara + Share with trusted devices + Compartir con dispositivos de confianza - Text copied to Clipboard - Texto copiado al Portapapeles + Share with all devices in {wallet_id} + Compartir con todos los dispositivos en {wallet_id} - util + FeeGroup - {} seconds ago - {} segundos atrás + Fee + Tarifa - Incorrect password - Contraseña incorrecta + The transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + La tarifa de la transacción es: {fee}, que es el {percent}% del valor enviado {sent} - Unknown - Desconocido + The estimated transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + La tarifa estimada de la transacción es: {fee}, que es el {percent}% del valor enviado {sent} - in {} seconds - en {} segundos + High fee rate! + ¡Tarifa alta! - in about {} days - en aproximadamente {} días + The high prio mempool fee rate is {rate} + La tarifa del mempool de alta prioridad es {rate} - in about {} hours - en aproximadamente {} horas + ... is the minimum to replace the existing transactions. + ... es el mínimo para reemplazar las transacciones existentes. - in about {} months - en aproximadamente {} meses + High fee rate + Tarifa alta - in about {} minutes - en aproximadamente {} minutos + High fee + Tarifa elevada - in about 1 year - en aproximadamente 1 año + Approximate fee rate + Tarifa aproximada - in about 1 day - en aproximadamente 1 día + in ~{n}. Block + en ~{n}. Bloque - in about 1 hour - en aproximadamente 1 hora + {rate} is the minimum for {rbf} + {rate} es el mínimo para {rbf} - in about 1 month - en aproximadamente 1 mes + Fee rate could not be determined + No se pudo determinar la tarifa - in over {} years - en más de {} años + High fee ratio: {ratio}% + Ratio de tarifa alta: {ratio}% + + + FloatingButtonBar - in less than a minute - en menos de un minuto + Fill the transaction fields + Completa los campos de la transacción - Dynamic fee estimates not available - Estimaciones dinámicas de tarifas no disponibles + Create Transaction + Crear Transacción - Failed to export to file. - Falló la exportación a archivo. + Yes, I see the transaction in the history + Sí, veo la transacción en el historial - Failed to import from file. - Falló la importación desde archivo. - - - Insufficient funds - Fondos insuficientes - - - about {} days ago - hace aproximadamente {} días - - - about {} hours ago - hace aproximadamente {} horas - - - about {} months ago - hace aproximadamente {} meses - - - about {} minutes ago - hace aproximadamente {} minutos - - - about 1 year ago - hace aproximadamente 1 año - - - about 1 day ago - hace aproximadamente 1 día - - - about 1 hour ago - hace aproximadamente 1 hora - - - about 1 month ago - hace aproximadamente 1 mes + Previous Step + Paso Anterior + + + HistList - over {} years ago - hace más de {} años + Wallet + Cartera - less than a minute ago - hace menos de un minuto + Status + Estado - Transaction is unrelated to this wallet. - La transacción no está relacionada con esta cartera. + Category + Categoría - Local - Local + Label + Etiqueta - Unconfirmed - No confirmado + Amount + Cantidad - Cannot bump fee - No se puede aumentar la tarifa + Balance + Saldo - Cannot cancel transaction - No se puede cancelar la transacción + Txid + Identificador de Transacción - Cannot create child transaction - No se puede crear una transacción hija + Cannot fetch wallet '{id}'. Please open the wallet first. + No se puede obtener la cartera '{id}'. Por favor, abre la cartera primero. + + + ImportXpubs - Not Verified - No verificado + 2. Import wallet information into Bitcoin Safe + 2. Importar información de la cartera en Bitcoin Safe - Unconfirmed parent - Padre no confirmado + Skip step + Omitir paso - Balance: {amount} - Saldo: {amount} + Next step + Siguiente paso - Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files - Se detectó corrupción en el archivo de la cartera. Por favor, restaura tu cartera desde la semilla y compara las direcciones en ambos archivos + Previous Step + Paso Anterior KeyStoreUI - {data_type} cannot be used here. - {data_type} no puede usarse aquí. - - - {xpub} is not a valid public xpub - {xpub} no es un xpub público válido - - - Connect USB - Conectar USB - - - Description - Descripción - - - The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} - El origen xPub {key_origin} no es el esperado {expected_key_origin} para {self.get_address_type().name} + Import fingerprint and xpub + Importar huella digital y xpub - The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. - El origen xPub {key_origin} y el xPub pertenecen juntos. Por favor, elige el par de origen xPub correcto. + {data_type} cannot be used here. + {data_type} no puede usarse aquí. The xpub is in SLIP132 format. Converting to standard format. El xpub está en formato SLIP132. Convirtiéndolo al formato estándar. - Scan - Escanear + Import + Importar - Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. - Estándar para el tipo de dirección seleccionado {type} es {expected_key_origin}. Por favor, corrige si no estás seguro. + Manual + Manual + + + Description + Descripción Label @@ -598,24 +586,20 @@ the sending value {sent} Huella digital - Import - Importar - - - Import file or text - Importar archivo o texto + xPub Origin + Origen xPub - Import fingerprint and xpub - Importar huella digital y xpub + xPub + xPub - Manual - Manual + Seed + Semilla - No signer data for the expected key_origin {expected_key_origin} found. - No se encontraron datos del firmante para el origen clave {expected_key_origin} esperado. + OK + OK Name of signing device: ...... @@ -623,413 +607,388 @@ Location of signing device: ..... Nombre del dispositivo de firma: ...... Ubicación del dispositivo de firma: ..... - OK - OK + Import file or text + Importar archivo o texto - xPub Origin - Origen xPub + Scan + Escanear + + + Connect USB + Conectar USB + + + {xpub} is not a valid public xpub + {xpub} no es un xpub público válido Please import the public key information from the hardware wallet first Por favor, importa primero la información de la clave pública desde la cartera de hardware + + Please paste the exported file (like coldcard-export.json or sparrow-export.json): + Por favor, pega el archivo exportado (como coldcard-export.json o sparrow-export.json): + Please paste the exported file (like coldcard-export.json or sparrow-export.json) Por favor, pega el archivo exportado (como coldcard-export.json o sparrow-export.json) - Please paste the exported file (like coldcard-export.json or sparrow-export.json): - Por favor, pega el archivo exportado (como coldcard-export.json o sparrow-export.json): + Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. + Estándar para el tipo de dirección seleccionado {type} es {expected_key_origin}. Por favor, corrige si no estás seguro. - Please paste descriptors into the descriptor field in the top right. - Por favor, pega los descriptores en el campo de descriptor en la parte superior derecha. + The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. + El origen xPub {key_origin} y el xPub pertenecen juntos. Por favor, elige el par de origen xPub correcto. - Seed - Semilla + The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} + El origen xPub {key_origin} no es el esperado {expected_key_origin} para {self.get_address_type().name} - xPub - xPub + No signer data for the expected key_origin {expected_key_origin} found. + No se encontraron datos del firmante para el origen clave {expected_key_origin} esperado. + + + Please paste descriptors into the descriptor field in the top right. + Por favor, pega los descriptores en el campo de descriptor en la parte superior derecha. - MempoolButtons + LabelTimeEstimation - {n}. Block - {n}. Bloque + ~in {t} min + ~en {t} min - Next Block - Siguiente Bloque + ~in {t} hours + ~en {t} horas - UITx_Creator + MainWindow - {num_inputs} Inputs: {inputs} - {num_inputs} Entradas: {inputs} + &Wallet + &Cartera - Adding outpoints {outpoints} - Agregando puntos de salida {outpoints} + Re&fresh + Re&fresh - Add Inputs - Agregar Entradas + &Transaction + &Transacción - Add foreign UTXOs - Agregar UTXOs externos + &Transaction and PSBT + &Transacción y PSBT - Advanced - Avanzado + From &file + Desde &archivo - Load UTXOs - Cargar UTXOs + From &text + Desde &texto - Send Category - Categoría de Envío + From &QR Code + Desde &Código QR - This checkbox automatically checks -below {rate} - Esta casilla se marca automáticamente abajo {rate} + &Settings + &Ajustes - The inputs {inputs} conflict with these confirmed txids {txids}. - Las entradas {inputs} entran en conflicto con estos Identificadores de Transacción confirmados {txids}. + &Network Settings + &Ajustes de Red - The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. - Las transacciones dependientes no confirmadas {txids} serán eliminadas por esta nueva transacción que estás creando. + &Show/Hide Tutorial + &Mostrar/Ocultar Tutorial - Please paste UTXO here - Por favor, pega UTXO aquí + &Languages + &Idiomas - Please paste UTXO here in the format txid:outpoint -txid:outpoint - Por favor, pega UTXO aquí en el formato txid:punto de salida txid:punto de salida + &New Wallet + &Cartera Nueva - Please select an input category on the left, that fits the transaction recipients. - Porfavor, selecciona una categoría de entrada a la izquierda, que se ajuste a los destinatarios de la transacción. + &About + &Acerca de - Reduce future fees -by merging address balances - Reduce futuras tarifas fusionando saldos de direcciones + &Version: {} + &Versión: {} - Select a category that fits the recipient best - Selecciona una categoría que se ajuste mejor al destinatario + &Check for update + &Buscar actualizaciones - - - Recipients - + Add Recipient - + Agregar Destinatario + &License + &Licencia - Recipients - Destinatarios + Please select the wallet + Por favor, selecciona la cartera - - - MempoolProjectedBlock - ~{n}. Block - ~{n}. Bloque + test + prueba - Unconfirmed - No confirmado + Please select the wallet first. + Por favor, selecciona primero la cartera. - - - LabelTimeEstimation - ~in {t} hours - ~en {t} horas + Open Transaction/PSBT + Abrir Transacción/PSBT - ~in {t} min - ~en {t} min + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + Todos los archivos (*);;PSBT (*.psbt);;Transacción (*.tx) - - - NewWalletWelcomeScreen - 1 signing devices - 1 dispositivo de firma + Selected file: {file_path} + Archivo seleccionado: {file_path} - 1 seed (24 secret words) is all you need to access your funds - 1 semilla (24 palabras secretas) es todo lo que necesitas para acceder a tus fondos + &Open Wallet + &Abrir Cartera - 1 secure location to store the seed backup (on paper or steel) is needed - 1 ubicación segura para almacenar el respaldo de la semilla (en papel o acero) es necesario + No wallet open. Please open the sender wallet to edit this thransaction. + No hay cartera abierta. Por favor, abre la cartera emisora para editar esta transacción. - 2 of 3 Multi-Signature Wal - 2 de 3 Multifirma + Please open the sender wallet to edit this thransaction. + Por favor, abre la cartera emisora para editar esta transacción. - 3 signing devices - 3 dispositivos de firma + Open Transaction or PSBT + Abrir Transacción o PSBT - 3 secure locations (each with 1 seed backup + wallet descriptor are needed) - 3 ubicaciones seguras (cada una con 1 respaldo de semilla + descriptor de cartera son necesarias) + OK + OK - Single Signature Wallet - Cartera de Firma Única + Please paste your Bitcoin Transaction or PSBT in here, or drop a file + Por favor, pega tu Transacción de Bitcoin o PSBT aquí, o suelta un archivo - Cons: - Contras: + Paste your Bitcoin Transaction or PSBT in here or drop a file + Pega tu Transacción de Bitcoin o PSBT aquí o suelta un archivo - Create new wallet - Crear cartera nueva + Transaction {txid} + Transacción {txid} - Create custom wallet - Crear cartera personalizada + PSBT {txid} + PSBT {txid} - The wallet descriptor (QR-code) is necessary to recover the wallet - El descriptor de la cartera (código QR) es necesario para recuperar la cartera + Open Wallet + Abrir Cartera - Choose Single Signature - Elegir Firma Única + Wallet Files (*.wallet) + Archivos de Cartera (*.wallet) - Choose Multi-Signature - Elegir Multifirma + Open &Recent + Abrir &Reciente - Best for medium-sized funds - Mejor para fondos de tamaño mediano + The wallet {file_path} is already open. + La cartera {file_path} ya está abierta. - Best for large funds - Mejor para grandes fondos + The wallet {file_path} is already open. Do you want to open the wallet anyway? + La cartera {file_path} ya está abierta. ¿Quieres abrir la cartera de todos modos? - Less support material online in case of recovery - Menos material de apoyo en línea en caso de recuperación + Wallet already open + Cartera ya abierta - Customize the wallet to your needs - Personaliza la cartera según tus necesidades + There is no such file: {file_path} + No existe tal archivo: {file_path} - Custom or restore existing Wallet - Personalizar o restaurar Cartera existente + Please enter the password for {filename}: + Por favor, ingresa la contraseña para {filename}: - Pros: - Pros: + Export labels + Exportar etiquetas - If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) - Si se pierde o roba 1 semilla, todos los fondos pueden transferirse a una nueva cartera con las 2 semillas restantes + descriptor de cartera (código QR) + All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) + Todos los archivos (*);;Archivos JSON (*.jsonl);;Archivos JSON (*.json) - If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately - Si te engañan para que les des tu semilla, tus Bitcoin serán robados inmediatamente + Import labels + Importar etiquetas - - - RegisterMultisig - 1. Export wallet descriptor - 1. Exportar descriptor de la cartera + All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) + Todos los archivos (*);;Archivos JSONL (*.jsonl);;Archivos JSON (*.json) - 2. Import in each hardware signer - 2. Importar en cada firmante de hardware + Import Electrum Wallet labels + Importar etiquetas de la cartera Electrum - 2. Import in the hardware signer - 2. Importar en el firmante de hardware + &Save Current Wallet + &Guardar Cartera Actual - Export file to register the multisig on Coldcard - Exportar archivo para registrar la multisig en Coldcard + All Files (*);;JSON Files (*.json) + Todos los archivos (*);;Archivos JSON (*.json) - Previous Step - Paso Anterior + new + nuevo - Yes, I registered the multisig on the {n} hardware signer - Sí, registré la multisig en el firmante de hardware {n} + Friends + Amigos - Your balance {balance} is greater than a maximally allowed test amount of {amount}! -Please do the hardware signer reset only with a lower balance! (Send some funds out before) - Tu saldo {balance} es mayor que la cantidad de prueba máxima permitida de {amount}! Por favor, solo restablece el firmante de hardware con un saldo menor! (Envía algunos fondos antes) + KYC-Exchange + KYC-Exchange - - - ScreenshotsExportXpub - 1. Export the wallet information from the hardware signer - 1. Exportar la información de la cartera desde el firmante de hardware + A wallet with id {name} is already open. + Una cartera con id {name} ya está abierta. - - - ImportXpubs - 2. Import wallet information into Bitcoin Safe - 2. Importar información de la cartera en Bitcoin Safe + Please complete the wallet setup. + Por favor, completa la configuración de la cartera. - Skip step - Omitir paso + Close wallet {id}? + ¿Cerrar cartera {id}? - Previous Step - Paso Anterior + Close wallet + Cerrar cartera - Next step - Siguiente paso + Closing wallet {id} + Cerrando cartera {id} - - - SyncTab - Opening {name} from {author} - Abriendo {name} de {author} + Closing tab {name} + Cerrando pestaña {name} - Open received Transactions and PSBTs automatically in a new tab - Abrir Transacciones y PSBTs recibidos automáticamente en una nueva pestaña + &Change/Export + &Cambiar/Exportar - Received message '{description}' from {author} - Mensaje recibido '{description}' de {author} + &Rename Wallet + &Renombrar Cartera - Encrypted syncing to trusted devices - Sincronización encriptada con dispositivos de confianza + &Change Password + &Cambiar Contraseña + + + &Export for Coldcard + &Exportar para Coldcard - utxo_list + MempoolButtons - Open transaction - Abrir transacción + Next Block + Siguiente Bloque - Copy as csv - Copiar como csv + {n}. Block + {n}. Bloque + + + MempoolProjectedBlock - Copy txid:out - Copiar txid:salida + Unconfirmed + No confirmado - Unconfirmed UTXO - UTXO no confirmado + ~{n}. Block + ~{n}. Bloque + + + MyTreeView - Unconfirmed UTXO is spent by transaction {is_spent_by_txid} - UTXO no confirmado es gastado por la transacción {is_spent_by_txid} + Copy as csv + Copiar como csv - View on block explorer - Ver en el explorador de bloques + Copy + Copiar - ChatGui + NetworkSettingsUI - Open Transaction/PSBT - Abrir Transacción/PSBT + Manual + Manual - Share a PSBT - Compartir un PSBT + Port: + Puerto: - Send - Enviar + Mode: + Modo: - Type your message here... - Escribe tu mensaje aquí... + IP Address: + Dirección IP: - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - Todos los archivos (*);;PSBT (*.psbt);;Transacción (*.tx) - - - Me: {text} - Yo: {text} - - - - UnTrustedDevice - - Accept trust request from {other} - Aceptar solicitud de confianza de {other} - - - Trust {id} - Confiar en {id} + Username: + Nombre de usuario: - - - tageditor - Add new {name} - Agregar nuevo {name} + Password: + Contraseña: - Delete {name} - Eliminar {name} + Mempool Instance URL + URL de instancia de Mempool - This {name} exists already. - Este {name} ya existe. + Responses: + {name}: {status} + Mempool Instance: {server} + Respuestas: {name}: {status} Mempool Instance: {server} - - - NetworkSettingsUI - Network Settings - Ajustes de Red + Automatic + Automático Apply && Restart Aplicar y Reiniciar - Automatic - Automático - - - Password: - Contraseña: + Test Connection + Probar Conexión - IP Address: - Dirección IP: + Network Settings + Ajustes de Red Blockchain data source @@ -1040,1012 +999,1025 @@ Please do the hardware signer reset only with a lower balance! (Send some fund Habilitar SSL - Manual - Manual + URL: + URL: - Mode: - Modo: + SSL: + SSL: + + + NewWalletWelcomeScreen - Username: - Nombre de usuario: + Create new wallet + Crear cartera nueva - Test Connection - Probar Conexión + Choose Single Signature + Elegir Firma Única - Port: - Puerto: + 2 of 3 Multi-Signature Wal + 2 de 3 Multifirma - Responses: - {name}: {status} - Mempool Instance: {server} - Respuestas: {name}: {status} Mempool Instance: {server} + Best for large funds + Mejor para grandes fondos - SSL: - SSL: + If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) + Si se pierde o roba 1 semilla, todos los fondos pueden transferirse a una nueva cartera con las 2 semillas restantes + descriptor de cartera (código QR) - Mempool Instance URL - URL de instancia de Mempool + 3 secure locations (each with 1 seed backup + wallet descriptor are needed) + 3 ubicaciones seguras (cada una con 1 respaldo de semilla + descriptor de cartera son necesarias) - URL: - URL: + The wallet descriptor (QR-code) is necessary to recover the wallet + El descriptor de la cartera (código QR) es necesario para recuperar la cartera - - - ExportDataSimple - Enlarge - Ampliar + 3 signing devices + 3 dispositivos de firma - Share with trusted devices - Compartir con dispositivos de confianza + Choose Multi-Signature + Elegir Multifirma - Share with all devices in {wallet_id} - Compartir con todos los dispositivos en {wallet_id} + Custom or restore existing Wallet + Personalizar o restaurar Cartera existente - Share with single device - Compartir con un solo dispositivo + Customize the wallet to your needs + Personaliza la cartera según tus necesidades - Copy {name} - Copiar {name} + Single Signature Wallet + Cartera de Firma Única - Copy to clipboard - Copiar al portapapeles + Less support material online in case of recovery + Menos material de apoyo en línea en caso de recuperación - Copy TxId - Copiar identificador de transacción + Create custom wallet + Crear cartera personalizada - Copy JSON - Copiar JSON + Best for medium-sized funds + Mejor para fondos de tamaño mediano - Export file - Exportar archivo + Pros: + Pros: - Save as image - Guardar como imagen + 1 seed (24 secret words) is all you need to access your funds + 1 semilla (24 palabras secretas) es todo lo que necesitas para acceder a tus fondos - Not available - No disponible + 1 secure location to store the seed backup (on paper or steel) is needed + 1 ubicación segura para almacenar el respaldo de la semilla (en papel o acero) es necesario - Please enable the sync tab first - Por favor, habilita primero la pestaña de sincronización + Cons: + Contras: - Please enable syncing in the wallet {wallet_id} first - Por favor, habilita primero la sincronización en la cartera {wallet_id} + If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately + Si te engañan para que les des tu semilla, tus Bitcoin serán robados inmediatamente - PSBT - PSBT + 1 signing devices + 1 dispositivo de firma + + + NostrSync - Transaction - Transacción + Go to {untrusted} + Ir a {untrusted} + + + To complete the connection, accept my {id} request on the other device {other}. + Para completar la conexión, acepta mi solicitud de {id} en el otro dispositivo {other}. - ReceiveTest + NotificationBarRegtest - No wallet setup yet - Aún no se ha configurado la cartera + Change Network + Cambiar Red - Check if received - Comprobar si recibido + Network = {network}. The coins are worthless! + La red = {network}. ¡Las monedas no tienen valor! + + + PasswordCreation - Previous Step - Paso Anterior + Create Password + Crear Contraseña - Receive a small amount {test_amount} to an address of this wallet - Recibe una pequeña cantidad {test_amount} a una dirección de esta cartera + Enter your password: + Introduce tu contraseña: - Received {amount} - Recibido {amount} + Show Password + Mostrar Contraseña - Next step - Siguiente paso + Re-enter your password: + Reingresar tu contraseña: - - - AddressDialog - Advanced - Avanzado + Submit + Enviar - Address descriptor - Descriptor de dirección + Hide Password + Ocultar Contraseña - Details - Detalles + Passwords do not match! + Las contraseñas no coinciden! - Address - Dirección + Error + Error + + + PasswordQuestion - Change address of wallet '{wallet_id}' (with index {index}) - Dirección de cambio de la cartera '{wallet_id}' (con índice {index}) + Password Input + Entrada de Contraseña - Receiving address of wallet '{wallet_id}' (with index {index}) - Dirección receptora de la cartera '{wallet_id}' (con índice {index}) + Please enter your password: + Por favor, ingresa tu contraseña: - Script Pubkey - Script Pubkey + Submit + Enviar - ConfirmedBlock + QTProtoWallet - Block {n} - Bloque {n} + Setup wallet + Configuración de la cartera - UpdateNotificationBar + QTWallet - Check for Update - Buscar Actualización + Send + Enviar - No update found - No se encontró ninguna actualización + Password incorrect + Contraseña incorrecta - New version available {tag} - Nueva versión disponible {tag} + Change password + Cambiar contraseña - Please install {link} to automatically verify the signature of the update. - Por favor, instala {link} para verificar automáticamente la firma de la actualización. + New password: + Nueva contraseña: - Please install GPG via "brew install gnupg" to automatically verify the signature of the update. - Por favor, instala GPG vía "brew install gnupg" para verificar automáticamente la firma de la actualización. + Wallet saved + Cartera guardada - Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. - Por favor, instala GPG vía "sudo apt-get -y install gpg" para verificar automáticamente la firma de la actualización. - - - You have already the newest version. - Ya tienes la versión más reciente. + The transactions {txs} in wallet '{wallet}' were removed from the history!!! + ¡Las transacciones {txs} en la cartera '{wallet}' se eliminaron del historial! - - - QTWallet - Change password - Cambiar contraseña + New transaction in wallet '{wallet}': +{txs} + Nueva transacción en la cartera '{wallet}': {txs} - Wallet saved - Cartera guardada + New transactions in wallet '{wallet}': +{txs} + Nuevas transacciones en la cartera '{wallet}': {txs} - Password incorrect - Contraseña incorrecta + Click for new address + Haz clic para una nueva dirección Descriptor Descriptor - Send - Enviar - - - Backup failed. Aborting Changes. - Falló el respaldo. Cancelando Cambios. - - - Click for new address - Haz clic para una nueva dirección + Sync + Sincronizar History Historial - - Cannot move the wallet file, because {file_path} exists - No se puede mover el archivo de la cartera, porque {file_path} existe - - - New password: - Nueva contraseña: - Receive Recibir - - Backup saved to {filename} - Respaldo guardado en {filename} - No changes to apply. Sin cambios para aplicar. - Sync - Sincronizar + Backup saved to {filename} + Respaldo guardado en {filename} - - - NotificationBarRegtest - Change Network - Cambiar Red + Backup failed. Aborting Changes. + Falló el respaldo. Cancelando Cambios. - Network = {network}. The coins are worthless! - La red = {network}. ¡Las monedas no tienen valor! + Cannot move the wallet file, because {file_path} exists + No se puede mover el archivo de la cartera, porque {file_path} existe - AddressList - - change - cambio - + ReceiveTest - Category - Categoría + Received {amount} + Recibido {amount} - Copy as csv - Copiar como csv + No wallet setup yet + Aún no se ha configurado la cartera - Details - Detalles + Receive a small amount {test_amount} to an address of this wallet + Recibe una pequeña cantidad {test_amount} a una dirección de esta cartera - Address - Dirección + Next step + Siguiente paso - Address {address} - Dirección {address} + Check if received + Comprobar si recibido - change address - dirección de cambio + Previous Step + Paso Anterior + + + RecipientGroupBox - receiving address - dirección receptora + Address + Dirección Label Etiqueta - Export Labels - Exportar Etiquetas + Amount + Cantidad - Index - Índice + Enter label here + Introduce la etiqueta aquí - receiving - receptora + Send max + Enviar máx - Balance - Saldo + Enter address here + Introduce la dirección aquí - Fiat Balance - Saldo en Fiat + Enter label for recipient address + Introduce la etiqueta para la dirección del destinatario - Type - Tipo + Wallet "{id}" + Cartera "{id}" + + + Recipients - Tx - Tx + Recipients + Destinatarios - View on block explorer - Ver en el explorador de bloques + + Add Recipient + + Agregar Destinatario - address_list + RegisterMultisig - Change - Cambio + Export file to register the multisig on Coldcard + Exportar archivo para registrar la multisig en Coldcard - Funded - Financiado + Your balance {balance} is greater than a maximally allowed test amount of {amount}! +Please do the hardware signer reset only with a lower balance! (Send some funds out before) + Tu saldo {balance} es mayor que la cantidad de prueba máxima permitida de {amount}! Por favor, solo restablece el firmante de hardware con un saldo menor! (Envía algunos fondos antes) - Funded or Unused - Financiado o No usado + 1. Export wallet descriptor + 1. Exportar descriptor de la cartera - Unused - No utilizado + Yes, I registered the multisig on the {n} hardware signer + Sí, registré la multisig en el firmante de hardware {n} - Receiving - Receptora + Previous Step + Paso Anterior - All status - Todos los estados + 2. Import in each hardware signer + 2. Importar en cada firmante de hardware - All types - Todos los tipos + 2. Import in the hardware signer + 2. Importar en el firmante de hardware + + + ScreenshotsExportXpub - Used - Usado + 1. Export the wallet information from the hardware signer + 1. Exportar la información de la cartera desde el firmante de hardware - hist_list + ScreenshotsGenerateSeed - Change - Cambio + Generate 24 secret seed words on each hardware signer + Generar 24 palabras secretas de semilla en cada firmante de hardware + + + ScreenshotsRegisterMultisig - Copy as csv - Copiar como csv + Import the multisig information in the hardware signer + Importar la información de multisig en el firmante de hardware + + + ScreenshotsResetSigner - Details - Detalles + Reset the hardware signer. + Restablecer el firmante de hardware. + + + ScreenshotsRestoreSigner - Edit with higher fee (RBF) - Editar con tarifa más alta (RBF) + Restore the hardware signer. + Restaurar el firmante de hardware. + + + ScreenshotsViewSeed - Export binary transactions - Exportar transacciones binarias + Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. +If you make a mistake here, your money is lost! + Compara las 24 palabras en el papel de respaldo con 'Ver Palabras de Semilla' de Coldcard. Si cometes un error aquí, ¡tu dinero se perderá! + + + SendTest - Funded - Financiado + You made {n} outgoing transactions already. Would you like to skip this spend test? + Ya has hecho {n} transacciones salientes. ¿Te gustaría omitir esta prueba de gasto? - Funded or Unused - Financiado o No usado + Skip spend test? + ¿Omitir prueba de gasto? - Try cancel transaction (RBF) - Intentar cancelar transacción (RBF) + Complete the send test to ensure the hardware signer works! + Completa la prueba de envío para asegurar que el firmante de hardware funciona! + + + SignatureImporterClipboard - Unused - No utilizado + Import signed PSBT + Importar PSBT firmado - Receiving - Receptora + OK + OK - All status - Todos los estados + Please paste your PSBT in here, or drop a file + Por favor, pega tu PSBT aquí, o suelta un archivo - All types - Todos los tipos + Paste your PSBT in here or drop a file + Pega tu PSBT aquí o suelta un archivo + + + SignatureImporterFile - Used - Usado + OK + OK - View on block explorer - Ver en el explorador de bloques + Please paste your PSBT in here, or drop a file + Por favor, pega tu PSBT aquí, o suelta un archivo + + + Paste your PSBT in here or drop a file + Pega tu PSBT aquí o suelta un archivo - HistList + SignatureImporterQR - Amount - Cantidad + Scan QR code + Escanea el código QR - Wallet - Cartera + The txid of the signed psbt doesnt match the original txid + El Identificador de Transacción del psbt firmado no coincide con el txid original - Category - Categoría + bitcoin_tx libary error. The txid should not be changed during finalizing + error de la librería bitcoin_tx. El Identificador de Transacción no debe cambiar durante la finalización + + + SignatureImporterUSB - Status - Estado + USB Signing + Firma USB - Label - Etiqueta + Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. + Por favor, haz 'Cartera --> Exportar --> Exportar para...' y registra la cartera de firmas múltiples en el firmante de hardware. + + + SignatureImporterWallet - Txid - Identificador de Transacción + The txid of the signed psbt doesnt match the original txid. Aborting + El Identificador de Transacción del psbt firmado no coincide con el Identificador de Transacción original. Abortando + + + SyncTab - Cannot fetch wallet '{id}'. Please open the wallet first. - No se puede obtener la cartera '{id}'. Por favor, abre la cartera primero. + Encrypted syncing to trusted devices + Sincronización encriptada con dispositivos de confianza - Balance - Saldo + Open received Transactions and PSBTs automatically in a new tab + Abrir Transacciones y PSBTs recibidos automáticamente en una nueva pestaña - - - RecipientGroupBox - Amount - Cantidad + Opening {name} from {author} + Abriendo {name} de {author} - Wallet "{id}" - Cartera "{id}" + Received message '{description}' from {author} + Mensaje recibido '{description}' de {author} + + + TrustedDevice - Address - Dirección + Device id: {id} + Id del dispositivo: {id} - Send max - Enviar máx + Syncing Address labels + Sincronización de etiquetas de dirección - Label - Etiqueta + Can share Transactions + Puede compartir Transacciones + + + + TxSigningSteps + + Export transaction to any hardware signer + Exportar transacción a cualquier firmante de hardware - Enter address here - Introduce la dirección aquí + Sign with a different hardware signer + Firmar con un firmante de hardware diferente - Enter label here - Introduce la etiqueta aquí + Import signature + Importar firma - Enter label for recipient address - Introduce la etiqueta para la dirección del destinatario + Transaction signed with the private key belonging to {label} + Transacción firmada con la clave privada perteneciente a {label} - UTXOList - - Amount - Cantidad - + UITx_Creator - Wallet - Cartera + Select a category that fits the recipient best + Selecciona una categoría que se ajuste mejor al destinatario - Category - Categoría + Add Inputs + Agregar Entradas - Address - Dirección + Load UTXOs + Cargar UTXOs - Label - Etiqueta + Please paste UTXO here in the format txid:outpoint +txid:outpoint + Por favor, pega UTXO aquí en el formato txid:punto de salida txid:punto de salida - Parents - Padres + Please paste UTXO here + Por favor, pega UTXO aquí - Outpoint - Punto de salida + The inputs {inputs} conflict with these confirmed txids {txids}. + Las entradas {inputs} entran en conflicto con estos Identificadores de Transacción confirmados {txids}. - - - CategoryEditor - category - categoría + The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. + Las transacciones dependientes no confirmadas {txids} serán eliminadas por esta nueva transacción que estás creando. - - - CloseButton - Close - Cerrar + Reduce future fees +by merging address balances + Reduce futuras tarifas fusionando saldos de direcciones - - - DistributeSeeds - Place each seed backup and hardware signer in a secure location, such: - Coloca cada respaldo de semilla y firmante de hardware en un lugar seguro, como: + Send Category + Categoría de Envío - The seed backup (24 words) give total control over the funds. - El respaldo de semilla (24 palabras) da control total sobre los fondos. + Advanced + Avanzado - Seed backup {j} and hardware signer {j} should be in location {j} - El respaldo de semilla {j} y el firmante de hardware {j} deben estar en la ubicación {j} + Add foreign UTXOs + Agregar UTXOs externos - Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. - Elige los lugares seguros cuidadosamente, considerando que necesitas ir a {m} de los {n}, para gastar desde tu cartera multisig. + This checkbox automatically checks +below {rate} + Esta casilla se marca automáticamente abajo {rate} - Finish - Finalizar + Please select an input category on the left, that fits the transaction recipients. + Porfavor, selecciona una categoría de entrada a la izquierda, que se ajuste a los destinatarios de la transacción. - Store the hardware signer in secure location. - Guarda el firmante de hardware en un lugar seguro. + {num_inputs} Inputs: {inputs} + {num_inputs} Entradas: {inputs} - Store the seed backup in a <b>very</b> secure location (like a vault). - Guarda el respaldo de semilla en un lugar <b>muy</b> seguro (como una bóveda). + Adding outpoints {outpoints} + Agregando puntos de salida {outpoints} - ScreenshotsViewSeed + UITx_Viewer - Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. -If you make a mistake here, your money is lost! - Compara las 24 palabras en el papel de respaldo con 'Ver Palabras de Semilla' de Coldcard. Si cometes un error aquí, ¡tu dinero se perderá! + Inputs + Entradas - - - FloatingButtonBar - Fill the transaction fields - Completa los campos de la transacción + Recipients + Destinatarios - Create Transaction - Crear Transacción + Edit + Editar - Previous Step - Paso Anterior + Edit with increased fee (RBF) + Editar con tarifa aumentada (RBF) - Yes, I see the transaction in the history - Sí, veo la transacción en el historial + Previous step + Paso anterior - - - ConnectedDevices - Trusted - Confiable + Next step + Siguiente paso - My id: {id} - Mi id: {id} + Send + Enviar - UnTrusted - No confiable + Invalid Signatures + Firmas Inválidas - Reset identity for this device - Restablecer identidad para este dispositivo + The txid of the signed psbt doesnt match the original txid + El Identificador de Transacción del psbt firmado no coincide con el txid original - QTProtoWallet + UTXOList - Setup wallet - Configuración de la cartera + Wallet + Cartera - - - DescriptorEdit - Wallet setup not finished. Please finish before creating a Backup pdf. - Configuración de la cartera no terminada. Por favor, termina antes de crear un PDF de respaldo. + Outpoint + Punto de salida - - - Balance - Confirmed - Confirmado + Address + Dirección - Unconfirmed - No confirmado + Category + Categoría - Unmatured - No madurado + Label + Etiqueta - - - wallet - Confirmed - Confirmado + Amount + Cantidad - Local - Local + Parents + Padres + + + UnTrustedDevice - Unconfirmed - No confirmado + Trust {id} + Confiar en {id} - Unconfirmed parent - Padre no confirmado + Accept trust request from {other} + Aceptar solicitud de confianza de {other} - MyTreeView + UpdateNotificationBar - Copy - Copiar + Check for Update + Buscar Actualización - Copy as csv - Copiar como csv + Signature verified. + Firma verificada. - - - PasswordCreation - Create Password - Crear Contraseña + New version available {tag} + Nueva versión disponible {tag} - Submit - Enviar + You have already the newest version. + Ya tienes la versión más reciente. - Error - Error + No update found + No se encontró ninguna actualización - Enter your password: - Introduce tu contraseña: + Could not verify the download. Please try again later. + No se pudo verificar la descarga. Inténtelo de nuevo más tarde. - Passwords do not match! - Las contraseñas no coinciden! + Please install {link} to automatically verify the signature of the update. + Por favor, instala {link} para verificar automáticamente la firma de la actualización. - Show Password - Mostrar Contraseña + Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. + Por favor, instala GPG vía "sudo apt-get -y install gpg" para verificar automáticamente la firma de la actualización. - Hide Password - Ocultar Contraseña + Please install GPG via "brew install gnupg" to automatically verify the signature of the update. + Por favor, instala GPG vía "brew install gnupg" para verificar automáticamente la firma de la actualización. - Re-enter your password: - Reingresar tu contraseña: + Signature doesn't match!!! Please try again. + ¡La firma no coincide! Inténtelo de nuevo. - WalletSteps + UtxoListWithToolbar - You must have an initilized wallet first - Debes tener una cartera inicializada primero + {amount} selected + {amount} seleccionados + + + ValidateBackup - Turn on hardware signer - Encender firmante de hardware + Yes, I am sure all 24 words are correct + Sí, estoy seguro de que las 24 palabras son correctas - Sign with {label} - Firmar con {label} + Previous Step + Paso Anterior + + + WalletBalanceChart - Generate Seed - Generar Semilla + Balance ({unit}) + Saldo ({unit}) - Import signer info - Importar información del firmante + Date + Fecha + + + WalletIdDialog - The wallet is not funded. Please fund the wallet. - La cartera no está financiada. Por favor, financia la cartera. + Choose wallet name + Elige el nombre de la cartera - Put in secure locations - Poner en lugares seguros + Wallet name: + Nombre de la cartera: - Send Test - Prueba de Envío + Error + Error - Send test - Prueba de envío + A wallet with the same name already exists. + Ya existe una cartera con el mismo nombre. + + + + WalletSteps + + You must have an initilized wallet first + Debes tener una cartera inicializada primero - Send test {j} - Prueba de envío {j} + Validate Backup + Validar Respaldo Receive Test Prueba de Recepción + + Put in secure locations + Poner en lugares seguros + Register multisig on signers Registrar multisig en firmantes - Backup Seed - Respaldar Semilla + Send test {j} + Prueba de envío {j} - Validate Backup - Validar Respaldo + Send test + Prueba de envío and y - - - descriptor - Wallet Descriptor - Descriptor de la Cartera + Send Test + Prueba de Envío - Wallet Type - Tipo de Cartera + Sign with {label} + Firmar con {label} - Address Type - Tipo de Dirección + The wallet is not funded. Please fund the wallet. + La cartera no está financiada. Por favor, financia la cartera. - - - UITx_Viewer - Recipients - Destinatarios + Turn on hardware signer + Encender firmante de hardware - Edit - Editar + Generate Seed + Generar Semilla - Edit with increased fee (RBF) - Editar con tarifa aumentada (RBF) + Import signer info + Importar información del firmante - The txid of the signed psbt doesnt match the original txid - El Identificador de Transacción del psbt firmado no coincide con el txid original + Backup Seed + Respaldar Semilla + + + address_list - Inputs - Entradas + All status + Todos los estados - Send - Enviar + Unused + No utilizado - Invalid Signatures - Firmas Inválidas + Funded + Financiado - Previous step - Paso anterior + Used + Usado - Next step - Siguiente paso + Funded or Unused + Financiado o No usado - - - BitcoinQuickReceive - Receive Address - Dirección de recepción + All types + Todos los tipos - Quick Receive - Recepción rápida + Receiving + Receptora - - - recipients - Address Already Used - Dirección ya utilizada + Change + Cambio - net_conf + basetab - Run your bitcoind with "bitcoind -chain=regtest" - Ejecuta tu bitcoind con "bitcoind -chain=regtest" + Next step + Siguiente paso - Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. - Ejecuta tu bitcoind con "bitcoind -chain=signet" Sin embargo, este es un signet diferente al de mutinynet.com. + Previous Step + Paso Anterior + + + d - Run your bitcoind with "bitcoind -chain=test" - Ejecuta tu bitcoind con "bitcoind -chain=test" + Signer {i} + Firmante {i} - The server can associate your IP address with the wallet addresses. -It is best to use your own server, such as {link}. - El servidor puede asociar tu dirección IP con las direcciones de la cartera. Es mejor usar tu propio servidor, como {link}. + Open Transaction/PSBT + Abrir Transacción/PSBT - This is a private and fast way to connect to the bitcoin network. - Esta es una forma privada y rápida de conectarse a la red bitcoin. + Recovery Signer {i} + Firmante de Recuperación {i} - You can connect your own Bitcoin node, such as {link}. - Puedes conectar tu propio nodo Bitcoin, como {link}. + Text copied to Clipboard + Texto copiado al Portapapeles - You can setup {link} with an electrum server on {server} and a block explorer on {explorer} - Puedes configurar {link} con un servidor de electrum en {server} y un explorador de bloques en {explorer} + {} copied to Clipboard + {} copiado al Portapapeles - You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} - Puedes configurar {setup} con un servidor esplora en {server} y un explorador de bloques en {explorer} + Read QR code from camera + Leer código QR desde la cámara - A good option is {link} and a block explorer on {explorer}. - Una buena opción es {link} y un explorador de bloques en {explorer}. + Copy to clipboard + Copiar al portapapeles - A good option is {link} and a block explorer on {explorer}. There is a {faucet}. - Una buena opción es {link} y un explorador de bloques en {explorer}. Hay un {faucet}. + Create PDF + Crear PDF - - - SignatureImporterWallet - The txid of the signed psbt doesnt match the original txid. Aborting - El Identificador de Transacción del psbt firmado no coincide con el Identificador de Transacción original. Abortando + Create random mnemonic + Crear mnemónico aleatorio + + + Open file + Abrir archivo - SignatureImporterQR + descriptor - The txid of the signed psbt doesnt match the original txid - El Identificador de Transacción del psbt firmado no coincide con el txid original + Wallet Type + Tipo de Cartera - bitcoin_tx libary error. The txid should not be changed during finalizing - error de la librería bitcoin_tx. El Identificador de Transacción no debe cambiar durante la finalización + Address Type + Tipo de Dirección - Scan QR code - Escanea el código QR + Wallet Descriptor + Descriptor de la Cartera - WalletIdDialog + hist_list - Choose wallet name - Elige el nombre de la cartera + All status + Todos los estados - Error - Error + View on block explorer + Ver en el explorador de bloques - Wallet name: - Nombre de la cartera: + Copy as csv + Copiar como csv - A wallet with the same name already exists. - Ya existe una cartera con el mismo nombre. + Export binary transactions + Exportar transacciones binarias - - - PasswordQuestion - Password Input - Entrada de Contraseña + Edit with higher fee (RBF) + Editar con tarifa más alta (RBF) - Submit - Enviar + Try cancel transaction (RBF) + Intentar cancelar transacción (RBF) - Please enter your password: - Por favor, ingresa tu contraseña: + Unused + No utilizado - - - BackupSeed - Write each 24-word seed onto the printed pdf. - Escribe cada semilla de 24 palabras en el PDF impreso. + Funded + Financiado - Write the 24-word seed onto the printed pdf. - Escribe la semilla de 24 palabras en el PDF impreso. + Used + Usado - Print the pdf (it also contains the wallet descriptor) - Imprime el PDF (también contiene el descriptor de la cartera) + Funded or Unused + Financiado o No usado - Print recovery sheet - Imprimir hoja de recuperación + All types + Todos los tipos - Previous Step - Paso Anterior + Receiving + Receptora - Please complete the previous steps. - Por favor, completa los pasos anteriores. + Change + Cambio + + + Details + Detalles - DescriptorUI + lib_load - This "descriptor" contains all information to reconstruct the wallet. -Please back up this descriptor to be able to recover the funds! - Este "descriptor" contiene toda la información para reconstruir la cartera. ¡Por favor, respalda este descriptor para poder recuperar los fondos! + You are missing the {link} +Please install it. + Te falta {link} Por favor, instálalo. + + + menu - Required Signers - Firmantes necesarios + Import Labels + Importar Etiquetas - Scan Address Limit - Límite de escaneo de dirección + Import Labels (BIP329 / Sparrow) + Importar etiquetas (BIP329 / Sparrow) - Paste or scan your descriptor, if you restore a wallet. - Pega o escanea tu descriptor, si restauras una cartera. + Import Labels (Electrum Wallet) + Importar etiquetas (cartera Electrum) mytreeview - - Export as CSV - Exportar como CSV - Type to search... Tipo para buscar... @@ -2054,222 +2026,291 @@ Please back up this descriptor to be able to recover the funds! Type to filter Tipo para filtrar + + Export as CSV + Exportar como CSV + - AddressListWithToolbar + net_conf - Export Labels - Exportar Etiquetas + This is a private and fast way to connect to the bitcoin network. + Esta es una forma privada y rápida de conectarse a la red bitcoin. - Generate to selected adddresses - Generar para direcciones seleccionadas + Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. + Ejecuta tu bitcoind con "bitcoind -chain=signet" Sin embargo, este es un signet diferente al de mutinynet.com. - Show Filter - Mostrar Filtro + The server can associate your IP address with the wallet addresses. +It is best to use your own server, such as {link}. + El servidor puede asociar tu dirección IP con las direcciones de la cartera. Es mejor usar tu propio servidor, como {link}. - - - TxSigningSteps - Export transaction to any hardware signer - Exportar transacción a cualquier firmante de hardware + You can setup {link} with an electrum server on {server} and a block explorer on {explorer} + Puedes configurar {link} con un servidor de electrum en {server} y un explorador de bloques en {explorer} - Sign with a different hardware signer - Firmar con un firmante de hardware diferente + A good option is {link} and a block explorer on {explorer}. + Una buena opción es {link} y un explorador de bloques en {explorer}. - Import signature - Importar firma + A good option is {link} and a block explorer on {explorer}. There is a {faucet}. + Una buena opción es {link} y un explorador de bloques en {explorer}. Hay un {faucet}. - Transaction signed with the private key belonging to {label} - Transacción firmada con la clave privada perteneciente a {label} + You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} + Puedes configurar {setup} con un servidor esplora en {server} y un explorador de bloques en {explorer} + + + You can connect your own Bitcoin node, such as {link}. + Puedes conectar tu propio nodo Bitcoin, como {link}. + + + Run your bitcoind with "bitcoind -chain=regtest" + Ejecuta tu bitcoind con "bitcoind -chain=regtest" + + + Run your bitcoind with "bitcoind -chain=test" + Ejecuta tu bitcoind con "bitcoind -chain=test" - BalanceChart + recipients - Date - Fecha + Address Already Used + Dirección ya utilizada - WalletBalanceChart + tageditor - Date - Fecha + Delete {name} + Eliminar {name} - Balance ({unit}) - Saldo ({unit}) + Add new {name} + Agregar nuevo {name} + + + This {name} exists already. + Este {name} ya existe. - SignatureImporterUSB + tutorial - USB Signing - Firma USB + Never share the 24 secret words with anyone! + ¡Nunca compartas las 24 palabras secretas con nadie! - Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. - Por favor, haz 'Cartera --> Exportar --> Exportar para...' y registra la cartera de firmas múltiples en el firmante de hardware. + Never type them into any computer or cellphone! + ¡Nunca las escribas en ningún ordenador o teléfono móvil! - - - ScreenshotsGenerateSeed - Generate 24 secret seed words on each hardware signer - Generar 24 palabras secretas de semilla en cada firmante de hardware + Never make a picture of them! + ¡Nunca hagas una foto de ellas! - TrustedDevice + util - Device id: {id} - Id del dispositivo: {id} + Unconfirmed + No confirmado - Can share Transactions - Puede compartir Transacciones + Failed to export to file. + Falló la exportación a archivo. - Syncing Address labels - Sincronización de etiquetas de dirección + Balance: {amount} + Saldo: {amount} - - - menu - Import Labels - Importar Etiquetas + Unknown + Desconocido - Import Labels (BIP329 / Sparrow) - Importar etiquetas (BIP329 / Sparrow) + {} seconds ago + {} segundos atrás - Import Labels (Electrum Wallet) - Importar etiquetas (cartera Electrum) + in {} seconds + en {} segundos - - - ScreenshotsRegisterMultisig - Import the multisig information in the hardware signer - Importar la información de multisig en el firmante de hardware + less than a minute ago + hace menos de un minuto - - - SignatureImporterClipboard - Import signed PSBT - Importar PSBT firmado + in less than a minute + en menos de un minuto - OK - OK + about {} minutes ago + hace aproximadamente {} minutos - Paste your PSBT in here or drop a file - Pega tu PSBT aquí o suelta un archivo + in about {} minutes + en aproximadamente {} minutos - Please paste your PSBT in here, or drop a file - Por favor, pega tu PSBT aquí, o suelta un archivo + about 1 hour ago + hace aproximadamente 1 hora - - - NostrSync - Go to {untrusted} - Ir a {untrusted} + Unconfirmed parent + Padre no confirmado - To complete the connection, accept my {id} request on the other device {other}. - Para completar la conexión, acepta mi solicitud de {id} en el otro dispositivo {other}. + in about 1 hour + en aproximadamente 1 hora - - - BTCSpinBox - Max ≈ {amount} - Máx. ≈ {amount} + about {} hours ago + hace aproximadamente {} horas - - - SignatureImporterFile - OK - OK + in about {} hours + en aproximadamente {} horas - Paste your PSBT in here or drop a file - Pega tu PSBT aquí o suelta un archivo + about 1 day ago + hace aproximadamente 1 día - Please paste your PSBT in here, or drop a file - Por favor, pega tu PSBT aquí, o suelta un archivo + in about 1 day + en aproximadamente 1 día - - - ValidateBackup - Previous Step - Paso Anterior + about {} days ago + hace aproximadamente {} días - Yes, I am sure all 24 words are correct - Sí, estoy seguro de que las 24 palabras son correctas + in about {} days + en aproximadamente {} días - - - basetab - Previous Step - Paso Anterior + about 1 month ago + hace aproximadamente 1 mes - Next step - Siguiente paso + in about 1 month + en aproximadamente 1 mes - - - BlockingWaitingDialog - Please wait - Por favor espera + about {} months ago + hace aproximadamente {} meses - - - ScreenshotsResetSigner - Reset the hardware signer. - Restablecer el firmante de hardware. + Not Verified + No verificado - - - ScreenshotsRestoreSigner - Restore the hardware signer. - Restaurar el firmante de hardware. + in about {} months + en aproximadamente {} meses + + + about 1 year ago + hace aproximadamente 1 año + + + in about 1 year + en aproximadamente 1 año + + + over {} years ago + hace más de {} años + + + in over {} years + en más de {} años + + + Cannot bump fee + No se puede aumentar la tarifa + + + Cannot cancel transaction + No se puede cancelar la transacción + + + Cannot create child transaction + No se puede crear una transacción hija + + + Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files + Se detectó corrupción en el archivo de la cartera. Por favor, restaura tu cartera desde la semilla y compara las direcciones en ambos archivos + + + Local + Local + + + Insufficient funds + Fondos insuficientes + + + Dynamic fee estimates not available + Estimaciones dinámicas de tarifas no disponibles + + + Incorrect password + Contraseña incorrecta + + + Transaction is unrelated to this wallet. + La transacción no está relacionada con esta cartera. + + + Failed to import from file. + Falló la importación desde archivo. - lib_load + utxo_list - You are missing the {link} -Please install it. - Te falta {link} Por favor, instálalo. + Unconfirmed UTXO is spent by transaction {is_spent_by_txid} + UTXO no confirmado es gastado por la transacción {is_spent_by_txid} + + + Unconfirmed UTXO + UTXO no confirmado + + + Open transaction + Abrir transacción + + + View on block explorer + Ver en el explorador de bloques + + + Copy txid:out + Copiar txid:salida + + + Copy as csv + Copiar como csv - UtxoListWithToolbar + wallet - {amount} selected - {amount} seleccionados + Confirmed + Confirmado + + + Unconfirmed + No confirmado + + + Unconfirmed parent + Padre no confirmado + + + Local + Local diff --git a/bitcoin_safe/gui/locales/app_hi_IN.qm b/bitcoin_safe/gui/locales/app_hi_IN.qm index 67f61419f47a287d2c51c20323621de9cd2fc3cd..0f2a14a77f4c7d8967ac9474778dd405957181a2 100644 GIT binary patch delta 5322 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 LK8*LfhI;%POs@r3 delta 4136 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 - FeeGroup + AddressDialog - ... is the minimum to replace the existing transactions. - ... मौजूदा लेन-देनों को बदलने के लिए न्यूनतम है। + Address + पता - {rate} is the minimum for {rbf} - {rate} {rbf} के लिए न्यूनतम है + Receiving address of wallet '{wallet_id}' (with index {index}) + बटुए '{wallet_id}' का प्राप्ति पता (अनुक्रमणिका {index} के साथ) - in ~{n}. Block - ~{n} ब्लॉक में + Change address of wallet '{wallet_id}' (with index {index}) + बटुए '{wallet_id}' का परिवर्तन पता (अनुक्रमणिका {index} के साथ) - The estimated transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - अनुमानित लेन-देन शुल्क है: {fee}, जो भेजे गए मूल्य {sent} का {percent}% है + Script Pubkey + स्क्रिप्ट पबकी - Approximate fee rate - अनुमानित शुल्क दर + Address descriptor + पता वर्णनकर्ता - The high prio mempool fee rate is {rate} - उच्च प्राथमिकता मेमपूल शुल्क दर है {rate} + Details + विवरण - High fee - उच्च शुल्क + Advanced + उन्नत + + + AddressList - High fee ratio: {ratio}% - उच्च शुल्क अनुपात: {ratio}% + Address {address} + पता {address} - High fee rate - उच्च शुल्क दर + change + परिवर्तन - High fee rate! - उच्च शुल्क दर! + receiving + प्राप्ति - The transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - लेन-देन शुल्क है: {fee}, जो भेजे गए मूल्य {sent} का {percent}% है + change address + परिवर्तन पता - Fee - शुल्क + receiving address + प्राप्ति पता - Fee rate could not be determined - शुल्क दर निर्धारित नहीं की जा सकी + Details + विवरण - - - net_conf - Run your bitcoind with "bitcoind -chain=regtest" - "bitcoind -chain=regtest" के साथ अपना bitcoind चलाएं + View on block explorer + ब्लॉक एक्सप्लोरर पर देखें - Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. - "bitcoind -chain=signet" के साथ अपना bitcoind चलाएं यह हालांकि mutinynet.com के अलग signet है। + Copy as csv + सीएसवी के रूप में कॉपी करें - Run your bitcoind with "bitcoind -chain=test" - "bitcoind -chain=test" के साथ अपना bitcoind चलाएं + Export Labels + लेबल निर्यात करें - You can setup {link} with an electrum server on {server} and a block explorer on {explorer} - आप {link} के साथ एक इलेक्ट्रम सर्वर पर {server} और एक ब्लॉक एक्सप्लोरर पर {explorer} के साथ सेटअप कर सकते हैं + Tx + टीएक्स - You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} - आप {setup} के साथ एक esplora सर्वर पर {server} और एक ब्लॉक एक्सप्लोरर पर {explorer} के साथ सेटअप कर सकते हैं + Type + प्रकार - You can connect your own Bitcoin node, such as {link}. - आप अपना खुद का बिटकॉइन नोड, जैसे कि {link}, कनेक्ट कर सकते हैं। + Index + अनुक्रमणिका - A good option is {link} and a block explorer on {explorer}. - एक अच्छा विकल्प है {link} और एक ब्लॉक एक्सप्लोरर पर {explorer}। + Address + पता - A good option is {link} and a block explorer on {explorer}. There is a {faucet}. - एक अच्छा विकल्प है {link} और एक ब्लॉक एक्सप्लोरर पर {explorer}। वहाँ एक {faucet} है। + Category + श्रेणी - This is a private and fast way to connect to the bitcoin network. - यह बिटकॉइन नेटवर्क से जुड़ने का एक निजी और तेज़ तरीका है। + Label + लेबल - The server can associate your IP address with the wallet addresses. -It is best to use your own server, such as {link}. - सर्वर आपके IP पते को वॉलेट पतों के साथ जोड़ सकता है। अपना खुद का सर्वर उपयोग करना सबसे अच्छा है, जैसे कि {link}। + Balance + बैलेंस + + + Fiat Balance + फिएट बैलेंस - d + AddressListWithToolbar - {} copied to Clipboard - {} क्लिपबोर्ड में कॉपी किया गया + Show Filter + फ़िल्टर दिखाएँ - Create PDF - PDF बनाएं + Export Labels + लेबल निर्यात करें - Read QR code from camera - कैमरा से QR कोड पढ़ें + Generate to selected adddresses + चयनित पतों के लिए उत्पन्न करें + + + BTCSpinBox - Copy to clipboard - क्लिपबोर्ड में कॉपी करें + Max ≈ {amount} + अधिकतम ≈ {amount} + + + BackupSeed - Text copied to Clipboard - क्लिपबोर्ड में टेक्स्ट कॉपी किया गया + Please complete the previous steps. + कृपया पिछले चरणों को पूरा करें। - Open file - फाइल खोलें + Print recovery sheet + रिकवरी शीट प्रिंट करें - Recovery Signer {i} - रिकवरी साइनर {i} + Previous Step + पिछला चरण - Create random mnemonic - रैंडम म्नेमोनिक बनाएं + Print the pdf (it also contains the wallet descriptor) + पीडीएफ प्रिंट करें (इसमें वॉलेट वर्णनकर्ता भी शामिल है) - Open Transaction/PSBT - लेन-देन/PSBT खोलें + Write each 24-word seed onto the printed pdf. + प्रिंट किए गए पीडीएफ पर प्रत्येक 24-शब्द बीज को लिखें। - Signer {i} - साइनर {i} + Write the 24-word seed onto the printed pdf. + प्रिंट किए गए पीडीएफ पर 24-शब्द बीज लिखें। - util + Balance - over {} years ago - {} साल से अधिक पहले + Confirmed + पुष्ट - in over {} years - {} साल से अधिक में + Unconfirmed + अपुष्ट - {} seconds ago - {} सेकंड पहले + Unmatured + परिपक्व नहीं + + + BalanceChart - in {} seconds - {} सेकंड में + Date + तारीख + + + BitcoinQuickReceive - Unknown - अज्ञात + Quick Receive + क्विक रिसीव - Insufficient funds - अपर्याप्त फंड + Receive Address + रिसीव पता + + + BlockingWaitingDialog - Unconfirmed - अपुष्ट + Please wait + कृपया प्रतीक्षा करें + + + BuyHardware - Unconfirmed parent - अपुष्ट माता-पिता + Do you need to buy a hardware signer? + क्या आपको हार्डवेयर साइनर खरीदने की आवश्यकता है? - less than a minute ago - एक मिनट से कम समय पहले + Buy a {name} + {name} खरीदें - in less than a minute - एक मिनट से कम समय में + Buy a Coldcard +5% off + कोल्डकार्ड 5% छूट पर खरीदें - Dynamic fee estimates not available - गतिशील शुल्क अनुमान उपलब्ध नहीं + Turn on your {n} hardware signers + अपने {n} हार्डवेयर साइनर्स को चालू करें - Incorrect password - गलत पासवर्ड + Turn on your hardware signer + अपना हार्डवेयर साइनर चालू करें + + + CategoryEditor - Failed to export to file. - फ़ाइल में निर्यात करने में विफल। + category + श्रेणी + + + ChatGui - Failed to import from file. - फ़ाइल से आयात करने में विफल। + Type your message here... + अपना संदेश यहाँ टाइप करें... - Cannot create child transaction - बच्चा लेन-देन बनाना संभव नहीं + Share a PSBT + पीएसबीटी साझा करें - Balance: {amount} - बैलेंस: {amount} + Send + भेजें - about {} hours ago - लगभग {} घंटे पहले + Open Transaction/PSBT + ट्रांजैक्शन/पीएसबीटी खोलें - in about {} hours - लगभग {} घंटे में + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + सभी फाइलें ();;पीएसबीटी (.psbt);;ट्रांजेक्शन (*.tx) - about {} days ago - लगभग {} दिन पहले - - - in about {} days - लगभग {} दिन में + Me: {text} + मैं: {text} + + + CloseButton - about {} months ago - लगभग {} महीने पहले + Close + बंद करें + + + ConfirmedBlock - in about {} months - लगभग {} महीने में + Block {n} + ब्लॉक {n} + + + ConnectedDevices - about {} minutes ago - लगभग {} मिनट पहले + Reset identity for this device + इस डिवाइस के लिए पहचान रीसेट करें - in about {} minutes - लगभग {} मिनट में + Trusted + विश्वसनीय - about 1 hour ago - लगभग 1 घंटे पहले + UnTrusted + अविश्वसनीय - in about 1 hour - लगभग 1 घंटे में + My id: {id} + मेरी आईडी: {id} + + + DescriptorEdit - about 1 day ago - लगभग 1 दिन पहले + Wallet setup not finished. Please finish before creating a Backup pdf. + वॉलेट सेटअप पूरा नहीं हुआ है। कृपया बैकअप पीडीएफ बनाने से पहले इसे पूरा करें। + + + DescriptorUI - in about 1 day - लगभग 1 दिन में + Required Signers + आवश्यक साइनर्स - about 1 month ago - लगभग 1 महीने पहले + Scan Address Limit + स्कैन पता सीमा - in about 1 month - लगभग 1 महीने में + Paste or scan your descriptor, if you restore a wallet. + यदि आप एक वॉलेट पुनर्स्थापित करते हैं तो अपना वर्णनकर्ता पेस्ट या स्कैन करें। - about 1 year ago - लगभग 1 साल पहले + This "descriptor" contains all information to reconstruct the wallet. +Please back up this descriptor to be able to recover the funds! + यह "वर्णनकर्ता" वॉलेट को पुनर्निर्माण करने के लिए सभी जानकारी रखता है। कृपया धन की पुनर्प्राप्ति के लिए इस वर्णनकर्ता का बैकअप लें! + + + DistributeSeeds - in about 1 year - लगभग 1 साल में + Place each seed backup and hardware signer in a secure location, such: + प्रत्येक बीज बैकअप और हार्डवेयर साइनर को सुरक्षित स्थान पर रखें, जैसे: - Transaction is unrelated to this wallet. - लेन-देन इस वॉलेट से संबंधित नहीं है। + Seed backup {j} and hardware signer {j} should be in location {j} + बीज बैकअप {j} और हार्डवेयर साइनर {j} को स्थान {j} में होना चाहिए - Cannot cancel transaction - लेन-देन रद्द करना संभव नहीं + Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. + सुरक्षित स्थानों का चयन सावधानी से करें, यह मानते हुए कि आपको अपने मल्टीसिग-वॉलेट से खर्च करने के लिए {m} में से {n} में जाना होगा। - Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files - वॉलेट फ़ाइल का भ्रष्टाचार पता चला। कृपया अपने वॉलेट को बीज से पुनर्स्थापित करें, और दोनों फ़ाइलों में पते की तुलना करें + Store the seed backup in a <b>very</b> secure location (like a vault). + बीज बैकअप को बहुत सुरक्षित स्थान पर रखें (जैसे कि तिजोरी में)। - Cannot bump fee - शुल्क बढ़ाना संभव नहीं + The seed backup (24 words) give total control over the funds. + बीज बैकअप (24 शब्द) धन पर पूर्ण नियंत्रण देता है। - Not Verified - सत्यापित नहीं + Store the hardware signer in secure location. + हार्डवेयर साइनर को सुरक्षित स्थान पर रखें। - Local - स्थानीय + Finish + समाप्त - SyncTab - - Opening {name} from {author} - {author} से {name} खोलना - + Downloader - Received message '{description}' from {author} - {author} से प्राप्त संदेश '{description}' + Download Progress + डाउनलोड प्रगति - Open received Transactions and PSBTs automatically in a new tab - नई टैब में स्वचालित रूप से प्राप्त लेन-देन और PSBTs खोलें + Download {} + डाउनलोड {} - Encrypted syncing to trusted devices - विश्वसनीय उपकरणों के साथ एन्क्रिप्टेड सिंकिंग + Show {} in Folder + फ़ोल्डर में {} दिखाएँ - KeyStoreUI + ExportDataSimple - {data_type} cannot be used here. - {data_type} यहाँ उपयोग नहीं किया जा सकता। + Enlarge + बढ़ाएँ - {xpub} is not a valid public xpub - {xpub} एक मान्य सार्वजनिक xpub नहीं है + Share with single device + एकल उपकरण के साथ साझा करें - Connect USB - USB से कनेक्ट करें + PSBT + PSBT - xPub - xPub + Transaction + लेन-देन - The xpub is in SLIP132 format. Converting to standard format. - xpub SLIP132 प्रारूप में है। मानक प्रारूप में परिवर्तित करना। + Not available + उपलब्ध नहीं - The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} - xPub उत्पत्ति {key_origin} उम्मीद {expected_key_origin} के लिए नहीं है {self.get_address_type().name} + Please enable the sync tab first + कृपया पहले सिंक टैब को सक्षम करें - The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. - xPub उत्पत्ति {key_origin} और xPub एक साथ होते हैं। कृपया सही xPub उत्पत्ति जोड़ी चुनें। + Please enable syncing in the wallet {wallet_id} first + कृपया पहले {wallet_id} में सिंकिंग को सक्षम करें - xPub Origin - xPub मूल + Save as image + छवि के रूप में सहेजें - Import - आयात करें + Export file + फ़ाइल निर्यात करें - No signer data for the expected key_origin {expected_key_origin} found. - उम्मीद की गई की-उत्पत्ति {expected_key_origin} के लिए कोई साइनर डेटा नहीं मिला। + Copy to clipboard + क्लिपबोर्ड में कॉपी करें - Please paste the exported file (like coldcard-export.json or sparrow-export.json) - कृपया निर्यातित फ़ाइल (जैसे कि coldcard-export.json या sparrow-export.json) पेस्ट करें + Copy {name} + {name} कॉपी करें - Please paste the exported file (like coldcard-export.json or sparrow-export.json): - कृपया निर्यातित फ़ाइल (जैसे कि coldcard-export.json या sparrow-export.json) पेस्ट करें: + Copy TxId + लेन-देन पहचानकर्ता कॉपी करें - Please import the public key information from the hardware wallet first - कृपया पहले हार्डवेयर वॉलेट से सार्वजनिक कुंजी की जानकारी आयात करें + Copy JSON + JSON कॉपी करें - Please paste descriptors into the descriptor field in the top right. - कृपया शीर्ष दाएं में वर्णनकर्ता फ़ील्ड में वर्णनकर्ता पेस्ट करें। + Share with trusted devices + विश्वसनीय उपकरणों के साथ साझा करें - Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. - चयनित पते के प्रकार {type} के लिए स्टैंडर्ट {expected_key_origin} है। कृपया सही करें अगर आपको यकीन नहीं है। + Share with all devices in {wallet_id} + {wallet_id} में सभी उपकरणों के साथ साझा करें + + + FeeGroup - OK - ठीक है + Fee + शुल्क - Import file or text - फाइल या टेक्स्ट आयात करें + The transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + लेन-देन शुल्क है: {fee}, जो भेजे गए मूल्य {sent} का {percent}% है - Fingerprint - फिंगरप्रिंट + The estimated transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + अनुमानित लेन-देन शुल्क है: {fee}, जो भेजे गए मूल्य {sent} का {percent}% है - Import fingerprint and xpub - फिंगरप्रिंट और xpub आयात करें + High fee rate! + उच्च शुल्क दर! - Seed - बीज + The high prio mempool fee rate is {rate} + उच्च प्राथमिकता मेमपूल शुल्क दर है {rate} - Manual - मैनुअल + ... is the minimum to replace the existing transactions. + ... मौजूदा लेन-देनों को बदलने के लिए न्यूनतम है। - Label - लेबल + High fee rate + उच्च शुल्क दर - Description - विवरण + High fee + उच्च शुल्क - Scan - स्कैन करें + Approximate fee rate + अनुमानित शुल्क दर - Name of signing device: ...... -Location of signing device: ..... - हस्ताक्षर डिवाइस का नाम: ...... हस्ताक्षर डिवाइस का स्थान: ..... + in ~{n}. Block + ~{n} ब्लॉक में - - - UnTrustedDevice - Trust {id} - {id} पर भरोसा करें + {rate} is the minimum for {rbf} + {rate} {rbf} के लिए न्यूनतम है - Accept trust request from {other} - {other} से भरोसा अनुरोध स्वीकार करें + Fee rate could not be determined + शुल्क दर निर्धारित नहीं की जा सकी + + + High fee ratio: {ratio}% + उच्च शुल्क अनुपात: {ratio}% - TxSigningSteps + FloatingButtonBar - Transaction signed with the private key belonging to {label} - {label} के निजी कुंजी के साथ हस्ताक्षरित लेन-देन + Fill the transaction fields + लेन-देन क्षेत्रों को भरें - Export transaction to any hardware signer - किसी भी हार्डवेयर साइनर के साथ लेन-देन निर्यात करें + Create Transaction + लेन-देन बनाएं - Sign with a different hardware signer - विभिन्न हार्डवेयर साइनर के साथ हस्ताक्षर करें + Yes, I see the transaction in the history + हाँ, मैंने इतिहास में लेन-देन देखा है - Import signature - हस्ताक्षर आयात करें + Previous Step + पिछला चरण - WalletSteps + HistList - Sign with {label} - {label} के साथ हस्ताक्षर करें + Wallet + वॉलेट - and - और - - - Send test {j} - परीक्षण {j} भेजें - - - Send Test - परीक्षण भेजें - - - Send test - परीक्षण भेजें + Status + स्थिति - You must have an initilized wallet first - पहले आपके पास एक प्रारंभिक वॉलेट होना चाहिए + Category + श्रेणी - Receive Test - प्राप्त परीक्षण + Label + लेबल - Generate Seed - बीज उत्पन्न करें + Amount + राशि - Backup Seed - बीज बैकअप + Balance + बैलेंस - Validate Backup - बैकअप मान्य करें + Txid + लेन-देन पहचानकर्ता - The wallet is not funded. Please fund the wallet. - वॉलेट फंडेड नहीं है। कृपया वॉलेट को फंड करें। + Cannot fetch wallet '{id}'. Please open the wallet first. + वॉलेट '{id}' नहीं खोल सकता। कृपया पहले वॉलेट खोलें। + + + ImportXpubs - Import signer info - साइनर जानकारी आयात करें + 2. Import wallet information into Bitcoin Safe + २. बिटकॉइन सुरक्षित में वॉलेट जानकारी आयात करें - Register multisig on signers - साइनर्स पर मल्टीसिग पंजीकृत करें + Skip step + चरण छोड़ें - Put in secure locations - सुरक्षित स्थानों में रखें + Next step + अगला चरण - Turn on hardware signer - हार्डवेयर साइनर चालू करें + Previous Step + पिछला चरण - MempoolButtons + KeyStoreUI - {n}. Block - {n} ब्लॉक + Import fingerprint and xpub + फिंगरप्रिंट और xpub आयात करें - Next Block - अगला ब्लॉक + {data_type} cannot be used here. + {data_type} यहाँ उपयोग नहीं किया जा सकता। - - - ExportDataSimple - Copy {name} - {name} कॉपी करें + The xpub is in SLIP132 format. Converting to standard format. + xpub SLIP132 प्रारूप में है। मानक प्रारूप में परिवर्तित करना। - Share with all devices in {wallet_id} - {wallet_id} में सभी उपकरणों के साथ साझा करें + Import + आयात करें - Copy JSON - JSON कॉपी करें + Manual + मैनुअल - PSBT - PSBT + Description + विवरण - Not available - उपलब्ध नहीं + Label + लेबल - Share with single device - एकल उपकरण के साथ साझा करें + Fingerprint + फिंगरप्रिंट - Please enable syncing in the wallet {wallet_id} first - कृपया पहले {wallet_id} में सिंकिंग को सक्षम करें + xPub Origin + xPub मूल - Please enable the sync tab first - कृपया पहले सिंक टैब को सक्षम करें + xPub + xPub - Copy to clipboard - क्लिपबोर्ड में कॉपी करें + Seed + बीज - Save as image - छवि के रूप में सहेजें + OK + ठीक है - Export file - फ़ाइल निर्यात करें + Name of signing device: ...... +Location of signing device: ..... + हस्ताक्षर डिवाइस का नाम: ...... हस्ताक्षर डिवाइस का स्थान: ..... - Enlarge - बढ़ाएँ + Import file or text + फाइल या टेक्स्ट आयात करें - Transaction - लेन-देन + Scan + स्कैन करें - Copy TxId - लेन-देन पहचानकर्ता कॉपी करें + Connect USB + USB से कनेक्ट करें - Share with trusted devices - विश्वसनीय उपकरणों के साथ साझा करें + {xpub} is not a valid public xpub + {xpub} एक मान्य सार्वजनिक xpub नहीं है - - - BuyHardware - Buy a {name} - {name} खरीदें + Please import the public key information from the hardware wallet first + कृपया पहले हार्डवेयर वॉलेट से सार्वजनिक कुंजी की जानकारी आयात करें - Turn on your hardware signer - अपना हार्डवेयर साइनर चालू करें + Please paste the exported file (like coldcard-export.json or sparrow-export.json): + कृपया निर्यातित फ़ाइल (जैसे कि coldcard-export.json या sparrow-export.json) पेस्ट करें: - Turn on your {n} hardware signers - अपने {n} हार्डवेयर साइनर्स को चालू करें + Please paste the exported file (like coldcard-export.json or sparrow-export.json) + कृपया निर्यातित फ़ाइल (जैसे कि coldcard-export.json या sparrow-export.json) पेस्ट करें - Buy a Coldcard -5% off - कोल्डकार्ड 5% छूट पर खरीदें + Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. + चयनित पते के प्रकार {type} के लिए स्टैंडर्ट {expected_key_origin} है। कृपया सही करें अगर आपको यकीन नहीं है। - Do you need to buy a hardware signer? - क्या आपको हार्डवेयर साइनर खरीदने की आवश्यकता है? + The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. + xPub उत्पत्ति {key_origin} और xPub एक साथ होते हैं। कृपया सही xPub उत्पत्ति जोड़ी चुनें। - - - tageditor - Delete {name} - {name} हटाएं + The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} + xPub उत्पत्ति {key_origin} उम्मीद {expected_key_origin} के लिए नहीं है {self.get_address_type().name} - Add new {name} - नया {name} जोड़ें + No signer data for the expected key_origin {expected_key_origin} found. + उम्मीद की गई की-उत्पत्ति {expected_key_origin} के लिए कोई साइनर डेटा नहीं मिला। - This {name} exists already. - यह {name} पहले से मौजूद है। + Please paste descriptors into the descriptor field in the top right. + कृपया शीर्ष दाएं में वर्णनकर्ता फ़ील्ड में वर्णनकर्ता पेस्ट करें। - UITx_Creator - - {num_inputs} Inputs: {inputs} - {num_inputs} इनपुट: {inputs} - + LabelTimeEstimation - Load UTXOs - UTXOs लोड करें + ~in {t} min + ~{t} मिनट में - Adding outpoints {outpoints} - आउटपॉइंट्स {outpoints} जोड़ना + ~in {t} hours + ~{t} घंटों में + + + MainWindow - The inputs {inputs} conflict with these confirmed txids {txids}. - इनपुट्स {inputs} इन पुष्ट txids {txids} के साथ संघर्ष करते हैं। + &Wallet + &वॉलेट - Add Inputs - इनपुट्स जोड़ें + Re&fresh + ताज़ा करें - Advanced - उन्नत + &Transaction + &लेन-देन - Please paste UTXO here - कृपया UTXO यहाँ पेस्ट करें + &Transaction and PSBT + &लेन-देन और PSBT - Please paste UTXO here in the format txid:outpoint -txid:outpoint - कृपया UTXO यहाँ पेस्ट करें, प्रारूप में txid:outpoint txid:outpoint + From &file + फ़ाइल से - Please select an input category on the left, that fits the transaction recipients. - कृपया बाएं तरफ एक इनपुट श्रेणी चुनें, जो लेन-देन प्राप्तकर्ताओं के अनुरूप हो। + From &text + टेक्स्ट से - Reduce future fees -by merging address balances - पते के बैलेंस को मर्ज करके भविष्य के शुल्क कम करें + From &QR Code + QR कोड से - Select a category that fits the recipient best - प्राप्तकर्ता के लिए सबसे उपयुक्त श्रेणी चुनें + &Settings + &सेटिंग्स - Send Category - भेजने की श्रेणी + &Network Settings + &नेटवर्क सेटिंग्स - This checkbox automatically checks -below {rate} - यह चेकबॉक्स स्वचालित रूप से {rate} के नीचे जांचता है + &Show/Hide Tutorial + &ट्यूटोरियल दिखाएँ/छुपाएँ - The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. - यह नया लेन-देन जो आप बना रहे हैं, इन अपुष्ट निर्भर लेन-देनों {txids} को हटा देगा। + &Languages + &भाषाएँ - Add foreign UTXOs - विदेशी UTXOs जोड़ें + &New Wallet + &नया वॉलेट - - - NostrSync - Go to {untrusted} - {untrusted} पर जाएं + &About + &के बारे में - To complete the connection, accept my {id} request on the other device {other}. - कनेक्शन पूरा करने के लिए, दूसरे उपकरण {other} पर मेरे {id} अनुरोध को स्वीकार करें। + &Version: {} + &संस्करण: {} - - - MainWindow &Check for update &अपडेट के लिए जाँचें - &About - &के बारे में + &License + &लाइसेंस - &Export for Coldcard - &कोल्डकार्ड के लिए निर्यात करें - - - &Show/Hide Tutorial - &ट्यूटोरियल दिखाएँ/छुपाएँ - - - &New Wallet - &नया वॉलेट - - - &Network Settings - &नेटवर्क सेटिंग्स + Please select the wallet + कृपया वॉलेट चुनें - &Change/Export - &परिवर्तन/निर्यात + test + परीक्षण - &Change Password - &पासवर्ड बदलें + Please select the wallet first. + कृपया पहले वॉलेट चुनें। - &Languages - &भाषाएँ + Open Transaction/PSBT + लेन-देन/PSBT खोलें - &Save Current Wallet - &मौजूदा वॉलेट सहेजें + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + सभी फाइलें (*);;PSBT (*.psbt);;लेन-देन (*.tx) - &License - &लाइसेंस + Selected file: {file_path} + चयनित फ़ाइल: {file_path} - &Transaction - &लेन-देन + &Open Wallet + &वॉलेट खोलें - &Transaction and PSBT - &लेन-देन और PSBT + No wallet open. Please open the sender wallet to edit this thransaction. + कोई वॉलेट खुला नहीं है। कृपया इस लेन-देन को संपादित करने के लिए प्रेषक वॉलेट खोलें। - &Wallet - &वॉलेट + Please open the sender wallet to edit this thransaction. + कृपया इस लेन-देन को संपादित करने के लिए प्रेषक वॉलेट खोलें। - &Rename Wallet - &वॉलेट का नाम बदलें + Open Transaction or PSBT + लेन-देन या PSBT खोलें - &Open Wallet - &वॉलेट खोलें + OK + ठीक है - &Version: {} - &संस्करण: {} + Please paste your Bitcoin Transaction or PSBT in here, or drop a file + कृपया अपना बिटकॉइन लेन-देन या PSBT यहाँ पेस्ट करें, या एक फ़ाइल ड्रॉप करें - &Settings - &सेटिंग्स + Paste your Bitcoin Transaction or PSBT in here or drop a file + अपना बिटकॉइन लेन-देन या PSBT यहाँ पेस्ट करें या एक फ़ाइल ड्रॉप करें - KYC-Exchange - KYC-एक्सचेंज + Transaction {txid} + लेन-देन {txid} PSBT {txid} PSBT {txid} - From &QR Code - QR कोड से + Open Wallet + वॉलेट खोलें - Paste your Bitcoin Transaction or PSBT in here or drop a file - अपना बिटकॉइन लेन-देन या PSBT यहाँ पेस्ट करें या एक फ़ाइल ड्रॉप करें + Wallet Files (*.wallet) + वॉलेट फाइलें (*.wallet) - There is no such file: {file_path} - ऐसी कोई फ़ाइल नहीं है: {file_path} + Open &Recent + हाल का खोलें - Please enter the password for {filename}: - कृपया {filename} के लिए पासवर्ड दर्ज करें: + The wallet {file_path} is already open. + वॉलेट {file_path} पहले से खुला है। - Please paste your Bitcoin Transaction or PSBT in here, or drop a file - कृपया अपना बिटकॉइन लेन-देन या PSBT यहाँ पेस्ट करें, या एक फ़ाइल ड्रॉप करें + The wallet {file_path} is already open. Do you want to open the wallet anyway? + वॉलेट {file_path} पहले से खुला है। क्या आप वैसे भी वॉलेट खोलना चाहते हैं? - Please open the sender wallet to edit this thransaction. - कृपया इस लेन-देन को संपादित करने के लिए प्रेषक वॉलेट खोलें। + Wallet already open + वॉलेट पहले से खुला है - Please select the wallet first. - कृपया पहले वॉलेट चुनें। + There is no such file: {file_path} + ऐसी कोई फ़ाइल नहीं है: {file_path} - Please select the wallet - कृपया वॉलेट चुनें + Please enter the password for {filename}: + कृपया {filename} के लिए पासवर्ड दर्ज करें: - Please complete the wallet setup. - कृपया वॉलेट सेटअप पूरा करें। + Export labels + लेबल निर्यात करें - No wallet open. Please open the sender wallet to edit this thransaction. - कोई वॉलेट खुला नहीं है। कृपया इस लेन-देन को संपादित करने के लिए प्रेषक वॉलेट खोलें। + All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) + सभी फाइलें (*);;JSON फाइलें (*.jsonl);;JSON फाइलें (*.json) - Selected file: {file_path} - चयनित फ़ाइल: {file_path} + Import labels + लेबल आयात करें - From &text - टेक्स्ट से + All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) + सभी फ़ाइलें (*);;JSONL फ़ाइलें (*.jsonl);;JSON फ़ाइलें (*.json) - Closing tab {name} - टैब {name} बंद करना + Import Electrum Wallet labels + इलेक्ट्रम वॉलेट लेबल आयात करें - OK - ठीक है + &Save Current Wallet + &मौजूदा वॉलेट सहेजें - Re&fresh - ताज़ा करें + All Files (*);;JSON Files (*.json) + सभी फ़ाइलें (*);;JSON फ़ाइलें (*.json) new नया - - test - परीक्षण - - - From &file - फ़ाइल से - Friends मित्र - Transaction {txid} - लेन-देन {txid} - - - Open Transaction or PSBT - लेन-देन या PSBT खोलें - - - Open Transaction/PSBT - लेन-देन/PSBT खोलें - - - Export labels - लेबल निर्यात करें - - - The wallet {file_path} is already open. - वॉलेट {file_path} पहले से खुला है। - - - The wallet {file_path} is already open. Do you want to open the wallet anyway? - वॉलेट {file_path} पहले से खुला है। क्या आप वैसे भी वॉलेट खोलना चाहते हैं? - - - Closing wallet {id} - वॉलेट {id} बंद करना - - - Close wallet {id}? - वॉलेट {id} बंद करें? + KYC-Exchange + KYC-एक्सचेंज A wallet with id {name} is already open. वॉलेट के साथ id {name} पहले से खुला है। - Open Wallet - वॉलेट खोलें - - - Wallet already open - वॉलेट पहले से खुला है + Please complete the wallet setup. + कृपया वॉलेट सेटअप पूरा करें। - Wallet Files (*.wallet) - वॉलेट फाइलें (*.wallet) + Close wallet {id}? + वॉलेट {id} बंद करें? Close wallet वॉलेट बंद करें - All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) - सभी फाइलें (*);;JSON फाइलें (*.jsonl);;JSON फाइलें (*.json) - - - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - सभी फाइलें (*);;PSBT (*.psbt);;लेन-देन (*.tx) + Closing wallet {id} + वॉलेट {id} बंद करना - Open &Recent - हाल का खोलें + Closing tab {name} + टैब {name} बंद करना - All Files (*);;JSON Files (*.json) - सभी फ़ाइलें (*);;JSON फ़ाइलें (*.json) + &Change/Export + &परिवर्तन/निर्यात - All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) - सभी फ़ाइलें (*);;JSONL फ़ाइलें (*.jsonl);;JSON फ़ाइलें (*.json) + &Rename Wallet + &वॉलेट का नाम बदलें - Import Electrum Wallet labels - इलेक्ट्रम वॉलेट लेबल आयात करें + &Change Password + &पासवर्ड बदलें - Import labels - लेबल आयात करें + &Export for Coldcard + &कोल्डकार्ड के लिए निर्यात करें - Recipients + MempoolButtons - + Add Recipient - + प्राप्तकर्ता जोड़ें + Next Block + अगला ब्लॉक - Recipients - प्राप्तकर्ता + {n}. Block + {n} ब्लॉक MempoolProjectedBlock - - ~{n}. Block - ~{n} ब्लॉक - Unconfirmed अपुष्ट + + ~{n}. Block + ~{n} ब्लॉक + - LabelTimeEstimation + MyTreeView - ~in {t} hours - ~{t} घंटों में + Copy as csv + सीएसवी के रूप में कॉपी करें - ~in {t} min - ~{t} मिनट में + Copy + कॉपी - NewWalletWelcomeScreen + NetworkSettingsUI - 1 seed (24 secret words) is all you need to access your funds - 1 बीज (24 गुप्त शब्द) आपके फंड तक पहुंचने के लिए सब कुछ है + Manual + मैनुअल - 1 secure location to store the seed backup (on paper or steel) is needed - 1 सुरक्षित स्थान बीज बैकअप को स्टोर करने के लिए आवश्यक है (कागज या स्टील पर) + Port: + पोर्ट: - 1 signing devices - 1 हस्ताक्षर उपकरण + Mode: + मोड: - 2 of 3 Multi-Signature Wal - 2 में से 3 मल्टी-हस्ताक्षर वॉल + IP Address: + IP पता: - 3 secure locations (each with 1 seed backup + wallet descriptor are needed) - 3 सुरक्षित स्थान (प्रत्येक में 1 बीज बैकअप + वॉलेट वर्णनकर्ता आवश्यक हैं) - + Username: + उपयोगकर्ता नाम: + - 3 signing devices - 3 हस्ताक्षर उपकरण + Password: + पासवर्ड: - Customize the wallet to your needs - अपनी जरूरतों के अनुसार वॉलेट को अनुकूलित करें + Mempool Instance URL + मेमपूल इंस्टेंस URL - Choose Single Signature - एकल हस्ताक्षर चुनें + Responses: + {name}: {status} + Mempool Instance: {server} + प्रतिक्रियाएँ: {name}: {status} मेमपूल इंस्टेंस: {server} - Single Signature Wallet - एकल हस्ताक्षर वॉलेट + Automatic + स्वचालित - Custom or restore existing Wallet - कस्टम या मौजूदा वॉलेट पुनर्स्थापित करें + Apply && Restart + लागू करें && पुनः आरंभ करें - Create custom wallet - कस्टम वॉलेट बनाएं + Test Connection + कनेक्शन का परीक्षण करें - Create new wallet - नया वॉलेट बनाएं + Network Settings + नेटवर्क सेटिंग्स - Less support material online in case of recovery - पुनर्प्राप्ति के मामले में ऑनलाइन कम सहायता सामग्री + Blockchain data source + ब्लॉकचेन डेटा स्रोत - Best for large funds - बड़े फंडों के लिए सबसे अच्छा + Enable SSL + SSL सक्षम करें - Best for medium-sized funds - मध्यम आकार के फंडों के लिए सबसे अच्छा + URL: + URL: - Choose Multi-Signature - मल्टी-हस्ताक्षर चुनें + SSL: + SSL: + + + NewWalletWelcomeScreen - If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) - यदि 1 बीज खो गया या चोरी हो गया, तो सभी फंड नए वॉलेट में 2 शेष बीज + वॉलेट वर्णनकर्ता (QR-कोड) के साथ स्थानांतरित किए जा सकते हैं + Create new wallet + नया वॉलेट बनाएं - If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately - यदि आप हैकर्स को अपना बीज देने में धोखा खा जाते हैं, तो आपका बिटकॉइन तुरंत चोरी हो जाएगा + Choose Single Signature + एकल हस्ताक्षर चुनें - Pros: - लाभ: + 2 of 3 Multi-Signature Wal + 2 में से 3 मल्टी-हस्ताक्षर वॉल - The wallet descriptor (QR-code) is necessary to recover the wallet - वॉलेट की पुनर्प्राप्ति के लिए वॉलेट वर्णनकर्ता (QR-कोड) आवश्यक है + Best for large funds + बड़े फंडों के लिए सबसे अच्छा - Cons: - हानि: + If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) + यदि 1 बीज खो गया या चोरी हो गया, तो सभी फंड नए वॉलेट में 2 शेष बीज + वॉलेट वर्णनकर्ता (QR-कोड) के साथ स्थानांतरित किए जा सकते हैं - - - RegisterMultisig - 1. Export wallet descriptor - 1. वॉलेट वर्णनकर्ता निर्यात करें + 3 secure locations (each with 1 seed backup + wallet descriptor are needed) + 3 सुरक्षित स्थान (प्रत्येक में 1 बीज बैकअप + वॉलेट वर्णनकर्ता आवश्यक हैं) - Your balance {balance} is greater than a maximally allowed test amount of {amount}! -Please do the hardware signer reset only with a lower balance! (Send some funds out before) - आपका बैलेंस {balance} अधिकतम अनुमति वाली परीक्षण राशि {amount} से अधिक है! कृपया कम बैलेंस के साथ ही हार्डवेयर साइनर रीसेट करें! (पहले कुछ फंड भेजें) + The wallet descriptor (QR-code) is necessary to recover the wallet + वॉलेट की पुनर्प्राप्ति के लिए वॉलेट वर्णनकर्ता (QR-कोड) आवश्यक है - Export file to register the multisig on Coldcard - कोल्डकार्ड पर मल्टीसिग पंजीकृत करने के लिए फ़ाइल निर्यात करें + 3 signing devices + 3 हस्ताक्षर उपकरण - Previous Step - पिछला चरण + Choose Multi-Signature + मल्टी-हस्ताक्षर चुनें - 2. Import in each hardware signer - प्रत्येक हार्डवेयर साइनर में आयात करें + Custom or restore existing Wallet + कस्टम या मौजूदा वॉलेट पुनर्स्थापित करें - Yes, I registered the multisig on the {n} hardware signer - हाँ, मैंने {n} हार्डवेयर साइनर पर मल्टीसिग पंजीकृत किया है + Customize the wallet to your needs + अपनी जरूरतों के अनुसार वॉलेट को अनुकूलित करें - 2. Import in the hardware signer - हार्डवेयर साइनर में आयात करें + Single Signature Wallet + एकल हस्ताक्षर वॉलेट - - - ImportXpubs - 2. Import wallet information into Bitcoin Safe - २. बिटकॉइन सुरक्षित में वॉलेट जानकारी आयात करें + Less support material online in case of recovery + पुनर्प्राप्ति के मामले में ऑनलाइन कम सहायता सामग्री - Next step - अगला चरण + Create custom wallet + कस्टम वॉलेट बनाएं - Skip step - चरण छोड़ें + Best for medium-sized funds + मध्यम आकार के फंडों के लिए सबसे अच्छा - Previous Step - पिछला चरण + Pros: + लाभ: - - - SignatureImporterQR - bitcoin_tx libary error. The txid should not be changed during finalizing - bitcoin_tx पुस्तकालय त्रुटि। txid को अंतिम रूप देते समय बदला नहीं जाना चाहिए + 1 seed (24 secret words) is all you need to access your funds + 1 बीज (24 गुप्त शब्द) आपके फंड तक पहुंचने के लिए सब कुछ है - Scan QR code - QR कोड स्कैन करें + 1 secure location to store the seed backup (on paper or steel) is needed + 1 सुरक्षित स्थान बीज बैकअप को स्टोर करने के लिए आवश्यक है (कागज या स्टील पर) - The txid of the signed psbt doesnt match the original txid - हस्ताक्षरित psbt का txid मूल txid से मेल नहीं खाता + Cons: + हानि: + + + If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately + यदि आप हैकर्स को अपना बीज देने में धोखा खा जाते हैं, तो आपका बिटकॉइन तुरंत चोरी हो जाएगा + + + 1 signing devices + 1 हस्ताक्षर उपकरण - NetworkSettingsUI + NostrSync - IP Address: - IP पता: + Go to {untrusted} + {untrusted} पर जाएं - Enable SSL - SSL सक्षम करें + To complete the connection, accept my {id} request on the other device {other}. + कनेक्शन पूरा करने के लिए, दूसरे उपकरण {other} पर मेरे {id} अनुरोध को स्वीकार करें। + + + NotificationBarRegtest - SSL: - SSL: + Change Network + नेटवर्क बदलें - URL: - URL: + Network = {network}. The coins are worthless! + नेटवर्क = {network}. सिक्के बेकार हैं! + + + PasswordCreation - Username: - उपयोगकर्ता नाम: + Create Password + पासवर्ड बनाएं - Test Connection - कनेक्शन का परीक्षण करें + Enter your password: + अपना पासवर्ड दर्ज करें: - Network Settings - नेटवर्क सेटिंग्स + Show Password + पासवर्ड दिखाएं - Password: - पासवर्ड: + Re-enter your password: + अपना पासवर्ड फिर से दर्ज करें: - Port: - पोर्ट: + Submit + सबमिट करें - Responses: - {name}: {status} - Mempool Instance: {server} - प्रतिक्रियाएँ: {name}: {status} मेमपूल इंस्टेंस: {server} + Hide Password + पासवर्ड छुपाएं - Blockchain data source - ब्लॉकचेन डेटा स्रोत + Passwords do not match! + पासवर्ड मेल नहीं खाते! - Mempool Instance URL - मेमपूल इंस्टेंस URL + Error + त्रुटि + + + PasswordQuestion - Manual - मैनुअल + Password Input + पासवर्ड इनपुट - Mode: - मोड: + Please enter your password: + कृपया अपना पासवर्ड दर्ज करें: - Apply && Restart - लागू करें && पुनः आरंभ करें + Submit + सबमिट करें + + + QTProtoWallet - Automatic - स्वचालित + Setup wallet + वॉलेट सेटअप करें - utxo_list + QTWallet - Copy txid:out - txid:out कॉपी करें + Send + भेजें - Unconfirmed UTXO - अपुष्ट UTXO + Password incorrect + पासवर्ड गलत है - Unconfirmed UTXO is spent by transaction {is_spent_by_txid} - अपुष्ट UTXO लेन-देन {is_spent_by_txid} द्वारा खर्च किया गया है + Change password + पासवर्ड बदलें - View on block explorer - ब्लॉक एक्सप्लोरर पर देखें + New password: + नया पासवर्ड: - Open transaction - लेन-देन खोलें + Wallet saved + वॉलेट सहेजा गया - Copy as csv - सीएसवी के रूप में कॉपी करें + The transactions {txs} in wallet '{wallet}' were removed from the history!!! + वॉलेट '{wallet}' में लेनदेन {txs} को इतिहास से हटा दिया गया है!!! - - - SignatureImporterUSB - USB Signing - USB हस्ताक्षर + New transaction in wallet '{wallet}': +{txs} + वॉलेट '{wallet}' में नया लेनदेन: {txs} - Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. - कृपया 'वॉलेट --> निर्यात --> ... के लिए निर्यात करें' करें और हार्डवेयर साइनर पर मल्टीसिग्नेचर वॉलेट पंजीकृत करें। - - - - ReceiveTest - - Next step - अगला चरण - - - No wallet setup yet - अभी तक कोई वॉलेट सेटअप नहीं - - - Receive a small amount {test_amount} to an address of this wallet - इस वॉलेट के पते पर एक छोटी राशि {test_amount} प्राप्त करें + New transactions in wallet '{wallet}': +{txs} + वॉलेट '{wallet}' में नए लेनदेन: {txs} - Previous Step - पिछला चरण + Click for new address + नया पता के लिए क्लिक करें - Received {amount} - प्राप्त {amount} + Descriptor + वर्णनकर्ता - Check if received - प्राप्ति की जांच करें + Sync + सिंक - - - UITx_Viewer - Next step - अगला चरण + History + इतिहास - Invalid Signatures - अमान्य हस्ताक्षर + Receive + प्राप्त करें - Inputs - इनपुट्स + No changes to apply. + कोई परिवर्तन लागू करने के लिए नहीं। - Previous step - पिछला चरण + Backup saved to {filename} + बैकअप {filename} में सहेजा गया - Recipients - प्राप्तकर्ता + Backup failed. Aborting Changes. + बैकअप विफल। परिवर्तन रद्द करना। - Edit with increased fee (RBF) - बढ़ी हुई फीस के साथ संपादित करें (RBF) + Cannot move the wallet file, because {file_path} exists + वॉलेट फ़ाइल को स्थानांतरित नहीं किया जा सकता, क्योंकि {file_path} मौजूद है + + + ReceiveTest - Send - भेजें + Received {amount} + प्राप्त {amount} - Edit - संपादित करें + No wallet setup yet + अभी तक कोई वॉलेट सेटअप नहीं - The txid of the signed psbt doesnt match the original txid - हस्ताक्षरित psbt का txid मूल txid से मेल नहीं खाता + Receive a small amount {test_amount} to an address of this wallet + इस वॉलेट के पते पर एक छोटी राशि {test_amount} प्राप्त करें - - - basetab Next step अगला चरण - Previous Step - पिछला चरण + Check if received + प्राप्ति की जांच करें - - - BTCSpinBox - Max ≈ {amount} - अधिकतम ≈ {amount} + Previous Step + पिछला चरण RecipientGroupBox - - Send max - अधिकतम भेजें - Address पता - Enter address here - पता यहाँ दर्ज करें - - - Enter label for recipient address - प्राप्तकर्ता पते के लिए लेबल दर्ज करें + Label + लेबल Amount राशि - - Label - लेबल - Enter label here लेबल यहाँ दर्ज करें - Wallet "{id}" - वॉलेट "{id}" - - - - AddressList - - Index - अनुक्रमणिका - - - Tx - टीएक्स - - - Address - पता + Send max + अधिकतम भेजें - Address {address} - पता {address} + Enter address here + पता यहाँ दर्ज करें - change - परिवर्तन + Enter label for recipient address + प्राप्तकर्ता पते के लिए लेबल दर्ज करें - change address - परिवर्तन पता + Wallet "{id}" + वॉलेट "{id}" + + + Recipients - Type - प्रकार + Recipients + प्राप्तकर्ता - receiving - प्राप्ति + + Add Recipient + + प्राप्तकर्ता जोड़ें + + + RegisterMultisig - receiving address - प्राप्ति पता + Export file to register the multisig on Coldcard + कोल्डकार्ड पर मल्टीसिग पंजीकृत करने के लिए फ़ाइल निर्यात करें - Fiat Balance - फिएट बैलेंस + Your balance {balance} is greater than a maximally allowed test amount of {amount}! +Please do the hardware signer reset only with a lower balance! (Send some funds out before) + आपका बैलेंस {balance} अधिकतम अनुमति वाली परीक्षण राशि {amount} से अधिक है! कृपया कम बैलेंस के साथ ही हार्डवेयर साइनर रीसेट करें! (पहले कुछ फंड भेजें) - Balance - बैलेंस + 1. Export wallet descriptor + 1. वॉलेट वर्णनकर्ता निर्यात करें - View on block explorer - ब्लॉक एक्सप्लोरर पर देखें + Yes, I registered the multisig on the {n} hardware signer + हाँ, मैंने {n} हार्डवेयर साइनर पर मल्टीसिग पंजीकृत किया है - Label - लेबल + Previous Step + पिछला चरण - Export Labels - लेबल निर्यात करें + 2. Import in each hardware signer + प्रत्येक हार्डवेयर साइनर में आयात करें - Details - विवरण + 2. Import in the hardware signer + हार्डवेयर साइनर में आयात करें + + + ScreenshotsExportXpub - Category - श्रेणी + 1. Export the wallet information from the hardware signer + हार्डवेयर साइनर से वॉलेट जानकारी निर्यात करें + + + ScreenshotsGenerateSeed - Copy as csv - सीएसवी के रूप में कॉपी करें + Generate 24 secret seed words on each hardware signer + प्रत्येक हार्डवेयर साइनर पर 24 गुप्त बीज शब्द उत्पन्न करें - UpdateNotificationBar + ScreenshotsRegisterMultisig - Check for Update - अपडेट के लिए जाँचें + Import the multisig information in the hardware signer + हार्डवेयर साइनर में मल्टीसिग जानकारी आयात करें + + + ScreenshotsResetSigner - You have already the newest version. - आपके पास पहले से नवीनतम संस्करण है। + Reset the hardware signer. + हार्डवेयर साइनर रीसेट करें। + + + ScreenshotsRestoreSigner - Please install GPG via "brew install gnupg" to automatically verify the signature of the update. - कृपया "brew install gnupg" के माध्यम से GPG स्थापित करें ताकि अपडेट के हस्ताक्षर को स्वचालित रूप से सत्यापित किया जा सके। + Restore the hardware signer. + हार्डवेयर साइनर पुनर्स्थापित करें। + + + ScreenshotsViewSeed - Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. - कृपया "sudo apt-get -y install gpg" के माध्यम से GPG स्थापित करें ताकि अपडेट के हस्ताक्षर को स्वचालित रूप से सत्यापित किया जा सके। + Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. +If you make a mistake here, your money is lost! + बैकअप पेपर पर 24 शब्दों की तुलना 'व्यू सीड वर्ड्स' से कोल्डकार्ड से करें। यदि आप यहाँ गलती करते हैं, तो आपका पैसा खो जाएगा! + + + SendTest - Please install {link} to automatically verify the signature of the update. - कृपया {link} स्थापित करें ताकि अपडेट के हस्ताक्षर को स्वचालित रूप से सत्यापित किया जा सके। + You made {n} outgoing transactions already. Would you like to skip this spend test? + आपने पहले ही {n} बाहरी लेन-देन किए हैं। क्या आप इस खर्च परीक्षण को छोड़ना चाहेंगे? - No update found - कोई अपडेट नहीं मिला + Skip spend test? + खर्च परीक्षण छोड़ें? - New version available {tag} - नया संस्करण उपलब्ध {tag} + Complete the send test to ensure the hardware signer works! + हार्डवेयर साइनर काम कर रहा है, इसे सुनिश्चित करने के लिए भेज परीक्षण पूरा करें! SignatureImporterClipboard - Paste your PSBT in here or drop a file - अपना PSBT यहाँ पेस्ट करें या एक फ़ाइल ड्रॉप करें - - - Please paste your PSBT in here, or drop a file - कृपया अपना PSBT यहाँ पेस्ट करें, या एक फ़ाइल ड्रॉप करें + Import signed PSBT + हस्ताक्षरित PSBT आयात करें OK ठीक है - Import signed PSBT - हस्ताक्षरित PSBT आयात करें + Please paste your PSBT in here, or drop a file + कृपया अपना PSBT यहाँ पेस्ट करें, या एक फ़ाइल ड्रॉप करें + + + Paste your PSBT in here or drop a file + अपना PSBT यहाँ पेस्ट करें या एक फ़ाइल ड्रॉप करें SignatureImporterFile - Paste your PSBT in here or drop a file - अपना PSBT यहाँ पेस्ट करें या एक फ़ाइल ड्रॉप करें + OK + ठीक है Please paste your PSBT in here, or drop a file कृपया अपना PSBT यहाँ पेस्ट करें, या एक फ़ाइल ड्रॉप करें - OK - ठीक है + Paste your PSBT in here or drop a file + अपना PSBT यहाँ पेस्ट करें या एक फ़ाइल ड्रॉप करें - PasswordCreation - - Enter your password: - अपना पासवर्ड दर्ज करें: - - - Re-enter your password: - अपना पासवर्ड फिर से दर्ज करें: - - - Error - त्रुटि - + SignatureImporterQR - Hide Password - पासवर्ड छुपाएं + Scan QR code + QR कोड स्कैन करें - Show Password - पासवर्ड दिखाएं + The txid of the signed psbt doesnt match the original txid + हस्ताक्षरित psbt का txid मूल txid से मेल नहीं खाता - Create Password - पासवर्ड बनाएं + bitcoin_tx libary error. The txid should not be changed during finalizing + bitcoin_tx पुस्तकालय त्रुटि। txid को अंतिम रूप देते समय बदला नहीं जाना चाहिए + + + SignatureImporterUSB - Passwords do not match! - पासवर्ड मेल नहीं खाते! + USB Signing + USB हस्ताक्षर - Submit - सबमिट करें + Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. + कृपया 'वॉलेट --> निर्यात --> ... के लिए निर्यात करें' करें और हार्डवेयर साइनर पर मल्टीसिग्नेचर वॉलेट पंजीकृत करें। - ChatGui - - Type your message here... - अपना संदेश यहाँ टाइप करें... - + SignatureImporterWallet - Open Transaction/PSBT - ट्रांजैक्शन/पीएसबीटी खोलें + The txid of the signed psbt doesnt match the original txid. Aborting + हस्ताक्षरित psbt का txid मूल Transaction Identifier से मेल नहीं खाता। रद्द करना + + + SyncTab - Share a PSBT - पीएसबीटी साझा करें + Encrypted syncing to trusted devices + विश्वसनीय उपकरणों के साथ एन्क्रिप्टेड सिंकिंग - Send - भेजें + Open received Transactions and PSBTs automatically in a new tab + नई टैब में स्वचालित रूप से प्राप्त लेन-देन और PSBTs खोलें - Me: {text} - मैं: {text} + Opening {name} from {author} + {author} से {name} खोलना - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - सभी फाइलें ();;पीएसबीटी (.psbt);;ट्रांजेक्शन (*.tx) + Received message '{description}' from {author} + {author} से प्राप्त संदेश '{description}' - Balance + TrustedDevice - Unconfirmed - अपुष्ट + Device id: {id} + डिवाइस आईडी: {id} - Unmatured - परिपक्व नहीं + Syncing Address labels + पता लेबल सिंक करना - Confirmed - पुष्ट + Can share Transactions + लेन-देन साझा कर सकते हैं - wallet + TxSigningSteps - Unconfirmed - अपुष्ट + Export transaction to any hardware signer + किसी भी हार्डवेयर साइनर के साथ लेन-देन निर्यात करें - Unconfirmed parent - अपुष्ट माता-पिता + Sign with a different hardware signer + विभिन्न हार्डवेयर साइनर के साथ हस्ताक्षर करें - Confirmed - पुष्ट + Import signature + हस्ताक्षर आयात करें - Local - स्थानीय + Transaction signed with the private key belonging to {label} + {label} के निजी कुंजी के साथ हस्ताक्षरित लेन-देन - address_list - - Unused - अप्रयुक्त - - - Change - परिवर्तन - + UITx_Creator - Used - प्रयुक्त + Select a category that fits the recipient best + प्राप्तकर्ता के लिए सबसे उपयुक्त श्रेणी चुनें - Receiving - प्राप्ति + Add Inputs + इनपुट्स जोड़ें - Funded - फंडेड + Load UTXOs + UTXOs लोड करें - Funded or Unused - फंडेड या अप्रयुक्त + Please paste UTXO here in the format txid:outpoint +txid:outpoint + कृपया UTXO यहाँ पेस्ट करें, प्रारूप में txid:outpoint txid:outpoint - All types - सभी प्रकार + Please paste UTXO here + कृपया UTXO यहाँ पेस्ट करें - All status - सभी स्थिति + The inputs {inputs} conflict with these confirmed txids {txids}. + इनपुट्स {inputs} इन पुष्ट txids {txids} के साथ संघर्ष करते हैं। - - - hist_list - Unused - अप्रयुक्त + The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. + यह नया लेन-देन जो आप बना रहे हैं, इन अपुष्ट निर्भर लेन-देनों {txids} को हटा देगा। - Edit with higher fee (RBF) - उच्च फीस के साथ संपादित करें (RBF) + Reduce future fees +by merging address balances + पते के बैलेंस को मर्ज करके भविष्य के शुल्क कम करें - Change - परिवर्तन + Send Category + भेजने की श्रेणी - Used - प्रयुक्त + Advanced + उन्नत - Receiving - प्राप्ति + Add foreign UTXOs + विदेशी UTXOs जोड़ें - Funded - फंडेड + This checkbox automatically checks +below {rate} + यह चेकबॉक्स स्वचालित रूप से {rate} के नीचे जांचता है - Funded or Unused - फंडेड या अप्रयुक्त + Please select an input category on the left, that fits the transaction recipients. + कृपया बाएं तरफ एक इनपुट श्रेणी चुनें, जो लेन-देन प्राप्तकर्ताओं के अनुरूप हो। - Export binary transactions - बाइनरी लेन-देन निर्यात करें + {num_inputs} Inputs: {inputs} + {num_inputs} इनपुट: {inputs} - View on block explorer - ब्लॉक एक्सप्लोरर पर देखें + Adding outpoints {outpoints} + आउटपॉइंट्स {outpoints} जोड़ना + + + UITx_Viewer - Try cancel transaction (RBF) - लेन-देन रद्द करने का प्रयास करें (RBF) + Inputs + इनपुट्स - Details - विवरण + Recipients + प्राप्तकर्ता - All types - सभी प्रकार + Edit + संपादित करें - All status - सभी स्थिति + Edit with increased fee (RBF) + बढ़ी हुई फीस के साथ संपादित करें (RBF) - Copy as csv - सीएसवी के रूप में कॉपी करें + Previous step + पिछला चरण - - - ConnectedDevices - UnTrusted - अविश्वसनीय + Next step + अगला चरण - Reset identity for this device - इस डिवाइस के लिए पहचान रीसेट करें + Send + भेजें - My id: {id} - मेरी आईडी: {id} + Invalid Signatures + अमान्य हस्ताक्षर - Trusted - विश्वसनीय + The txid of the signed psbt doesnt match the original txid + हस्ताक्षरित psbt का txid मूल txid से मेल नहीं खाता UTXOList + + Wallet + वॉलेट + Outpoint आउटपॉइंट @@ -1715,561 +1649,668 @@ Please do the hardware signer reset only with a lower balance! (Send some fund पता - Parents - माता-पिता - - - Amount - राशि + Category + श्रेणी Label लेबल - Wallet - वॉलेट + Amount + राशि - Category - श्रेणी + Parents + माता-पिता - lib_load + UnTrustedDevice - You are missing the {link} -Please install it. - आपके पास {link} नहीं है। कृपया इसे स्थापित करें। + Trust {id} + {id} पर भरोसा करें + + + Accept trust request from {other} + {other} से भरोसा अनुरोध स्वीकार करें - SendTest + UpdateNotificationBar - You made {n} outgoing transactions already. Would you like to skip this spend test? - आपने पहले ही {n} बाहरी लेन-देन किए हैं। क्या आप इस खर्च परीक्षण को छोड़ना चाहेंगे? + Check for Update + अपडेट के लिए जाँचें - Skip spend test? - खर्च परीक्षण छोड़ें? + Signature verified. + हस्ताक्षर सत्यापित हुआ। - Complete the send test to ensure the hardware signer works! - हार्डवेयर साइनर काम कर रहा है, इसे सुनिश्चित करने के लिए भेज परीक्षण पूरा करें! - - - - DescriptorUI - - Required Signers - आवश्यक साइनर्स - - - Paste or scan your descriptor, if you restore a wallet. - यदि आप एक वॉलेट पुनर्स्थापित करते हैं तो अपना वर्णनकर्ता पेस्ट या स्कैन करें। + New version available {tag} + नया संस्करण उपलब्ध {tag} - This "descriptor" contains all information to reconstruct the wallet. -Please back up this descriptor to be able to recover the funds! - यह "वर्णनकर्ता" वॉलेट को पुनर्निर्माण करने के लिए सभी जानकारी रखता है। कृपया धन की पुनर्प्राप्ति के लिए इस वर्णनकर्ता का बैकअप लें! + You have already the newest version. + आपके पास पहले से नवीनतम संस्करण है। - Scan Address Limit - स्कैन पता सीमा + No update found + कोई अपडेट नहीं मिला - - - QTWallet - History - इतिहास + Could not verify the download. Please try again later. + डाउनलोड सत्यापित नहीं हो सका। कृपया बाद में पुनः प्रयास करें। - No changes to apply. - कोई परिवर्तन लागू करने के लिए नहीं। + Please install {link} to automatically verify the signature of the update. + कृपया {link} स्थापित करें ताकि अपडेट के हस्ताक्षर को स्वचालित रूप से सत्यापित किया जा सके। - Click for new address - नया पता के लिए क्लिक करें + Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. + कृपया "sudo apt-get -y install gpg" के माध्यम से GPG स्थापित करें ताकि अपडेट के हस्ताक्षर को स्वचालित रूप से सत्यापित किया जा सके। - New password: - नया पासवर्ड: + Please install GPG via "brew install gnupg" to automatically verify the signature of the update. + कृपया "brew install gnupg" के माध्यम से GPG स्थापित करें ताकि अपडेट के हस्ताक्षर को स्वचालित रूप से सत्यापित किया जा सके। - Password incorrect - पासवर्ड गलत है + Signature doesn't match!!! Please try again. + हस्ताक्षर मेल नहीं खाता!!! कृपया पुनः प्रयास करें। + + + UtxoListWithToolbar - Change password - पासवर्ड बदलें + {amount} selected + {amount} चयनित + + + ValidateBackup - Receive - प्राप्त करें + Yes, I am sure all 24 words are correct + हाँ, मैं सुनिश्चित हूँ कि सभी 24 शब्द सही हैं - Backup saved to {filename} - बैकअप {filename} में सहेजा गया + Previous Step + पिछला चरण + + + WalletBalanceChart - Backup failed. Aborting Changes. - बैकअप विफल। परिवर्तन रद्द करना। + Balance ({unit}) + बैलेंस ({unit}) - Send - भेजें + Date + तारीख + + + WalletIdDialog - Descriptor - वर्णनकर्ता + Choose wallet name + वॉलेट का नाम चुनें - Cannot move the wallet file, because {file_path} exists - वॉलेट फ़ाइल को स्थानांतरित नहीं किया जा सकता, क्योंकि {file_path} मौजूद है + Wallet name: + वॉलेट का नाम: - Wallet saved - वॉलेट सहेजा गया + Error + त्रुटि - Sync - सिंक + A wallet with the same name already exists. + इसी नाम का वॉलेट पहले से मौजूद है। - WalletIdDialog + WalletSteps - A wallet with the same name already exists. - इसी नाम का वॉलेट पहले से मौजूद है। + You must have an initilized wallet first + पहले आपके पास एक प्रारंभिक वॉलेट होना चाहिए - Error - त्रुटि + Validate Backup + बैकअप मान्य करें - Choose wallet name - वॉलेट का नाम चुनें + Receive Test + प्राप्त परीक्षण - Wallet name: - वॉलेट का नाम: + Put in secure locations + सुरक्षित स्थानों में रखें - - - AddressDialog - Advanced - उन्नत + Register multisig on signers + साइनर्स पर मल्टीसिग पंजीकृत करें - Address - पता + Send test {j} + परीक्षण {j} भेजें - Address descriptor - पता वर्णनकर्ता + Send test + परीक्षण भेजें - Change address of wallet '{wallet_id}' (with index {index}) - बटुए '{wallet_id}' का परिवर्तन पता (अनुक्रमणिका {index} के साथ) + and + और - Receiving address of wallet '{wallet_id}' (with index {index}) - बटुए '{wallet_id}' का प्राप्ति पता (अनुक्रमणिका {index} के साथ) + Send Test + परीक्षण भेजें - Details - विवरण + Sign with {label} + {label} के साथ हस्ताक्षर करें - Script Pubkey - स्क्रिप्ट पबकी + The wallet is not funded. Please fund the wallet. + वॉलेट फंडेड नहीं है। कृपया वॉलेट को फंड करें। - - - tutorial - Never share the 24 secret words with anyone! - कभी भी 24 गुप्त शब्द किसी के साथ साझा न करें! + Turn on hardware signer + हार्डवेयर साइनर चालू करें - Never make a picture of them! - कभी भी उनकी तस्वीर न बनाएं! + Generate Seed + बीज उत्पन्न करें - Never type them into any computer or cellphone! - कभी भी उन्हें किसी कंप्यूटर या सेलफोन में टाइप न करें! + Import signer info + साइनर जानकारी आयात करें - - - PasswordQuestion - Please enter your password: - कृपया अपना पासवर्ड दर्ज करें: + Backup Seed + बीज बैकअप + + + address_list - Password Input - पासवर्ड इनपुट + All status + सभी स्थिति - Submit - सबमिट करें + Unused + अप्रयुक्त - - - BackupSeed - Please complete the previous steps. - कृपया पिछले चरणों को पूरा करें। + Funded + फंडेड - Previous Step - पिछला चरण + Used + प्रयुक्त - Print the pdf (it also contains the wallet descriptor) - पीडीएफ प्रिंट करें (इसमें वॉलेट वर्णनकर्ता भी शामिल है) + Funded or Unused + फंडेड या अप्रयुक्त - Write the 24-word seed onto the printed pdf. - प्रिंट किए गए पीडीएफ पर 24-शब्द बीज लिखें। + All types + सभी प्रकार - Write each 24-word seed onto the printed pdf. - प्रिंट किए गए पीडीएफ पर प्रत्येक 24-शब्द बीज को लिखें। + Receiving + प्राप्ति - Print recovery sheet - रिकवरी शीट प्रिंट करें + Change + परिवर्तन - BlockingWaitingDialog + basetab - Please wait - कृपया प्रतीक्षा करें + Next step + अगला चरण + + + Previous Step + पिछला चरण - MyTreeView + d - Copy - कॉपी + Signer {i} + साइनर {i} - Copy as csv - सीएसवी के रूप में कॉपी करें + Open Transaction/PSBT + लेन-देन/PSBT खोलें - - - BitcoinQuickReceive - Quick Receive - क्विक रिसीव + Recovery Signer {i} + रिकवरी साइनर {i} - Receive Address - रिसीव पता + Text copied to Clipboard + क्लिपबोर्ड में टेक्स्ट कॉपी किया गया - - - mytreeview - Type to search... - खोजने के लिए टाइप करें... + {} copied to Clipboard + {} क्लिपबोर्ड में कॉपी किया गया - Type to filter - फ़िल्टर करने के लिए टाइप करें + Read QR code from camera + कैमरा से QR कोड पढ़ें - Export as CSV - सीएसवी के रूप में निर्यात करें + Copy to clipboard + क्लिपबोर्ड में कॉपी करें - - - AddressListWithToolbar - Generate to selected adddresses - चयनित पतों के लिए उत्पन्न करें + Create PDF + PDF बनाएं - Show Filter - फ़िल्टर दिखाएँ + Create random mnemonic + रैंडम म्नेमोनिक बनाएं - Export Labels - लेबल निर्यात करें + Open file + फाइल खोलें - TrustedDevice + descriptor - Device id: {id} - डिवाइस आईडी: {id} + Wallet Type + वॉलेट प्रकार - Syncing Address labels - पता लेबल सिंक करना + Address Type + पता प्रकार - Can share Transactions - लेन-देन साझा कर सकते हैं + Wallet Descriptor + वॉलेट वर्णनकर्ता - BalanceChart + hist_list - Date - तारीख + All status + सभी स्थिति - - - WalletBalanceChart - Date - तारीख + View on block explorer + ब्लॉक एक्सप्लोरर पर देखें - Balance ({unit}) - बैलेंस ({unit}) + Copy as csv + सीएसवी के रूप में कॉपी करें - - - NotificationBarRegtest - Network = {network}. The coins are worthless! - नेटवर्क = {network}. सिक्के बेकार हैं! + Export binary transactions + बाइनरी लेन-देन निर्यात करें - Change Network - नेटवर्क बदलें + Edit with higher fee (RBF) + उच्च फीस के साथ संपादित करें (RBF) - - - recipients - Address Already Used - पता पहले से इस्तेमाल किया गया है + Try cancel transaction (RBF) + लेन-देन रद्द करने का प्रयास करें (RBF) - - - descriptor - Address Type - पता प्रकार + Unused + अप्रयुक्त - Wallet Type - वॉलेट प्रकार + Funded + फंडेड - Wallet Descriptor - वॉलेट वर्णनकर्ता + Used + प्रयुक्त + + + Funded or Unused + फंडेड या अप्रयुक्त + + + All types + सभी प्रकार + + + Receiving + प्राप्ति + + + Change + परिवर्तन + + + Details + विवरण - FloatingButtonBar + lib_load - Previous Step - पिछला चरण + You are missing the {link} +Please install it. + आपके पास {link} नहीं है। कृपया इसे स्थापित करें। + + + menu - Fill the transaction fields - लेन-देन क्षेत्रों को भरें + Import Labels + लेबल आयात करें - Create Transaction - लेन-देन बनाएं + Import Labels (BIP329 / Sparrow) + लेबल आयात करें (BIP329 / स्पैरो) - Yes, I see the transaction in the history - हाँ, मैंने इतिहास में लेन-देन देखा है + Import Labels (Electrum Wallet) + इलेक्ट्रम वॉलेट के लिए लेबल आयात करें - ValidateBackup + mytreeview - Previous Step - पिछला चरण + Type to search... + खोजने के लिए टाइप करें... - Yes, I am sure all 24 words are correct - हाँ, मैं सुनिश्चित हूँ कि सभी 24 शब्द सही हैं + Type to filter + फ़िल्टर करने के लिए टाइप करें + + + Export as CSV + सीएसवी के रूप में निर्यात करें - DistributeSeeds + net_conf - Place each seed backup and hardware signer in a secure location, such: - प्रत्येक बीज बैकअप और हार्डवेयर साइनर को सुरक्षित स्थान पर रखें, जैसे: + This is a private and fast way to connect to the bitcoin network. + यह बिटकॉइन नेटवर्क से जुड़ने का एक निजी और तेज़ तरीका है। - The seed backup (24 words) give total control over the funds. - बीज बैकअप (24 शब्द) धन पर पूर्ण नियंत्रण देता है। + Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. + "bitcoind -chain=signet" के साथ अपना bitcoind चलाएं यह हालांकि mutinynet.com के अलग signet है। - Seed backup {j} and hardware signer {j} should be in location {j} - बीज बैकअप {j} और हार्डवेयर साइनर {j} को स्थान {j} में होना चाहिए + The server can associate your IP address with the wallet addresses. +It is best to use your own server, such as {link}. + सर्वर आपके IP पते को वॉलेट पतों के साथ जोड़ सकता है। अपना खुद का सर्वर उपयोग करना सबसे अच्छा है, जैसे कि {link}। - Store the seed backup in a <b>very</b> secure location (like a vault). - बीज बैकअप को बहुत सुरक्षित स्थान पर रखें (जैसे कि तिजोरी में)। + You can setup {link} with an electrum server on {server} and a block explorer on {explorer} + आप {link} के साथ एक इलेक्ट्रम सर्वर पर {server} और एक ब्लॉक एक्सप्लोरर पर {explorer} के साथ सेटअप कर सकते हैं - Finish - समाप्त + A good option is {link} and a block explorer on {explorer}. + एक अच्छा विकल्प है {link} और एक ब्लॉक एक्सप्लोरर पर {explorer}। - Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. - सुरक्षित स्थानों का चयन सावधानी से करें, यह मानते हुए कि आपको अपने मल्टीसिग-वॉलेट से खर्च करने के लिए {m} में से {n} में जाना होगा। + A good option is {link} and a block explorer on {explorer}. There is a {faucet}. + एक अच्छा विकल्प है {link} और एक ब्लॉक एक्सप्लोरर पर {explorer}। वहाँ एक {faucet} है। - Store the hardware signer in secure location. - हार्डवेयर साइनर को सुरक्षित स्थान पर रखें। + You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} + आप {setup} के साथ एक esplora सर्वर पर {server} और एक ब्लॉक एक्सप्लोरर पर {explorer} के साथ सेटअप कर सकते हैं + + + You can connect your own Bitcoin node, such as {link}. + आप अपना खुद का बिटकॉइन नोड, जैसे कि {link}, कनेक्ट कर सकते हैं। + + + Run your bitcoind with "bitcoind -chain=regtest" + "bitcoind -chain=regtest" के साथ अपना bitcoind चलाएं + + + Run your bitcoind with "bitcoind -chain=test" + "bitcoind -chain=test" के साथ अपना bitcoind चलाएं - ScreenshotsGenerateSeed + recipients - Generate 24 secret seed words on each hardware signer - प्रत्येक हार्डवेयर साइनर पर 24 गुप्त बीज शब्द उत्पन्न करें + Address Already Used + पता पहले से इस्तेमाल किया गया है - CloseButton + tageditor - Close - बंद करें + Delete {name} + {name} हटाएं + + + Add new {name} + नया {name} जोड़ें + + + This {name} exists already. + यह {name} पहले से मौजूद है। - ScreenshotsViewSeed + tutorial - Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. -If you make a mistake here, your money is lost! - बैकअप पेपर पर 24 शब्दों की तुलना 'व्यू सीड वर्ड्स' से कोल्डकार्ड से करें। यदि आप यहाँ गलती करते हैं, तो आपका पैसा खो जाएगा! + Never share the 24 secret words with anyone! + कभी भी 24 गुप्त शब्द किसी के साथ साझा न करें! + + + Never type them into any computer or cellphone! + कभी भी उन्हें किसी कंप्यूटर या सेलफोन में टाइप न करें! + + + Never make a picture of them! + कभी भी उनकी तस्वीर न बनाएं! - HistList + util - Balance - बैलेंस + Unconfirmed + अपुष्ट - Amount - राशि + Failed to export to file. + फ़ाइल में निर्यात करने में विफल। - Txid - लेन-देन पहचानकर्ता + Balance: {amount} + बैलेंस: {amount} - Label - लेबल + Unknown + अज्ञात - Wallet - वॉलेट + {} seconds ago + {} सेकंड पहले - Cannot fetch wallet '{id}'. Please open the wallet first. - वॉलेट '{id}' नहीं खोल सकता। कृपया पहले वॉलेट खोलें। + in {} seconds + {} सेकंड में - Category - श्रेणी + less than a minute ago + एक मिनट से कम समय पहले - Status - स्थिति + in less than a minute + एक मिनट से कम समय में - - - ConfirmedBlock - Block {n} - ब्लॉक {n} + about {} minutes ago + लगभग {} मिनट पहले - - - menu - Import Labels - लेबल आयात करें + in about {} minutes + लगभग {} मिनट में - Import Labels (BIP329 / Sparrow) - लेबल आयात करें (BIP329 / स्पैरो) + about 1 hour ago + लगभग 1 घंटे पहले - Import Labels (Electrum Wallet) - इलेक्ट्रम वॉलेट के लिए लेबल आयात करें + Unconfirmed parent + अपुष्ट माता-पिता - - - QTProtoWallet - Setup wallet - वॉलेट सेटअप करें + in about 1 hour + लगभग 1 घंटे में - - - DescriptorEdit - Wallet setup not finished. Please finish before creating a Backup pdf. - वॉलेट सेटअप पूरा नहीं हुआ है। कृपया बैकअप पीडीएफ बनाने से पहले इसे पूरा करें। + about {} hours ago + लगभग {} घंटे पहले - - - CategoryEditor - category - श्रेणी + in about {} hours + लगभग {} घंटे में - - - SignatureImporterWallet - The txid of the signed psbt doesnt match the original txid. Aborting - हस्ताक्षरित psbt का txid मूल Transaction Identifier से मेल नहीं खाता। रद्द करना + about 1 day ago + लगभग 1 दिन पहले - - - ScreenshotsRestoreSigner - Restore the hardware signer. - हार्डवेयर साइनर पुनर्स्थापित करें। + in about 1 day + लगभग 1 दिन में - - - ScreenshotsRegisterMultisig - Import the multisig information in the hardware signer - हार्डवेयर साइनर में मल्टीसिग जानकारी आयात करें + about {} days ago + लगभग {} दिन पहले - - - ScreenshotsResetSigner - Reset the hardware signer. - हार्डवेयर साइनर रीसेट करें। + in about {} days + लगभग {} दिन में + + + about 1 month ago + लगभग 1 महीने पहले + + + in about 1 month + लगभग 1 महीने में + + + about {} months ago + लगभग {} महीने पहले + + + Not Verified + सत्यापित नहीं + + + in about {} months + लगभग {} महीने में + + + about 1 year ago + लगभग 1 साल पहले + + + in about 1 year + लगभग 1 साल में + + + over {} years ago + {} साल से अधिक पहले + + + in over {} years + {} साल से अधिक में + + + Cannot bump fee + शुल्क बढ़ाना संभव नहीं + + + Cannot cancel transaction + लेन-देन रद्द करना संभव नहीं + + + Cannot create child transaction + बच्चा लेन-देन बनाना संभव नहीं + + + Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files + वॉलेट फ़ाइल का भ्रष्टाचार पता चला। कृपया अपने वॉलेट को बीज से पुनर्स्थापित करें, और दोनों फ़ाइलों में पते की तुलना करें + + + Local + स्थानीय + + + Insufficient funds + अपर्याप्त फंड + + + Dynamic fee estimates not available + गतिशील शुल्क अनुमान उपलब्ध नहीं + + + Incorrect password + गलत पासवर्ड + + + Transaction is unrelated to this wallet. + लेन-देन इस वॉलेट से संबंधित नहीं है। + + + Failed to import from file. + फ़ाइल से आयात करने में विफल। - ScreenshotsExportXpub + utxo_list - 1. Export the wallet information from the hardware signer - हार्डवेयर साइनर से वॉलेट जानकारी निर्यात करें + Unconfirmed UTXO is spent by transaction {is_spent_by_txid} + अपुष्ट UTXO लेन-देन {is_spent_by_txid} द्वारा खर्च किया गया है + + + Unconfirmed UTXO + अपुष्ट UTXO + + + Open transaction + लेन-देन खोलें + + + View on block explorer + ब्लॉक एक्सप्लोरर पर देखें + + + Copy txid:out + txid:out कॉपी करें + + + Copy as csv + सीएसवी के रूप में कॉपी करें - UtxoListWithToolbar + wallet - {amount} selected - {amount} चयनित + Confirmed + पुष्ट + + + Unconfirmed + अपुष्ट + + + Unconfirmed parent + अपुष्ट माता-पिता + + + Local + स्थानीय diff --git a/bitcoin_safe/gui/locales/app_ja_JP.qm b/bitcoin_safe/gui/locales/app_ja_JP.qm index 456bfc3516e3200909a7cb0f572d2c3ec7456217..f7cea76d1ad942ef359f65bbefc9544aa0431b72 100644 GIT binary patch delta 5117 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 - WalletSteps - - and - そして - - - Send test {j} - {j}の送金 - + AddressDialog - Sign with {label} - {label}で署名 + Address + アドレス - The wallet is not funded. Please fund the wallet. - ウォレットに資金がありません。ウォレットに資金を供給してください。 + Receiving address of wallet '{wallet_id}' (with index {index}) + 受信用ウォレットアドレス '{wallet_id}' (インデックス {index} 付き) - Backup Seed - シードのバックアップ + Change address of wallet '{wallet_id}' (with index {index}) + ウォレット '{wallet_id}' のチェンジアドレス (インデックス {index} 付き) - Generate Seed - シードを生成 + Script Pubkey + スクリプトパブキー - Send test - テスト送信 + Address descriptor + アドレス記述子 - Turn on hardware signer - ハードウェアサイナーをオンにする + Details + 詳細 - Validate Backup - バックアップの検証 + Advanced + 詳細設定 + + + AddressList - Register multisig on signers - マルチシグをサイナーに登録 + Address {address} + アドレス {address} - You must have an initilized wallet first - 初めに初期化されたウォレットが必要です + change + 変更 - Receive Test - 受信テスト + receiving + 受取 - Put in secure locations - 安全な場所に置く + change address + チェンジアドレス - Import signer info - 署名者情報をインポート + receiving address + 受取アドレス - Send Test - 送信テスト + Details + 詳細 - - - MempoolButtons - {n}. Block - 〜{n} ブロック + View on block explorer + ブロックエクスプローラーで見る - Next Block - 未確認 + Copy as csv + CSVとしてコピー - - - FeeGroup - in ~{n}. Block - 〜{n}ブロックで + Export Labels + ラベルをエクスポート - ... is the minimum to replace the existing transactions. - ...は既存のトランザクションを置き換える最小限です。 + Tx + トランザクション - {rate} is the minimum for {rbf} - {rate}は{rbf}のための最小限です + Type + タイプ - Approximate fee rate - おおよその手数料率 + Index + インデックス - The transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - トランザクション手数料は{fee}で、送信値{sent}の{percent}%です + Address + アドレス - Fee - 手数料 + Category + カテゴリー - Fee rate could not be determined - 手数料率が決定できませんでした + Label + ラベル - The estimated transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - 推定トランザクション手数料は{fee}で、送信値{sent}の{percent}%です + Balance + 残高 - High fee - 高い手数料 + Fiat Balance + フィアット残高 + + + AddressListWithToolbar - High fee ratio: {ratio}% - 高い手数料比率:{ratio}% + Show Filter + フィルターを表示 - High fee rate - 高い手数料率 + Export Labels + ラベルをエクスポート - High fee rate! - 高い手数料率! + Generate to selected adddresses + 選択したアドレスに生成 + + + BTCSpinBox - The high prio mempool fee rate is {rate} - 高優先メンプール手数料率は{rate} + Max ≈ {amount} + 最大 ≈ {amount} - KeyStoreUI + BackupSeed - Please import the public key information from the hardware wallet first - 〜{t}分で + Please complete the previous steps. + 前の手順を完了してください。 - Please paste descriptors into the descriptor field in the top right. - {data_type} ここでは使用できません。 + Print recovery sheet + リカバリーシートを印刷 - Connect USB - {xpub} は有効な公開xpubではありません + Previous Step + 前のステップ - OK - OK + Print the pdf (it also contains the wallet descriptor) + PDFを印刷する(ウォレットディスクリプターも含む) - Scan - USBを接続 + Write each 24-word seed onto the printed pdf. + 印刷したPDFに24単語のシードを書き込む。 - xPub Origin - xPub + Write the 24-word seed onto the printed pdf. + 印刷したPDFに24単語のシードを書き込む。 + + + Balance - Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. - xPubの起源 {key_origin} とxPubは一緒にあります。正しいxPubの起源ペアを選んでください。 + Confirmed + 確認済み - The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. - xPubの起源 {key_origin} は予想される {expected_key_origin} {self.get_address_type().name} ではありません + Unconfirmed + 未確認 - {data_type} cannot be used here. - xpubはSLIP132フォーマットです。標準フォーマットに変換します。 + Unmatured + 未成熟 + + + BalanceChart - Fingerprint - xPub起源 + Date + 日付 + + + BitcoinQuickReceive - The xpub is in SLIP132 format. Converting to standard format. - インポート + Quick Receive + クイック受信 - Please paste the exported file (like coldcard-export.json or sparrow-export.json): - エクスポートされたファイル(例:coldcard-export.json または sparrow-export.json)を貼り付けてください: + Receive Address + 受信アドレス + + + BlockingWaitingDialog - xPub - シード + Please wait + お待ちください + + + BuyHardware - Import file or text - スキャン + Do you need to buy a hardware signer? + ハードウェアサイナーを購入する必要がありますか? - Name of signing device: ...... -Location of signing device: ..... - ファイルまたはテキストをインポート + Buy a {name} + {name}を購入 - Label - フィンガープリント + Buy a Coldcard +5% off + コールドカードを5%オフで購入 - Import fingerprint and xpub - フィンガープリントとxpubをインポート + Turn on your {n} hardware signers + {n}台のハードウェアサイナーをオンにする - {xpub} is not a valid public xpub - まずハードウェアウォレットから公開鍵情報をインポートしてください + Turn on your hardware signer + ハードウェアサイナーをオンにする + + + CategoryEditor - Description - ラベル + category + カテゴリー + + + ChatGui - No signer data for the expected key_origin {expected_key_origin} found. - 上右にあるディスクリプターフィールドにディスクリプタを貼り付けてください。 + Type your message here... + ここにメッセージを入力... - The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} - 予想されるキー起源 {expected_key_origin} のためのサイナーデータが見つかりませんでした。 + Share a PSBT + PSBTを共有 - Import - 手動 + Send + 送信 - Seed - 署名デバイスの名前:...... 署名デバイスの場所:..... + Open Transaction/PSBT + トランザクション/PSBTを開く - Manual - 説明 + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + すべてのファイル ();;PSBT (.psbt);;トランザクション (.tx) - Please paste the exported file (like coldcard-export.json or sparrow-export.json) - 選択されたアドレスタイプ {type} の標準は {expected_key_origin} です。 sicher wenn Sie sich nicht sicher sind. + Me: {text} + 私: {text} - LabelTimeEstimation - - ~in {t} min - 〜{t}時間で - + CloseButton - ~in {t} hours - &ウォレット + Close + 閉じる - SignatureImporterUSB - - Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. - 'Wallet --> Export --> Export for ...' を行い、マルチシグネチャーウォレットをハードウェアサイナーに登録してください。 - + ConfirmedBlock - USB Signing - USB署名 + Block {n} + ブロック {n} - net_conf - - Run your bitcoind with "bitcoind -chain=regtest" - "bitcoind -chain=regtest"でbitcoindを実行してください - + ConnectedDevices - Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. - "bitcoind -chain=signet"でbitcoindを実行してください。ただし、これはmutinynet.comの別のsignetです。 + Reset identity for this device + このデバイスのIDをリセット - Run your bitcoind with "bitcoind -chain=test" - "bitcoind -chain=test"でbitcoindを実行してください + Trusted + 信頼できる - You can connect your own Bitcoin node, such as {link}. - {link}など、独自のBitcoinノードに接続できます。 + UnTrusted + 信頼できない - You can setup {link} with an electrum server on {server} and a block explorer on {explorer} - {link}を{server}上のElectrumサーバーと{explorer}上のブロックエクスプローラーに設定できます。 + My id: {id} + 私のID: {id} + + + DescriptorEdit - You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} - {setup}を{server}上のEsploraサーバーと{explorer}上のブロックエクスプローラーに設定できます。 + Wallet setup not finished. Please finish before creating a Backup pdf. + ウォレットの設定が完了していません。バックアップPDFを作成する前に完了してください。 + + + DescriptorUI - This is a private and fast way to connect to the bitcoin network. - これはビットコインネットワークに接続するためのプライベートかつ高速な方法です。 + Required Signers + 必要な署名者 - The server can associate your IP address with the wallet addresses. -It is best to use your own server, such as {link}. - サーバーはIPアドレスをウォレットアドレスに関連付けることができます。{link}など、独自のサーバーを使用するのが最適です。 + Scan Address Limit + アドレススキャンの制限 - A good option is {link} and a block explorer on {explorer}. - 良いオプションは{link}と{explorer}上のブロックエクスプローラーです。 + Paste or scan your descriptor, if you restore a wallet. + ウォレットを復元する場合は、ディスクリプターを貼り付けるかスキャンしてください。 - A good option is {link} and a block explorer on {explorer}. There is a {faucet}. - 良いオプションは{link}と{explorer}上のブロックエクスプローラーです。蛇口があります。 + This "descriptor" contains all information to reconstruct the wallet. +Please back up this descriptor to be able to recover the funds! + この「ディスクリプター」にはウォレットを再構築するためのすべての情報が含まれています。資金を回復するためにこのディスクリプターのバックアップを取ってください! - d + DistributeSeeds - {} copied to Clipboard - {}をクリップボードにコピーしました + Place each seed backup and hardware signer in a secure location, such: + 各シードバックアップとハードウェアサイナーを安全な場所に保管してください、例えば: - Create PDF - PDFを作成する + Seed backup {j} and hardware signer {j} should be in location {j} + シードバックアップ {j} とハードウェアサイナー {j} は場所 {j} にあるべきです - Read QR code from camera - カメラからQRコードを読み取る + Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. + マルチシグウォレットから支出するためには、{m}の{n}に行く必要があることを考慮して、安全な場所を慎重に選んでください。 - Copy to clipboard - クリップボードにコピー + Store the seed backup in a <b>very</b> secure location (like a vault). + シードバックアップを非常に安全な場所(例:金庫)に保管します。 - Text copied to Clipboard - クリップボードにテキストをコピーしました + The seed backup (24 words) give total control over the funds. + シードバックアップ(24語)は資金に対する完全なコントロールを与えます。 - Open Transaction/PSBT - トランザクション/PSBTを開く + Store the hardware signer in secure location. + ハードウェアサイナーを安全な場所に保管してください。 - Open file - ファイルを開く + Finish + 終了 + + + Downloader - Create random mnemonic - ランダムニーモニックを作成する + Download Progress + ダウンロード進行状況 - Recovery Signer {i} - 復旧署名者{i} + Download {} + ダウンロード {} - Signer {i} - 署名者{i} + Show {} in Folder + フォルダーで {} を表示 - util + ExportDataSimple - over {} years ago - {}年以上前 + Enlarge + 拡大 - in over {} years - {}年以上後に + Share with single device + 単一のデバイスと共有 - {} seconds ago - {}秒前 + PSBT + PSBT - in {} seconds - {}秒後に + Transaction + トランザクション - less than a minute ago - 1分未満前 + Not available + 利用不可 - in less than a minute - 1分未満後に + Please enable the sync tab first + まず同期タブを有効にしてください - Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files - ウォレットファイルの破損が検出されました。ウォレットをシードから復元し、両方のファイルのアドレスを比較してください + Please enable syncing in the wallet {wallet_id} first + まず{wallet_id}で同期を有効にしてください - Transaction is unrelated to this wallet. - このウォレットに関連するトランザクションではありません。 + Save as image + 画像として保存 - Cannot cancel transaction - トランザクションをキャンセルできません + Export file + ファイルをエクスポート - Incorrect password - パスワードが間違っています + Copy to clipboard + クリップボードにコピー - Failed to import from file. - ファイルからのインポートに失敗しました。 + Copy {name} + {name}をコピー - Failed to export to file. - ファイルへのエクスポートに失敗しました。 + Copy TxId + トランザクションIDをコピー - Local - ローカル + Copy JSON + JSONをコピー - Unknown - 不明 + Share with trusted devices + 信頼できるデバイスと共有 - Dynamic fee estimates not available - 動的手数料の見積もりは利用できません + Share with all devices in {wallet_id} + {wallet_id}内のすべてのデバイスと共有 + + + FeeGroup - Cannot create child transaction - 子トランザクションを作成できません + Fee + 手数料 - Cannot bump fee - 手数料を引き上げることはできません + The transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + トランザクション手数料は{fee}で、送信値{sent}の{percent}%です - Unconfirmed - 未確認 + The estimated transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + 推定トランザクション手数料は{fee}で、送信値{sent}の{percent}%です - Unconfirmed parent - 未確認の親 + High fee rate! + 高い手数料率! - Balance: {amount} - 残高:{amount} + The high prio mempool fee rate is {rate} + 高優先メンプール手数料率は{rate} - Not Verified - 確認されていません + ... is the minimum to replace the existing transactions. + ...は既存のトランザクションを置き換える最小限です。 - about {} months ago - 約{}ヶ月前 + High fee rate + 高い手数料率 - in about {} months - 約{}ヶ月後に + High fee + 高い手数料 - about {} minutes ago - 約{}分前 + Approximate fee rate + おおよその手数料率 - in about {} minutes - 約{}分後に + in ~{n}. Block + 〜{n}ブロックで - about {} days ago - 約{}日前 + {rate} is the minimum for {rbf} + {rate}は{rbf}のための最小限です - in about {} days - 約{}日後に + Fee rate could not be determined + 手数料率が決定できませんでした - about {} hours ago - 約{}時間前 + High fee ratio: {ratio}% + 高い手数料比率:{ratio}% + + + FloatingButtonBar - in about {} hours - 約{}時間後に + Fill the transaction fields + トランザクションフィールドを埋める - about 1 month ago - 約1ヶ月前 + Create Transaction + トランザクションを作成 - in about 1 month - 約1ヶ月後に + Yes, I see the transaction in the history + はい、履歴にトランザクションが見えます - about 1 year ago - 約1年前 - - - in about 1 year - 約1年後に - - - about 1 day ago - 約1日前 + Previous Step + 前のステップ + + + HistList - in about 1 day - 約1日後に + Wallet + ウォレット - about 1 hour ago - 約1時間前 + Status + ステータス - in about 1 hour - 約1時間後に + Category + カテゴリー - Insufficient funds - 資金不足 + Label + ラベル - - - QTWallet - Wallet saved - {amount}を受け取りました + Amount + 金額 - Backup saved to {filename} - {file_path}が存在するため、ウォレットファイルを移動できません + Balance + 残高 - Receive - {filename}にバックアップを保存しました + Txid + トランザクションID - Change password - ウォレットが保存されました + Cannot fetch wallet '{id}'. Please open the wallet first. + ウォレット '{id}' を開けません。まずウォレットを開いてください。 + + + ImportXpubs - Click for new address - ウォレットの設定がまだありません + 2. Import wallet information into Bitcoin Safe + 2。ビットコインセーフにウォレット情報をインポート - Backup failed. Aborting Changes. - パスワードが間違っています + Skip step + ステップをスキップ - Cannot move the wallet file, because {file_path} exists - パスワードを変更 + Next step + 次のステップ - No changes to apply. - バックアップに失敗しました。変更を中止します。 + Previous Step + 前のステップ + + + KeyStoreUI - Sync - 受取 + Import fingerprint and xpub + フィンガープリントとxpubをインポート - Send - 同期 + {data_type} cannot be used here. + xpubはSLIP132フォーマットです。標準フォーマットに変換します。 - History - 変更が適用されるものはありません。 + The xpub is in SLIP132 format. Converting to standard format. + インポート - Descriptor - 履歴 + Import + 手動 - New password: - 新しいアドレスをクリック + Manual + 説明 - Password incorrect - 新しいパスワード: + Description + ラベル - - - SyncTab - Opening {name} from {author} - {author}からの{name}を開く + Label + フィンガープリント - Received message '{description}' from {author} - {author}からのメッセージ '{description}' を受け取った + Fingerprint + xPub起源 - Encrypted syncing to trusted devices - 信頼できるデバイスへの暗号された同期 + xPub Origin + xPub - Open received Transactions and PSBTs automatically in a new tab - 受信したトランザクションとPSBTを新しいタブで自動的に開く + xPub + シード - - - MainWindow - Wallet already open - {filename}のパスワードを入力してください: + Seed + 署名デバイスの名前:...... 署名デバイスの場所:..... - Closing tab {name} - {n} ブロック + OK + OK - &Version: {} - &アップデートを確認 + Name of signing device: ...... +Location of signing device: ..... + ファイルまたはテキストをインポート - &New Wallet - &ウォレットを開く + Import file or text + スキャン - Re&fresh - &トランザクション + Scan + USBを接続 - &Transaction - &トランザクションとPSBT + Connect USB + {xpub} は有効な公開xpubではありません - &Settings - &ネットワーク設定 + {xpub} is not a valid public xpub + まずハードウェアウォレットから公開鍵情報をインポートしてください - &About - &バージョン:{} + Please import the public key information from the hardware wallet first + 〜{t}分で - &Rename Wallet - &パスワードを変更 + Please paste the exported file (like coldcard-export.json or sparrow-export.json): + エクスポートされたファイル(例:coldcard-export.json または sparrow-export.json)を貼り付けてください: - &Check for update - &ライセンス + Please paste the exported file (like coldcard-export.json or sparrow-export.json) + 選択されたアドレスタイプ {type} の標準は {expected_key_origin} です。 sicher wenn Sie sich nicht sicher sind. - &Save Current Wallet - &変更/エクスポート + Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. + xPubの起源 {key_origin} とxPubは一緒にあります。正しいxPubの起源ペアを選んでください。 - &Languages - &情報 + The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. + xPubの起源 {key_origin} は予想される {expected_key_origin} {self.get_address_type().name} ではありません - &Wallet - &新しいウォレット + The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} + 予想されるキー起源 {expected_key_origin} のためのサイナーデータが見つかりませんでした。 - &Show/Hide Tutorial - &言語 + No signer data for the expected key_origin {expected_key_origin} found. + 上右にあるディスクリプターフィールドにディスクリプタを貼り付けてください。 - From &QR Code - &設定 + Please paste descriptors into the descriptor field in the top right. + {data_type} ここでは使用できません。 + + + LabelTimeEstimation - OK - BitcoinトランザクションまたはPSBTをここに貼り付けるか、ファイルをドロップしてください + ~in {t} min + 〜{t}時間で - Open Transaction or PSBT - BitcoinトランザクションまたはPSBTをここに貼り付けるか、ファイルをドロップしてください + ~in {t} hours + &ウォレット + + + MainWindow - &Change Password - Coldcard用に&エクスポート + &Wallet + &新しいウォレット - Friends - ID {name} のウォレットはすでに開いています。 + Re&fresh + &トランザクション - new - KYC-Exchange + &Transaction + &トランザクションとPSBT - Please open the sender wallet to edit this thransaction. - OK + &Transaction and PSBT + ファイル&から - Paste your Bitcoin Transaction or PSBT in here or drop a file - PSBT {txid} + From &file + テキスト&から From &text QRコード&から - Open Wallet - ウォレット {file_path} はすでに開いています。 + From &QR Code + &設定 - Wallet Files (*.wallet) - ウォレット {file_path} はすでに開いています。 それでもウォレットを開きますか? + &Settings + &ネットワーク設定 - A wallet with id {name} is already open. - ウォレット {id} を閉じますか? + &Network Settings + チュートリアルの表示/非表示& - Close wallet {id}? - ウォレット {id} を閉じる + &Show/Hide Tutorial + &言語 - Selected file: {file_path} - ウォレットが開かれていません。このトランザクションを編集するために送信者のウォレットを開いてください。 + &Languages + &情報 - &Change/Export - ウォレットの&名前を変更 + &New Wallet + &ウォレットを開く - KYC-Exchange - ウォレットの設定を完了してください。 + &About + &バージョン:{} - The wallet {file_path} is already open. - ウォレットはすでに開いています + &Version: {} + &アップデートを確認 - PSBT {txid} - ウォレットファイル (.wallet) + &Check for update + &ライセンス &License ウォレットを選んでください - Please complete the wallet setup. - ウォレットを閉じる + Please select the wallet + テスト - Transaction {txid} - ウォレットを開く + test + まずウォレットを選んでください。 - Please enter the password for {filename}: - すべてのファイル ();;JSONファイル (.jsonl);;JSONファイル (.json) + Please select the wallet first. + トランザクション/PSBTを開く Open Transaction/PSBT すべてのファイル ();;PSBT (.psbt);;トランザクション (.tx) - The wallet {file_path} is already open. Do you want to open the wallet anyway? - そのようなファイルはありません:{file_path} + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + 選択されたファイル:{file_path} - Close wallet - タブ {name} を閉じる + Selected file: {file_path} + ウォレットが開かれていません。このトランザクションを編集するために送信者のウォレットを開いてください。 - &Network Settings - チュートリアルの表示/非表示& + &Open Wallet + 最近開いた&ウォレット - From &file - テキスト&から + No wallet open. Please open the sender wallet to edit this thransaction. + トランザクションまたはPSBTを開く - Please select the wallet - テスト + Please open the sender wallet to edit this thransaction. + OK + + + Open Transaction or PSBT + BitcoinトランザクションまたはPSBTをここに貼り付けるか、ファイルをドロップしてください + + + OK + BitcoinトランザクションまたはPSBTをここに貼り付けるか、ファイルをドロップしてください Please paste your Bitcoin Transaction or PSBT in here, or drop a file トランザクション {txid} - Please select the wallet first. - トランザクション/PSBTを開く + Paste your Bitcoin Transaction or PSBT in here or drop a file + PSBT {txid} - No wallet open. Please open the sender wallet to edit this thransaction. - トランザクションまたはPSBTを開く + Transaction {txid} + ウォレットを開く - &Transaction and PSBT - ファイル&から + PSBT {txid} + ウォレットファイル (.wallet) - test - まずウォレットを選んでください。 + Open Wallet + ウォレット {file_path} はすでに開いています。 - There is no such file: {file_path} - ラベルをエクスポート + Wallet Files (*.wallet) + ウォレット {file_path} はすでに開いています。 それでもウォレットを開きますか? - &Export for Coldcard - 再&読み込み + Open &Recent + 現在のウォレットを&保存 - &Open Wallet - 最近開いた&ウォレット + The wallet {file_path} is already open. + ウォレットはすでに開いています - All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) - 友達 + The wallet {file_path} is already open. Do you want to open the wallet anyway? + そのようなファイルはありません:{file_path} - Export labels - 新規 + Wallet already open + {filename}のパスワードを入力してください: - Closing wallet {id} - 次のブロック + There is no such file: {file_path} + ラベルをエクスポート - Open &Recent - 現在のウォレットを&保存 + Please enter the password for {filename}: + すべてのファイル ();;JSONファイル (.jsonl);;JSONファイル (.json) - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - 選択されたファイル:{file_path} + Export labels + 新規 - All Files (*);;JSON Files (*.json) - すべてのファイル (*);;JSON ファイル (*.json) + All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) + 友達 + + + Import labels + ラベルのインポート All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) @@ -815,775 +845,801 @@ It is best to use your own server, such as {link}. Electrum ウォレットラベルのインポート - Import labels - ラベルのインポート + &Save Current Wallet + &変更/エクスポート - - - UnTrustedDevice - Trust {id} - {id}を信頼 + All Files (*);;JSON Files (*.json) + すべてのファイル (*);;JSON ファイル (*.json) - Accept trust request from {other} - 他のデバイス{other}からの信頼要求を受け入れる + new + KYC-Exchange - - - TxSigningSteps - Transaction signed with the private key belonging to {label} - {label}に属するプライベートキーで署名されたトランザクション + Friends + ID {name} のウォレットはすでに開いています。 - Export transaction to any hardware signer - 任意のハードウェアサイナーへのトランザクションのエクスポート + KYC-Exchange + ウォレットの設定を完了してください。 - Sign with a different hardware signer - 別のハードウェアサイナーで署名 + A wallet with id {name} is already open. + ウォレット {id} を閉じますか? - Import signature - 署名のインポート + Please complete the wallet setup. + ウォレットを閉じる - - - lib_load - You are missing the {link} -Please install it. - {link}が見つかりません。インストールしてください。 + Close wallet {id}? + ウォレット {id} を閉じる - - - BuyHardware - Turn on your {n} hardware signers - {n}台のハードウェアサイナーをオンにする + Close wallet + タブ {name} を閉じる - Buy a {name} - {name}を購入 + Closing wallet {id} + 次のブロック - Buy a Coldcard -5% off - コールドカードを5%オフで購入 + Closing tab {name} + {n} ブロック - Turn on your hardware signer - ハードウェアサイナーをオンにする + &Change/Export + ウォレットの&名前を変更 - Do you need to buy a hardware signer? - ハードウェアサイナーを購入する必要がありますか? + &Rename Wallet + &パスワードを変更 + + + &Change Password + Coldcard用に&エクスポート + + + &Export for Coldcard + 再&読み込み - ExportDataSimple + MempoolButtons - Copy {name} - {name}をコピー + Next Block + 未確認 - Share with all devices in {wallet_id} - {wallet_id}内のすべてのデバイスと共有 + {n}. Block + 〜{n} ブロック + + + MempoolProjectedBlock - Copy JSON - JSONをコピー + Unconfirmed + CSVとしてコピー - PSBT - PSBT + ~{n}. Block + コピー + + + MyTreeView - Copy to clipboard - クリップボードにコピー + Copy as csv + 手動 - Transaction - トランザクション + Copy + 自動 + + + NetworkSettingsUI - Copy TxId - トランザクションIDをコピー + Manual + 適用して再起動 - Export file - ファイルをエクスポート + Port: + IPアドレス: - Please enable syncing in the wallet {wallet_id} first - まず{wallet_id}で同期を有効にしてください + Mode: + ユーザ名: - Please enable the sync tab first - まず同期タブを有効にしてください + IP Address: + パスワード: - Share with trusted devices - 信頼できるデバイスと共有 + Username: + メンプールインスタンスURL - Not available - 利用不可 + Password: + 応答: {name}: {status} メンプールインスタンス: {server} - Share with single device - 単一のデバイスと共有 + Mempool Instance URL + 新しいウォレットを作成 - Enlarge - 拡大 + Responses: + {name}: {status} + Mempool Instance: {server} + シングルシグネチャーウォレット - Save as image - 画像として保存 + Automatic + 接続をテスト - - - tageditor - Delete {name} - {name}を削除する + Apply && Restart + ネットワーク設定 - This {name} exists already. - この{name}はすでに存在します。 + Test Connection + ブロックチェーンデータソース - Add new {name} - 新しい{name}を追加する + Network Settings + SSLを有効にする - - - UITx_Creator - {num_inputs} Inputs: {inputs} - {num_inputs}入力:{inputs} + Blockchain data source + URL: - Please paste UTXO here in the format txid:outpoint -txid:outpoint - txid:outpoint txid:outpointの形式でUTXOをここに貼り付けてください + Enable SSL + SSL: - Please paste UTXO here - UTXOをここに貼り付けてください + URL: + ポート: - Load UTXOs - UTXOを読み込む + SSL: + モード: + + + NewWalletWelcomeScreen - Adding outpoints {outpoints} - アウトポイント{outpoints}を追加 + Create new wallet + 中規模資金に最適 - Reduce future fees -by merging address balances - アドレス残高を統合して将来の手数料を削減 + Choose Single Signature + 大規模資金に最適 - This checkbox automatically checks -below {rate} - このチェックボックスは自動的に{rate}以下をチェック + 2 of 3 Multi-Signature Wal + もし1つのシードが失われたり盗まれたりした場合、残りの2つのシード+ウォレットディスクリプター(QRコード)で新しいウォレットにすべての資金を移すことができます - The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. - この新しいトランザクションによって、未確認の依存トランザクション{txids}が削除されます。 + Best for large funds + 3つの安全な場所(各1つのシードバックアップ+ウォレットディスクリプターが必要です) - The inputs {inputs} conflict with these confirmed txids {txids}. - 入力{inputs}はこれらの確認されたトランザクションID{txids}と競合します。 + If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) + ウォレットを回復するためにはウォレットディスクリプター(QRコード)が必要です - Add Inputs - 入力を追加 + 3 secure locations (each with 1 seed backup + wallet descriptor are needed) + 3つの署名デバイス - Select a category that fits the recipient best - 受取人に最適なカテゴリを選択 + The wallet descriptor (QR-code) is necessary to recover the wallet + マルチシグネチャを選択 - Add foreign UTXOs - 外部UTXOを追加 + 3 signing devices + カスタムまたは既存のウォレットを復元 - Please select an input category on the left, that fits the transaction recipients. - 左側の入力カテゴリを選択して、トランザクションの受取人に合わせてください。 + Choose Multi-Signature + ウォレットをあなたのニーズに合わせてカスタマイズ - Advanced - 詳細 + Custom or restore existing Wallet + 回復の場合、オンラインでのサポート資料が少ない - Send Category - 送信カテゴリ + Customize the wallet to your needs + カスタムウォレットを作成 + + + Single Signature Wallet + 利点: - - - NewWalletWelcomeScreen Less support material online in case of recovery {untrusted}に行く - Cons: - 1つの署名デバイス + Create custom wallet + 接続を完了するために、他のデバイス{other}で私の{id}のリクエストを受け入れてください。 - 1 signing devices - 2/3マルチシグネチャウォレット + Best for medium-sized funds + 資金にアクセスするために必要なのは1つのシード(24の秘密の言葉) - Best for large funds - 3つの安全な場所(各1つのシードバックアップ+ウォレットディスクリプターが必要です) + Pros: + シードバックアップを保存するために必要なのは1つの安全な場所(紙またはスチール) - 3 secure locations (each with 1 seed backup + wallet descriptor are needed) - 3つの署名デバイス + 1 seed (24 secret words) is all you need to access your funds + 欠点: - Choose Multi-Signature - ウォレットをあなたのニーズに合わせてカスタマイズ + 1 secure location to store the seed backup (on paper or steel) is needed + ハッカーにシードをだまして渡してしまった場合、ビットコインはすぐに盗まれます - If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) - ウォレットを回復するためにはウォレットディスクリプター(QRコード)が必要です + Cons: + 1つの署名デバイス - Customize the wallet to your needs - カスタムウォレットを作成 + If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately + シングルシグネチャを選択 - 3 signing devices - カスタムまたは既存のウォレットを復元 + 1 signing devices + 2/3マルチシグネチャウォレット + + + NostrSync - Pros: - シードバックアップを保存するために必要なのは1つの安全な場所(紙またはスチール) + Go to {untrusted} + ネットワークを変更 - If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately - シングルシグネチャを選択 + To complete the connection, accept my {id} request on the other device {other}. + ネットワーク = {network}. そのコインは無価値です! + + + NotificationBarRegtest - 1 secure location to store the seed backup (on paper or steel) is needed - ハッカーにシードをだまして渡してしまった場合、ビットコインはすぐに盗まれます + Change Network + パスワードを作成 - The wallet descriptor (QR-code) is necessary to recover the wallet - マルチシグネチャを選択 + Network = {network}. The coins are worthless! + パスワードを入力してください: + + + PasswordCreation - 2 of 3 Multi-Signature Wal - もし1つのシードが失われたり盗まれたりした場合、残りの2つのシード+ウォレットディスクリプター(QRコード)で新しいウォレットにすべての資金を移すことができます + Create Password + パスワードを表示 - Create new wallet - 中規模資金に最適 + Enter your password: + パスワードを再入力してください: - Single Signature Wallet - 利点: + Show Password + 送信 - Custom or restore existing Wallet - 回復の場合、オンラインでのサポート資料が少ない + Re-enter your password: + パスワードを隠す - Choose Single Signature - 大規模資金に最適 + Submit + パスワードが一致しません! - Create custom wallet - 接続を完了するために、他のデバイス{other}で私の{id}のリクエストを受け入れてください。 + Hide Password + エラー - 1 seed (24 secret words) is all you need to access your funds - 欠点: + Passwords do not match! + パスワード入力 - Best for medium-sized funds - 資金にアクセスするために必要なのは1つのシード(24の秘密の言葉) + Error + パスワードを入力してください: - Recipients + PasswordQuestion - + Add Recipient - + 受取人を追加 + Password Input + 送信 - Recipients - 受取人 + Please enter your password: + ウォレットを設定 + + + Submit + 送信 - RegisterMultisig + QTProtoWallet - 1. Export wallet descriptor - 1. ウォレットディスクリプタをエクスポート + Setup wallet + ディスクリプタ + + + QTWallet - 2. Import in the hardware signer - 2. ハードウェアサイナーにインポート + Send + 同期 - 2. Import in each hardware signer - 2. 各ハードウェアサイナーにインポート + Password incorrect + 新しいパスワード: - Export file to register the multisig on Coldcard - Coldcardにマルチシグを登録するためのファイルをエクスポート + Change password + ウォレットが保存されました - Your balance {balance} is greater than a maximally allowed test amount of {amount}! -Please do the hardware signer reset only with a lower balance! (Send some funds out before) - あなたの残高{balance}は最大許容テスト金額{amount}を超えています! 低い残高でのみハードウェアサイナーリセットを行ってください!(その前に資金を送金してください) + New password: + 新しいアドレスをクリック - Yes, I registered the multisig on the {n} hardware signer - はい、私は{n}のハードウェアサイナーにマルチシグを登録しました + Wallet saved + {amount}を受け取りました - Previous Step - 前のステップ + The transactions {txs} in wallet '{wallet}' were removed from the history!!! + ウォレット '{wallet}' のトランザクション {txs} が履歴から削除されました!!! - - - ScreenshotsExportXpub - 1. Export the wallet information from the hardware signer - 1. ハードウェアサイナーからウォレット情報をエクスポート + New transaction in wallet '{wallet}': +{txs} + ウォレット '{wallet}' の新しいトランザクション: {txs} - - - ImportXpubs - 2. Import wallet information into Bitcoin Safe - 2。ビットコインセーフにウォレット情報をインポート + New transactions in wallet '{wallet}': +{txs} + ウォレット '{wallet}' の新しいトランザクション: {txs} - Skip step - ステップをスキップ + Click for new address + ウォレットの設定がまだありません - Previous Step - 前のステップ + Descriptor + 履歴 - Next step - 次のステップ + Sync + 受取 - - - tutorial - Never share the 24 secret words with anyone! - 24の秘密の単語を他の誰とも共有しないでください! + History + 変更が適用されるものはありません。 - Never type them into any computer or cellphone! - 決してコンピューターまたは携帯電話に入力しないでください! + Receive + {filename}にバックアップを保存しました - Never make a picture of them! - 決してそれらの写真を撮らないでください! + No changes to apply. + バックアップに失敗しました。変更を中止します。 - - - SignatureImporterQR - bitcoin_tx libary error. The txid should not be changed during finalizing - bitcoin_txライブラリエラー。txidは最終確定中に変更されるべきではありません + Backup saved to {filename} + {file_path}が存在するため、ウォレットファイルを移動できません - Scan QR code - QRコードをスキャン + Backup failed. Aborting Changes. + パスワードが間違っています - The txid of the signed psbt doesnt match the original txid - 署名されたpsbtのtxidが元のtxidと一致しません + Cannot move the wallet file, because {file_path} exists + パスワードを変更 - mytreeview + ReceiveTest - Export as CSV - CSVとしてエクスポート + Received {amount} + このウォレットのアドレスに小額{test_amount}を受け取ります - Type to filter - フィルタリングするには入力してください + No wallet setup yet + 次のステップ - Type to search... - 検索するには入力してください... + Receive a small amount {test_amount} to an address of this wallet + 受け取ったか確認 + + + Next step + 前のステップ + + + Check if received + アドレス + + + Previous Step + ラベル - AddressList + RecipientGroupBox - Copy as csv - CSVとしてコピー + Address + 金額 - Address - アドレス + Label + ラベルをここに入力 - Address {address} - アドレス {address} + Amount + 最大送信 - Index - インデックス + Enter label here + アドレスをここに入力 - Category - カテゴリー + Send max + 受取人アドレスのラベルを入力 - Type - タイプ + Enter address here + ウォレット "{id}" - change address - チェンジアドレス + Enter label for recipient address + 受取人を追加 - Tx - トランザクション + Wallet "{id}" + ウォレット "{id}" + + + Recipients - Fiat Balance - フィアット残高 + Recipients + 受取人 - View on block explorer - ブロックエクスプローラーで見る + + Add Recipient + + 受取人を追加 + + + RegisterMultisig - Label - ラベル + Export file to register the multisig on Coldcard + Coldcardにマルチシグを登録するためのファイルをエクスポート - Export Labels - ラベルをエクスポート + Your balance {balance} is greater than a maximally allowed test amount of {amount}! +Please do the hardware signer reset only with a lower balance! (Send some funds out before) + あなたの残高{balance}は最大許容テスト金額{amount}を超えています! 低い残高でのみハードウェアサイナーリセットを行ってください!(その前に資金を送金してください) - receiving - 受取 + 1. Export wallet descriptor + 1. ウォレットディスクリプタをエクスポート - receiving address - 受取アドレス + Yes, I registered the multisig on the {n} hardware signer + はい、私は{n}のハードウェアサイナーにマルチシグを登録しました - change - 変更 + Previous Step + 前のステップ - Balance - 残高 + 2. Import in each hardware signer + 2. 各ハードウェアサイナーにインポート - Details - 詳細 + 2. Import in the hardware signer + 2. ハードウェアサイナーにインポート - MempoolProjectedBlock + ScreenshotsExportXpub - Unconfirmed - CSVとしてコピー + 1. Export the wallet information from the hardware signer + 1. ハードウェアサイナーからウォレット情報をエクスポート + + + ScreenshotsGenerateSeed - ~{n}. Block - コピー + Generate 24 secret seed words on each hardware signer + 各ハードウェアサイナーで24の秘密のシード語を生成 - hist_list + ScreenshotsRegisterMultisig - Copy as csv - CSV形式でコピー + Import the multisig information in the hardware signer + ハードウェアサイナーにマルチシグ情報をインポート + + + ScreenshotsResetSigner - All status - すべてのステータス + Reset the hardware signer. + ハードウェアサイナーをリセット。 + + + ScreenshotsRestoreSigner - All types - すべてのタイプ + Restore the hardware signer. + ハードウェアサイナーを復元。 + + + ScreenshotsViewSeed - Try cancel transaction (RBF) - トランザクションをキャンセルしようとしています(RBF) + Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. +If you make a mistake here, your money is lost! + バックアップ用紙の24語とColdcardの「シード語を表示」を比較します。ここで間違いを犯すと、お金が失われます! + + + SendTest - Export binary transactions - バイナリトランザクションをエクスポート + You made {n} outgoing transactions already. Would you like to skip this spend test? + すでに{n}件の送金トランザクションを行っています。この支出テストをスキップしますか? - View on block explorer - ブロックエクスプローラーで表示する + Skip spend test? + 支出テストをスキップ? - Edit with higher fee (RBF) - より高い手数料で編集する(RBF) + Complete the send test to ensure the hardware signer works! + 送金テストを完了してハードウェアサイナーが機能することを確認してください! + + + SignatureImporterClipboard - Used - 使用済み + Import signed PSBT + 署名されたPSBTをインポート - Receiving - 受信中 + OK + OK - Change - 変更 + Please paste your PSBT in here, or drop a file + PSBTをここに貼り付けるか、ファイルをドロップしてください - Unused - 未使用 + Paste your PSBT in here or drop a file + PSBTをここに貼り付けるか、ファイルをドロップしてください + + + SignatureImporterFile - Details - 詳細 + OK + OK - Funded - 資金提供済み + Please paste your PSBT in here, or drop a file + PSBTをここに貼り付けるか、ファイルをドロップしてください - Funded or Unused - 資金提供済みまたは未使用 + Paste your PSBT in here or drop a file + PSBTをここに貼り付けるか、ファイルをドロップしてください - utxo_list + SignatureImporterQR - Copy as csv - CSV形式でコピー + Scan QR code + QRコードをスキャン - Copy txid:out - txid:outをコピー + The txid of the signed psbt doesnt match the original txid + 署名されたpsbtのtxidが元のtxidと一致しません - Open transaction - オープントランザクション + bitcoin_tx libary error. The txid should not be changed during finalizing + bitcoin_txライブラリエラー。txidは最終確定中に変更されるべきではありません + + + SignatureImporterUSB - View on block explorer - ブロックエクスプローラーで表示する + USB Signing + USB署名 - Unconfirmed UTXO - 未確認のUTXO + Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. + 'Wallet --> Export --> Export for ...' を行い、マルチシグネチャーウォレットをハードウェアサイナーに登録してください。 + + + SignatureImporterWallet - Unconfirmed UTXO is spent by transaction {is_spent_by_txid} - 未確認のUTXOはトランザクション{is_spent_by_txid}によって使用されています + The txid of the signed psbt doesnt match the original txid. Aborting + 署名されたpsbtのtxidが元のTransaction Identifierと一致しない。中止 - UpdateNotificationBar + SyncTab - Please install GPG via "brew install gnupg" to automatically verify the signature of the update. - GPGを "brew install gnupg" でインストールしてください、アップデートの署名を自動的に検証するために。 + Encrypted syncing to trusted devices + 信頼できるデバイスへの暗号された同期 - Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. - GPGを "sudo apt-get -y install gpg" でインストールしてください、アップデートの署名を自動的に検証するために。 + Open received Transactions and PSBTs automatically in a new tab + 受信したトランザクションとPSBTを新しいタブで自動的に開く - Please install {link} to automatically verify the signature of the update. - アップデートの署名を自動的に検証するために{link}をインストールしてください。 + Opening {name} from {author} + {author}からの{name}を開く - Check for Update - アップデートを確認 + Received message '{description}' from {author} + {author}からのメッセージ '{description}' を受け取った + + + TrustedDevice - You have already the newest version. - すでに最新バージョンを使用しています。 + Device id: {id} + デバイスID:{id} - New version available {tag} - 新しいバージョンが利用可能{tag} + Syncing Address labels + アドレスラベルの同期 - No update found - 更新が見つかりません + Can share Transactions + トランザクションを共有できる - NetworkSettingsUI - - Port: - IPアドレス: - + TxSigningSteps - Enable SSL - SSL: + Export transaction to any hardware signer + 任意のハードウェアサイナーへのトランザクションのエクスポート - Network Settings - SSLを有効にする + Sign with a different hardware signer + 別のハードウェアサイナーで署名 - Blockchain data source - URL: + Import signature + 署名のインポート - Responses: - {name}: {status} - Mempool Instance: {server} - シングルシグネチャーウォレット + Transaction signed with the private key belonging to {label} + {label}に属するプライベートキーで署名されたトランザクション + + + UITx_Creator - Apply && Restart - ネットワーク設定 + Select a category that fits the recipient best + 受取人に最適なカテゴリを選択 - IP Address: - パスワード: + Add Inputs + 入力を追加 - Test Connection - ブロックチェーンデータソース + Load UTXOs + UTXOを読み込む - URL: - ポート: + Please paste UTXO here in the format txid:outpoint +txid:outpoint + txid:outpoint txid:outpointの形式でUTXOをここに貼り付けてください - Username: - メンプールインスタンスURL + Please paste UTXO here + UTXOをここに貼り付けてください - SSL: - モード: + The inputs {inputs} conflict with these confirmed txids {txids}. + 入力{inputs}はこれらの確認されたトランザクションID{txids}と競合します。 - Mode: - ユーザ名: + The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. + この新しいトランザクションによって、未確認の依存トランザクション{txids}が削除されます。 - Password: - 応答: {name}: {status} メンプールインスタンス: {server} + Reduce future fees +by merging address balances + アドレス残高を統合して将来の手数料を削減 - Automatic - 接続をテスト + Send Category + 送信カテゴリ - Mempool Instance URL - 新しいウォレットを作成 + Advanced + 詳細 - Manual - 適用して再起動 + Add foreign UTXOs + 外部UTXOを追加 - - - SignatureImporterClipboard - OK - OK + This checkbox automatically checks +below {rate} + このチェックボックスは自動的に{rate}以下をチェック - Paste your PSBT in here or drop a file - PSBTをここに貼り付けるか、ファイルをドロップしてください + Please select an input category on the left, that fits the transaction recipients. + 左側の入力カテゴリを選択して、トランザクションの受取人に合わせてください。 - Please paste your PSBT in here, or drop a file - PSBTをここに貼り付けるか、ファイルをドロップしてください + {num_inputs} Inputs: {inputs} + {num_inputs}入力:{inputs} - Import signed PSBT - 署名されたPSBTをインポート + Adding outpoints {outpoints} + アウトポイント{outpoints}を追加 - SignatureImporterFile - - OK - OK - + UITx_Viewer - Paste your PSBT in here or drop a file - PSBTをここに貼り付けるか、ファイルをドロップしてください + Inputs + 入力 - Please paste your PSBT in here, or drop a file - PSBTをここに貼り付けるか、ファイルをドロップしてください + Recipients + 受取人 - - - BackupSeed - Print the pdf (it also contains the wallet descriptor) - PDFを印刷する(ウォレットディスクリプターも含む) + Edit + 編集 - Print recovery sheet - リカバリーシートを印刷 + Edit with increased fee (RBF) + 増加した手数料で編集(RBF) - Previous Step + Previous step 前のステップ - Please complete the previous steps. - 前の手順を完了してください。 - - - Write each 24-word seed onto the printed pdf. - 印刷したPDFに24単語のシードを書き込む。 - - - Write the 24-word seed onto the printed pdf. - 印刷したPDFに24単語のシードを書き込む。 - - - - ChatGui - - Share a PSBT - PSBTを共有 - - - Type your message here... - ここにメッセージを入力... - - - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - すべてのファイル ();;PSBT (.psbt);;トランザクション (.tx) + Next step + 次のステップ - Open Transaction/PSBT - トランザクション/PSBTを開く + Send + 送信 - Me: {text} - 私: {text} + Invalid Signatures + 無効な署名 - Send - 送信 + The txid of the signed psbt doesnt match the original txid + 署名されたpsbtのtxidが元のtxidと一致しません UTXOList + + Wallet + ウォレット + Outpoint アウトポイント @@ -1592,10 +1648,6 @@ Please do the hardware signer reset only with a lower balance! (Send some fund Address アドレス - - Wallet - ウォレット - Category カテゴリ @@ -1604,672 +1656,661 @@ Please do the hardware signer reset only with a lower balance! (Send some fund Label ラベル - - Parents - - Amount 金額 + + Parents + + - AddressDialog + UnTrustedDevice - Address - アドレス + Trust {id} + {id}を信頼 - Address descriptor - アドレス記述子 + Accept trust request from {other} + 他のデバイス{other}からの信頼要求を受け入れる + + + UpdateNotificationBar - Change address of wallet '{wallet_id}' (with index {index}) - ウォレット '{wallet_id}' のチェンジアドレス (インデックス {index} 付き) + Check for Update + アップデートを確認 - Script Pubkey - スクリプトパブキー + Signature verified. + 署名が確認されました。 - Receiving address of wallet '{wallet_id}' (with index {index}) - 受信用ウォレットアドレス '{wallet_id}' (インデックス {index} 付き) + New version available {tag} + 新しいバージョンが利用可能{tag} - Details - 詳細 + You have already the newest version. + すでに最新バージョンを使用しています。 - Advanced - 詳細設定 + No update found + 更新が見つかりません - - - ReceiveTest - Check if received - アドレス + Could not verify the download. Please try again later. + ダウンロードを確認できませんでした。後でもう一度お試しください。 - Received {amount} - このウォレットのアドレスに小額{test_amount}を受け取ります + Please install {link} to automatically verify the signature of the update. + アップデートの署名を自動的に検証するために{link}をインストールしてください。 - Previous Step - ラベル + Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. + GPGを "sudo apt-get -y install gpg" でインストールしてください、アップデートの署名を自動的に検証するために。 - Next step - 前のステップ + Please install GPG via "brew install gnupg" to automatically verify the signature of the update. + GPGを "brew install gnupg" でインストールしてください、アップデートの署名を自動的に検証するために。 - Receive a small amount {test_amount} to an address of this wallet - 受け取ったか確認 + Signature doesn't match!!! Please try again. + 署名が一致しません!!! もう一度お試しください。 + + + UtxoListWithToolbar - No wallet setup yet - 次のステップ + {amount} selected + {amount} 選択済み - DescriptorUI + ValidateBackup - Scan Address Limit - アドレススキャンの制限 + Yes, I am sure all 24 words are correct + はい、24語がすべて正しいことを確認しました - Paste or scan your descriptor, if you restore a wallet. - ウォレットを復元する場合は、ディスクリプターを貼り付けるかスキャンしてください。 + Previous Step + 前のステップ + + + WalletBalanceChart - This "descriptor" contains all information to reconstruct the wallet. -Please back up this descriptor to be able to recover the funds! - この「ディスクリプター」にはウォレットを再構築するためのすべての情報が含まれています。資金を回復するためにこのディスクリプターのバックアップを取ってください! + Balance ({unit}) + 残高 ({unit}) - Required Signers - 必要な署名者 + Date + 日付 - descriptor + WalletIdDialog - Address Type - アドレスタイプ + Choose wallet name + ウォレット名を選択 - Wallet Type - ウォレットタイプ + Wallet name: + ウォレット名: - Wallet Descriptor - ウォレットディスクリプタ + Error + エラー - - - recipients - Address Already Used - アドレスは既に使用されています + A wallet with the same name already exists. + 同じ名前のウォレットがすでに存在します。 - TrustedDevice + WalletSteps - Syncing Address labels - アドレスラベルの同期 + You must have an initilized wallet first + 初めに初期化されたウォレットが必要です - Device id: {id} - デバイスID:{id} + Validate Backup + バックアップの検証 - Can share Transactions - トランザクションを共有できる + Receive Test + 受信テスト - - - RecipientGroupBox - Enter label here - アドレスをここに入力 + Put in secure locations + 安全な場所に置く - Enter address here - ウォレット "{id}" + Register multisig on signers + マルチシグをサイナーに登録 - Wallet "{id}" - ウォレット "{id}" + Send test {j} + {j}の送金 - Label - ラベルをここに入力 + Send test + テスト送信 - Amount - 最大送信 + and + そして - Send max - 受取人アドレスのラベルを入力 + Send Test + 送信テスト - Enter label for recipient address - 受取人を追加 + Sign with {label} + {label}で署名 - Address - 金額 + The wallet is not funded. Please fund the wallet. + ウォレットに資金がありません。ウォレットに資金を供給してください。 - - - HistList - Wallet - ウォレット + Turn on hardware signer + ハードウェアサイナーをオンにする - Cannot fetch wallet '{id}'. Please open the wallet first. - ウォレット '{id}' を開けません。まずウォレットを開いてください。 + Generate Seed + シードを生成 - Category - カテゴリー + Import signer info + 署名者情報をインポート - Status - ステータス + Backup Seed + シードのバックアップ + + + address_list - Txid - トランザクションID + All status + すべてのステータス - Label - ラベル + Unused + 未使用 - Balance - 残高 + Funded + 資金提供済み - Amount - 金額 + Used + 使用済み - - - DescriptorEdit - Wallet setup not finished. Please finish before creating a Backup pdf. - ウォレットの設定が完了していません。バックアップPDFを作成する前に完了してください。 + Funded or Unused + 資金提供済みまたは未使用 - - - PasswordQuestion - Please enter your password: - ウォレットを設定 + All types + すべてのタイプ - Password Input - 送信 + Receiving + 受信中 - Submit - 送信 + Change + 変更 - WalletIdDialog - - Wallet name: - ウォレット名: - - - Choose wallet name - ウォレット名を選択 - + basetab - Error - エラー + Next step + 次のステップ - A wallet with the same name already exists. - 同じ名前のウォレットがすでに存在します。 + Previous Step + 前のステップ - PasswordCreation + d - Hide Password - エラー + Signer {i} + 署名者{i} - Submit - パスワードが一致しません! + Open Transaction/PSBT + トランザクション/PSBTを開く - Error - パスワードを入力してください: + Recovery Signer {i} + 復旧署名者{i} - Enter your password: - パスワードを再入力してください: + Text copied to Clipboard + クリップボードにテキストをコピーしました - Create Password - パスワードを表示 + {} copied to Clipboard + {}をクリップボードにコピーしました - Re-enter your password: - パスワードを隠す + Read QR code from camera + カメラからQRコードを読み取る - Passwords do not match! - パスワード入力 + Copy to clipboard + クリップボードにコピー - Show Password - 送信 + Create PDF + PDFを作成する - - - BlockingWaitingDialog - Please wait - お待ちください + Create random mnemonic + ランダムニーモニックを作成する - - - CategoryEditor - category - カテゴリー + Open file + ファイルを開く - BitcoinQuickReceive + descriptor - Quick Receive - クイック受信 + Wallet Type + ウォレットタイプ - Receive Address - 受信アドレス + Address Type + アドレスタイプ + + + Wallet Descriptor + ウォレットディスクリプタ - ConnectedDevices + hist_list - Reset identity for this device - このデバイスのIDをリセット + All status + すべてのステータス - UnTrusted - 信頼できない + View on block explorer + ブロックエクスプローラーで表示する - Trusted - 信頼できる + Copy as csv + CSV形式でコピー - My id: {id} - 私のID: {id} + Export binary transactions + バイナリトランザクションをエクスポート - - - DistributeSeeds - Seed backup {j} and hardware signer {j} should be in location {j} - シードバックアップ {j} とハードウェアサイナー {j} は場所 {j} にあるべきです + Edit with higher fee (RBF) + より高い手数料で編集する(RBF) - The seed backup (24 words) give total control over the funds. - シードバックアップ(24語)は資金に対する完全なコントロールを与えます。 + Try cancel transaction (RBF) + トランザクションをキャンセルしようとしています(RBF) - Store the seed backup in a <b>very</b> secure location (like a vault). - シードバックアップを非常に安全な場所(例:金庫)に保管します。 + Unused + 未使用 - Store the hardware signer in secure location. - ハードウェアサイナーを安全な場所に保管してください。 + Funded + 資金提供済み - Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. - マルチシグウォレットから支出するためには、{m}の{n}に行く必要があることを考慮して、安全な場所を慎重に選んでください。 + Used + 使用済み - Place each seed backup and hardware signer in a secure location, such: - 各シードバックアップとハードウェアサイナーを安全な場所に保管してください、例えば: + Funded or Unused + 資金提供済みまたは未使用 - Finish - 終了 + All types + すべてのタイプ - - - SendTest - You made {n} outgoing transactions already. Would you like to skip this spend test? - すでに{n}件の送金トランザクションを行っています。この支出テストをスキップしますか? + Receiving + 受信中 - Skip spend test? - 支出テストをスキップ? + Change + 変更 - Complete the send test to ensure the hardware signer works! - 送金テストを完了してハードウェアサイナーが機能することを確認してください! + Details + 詳細 - address_list - - All status - すべてのステータス - + lib_load - All types - すべてのタイプ + You are missing the {link} +Please install it. + {link}が見つかりません。インストールしてください。 + + + menu - Used - 使用済み + Import Labels + ラベルをインポート - Receiving - 受信中 + Import Labels (BIP329 / Sparrow) + ラベルのインポート(BIP329 / スパロウ) - Change - 変更 + Import Labels (Electrum Wallet) + Electrum ウォレットのラベルのインポート + + + mytreeview - Unused - 未使用 + Type to search... + 検索するには入力してください... - Funded - 資金提供済み + Type to filter + フィルタリングするには入力してください - Funded or Unused - 資金提供済みまたは未使用 + Export as CSV + CSVとしてエクスポート - QTProtoWallet + net_conf - Setup wallet - ディスクリプタ + This is a private and fast way to connect to the bitcoin network. + これはビットコインネットワークに接続するためのプライベートかつ高速な方法です。 - - - FloatingButtonBar - Fill the transaction fields - トランザクションフィールドを埋める + Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. + "bitcoind -chain=signet"でbitcoindを実行してください。ただし、これはmutinynet.comの別のsignetです。 - Create Transaction - トランザクションを作成 + The server can associate your IP address with the wallet addresses. +It is best to use your own server, such as {link}. + サーバーはIPアドレスをウォレットアドレスに関連付けることができます。{link}など、独自のサーバーを使用するのが最適です。 - Yes, I see the transaction in the history - はい、履歴にトランザクションが見えます + You can setup {link} with an electrum server on {server} and a block explorer on {explorer} + {link}を{server}上のElectrumサーバーと{explorer}上のブロックエクスプローラーに設定できます。 - Previous Step - 前のステップ + A good option is {link} and a block explorer on {explorer}. + 良いオプションは{link}と{explorer}上のブロックエクスプローラーです。 - - - NostrSync - To complete the connection, accept my {id} request on the other device {other}. - ネットワーク = {network}. そのコインは無価値です! + A good option is {link} and a block explorer on {explorer}. There is a {faucet}. + 良いオプションは{link}と{explorer}上のブロックエクスプローラーです。蛇口があります。 - Go to {untrusted} - ネットワークを変更 + You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} + {setup}を{server}上のEsploraサーバーと{explorer}上のブロックエクスプローラーに設定できます。 - - - ScreenshotsRegisterMultisig - Import the multisig information in the hardware signer - ハードウェアサイナーにマルチシグ情報をインポート + You can connect your own Bitcoin node, such as {link}. + {link}など、独自のBitcoinノードに接続できます。 - - - ScreenshotsResetSigner - Reset the hardware signer. - ハードウェアサイナーをリセット。 + Run your bitcoind with "bitcoind -chain=regtest" + "bitcoind -chain=regtest"でbitcoindを実行してください + + + Run your bitcoind with "bitcoind -chain=test" + "bitcoind -chain=test"でbitcoindを実行してください - ScreenshotsRestoreSigner + recipients - Restore the hardware signer. - ハードウェアサイナーを復元。 + Address Already Used + アドレスは既に使用されています - ValidateBackup + tageditor - Yes, I am sure all 24 words are correct - はい、24語がすべて正しいことを確認しました + Delete {name} + {name}を削除する - Previous Step - 前のステップ + Add new {name} + 新しい{name}を追加する + + + This {name} exists already. + この{name}はすでに存在します。 - NotificationBarRegtest + tutorial - Change Network - パスワードを作成 + Never share the 24 secret words with anyone! + 24の秘密の単語を他の誰とも共有しないでください! - Network = {network}. The coins are worthless! - パスワードを入力してください: + Never type them into any computer or cellphone! + 決してコンピューターまたは携帯電話に入力しないでください! - - - ScreenshotsViewSeed - Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. -If you make a mistake here, your money is lost! - バックアップ用紙の24語とColdcardの「シード語を表示」を比較します。ここで間違いを犯すと、お金が失われます! + Never make a picture of them! + 決してそれらの写真を撮らないでください! - AddressListWithToolbar + util - Show Filter - フィルターを表示 + Unconfirmed + 未確認 - Export Labels - ラベルをエクスポート + Failed to export to file. + ファイルへのエクスポートに失敗しました。 - Generate to selected adddresses - 選択したアドレスに生成 + Balance: {amount} + 残高:{amount} - - - ConfirmedBlock - Block {n} - ブロック {n} + Unknown + 不明 - - - menu - Import Labels - ラベルをインポート + {} seconds ago + {}秒前 - Import Labels (BIP329 / Sparrow) - ラベルのインポート(BIP329 / スパロウ) + in {} seconds + {}秒後に - Import Labels (Electrum Wallet) - Electrum ウォレットのラベルのインポート + less than a minute ago + 1分未満前 - - - wallet - Local - ローカル + in less than a minute + 1分未満後に - Unconfirmed - 未確認 + about {} minutes ago + 約{}分前 + + + in about {} minutes + 約{}分後に + + + about 1 hour ago + 約1時間前 Unconfirmed parent 未確認の親 - Confirmed - 確認済み + in about 1 hour + 約1時間後に - - - UITx_Viewer - Inputs - 入力 + about {} hours ago + 約{}時間前 - Previous step - 前のステップ + in about {} hours + 約{}時間後に - Recipients - 受取人 + about 1 day ago + 約1日前 - Edit with increased fee (RBF) - 増加した手数料で編集(RBF) + in about 1 day + 約1日後に - Next step - 次のステップ + about {} days ago + 約{}日前 - Invalid Signatures - 無効な署名 + in about {} days + 約{}日後に - Edit - 編集 + about 1 month ago + 約1ヶ月前 - The txid of the signed psbt doesnt match the original txid - 署名されたpsbtのtxidが元のtxidと一致しません + in about 1 month + 約1ヶ月後に - Send - 送信 + about {} months ago + 約{}ヶ月前 - - - BTCSpinBox - Max ≈ {amount} - 最大 ≈ {amount} + Not Verified + 確認されていません - - - basetab - Previous Step - 前のステップ + in about {} months + 約{}ヶ月後に - Next step - 次のステップ + about 1 year ago + 約1年前 - - - ScreenshotsGenerateSeed - Generate 24 secret seed words on each hardware signer - 各ハードウェアサイナーで24の秘密のシード語を生成 + in about 1 year + 約1年後に - - - MyTreeView - Copy as csv - 手動 + over {} years ago + {}年以上前 - Copy - 自動 + in over {} years + {}年以上後に - - - BalanceChart - Date - 日付 + Cannot bump fee + 手数料を引き上げることはできません - - - WalletBalanceChart - Date - 日付 + Cannot cancel transaction + トランザクションをキャンセルできません - Balance ({unit}) - 残高 ({unit}) + Cannot create child transaction + 子トランザクションを作成できません - - - Balance - Unmatured - 未成熟 + Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files + ウォレットファイルの破損が検出されました。ウォレットをシードから復元し、両方のファイルのアドレスを比較してください - Unconfirmed - 未確認 + Local + ローカル - Confirmed - 確認済み + Insufficient funds + 資金不足 - - - SignatureImporterWallet - The txid of the signed psbt doesnt match the original txid. Aborting - 署名されたpsbtのtxidが元のTransaction Identifierと一致しない。中止 + Dynamic fee estimates not available + 動的手数料の見積もりは利用できません + + + Incorrect password + パスワードが間違っています + + + Transaction is unrelated to this wallet. + このウォレットに関連するトランザクションではありません。 + + + Failed to import from file. + ファイルからのインポートに失敗しました。 - CloseButton + utxo_list - Close - 閉じる + Unconfirmed UTXO is spent by transaction {is_spent_by_txid} + 未確認のUTXOはトランザクション{is_spent_by_txid}によって使用されています + + + Unconfirmed UTXO + 未確認のUTXO + + + Open transaction + オープントランザクション + + + View on block explorer + ブロックエクスプローラーで表示する + + + Copy txid:out + txid:outをコピー + + + Copy as csv + CSV形式でコピー - UtxoListWithToolbar + wallet - {amount} selected - {amount} 選択済み + Confirmed + 確認済み + + + Unconfirmed + 未確認 + + + Unconfirmed parent + 未確認の親 + + + Local + ローカル diff --git a/bitcoin_safe/gui/locales/app_pt_PT.qm b/bitcoin_safe/gui/locales/app_pt_PT.qm index 861da12f5f34b1bf5d09d08f8890e51655b1a555..0092466ee408c6c27ea566493495265797d38348 100644 GIT binary patch delta 5195 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 DsMIKA delta 4136 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 E4-#b - MainWindow - - Please open the sender wallet to edit this thransaction. - Por favor, abra a carteira do remetente para editar esta transação. - + AddressDialog - &Open Wallet - &Abrir Carteira + Address + Endereço - &Change Password - &Alterar Senha + Receiving address of wallet '{wallet_id}' (with index {index}) + Endereço de recebimento da carteira '{wallet_id}' (com índice {index}) - &Change/Export - &Alterar/Exportar + Change address of wallet '{wallet_id}' (with index {index}) + Endereço de troco da carteira '{wallet_id}' (com índice {index}) - &Wallet - &Carteira + Script Pubkey + Script Pubkey - &Settings - &Configurações + Address descriptor + Descritor de endereço - &Network Settings - &Configurações de Rede + Details + Detalhes - &Export for Coldcard - &Exportar para Coldcard + Advanced + Avançado + + + AddressList - &Languages - &Idiomas + Address {address} + Endereço {address} - &License - &Licença + change + troco - &Show/Hide Tutorial - &Mostrar/Esconder Tutorial + receiving + recebimento - &New Wallet - &Nova Carteira + change address + endereço de troco - &Rename Wallet - &Renomear Carteira + receiving address + endereço de recebimento - &Save Current Wallet - &Salvar Carteira Atual + Details + Detalhes - &About - &Sobre + View on block explorer + Ver no explorador de blocos - &Transaction - &Transação + Copy as csv + Copiar como csv - &Transaction and PSBT - &Transação e PSBT + Export Labels + Exportar Etiquetas - &Check for update - &Verificar atualização + Tx + Tx - &Version: {} - &Versão: {} + Type + Tipo - The wallet {file_path} is already open. - A carteira {file_path} já está aberta. + Index + Índice - The wallet {file_path} is already open. Do you want to open the wallet anyway? - A carteira {file_path} já está aberta. Você quer abrir a carteira mesmo assim? + Address + Endereço - Open &Recent - Abrir &Recente + Category + Categoria - Open Wallet - Abrir Carteira + Label + Etiqueta - Open Transaction or PSBT - Abrir Transação ou PSBT + Balance + Saldo - Open Transaction/PSBT - Abrir Transação/PSBT + Fiat Balance + Saldo em moeda fiduciária + + + AddressListWithToolbar - Friends - Amigos + Show Filter + Mostrar Filtro - Selected file: {file_path} - Arquivo selecionado: {file_path} + Export Labels + Exportar Etiquetas - Wallet Files (*.wallet) - Arquivos de Carteira (*.wallet) + Generate to selected adddresses + Gerar para endereços selecionados + + + BTCSpinBox - Wallet already open - Carteira já aberta + Max ≈ {amount} + Máx. ≈ {amount} + + + BackupSeed - Paste your Bitcoin Transaction or PSBT in here or drop a file - Cole sua Transação Bitcoin ou PSBT aqui ou solte um arquivo + Please complete the previous steps. + Por favor, complete os passos anteriores. - From &file - De &arquivo + Print recovery sheet + Imprimir folha de recuperação - From &QR Code - De &Código QR + Previous Step + Passo Anterior - From &text - De &texto + Print the pdf (it also contains the wallet descriptor) + Imprimir o pdf (também contém o descritor da carteira) - Export labels - Exportar etiquetas + Write each 24-word seed onto the printed pdf. + Escreva cada semente de 24 palavras no pdf impresso. - Closing tab {name} - Fechando aba {name} + Write the 24-word seed onto the printed pdf. + Escreva a semente de 24 palavras no pdf impresso. + + + Balance - Closing wallet {id} - Fechando carteira {id} + Confirmed + Confirmado - Close wallet - Fechar carteira + Unconfirmed + Não confirmado - Close wallet {id}? - Fechar carteira {id}? + Unmatured + Não amadurecido + + + BalanceChart - KYC-Exchange - KYC-Exchange + Date + Data + + + BitcoinQuickReceive - There is no such file: {file_path} - Não existe tal arquivo: {file_path} + Quick Receive + Receber Rápido - No wallet open. Please open the sender wallet to edit this thransaction. - Nenhuma carteira aberta. Por favor, abra a carteira do remetente para editar esta transação. + Receive Address + Endereço de Recebimento + + + BlockingWaitingDialog - new - novo + Please wait + Por favor, aguarde + + + BuyHardware - OK - OK + Do you need to buy a hardware signer? + Precisa comprar um assinante de hardware? - Please paste your Bitcoin Transaction or PSBT in here, or drop a file - Por favor, cole sua Transação Bitcoin ou PSBT aqui, ou solte um arquivo + Buy a {name} + Comprar um {name} - Please complete the wallet setup. - Por favor, complete a configuração da carteira. + Buy a Coldcard +5% off + Comprar um Coldcard com 5% de desconto - Please enter the password for {filename}: - Por favor, insira a senha para {filename}: + Turn on your {n} hardware signers + Ligue seus {n} assinantes de hardware - Please select the wallet - Por favor, selecione a carteira + Turn on your hardware signer + Ligar seu assinante de hardware + + + CategoryEditor - Please select the wallet first. - Por favor, selecione a carteira primeiro. + category + categoria + + + ChatGui - PSBT {txid} - PSBT {txid} + Type your message here... + Digite sua mensagem aqui... - Re&fresh - Re&carregar + Share a PSBT + Compartilhar um PSBT - test - teste + Send + Enviar - All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) - Todos os Arquivos (*);;Arquivos JSON (*.jsonl);;Arquivos JSON (*.json) + Open Transaction/PSBT + Abrir Transação/PSBT All Files (*);;PSBT (*.psbt);;Transation (*.tx) Todos os Arquivos (*);;PSBT (*.psbt);;Transação (*.tx) - Transaction {txid} - Transação {txid} + Me: {text} + Eu: {text} + + + CloseButton - A wallet with id {name} is already open. - Uma carteira com id {name} já está aberta. + Close + Fechar - - All Files (*);;JSON Files (*.json) - Todos os Ficheiros (*);;Ficheiros JSON (*.json) + + + ConfirmedBlock + + Block {n} + Bloco {n} + + + ConnectedDevices - All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) - Todos os Ficheiros (*);;Ficheiros JSONL (*.jsonl);;Ficheiros JSON (*.json) + Reset identity for this device + Redefinir identidade para este dispositivo - Import Electrum Wallet labels - Importar etiquetas da carteira Electrum + Trusted + Confiável - Import labels - Importar etiquetas + UnTrusted + Não confiável - - - FeeGroup - ... is the minimum to replace the existing transactions. - ... é o mínimo para substituir as transações existentes. + My id: {id} + Meu id: {id} + + + DescriptorEdit - {rate} is the minimum for {rbf} - {rate} é o mínimo para {rbf} + Wallet setup not finished. Please finish before creating a Backup pdf. + Configuração da carteira não concluída. Por favor, termine antes de criar um pdf de Backup. + + + DescriptorUI - Fee rate could not be determined - A taxa de cobrança não pôde ser determinada + Required Signers + Signatários Necessários - The high prio mempool fee rate is {rate} - A taxa de mempool de alta prioridade é {rate} + Scan Address Limit + Limite de Endereço de Varredura - The transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - A taxa de transação é: {fee}, que é {percent}% do valor enviado {sent} + Paste or scan your descriptor, if you restore a wallet. + Cole ou digitalize seu descritor, se você restaurar uma carteira. - The estimated transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - A taxa de transação estimada é: {fee}, que é {percent}% do valor enviado {sent} + This "descriptor" contains all information to reconstruct the wallet. +Please back up this descriptor to be able to recover the funds! + Este "descritor" contém todas as informações para reconstruir a carteira. Por favor, faça backup deste descritor para poder recuperar os fundos! + + + DistributeSeeds - High fee ratio: {ratio}% - Alta proporção de taxa: {ratio}% + Place each seed backup and hardware signer in a secure location, such: + Coloque cada backup de semente e assinante de hardware em um local seguro, tal como: - High fee - Alta taxa + Seed backup {j} and hardware signer {j} should be in location {j} + Backup de semente {j} e assinante de hardware {j} devem estar no local {j} - High fee rate - Alta taxa de cobrança + Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. + Escolha os locais seguros cuidadosamente, considerando que você precisa ir a {m} dos {n}, para gastar da sua carteira multisig. - in ~{n}. Block - em ~{n}. Bloco + Store the seed backup in a <b>very</b> secure location (like a vault). + Armazene o backup da semente em um local <b>muito</b> seguro (como um cofre). - Fee - Taxa + The seed backup (24 words) give total control over the funds. + O backup da semente (24 palavras) dá controle total sobre os fundos. - High fee rate! - Taxa de cobrança alta! + Store the hardware signer in secure location. + Armazene o assinante de hardware em local seguro. - Approximate fee rate - Taxa de cobrança aproximada + Finish + Finalizar - d + Downloader - {} copied to Clipboard - {} copiado para a Área de Transferência + Download Progress + Progresso do Download - Open file - Abrir arquivo + Download {} + Download {} - Open Transaction/PSBT - Abrir Transação/PSBT + Show {} in Folder + Mostrar {} na Pasta + + + ExportDataSimple - Signer {i} - Assinante {i} + Enlarge + Ampliar - Recovery Signer {i} - Assinante de Recuperação {i} + Share with single device + Compartilhar com um dispositivo único - Copy to clipboard - Copiar para a área de transferência + PSBT + PSBT - Create random mnemonic - Criar mnemônico aleatório + Transaction + Transação - Create PDF - Criar PDF + Not available + Não disponível - Read QR code from camera - Ler código QR da câmera + Please enable the sync tab first + Por favor, habilite primeiro a aba de sincronização - Text copied to Clipboard - Texto copiado para a Área de Transferência + Please enable syncing in the wallet {wallet_id} first + Por favor, habilite primeiro a sincronização na carteira {wallet_id} - - - util - {} seconds ago - {} segundos atrás + Save as image + Salvar como imagem - Transaction is unrelated to this wallet. - A transação é irrelevante para esta carteira. + Export file + Exportar arquivo - about {} days ago - cerca de {} dias atrás + Copy to clipboard + Copiar para a área de transferência - about {} hours ago - cerca de {} horas atrás + Copy {name} + Copiar {name} - about {} months ago - cerca de {} meses atrás + Copy TxId + Copiar Identificador de Transação - about {} minutes ago - cerca de {} minutos atrás + Copy JSON + Copiar JSON - about 1 year ago - cerca de 1 ano atrás + Share with trusted devices + Compartilhar com dispositivos confiáveis - about 1 day ago - cerca de 1 dia atrás + Share with all devices in {wallet_id} + Compartilhar com todos os dispositivos em {wallet_id} + + + FeeGroup - about 1 hour ago - cerca de 1 hora atrás + Fee + Taxa - about 1 month ago - cerca de 1 mês atrás + The transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + A taxa de transação é: {fee}, que é {percent}% do valor enviado {sent} - Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files - Corrupção detectada no arquivo da carteira. Por favor, restaure sua carteira a partir da semente e compare os endereços nos dois arquivos + The estimated transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + A taxa de transação estimada é: {fee}, que é {percent}% do valor enviado {sent} - Unknown - Desconhecido + High fee rate! + Taxa de cobrança alta! - in {} seconds - em {} segundos + The high prio mempool fee rate is {rate} + A taxa de mempool de alta prioridade é {rate} - in about {} days - em cerca de {} dias + ... is the minimum to replace the existing transactions. + ... é o mínimo para substituir as transações existentes. - in about {} hours - em cerca de {} horas + High fee rate + Alta taxa de cobrança - in about {} months - em cerca de {} meses + High fee + Alta taxa - in about {} minutes - em cerca de {} minutos + Approximate fee rate + Taxa de cobrança aproximada - in about 1 year - em cerca de 1 ano + in ~{n}. Block + em ~{n}. Bloco - in about 1 day - em cerca de 1 dia + {rate} is the minimum for {rbf} + {rate} é o mínimo para {rbf} - in about 1 hour - em cerca de 1 hora + Fee rate could not be determined + A taxa de cobrança não pôde ser determinada - in about 1 month - em cerca de 1 mês + High fee ratio: {ratio}% + Alta proporção de taxa: {ratio}% + + + FloatingButtonBar - in over {} years - em mais de {} anos + Fill the transaction fields + Preencher os campos da transação - in less than a minute - em menos de um minuto + Create Transaction + Criar Transação - Dynamic fee estimates not available - Estimativas de taxa dinâmica não disponíveis + Yes, I see the transaction in the history + Sim, eu vejo a transação no histórico - Failed to export to file. - Falha ao exportar para o arquivo. + Previous Step + Passo Anterior + + + HistList - Failed to import from file. - Falha ao importar do arquivo. + Wallet + Carteira - Insufficient funds - Fundos insuficientes + Status + Status - Local - Local - - - over {} years ago - mais de {} anos atrás + Category + Categoria - less than a minute ago - menos de um minuto atrás + Label + Etiqueta - Unconfirmed - Não confirmado + Amount + Quantidade - Cannot bump fee - Não é possível aumentar a taxa + Balance + Saldo - Cannot cancel transaction - Não é possível cancelar a transação + Txid + Identificador de Transação - Cannot create child transaction - Não é possível criar uma transação filha + Cannot fetch wallet '{id}'. Please open the wallet first. + Não é possível abrir a carteira '{id}'. Por favor, abra a carteira primeiro. + + + ImportXpubs - Not Verified - Não verificado + 2. Import wallet information into Bitcoin Safe + 2. Importar informações da carteira para Bitcoin Safe - Unconfirmed parent - Pai não confirmado + Skip step + Pular etapa - Balance: {amount} - Saldo: {amount} + Next step + Próximo passo - Incorrect password - Senha incorreta + Previous Step + Passo Anterior KeyStoreUI - {data_type} cannot be used here. - {data_type} não pode ser usado aqui. + Import fingerprint and xpub + Importar impressão digital e xpub - {xpub} is not a valid public xpub - {xpub} não é um xpub público válido + {data_type} cannot be used here. + {data_type} não pode ser usado aqui. - The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. - A origem xPub {key_origin} e o xPub pertencem juntos. Por favor, escolha o par de origem xPub correto. + The xpub is in SLIP132 format. Converting to standard format. + O xpub está no formato SLIP132. Convertendo para o formato padrão. - The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} - A Origem xPub {key_origin} não é o esperado {expected_key_origin} para {self.get_address_type().name} + Import + Importar - Connect USB - Conectar USB + Manual + Manual Description Descrição - - Scan - Digitalizar - Label Etiqueta - Import - Importar - - - Import file or text - Importar arquivo ou texto + Fingerprint + Impressão digital - Import fingerprint and xpub - Importar impressão digital e xpub + xPub Origin + Origem xPub - Fingerprint - Impressão digital + xPub + xPub - Manual - Manual + Seed + Semente - No signer data for the expected key_origin {expected_key_origin} found. - Nenhum dado de assinante para a origem chave esperada {expected_key_origin} encontrado. + OK + OK Name of signing device: ...... @@ -561,1314 +607,1320 @@ Location of signing device: ..... Nome do dispositivo de assinatura: ...... Localização do dispositivo de assinatura: ..... - The xpub is in SLIP132 format. Converting to standard format. - O xpub está no formato SLIP132. Convertendo para o formato padrão. + Import file or text + Importar arquivo ou texto - OK - OK + Scan + Digitalizar - xPub Origin - Origem xPub + Connect USB + Conectar USB - Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. - Padrão para o tipo de endereço selecionado {type} é {expected_key_origin}. Por favor, corrija se não tiver certeza. + {xpub} is not a valid public xpub + {xpub} não é um xpub público válido - Please paste the exported file (like coldcard-export.json or sparrow-export.json) - Por favor, cole o arquivo exportado (como coldcard-export.json ou sparrow-export.json) + Please import the public key information from the hardware wallet first + Por favor, importe primeiro as informações da chave pública da carteira de hardware Please paste the exported file (like coldcard-export.json or sparrow-export.json): Por favor, cole o arquivo exportado (como coldcard-export.json ou sparrow-export.json): - Please paste descriptors into the descriptor field in the top right. - Por favor, cole os descritores no campo de descritor no canto superior direito. + Please paste the exported file (like coldcard-export.json or sparrow-export.json) + Por favor, cole o arquivo exportado (como coldcard-export.json ou sparrow-export.json) - Please import the public key information from the hardware wallet first - Por favor, importe primeiro as informações da chave pública da carteira de hardware + Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. + Padrão para o tipo de endereço selecionado {type} é {expected_key_origin}. Por favor, corrija se não tiver certeza. - Seed - Semente + The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. + A origem xPub {key_origin} e o xPub pertencem juntos. Por favor, escolha o par de origem xPub correto. - xPub - xPub + The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} + A Origem xPub {key_origin} não é o esperado {expected_key_origin} para {self.get_address_type().name} - - - MempoolButtons - {n}. Block - {n}. Bloco + No signer data for the expected key_origin {expected_key_origin} found. + Nenhum dado de assinante para a origem chave esperada {expected_key_origin} encontrado. - Next Block - Próximo Bloco + Please paste descriptors into the descriptor field in the top right. + Por favor, cole os descritores no campo de descritor no canto superior direito. - UITx_Creator + LabelTimeEstimation - {num_inputs} Inputs: {inputs} - {num_inputs} Entradas: {inputs} + ~in {t} min + ~em {t} min - Adding outpoints {outpoints} - Adicionando pontos de saída {outpoints} + ~in {t} hours + ~em {t} horas + + + MainWindow - Add Inputs - Adicionar Entradas + &Wallet + &Carteira - Add foreign UTXOs - Adicionar UTXOs estrangeiros + Re&fresh + Re&carregar - The inputs {inputs} conflict with these confirmed txids {txids}. - As entradas {inputs} conflitam com estes Identificadores de Transação confirmados {txids}. + &Transaction + &Transação - The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. - As transações dependentes não confirmadas {txids} serão removidas por esta nova transação que você está criando. + &Transaction and PSBT + &Transação e PSBT - Advanced - Avançado + From &file + De &arquivo - Load UTXOs - Carregar UTXOs + From &text + De &texto - Send Category - Categoria de Envio + From &QR Code + De &Código QR - This checkbox automatically checks -below {rate} - Esta caixa de seleção verifica automaticamente abaixo de {rate} + &Settings + &Configurações - Please paste UTXO here - Por favor, cole UTXO aqui + &Network Settings + &Configurações de Rede - Please paste UTXO here in the format txid:outpoint -txid:outpoint - Por favor, cole UTXO aqui no formato txid:outpoint txid:outpoint + &Show/Hide Tutorial + &Mostrar/Esconder Tutorial - Please select an input category on the left, that fits the transaction recipients. - Por favor, selecione uma categoria de entrada à esquerda, que se ajuste aos destinatários da transação. + &Languages + &Idiomas - Reduce future fees -by merging address balances - Reduzir taxas futuras mesclando saldos de endereço + &New Wallet + &Nova Carteira - Select a category that fits the recipient best - Selecione uma categoria que melhor se ajuste ao destinatário + &About + &Sobre - - - Recipients - + Add Recipient - + Adicionar Destinatário + &Version: {} + &Versão: {} - Recipients - Destinatários + &Check for update + &Verificar atualização - - - MempoolProjectedBlock - ~{n}. Block - ~{n}. Bloco + &License + &Licença - Unconfirmed - Não confirmado + Please select the wallet + Por favor, selecione a carteira - - - LabelTimeEstimation - ~in {t} hours - ~em {t} horas + test + teste - ~in {t} min - ~em {t} min + Please select the wallet first. + Por favor, selecione a carteira primeiro. - - - NewWalletWelcomeScreen - 1 signing devices - 1 dispositivos de assinatura + Open Transaction/PSBT + Abrir Transação/PSBT - 1 secure location to store the seed backup (on paper or steel) is needed - 1 local seguro para armazenar o backup da semente (em papel ou aço) é necessário + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + Todos os Arquivos (*);;PSBT (*.psbt);;Transação (*.tx) - 1 seed (24 secret words) is all you need to access your funds - 1 semente (24 palavras secretas) é tudo o que você precisa para acessar seus fundos + Selected file: {file_path} + Arquivo selecionado: {file_path} - 2 of 3 Multi-Signature Wal - 2 de 3 Multi-Assinatura Wal - - - 3 signing devices - 3 dispositivos de assinatura - - - 3 secure locations (each with 1 seed backup + wallet descriptor are needed) - 3 locais seguros (cada um com 1 backup de semente + descritor da carteira são necessários) + &Open Wallet + &Abrir Carteira - Single Signature Wallet - Carteira de Assinatura Única + No wallet open. Please open the sender wallet to edit this thransaction. + Nenhuma carteira aberta. Por favor, abra a carteira do remetente para editar esta transação. - Custom or restore existing Wallet - Carteira personalizada ou restaurar existente + Please open the sender wallet to edit this thransaction. + Por favor, abra a carteira do remetente para editar esta transação. - Cons: - Contras: + Open Transaction or PSBT + Abrir Transação ou PSBT - Create custom wallet - Criar carteira personalizada + OK + OK - Create new wallet - Criar nova carteira + Please paste your Bitcoin Transaction or PSBT in here, or drop a file + Por favor, cole sua Transação Bitcoin ou PSBT aqui, ou solte um arquivo - Choose Single Signature - Escolha Assinatura Única + Paste your Bitcoin Transaction or PSBT in here or drop a file + Cole sua Transação Bitcoin ou PSBT aqui ou solte um arquivo - Choose Multi-Signature - Escolha Multi-Assinatura + Transaction {txid} + Transação {txid} - Best for medium-sized funds - Melhor para fundos de tamanho médio + PSBT {txid} + PSBT {txid} - Best for large funds - Melhor para grandes fundos + Open Wallet + Abrir Carteira - Less support material online in case of recovery - Menos material de suporte online em caso de recuperação + Wallet Files (*.wallet) + Arquivos de Carteira (*.wallet) - The wallet descriptor (QR-code) is necessary to recover the wallet - O descritor da carteira (código QR) é necessário para recuperar a carteira + Open &Recent + Abrir &Recente - Customize the wallet to your needs - Personalize a carteira de acordo com suas necessidades + The wallet {file_path} is already open. + A carteira {file_path} já está aberta. - Pros: - Prós: + The wallet {file_path} is already open. Do you want to open the wallet anyway? + A carteira {file_path} já está aberta. Você quer abrir a carteira mesmo assim? - If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) - Se 1 semente foi perdida ou roubada, todos os fundos podem ser transferidos para uma nova carteira com as 2 sementes restantes + descritor da carteira (código QR) + Wallet already open + Carteira já aberta - If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately - Se você for enganado para dar sua semente aos hackers, seu Bitcoin será roubado imediatamente + There is no such file: {file_path} + Não existe tal arquivo: {file_path} - - - RegisterMultisig - 1. Export wallet descriptor - 1. Exportar descritor da carteira + Please enter the password for {filename}: + Por favor, insira a senha para {filename}: - 2. Import in each hardware signer - 2. Importar em cada assinante de hardware + Export labels + Exportar etiquetas - 2. Import in the hardware signer - 2. Importar no assinante de hardware + All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) + Todos os Arquivos (*);;Arquivos JSON (*.jsonl);;Arquivos JSON (*.json) - Export file to register the multisig on Coldcard - Exportar arquivo para registrar o multisig no Coldcard + Import labels + Importar etiquetas - Previous Step - Passo Anterior + All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) + Todos os Ficheiros (*);;Ficheiros JSONL (*.jsonl);;Ficheiros JSON (*.json) - Your balance {balance} is greater than a maximally allowed test amount of {amount}! -Please do the hardware signer reset only with a lower balance! (Send some funds out before) - Seu saldo {balance} é maior que o valor máximo de teste permitido de {amount}! Por favor, só faça o reset do assinante de hardware com um saldo menor! (Envie alguns fundos antes) + Import Electrum Wallet labels + Importar etiquetas da carteira Electrum - Yes, I registered the multisig on the {n} hardware signer - Sim, eu registrei o multisig no assinante de hardware {n} + &Save Current Wallet + &Salvar Carteira Atual - - - ScreenshotsExportXpub - 1. Export the wallet information from the hardware signer - 1. Exportar informações da carteira do assinante de hardware + All Files (*);;JSON Files (*.json) + Todos os Ficheiros (*);;Ficheiros JSON (*.json) - - - ImportXpubs - 2. Import wallet information into Bitcoin Safe - 2. Importar informações da carteira para Bitcoin Safe + new + novo - Previous Step - Passo Anterior + Friends + Amigos - Next step - Próximo passo + KYC-Exchange + KYC-Exchange - Skip step - Pular etapa + A wallet with id {name} is already open. + Uma carteira com id {name} já está aberta. - - - WalletSteps - The wallet is not funded. Please fund the wallet. - A carteira não está financiada. Por favor, financie a carteira. + Please complete the wallet setup. + Por favor, complete a configuração da carteira. - Sign with {label} - Assinar com {label} + Close wallet {id}? + Fechar carteira {id}? - Backup Seed - Backup da Semente + Close wallet + Fechar carteira - Put in secure locations - Colocar em locais seguros + Closing wallet {id} + Fechando carteira {id} - and - e + Closing tab {name} + Fechando aba {name} - Generate Seed - Gerar Semente + &Change/Export + &Alterar/Exportar - Import signer info - Importar informações do assinante + &Rename Wallet + &Renomear Carteira - Turn on hardware signer - Ligue o assinante de hardware + &Change Password + &Alterar Senha - Register multisig on signers - Registrar multisig nos assinantes + &Export for Coldcard + &Exportar para Coldcard + + + MempoolButtons - Send Test - Teste de Envio + Next Block + Próximo Bloco - Send test - Teste de envio + {n}. Block + {n}. Bloco + + + MempoolProjectedBlock - Send test {j} - Teste de envio {j} + Unconfirmed + Não confirmado - Receive Test - Teste de Recebimento + ~{n}. Block + ~{n}. Bloco + + + MyTreeView - Validate Backup - Validar Backup + Copy as csv + Copiar como csv - You must have an initilized wallet first - Você deve ter uma carteira inicializada primeiro + Copy + Copiar - SyncTab + NetworkSettingsUI - Opening {name} from {author} - Abrindo {name} de {author} + Manual + Manual - Open received Transactions and PSBTs automatically in a new tab - Abrir Transações e PSBTs recebidos automaticamente em uma nova aba + Port: + Porta: - Received message '{description}' from {author} - Mensagem recebida '{description}' de {author} + Mode: + Modo: - Encrypted syncing to trusted devices - Sincronização criptografada para dispositivos confiáveis + IP Address: + Endereço IP: - - - utxo_list - Open transaction - Abrir transação + Username: + Nome de usuário: - Copy as csv - Copiar como csv + Password: + Senha: - Copy txid:out - Copiar txid:out + Mempool Instance URL + URL da Instância do Mempool - Unconfirmed UTXO - UTXO não confirmado + Responses: + {name}: {status} + Mempool Instance: {server} + Respostas: {name}: {status} Instância do Mempool: {server} - Unconfirmed UTXO is spent by transaction {is_spent_by_txid} - UTXO não confirmado é gasto pela transação {is_spent_by_txid} + Automatic + Automático - View on block explorer - Ver no explorador de blocos + Apply && Restart + Aplicar && Reiniciar - - - ChatGui - Open Transaction/PSBT - Abrir Transação/PSBT + Test Connection + Testar Conexão - Share a PSBT - Compartilhar um PSBT + Network Settings + Configurações de Rede - Type your message here... - Digite sua mensagem aqui... + Blockchain data source + Fonte de dados da blockchain - Send - Enviar + Enable SSL + Habilitar SSL - Me: {text} - Eu: {text} + URL: + URL: - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - Todos os Arquivos (*);;PSBT (*.psbt);;Transação (*.tx) + SSL: + SSL: - UnTrustedDevice + NewWalletWelcomeScreen - Accept trust request from {other} - Aceitar pedido de confiança de {other} + Create new wallet + Criar nova carteira - Trust {id} - Confie em {id} + Choose Single Signature + Escolha Assinatura Única - - - tageditor - Add new {name} - Adicionar novo {name} + 2 of 3 Multi-Signature Wal + 2 de 3 Multi-Assinatura Wal - This {name} exists already. - Este {name} já existe. + Best for large funds + Melhor para grandes fundos - Delete {name} - Excluir {name} + If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) + Se 1 semente foi perdida ou roubada, todos os fundos podem ser transferidos para uma nova carteira com as 2 sementes restantes + descritor da carteira (código QR) - - - ExportDataSimple - Enlarge - Ampliar + 3 secure locations (each with 1 seed backup + wallet descriptor are needed) + 3 locais seguros (cada um com 1 backup de semente + descritor da carteira são necessários) - Share with trusted devices - Compartilhar com dispositivos confiáveis + The wallet descriptor (QR-code) is necessary to recover the wallet + O descritor da carteira (código QR) é necessário para recuperar a carteira - Share with all devices in {wallet_id} - Compartilhar com todos os dispositivos em {wallet_id} + 3 signing devices + 3 dispositivos de assinatura - Share with single device - Compartilhar com um dispositivo único + Choose Multi-Signature + Escolha Multi-Assinatura - Copy {name} - Copiar {name} + Custom or restore existing Wallet + Carteira personalizada ou restaurar existente - Copy TxId - Copiar Identificador de Transação + Customize the wallet to your needs + Personalize a carteira de acordo com suas necessidades - Copy JSON - Copiar JSON + Single Signature Wallet + Carteira de Assinatura Única - Copy to clipboard - Copiar para a área de transferência + Less support material online in case of recovery + Menos material de suporte online em caso de recuperação - Export file - Exportar arquivo + Create custom wallet + Criar carteira personalizada - Not available - Não disponível + Best for medium-sized funds + Melhor para fundos de tamanho médio - Please enable the sync tab first - Por favor, habilite primeiro a aba de sincronização + Pros: + Prós: - Please enable syncing in the wallet {wallet_id} first - Por favor, habilite primeiro a sincronização na carteira {wallet_id} + 1 seed (24 secret words) is all you need to access your funds + 1 semente (24 palavras secretas) é tudo o que você precisa para acessar seus fundos - PSBT - PSBT + 1 secure location to store the seed backup (on paper or steel) is needed + 1 local seguro para armazenar o backup da semente (em papel ou aço) é necessário - Save as image - Salvar como imagem + Cons: + Contras: - Transaction - Transação + If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately + Se você for enganado para dar sua semente aos hackers, seu Bitcoin será roubado imediatamente + + + 1 signing devices + 1 dispositivos de assinatura - NetworkSettingsUI + NostrSync - Apply && Restart - Aplicar && Reiniciar + Go to {untrusted} + Ir para {untrusted} - Automatic - Automático + To complete the connection, accept my {id} request on the other device {other}. + Para completar a conexão, aceite meu pedido de {id} no outro dispositivo {other}. + + + NotificationBarRegtest - Network Settings - Configurações de Rede + Change Network + Mudar Rede - IP Address: - Endereço IP: + Network = {network}. The coins are worthless! + Rede = {network}. As moedas não valem nada! + + + PasswordCreation - Blockchain data source - Fonte de dados da blockchain + Create Password + Criar Senha - Enable SSL - Habilitar SSL + Enter your password: + Digite sua senha: - Manual - Manual + Show Password + Mostrar Senha - Mode: - Modo: + Re-enter your password: + Re-digite sua senha: - Username: - Nome de usuário: + Submit + Enviar - Port: - Porta: + Hide Password + Esconder Senha - Responses: - {name}: {status} - Mempool Instance: {server} - Respostas: {name}: {status} Instância do Mempool: {server} + Passwords do not match! + As senhas não coincidem! - Password: - Senha: + Error + Erro + + + PasswordQuestion - SSL: - SSL: + Password Input + Entrada de Senha - Test Connection - Testar Conexão + Please enter your password: + Por favor, digite sua senha: - Mempool Instance URL - URL da Instância do Mempool + Submit + Enviar + + + QTProtoWallet - URL: - URL: + Setup wallet + Configurar carteira - DistributeSeeds + QTWallet - Store the hardware signer in secure location. - Armazene o assinante de hardware em local seguro. + Send + Enviar - Store the seed backup in a <b>very</b> secure location (like a vault). - Armazene o backup da semente em um local <b>muito</b> seguro (como um cofre). + Password incorrect + Senha incorreta - Seed backup {j} and hardware signer {j} should be in location {j} - Backup de semente {j} e assinante de hardware {j} devem estar no local {j} + Change password + Mudar senha - Place each seed backup and hardware signer in a secure location, such: - Coloque cada backup de semente e assinante de hardware em um local seguro, tal como: + New password: + Nova senha: - Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. - Escolha os locais seguros cuidadosamente, considerando que você precisa ir a {m} dos {n}, para gastar da sua carteira multisig. + Wallet saved + Carteira salva - Finish - Finalizar + The transactions {txs} in wallet '{wallet}' were removed from the history!!! + As transações {txs} na carteira '{wallet}' foram removidas do histórico!!! - The seed backup (24 words) give total control over the funds. - O backup da semente (24 palavras) dá controle total sobre os fundos. + New transaction in wallet '{wallet}': +{txs} + Nova transação na carteira '{wallet}': {txs} - - - PasswordCreation - Passwords do not match! - As senhas não coincidem! + New transactions in wallet '{wallet}': +{txs} + Novas transações na carteira '{wallet}': {txs} - Create Password - Criar Senha + Click for new address + Clique para novo endereço - Enter your password: - Digite sua senha: + Descriptor + Descritor - Submit - Enviar + Sync + Sincronizar - Error - Erro + History + Histórico - Hide Password - Esconder Senha + Receive + Receber - Show Password - Mostrar Senha + No changes to apply. + Sem alterações a aplicar. - Re-enter your password: - Re-digite sua senha: + Backup saved to {filename} + Backup salvo em {filename} - - - TxSigningSteps - Sign with a different hardware signer - Assinar com um assinante de hardware diferente + Backup failed. Aborting Changes. + Falha no backup. Abortando Alterações. - Export transaction to any hardware signer - Exportar transação para qualquer assinante de hardware + Cannot move the wallet file, because {file_path} exists + Não é possível mover o arquivo da carteira, porque {file_path} existe + + + ReceiveTest - Import signature - Importar assinatura + Received {amount} + Recebido {amount} - Transaction signed with the private key belonging to {label} - Transação assinada com a chave privada pertencente a {label} + No wallet setup yet + Configuração da carteira ainda não concluída - - - SignatureImporterUSB - USB Signing - Assinatura USB + Receive a small amount {test_amount} to an address of this wallet + Receber uma pequena quantia {test_amount} para um endereço desta carteira - Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. - Por favor, faça 'Carteira --> Exportar --> Exportar para ...' e registre a carteira de assinatura múltipla no assinante de hardware. + Next step + Próximo passo + + + Check if received + Verificar se recebeu + + + Previous Step + Passo Anterior - UITx_Viewer + RecipientGroupBox - Invalid Signatures - Assinaturas Inválidas + Address + Endereço - Recipients - Destinatários + Label + Etiqueta - Edit - Editar + Amount + Quantidade - Edit with increased fee (RBF) - Editar com taxa aumentada (RBF) + Enter label here + Digite a etiqueta aqui - Inputs - Entradas + Send max + Enviar máximo - Send - Enviar + Enter address here + Digite o endereço aqui - The txid of the signed psbt doesnt match the original txid - O identificador de transação do psbt assinado não corresponde ao txid original + Enter label for recipient address + Digite a etiqueta para o endereço do destinatário - Previous step - Passo anterior + Wallet "{id}" + Carteira "{id}" + + + + Recipients + + Recipients + Destinatários - Next step - Próximo passo + + Add Recipient + + Adicionar Destinatário - AddressDialog + RegisterMultisig - Advanced - Avançado + Export file to register the multisig on Coldcard + Exportar arquivo para registrar o multisig no Coldcard - Address descriptor - Descritor de endereço + Your balance {balance} is greater than a maximally allowed test amount of {amount}! +Please do the hardware signer reset only with a lower balance! (Send some funds out before) + Seu saldo {balance} é maior que o valor máximo de teste permitido de {amount}! Por favor, só faça o reset do assinante de hardware com um saldo menor! (Envie alguns fundos antes) - Details - Detalhes + 1. Export wallet descriptor + 1. Exportar descritor da carteira - Address - Endereço + Yes, I registered the multisig on the {n} hardware signer + Sim, eu registrei o multisig no assinante de hardware {n} - Receiving address of wallet '{wallet_id}' (with index {index}) - Endereço de recebimento da carteira '{wallet_id}' (com índice {index}) + Previous Step + Passo Anterior - Change address of wallet '{wallet_id}' (with index {index}) - Endereço de troco da carteira '{wallet_id}' (com índice {index}) + 2. Import in each hardware signer + 2. Importar em cada assinante de hardware - Script Pubkey - Script Pubkey + 2. Import in the hardware signer + 2. Importar no assinante de hardware - QTWallet - - Backup saved to {filename} - Backup salvo em {filename} - + ScreenshotsExportXpub - Wallet saved - Carteira salva + 1. Export the wallet information from the hardware signer + 1. Exportar informações da carteira do assinante de hardware + + + ScreenshotsGenerateSeed - Click for new address - Clique para novo endereço + Generate 24 secret seed words on each hardware signer + Gerar 24 palavras secretas de semente em cada assinante de hardware + + + ScreenshotsRegisterMultisig - Descriptor - Descritor + Import the multisig information in the hardware signer + Importar as informações do multisig no assinante de hardware + + + ScreenshotsResetSigner - Send - Enviar + Reset the hardware signer. + Resetar o assinante de hardware. + + + ScreenshotsRestoreSigner - Backup failed. Aborting Changes. - Falha no backup. Abortando Alterações. + Restore the hardware signer. + Restaurar o assinante de hardware. + + + ScreenshotsViewSeed - History - Histórico + Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. +If you make a mistake here, your money is lost! + Compare as 24 palavras no papel de backup com 'Visualizar Palavras da Semente' do Coldcard. Se você cometer um erro aqui, seu dinheiro estará perdido! + + + SendTest - Change password - Mudar senha + You made {n} outgoing transactions already. Would you like to skip this spend test? + Você já fez {n} transações de saída. Gostaria de pular este teste de gasto? - Cannot move the wallet file, because {file_path} exists - Não é possível mover o arquivo da carteira, porque {file_path} existe + Skip spend test? + Pular teste de gasto? - New password: - Nova senha: + Complete the send test to ensure the hardware signer works! + Complete o teste de envio para garantir que o assinante de hardware funcione! + + + SignatureImporterClipboard - Receive - Receber + Import signed PSBT + Importar PSBT assinado - No changes to apply. - Sem alterações a aplicar. + OK + OK - Password incorrect - Senha incorreta + Please paste your PSBT in here, or drop a file + Por favor, cole seu PSBT aqui, ou solte um arquivo - Sync - Sincronizar + Paste your PSBT in here or drop a file + Cole seu PSBT aqui ou solte um arquivo - ConfirmedBlock + SignatureImporterFile - Block {n} - Bloco {n} + OK + OK - - - HistList - Wallet - Carteira + Please paste your PSBT in here, or drop a file + Por favor, cole seu PSBT aqui, ou solte um arquivo - Category - Categoria + Paste your PSBT in here or drop a file + Cole seu PSBT aqui ou solte um arquivo + + + SignatureImporterQR - Label - Etiqueta + Scan QR code + Digitalizar código QR - Txid - Identificador de Transação + The txid of the signed psbt doesnt match the original txid + O identificador de transação do psbt assinado não corresponde ao txid original - Cannot fetch wallet '{id}'. Please open the wallet first. - Não é possível abrir a carteira '{id}'. Por favor, abra a carteira primeiro. + bitcoin_tx libary error. The txid should not be changed during finalizing + Erro da biblioteca bitcoin_tx. O identificador de transação não deve ser alterado durante a finalização + + + SignatureImporterUSB - Amount - Quantidade + USB Signing + Assinatura USB - Balance - Saldo + Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. + Por favor, faça 'Carteira --> Exportar --> Exportar para ...' e registre a carteira de assinatura múltipla no assinante de hardware. + + + SignatureImporterWallet - Status - Status + The txid of the signed psbt doesnt match the original txid. Aborting + O identificador de transação do psbt assinado não corresponde ao identificador de transação original. Abortando - UTXOList + SyncTab - Wallet - Carteira + Encrypted syncing to trusted devices + Sincronização criptografada para dispositivos confiáveis - Category - Categoria + Open received Transactions and PSBTs automatically in a new tab + Abrir Transações e PSBTs recebidos automaticamente em uma nova aba - Address - Endereço + Opening {name} from {author} + Abrindo {name} de {author} - Label - Etiqueta + Received message '{description}' from {author} + Mensagem recebida '{description}' de {author} + + + TrustedDevice - Parents - Pais + Device id: {id} + ID do dispositivo: {id} - Outpoint - Ponto de Saída + Syncing Address labels + Sincronizando etiquetas de endereço - Amount - Quantidade + Can share Transactions + Pode compartilhar Transações - RecipientGroupBox - - Wallet "{id}" - Carteira "{id}" - - - Enter label here - Digite a etiqueta aqui - + TxSigningSteps - Enter label for recipient address - Digite a etiqueta para o endereço do destinatário + Export transaction to any hardware signer + Exportar transação para qualquer assinante de hardware - Enter address here - Digite o endereço aqui + Sign with a different hardware signer + Assinar com um assinante de hardware diferente - Address - Endereço + Import signature + Importar assinatura - Send max - Enviar máximo + Transaction signed with the private key belonging to {label} + Transação assinada com a chave privada pertencente a {label} + + + UITx_Creator - Label - Etiqueta + Select a category that fits the recipient best + Selecione uma categoria que melhor se ajuste ao destinatário - Amount - Quantidade + Add Inputs + Adicionar Entradas - - - AddressList - Category - Categoria + Load UTXOs + Carregar UTXOs - Copy as csv - Copiar como csv + Please paste UTXO here in the format txid:outpoint +txid:outpoint + Por favor, cole UTXO aqui no formato txid:outpoint txid:outpoint - Details - Detalhes + Please paste UTXO here + Por favor, cole UTXO aqui - Address - Endereço + The inputs {inputs} conflict with these confirmed txids {txids}. + As entradas {inputs} conflitam com estes Identificadores de Transação confirmados {txids}. - Address {address} - Endereço {address} + The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. + As transações dependentes não confirmadas {txids} serão removidas por esta nova transação que você está criando. - receiving address - endereço de recebimento + Reduce future fees +by merging address balances + Reduzir taxas futuras mesclando saldos de endereço - change address - endereço de troco + Send Category + Categoria de Envio - Label - Etiqueta + Advanced + Avançado - Export Labels - Exportar Etiquetas + Add foreign UTXOs + Adicionar UTXOs estrangeiros - Index - Índice + This checkbox automatically checks +below {rate} + Esta caixa de seleção verifica automaticamente abaixo de {rate} - receiving - recebimento + Please select an input category on the left, that fits the transaction recipients. + Por favor, selecione uma categoria de entrada à esquerda, que se ajuste aos destinatários da transação. - Balance - Saldo + {num_inputs} Inputs: {inputs} + {num_inputs} Entradas: {inputs} - Fiat Balance - Saldo em moeda fiduciária + Adding outpoints {outpoints} + Adicionando pontos de saída {outpoints} + + + UITx_Viewer - Type - Tipo + Inputs + Entradas - change - troco + Recipients + Destinatários - Tx - Tx + Edit + Editar - View on block explorer - Ver no explorador de blocos + Edit with increased fee (RBF) + Editar com taxa aumentada (RBF) - - - CategoryEditor - category - categoria + Previous step + Passo anterior - - - DescriptorUI - Paste or scan your descriptor, if you restore a wallet. - Cole ou digitalize seu descritor, se você restaurar uma carteira. + Next step + Próximo passo - This "descriptor" contains all information to reconstruct the wallet. -Please back up this descriptor to be able to recover the funds! - Este "descritor" contém todas as informações para reconstruir a carteira. Por favor, faça backup deste descritor para poder recuperar os fundos! + Send + Enviar - Scan Address Limit - Limite de Endereço de Varredura + Invalid Signatures + Assinaturas Inválidas - Required Signers - Signatários Necessários + The txid of the signed psbt doesnt match the original txid + O identificador de transação do psbt assinado não corresponde ao txid original - SignatureImporterClipboard - - Paste your PSBT in here or drop a file - Cole seu PSBT aqui ou solte um arquivo - + UTXOList - Import signed PSBT - Importar PSBT assinado + Wallet + Carteira - OK - OK + Outpoint + Ponto de Saída - Please paste your PSBT in here, or drop a file - Por favor, cole seu PSBT aqui, ou solte um arquivo + Address + Endereço - - - SignatureImporterFile - Paste your PSBT in here or drop a file - Cole seu PSBT aqui ou solte um arquivo + Category + Categoria - OK - OK + Label + Etiqueta - Please paste your PSBT in here, or drop a file - Por favor, cole seu PSBT aqui, ou solte um arquivo + Amount + Quantidade - - - ScreenshotsViewSeed - Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. -If you make a mistake here, your money is lost! - Compare as 24 palavras no papel de backup com 'Visualizar Palavras da Semente' do Coldcard. Se você cometer um erro aqui, seu dinheiro estará perdido! + Parents + Pais - SendTest - - Complete the send test to ensure the hardware signer works! - Complete o teste de envio para garantir que o assinante de hardware funcione! - + UnTrustedDevice - Skip spend test? - Pular teste de gasto? + Trust {id} + Confie em {id} - You made {n} outgoing transactions already. Would you like to skip this spend test? - Você já fez {n} transações de saída. Gostaria de pular este teste de gasto? + Accept trust request from {other} + Aceitar pedido de confiança de {other} - BuyHardware + UpdateNotificationBar - Buy a {name} - Comprar um {name} + Check for Update + Verificar Atualização - Buy a Coldcard -5% off - Comprar um Coldcard com 5% de desconto + Signature verified. + Assinatura verificada. - Turn on your hardware signer - Ligar seu assinante de hardware + New version available {tag} + Nova versão disponível {tag} - Turn on your {n} hardware signers - Ligue seus {n} assinantes de hardware + You have already the newest version. + Você já possui a versão mais nova. - Do you need to buy a hardware signer? - Precisa comprar um assinante de hardware? + No update found + Nenhuma atualização encontrada - - - ConnectedDevices - Trusted - Confiável + Could not verify the download. Please try again later. + Não foi possível verificar o download. Por favor, tente novamente mais tarde. - My id: {id} - Meu id: {id} + Please install {link} to automatically verify the signature of the update. + Por favor, instale {link} para verificar automaticamente a assinatura da atualização. - UnTrusted - Não confiável + Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. + Por favor, instale GPG via "sudo apt-get -y install gpg" para verificar automaticamente a assinatura da atualização. - Reset identity for this device - Redefinir identidade para este dispositivo + Please install GPG via "brew install gnupg" to automatically verify the signature of the update. + Por favor, instale GPG via "brew install gnupg" para verificar automaticamente a assinatura da atualização. + + + Signature doesn't match!!! Please try again. + Assinatura não corresponde!!! Por favor, tente novamente. - ReceiveTest + UtxoListWithToolbar - No wallet setup yet - Configuração da carteira ainda não concluída + {amount} selected + {amount} selecionado + + + + ValidateBackup + + Yes, I am sure all 24 words are correct + Sim, tenho certeza de que todas as 24 palavras estão corretas Previous Step Passo Anterior + + + WalletBalanceChart - Next step - Próximo passo + Balance ({unit}) + Saldo ({unit}) - Receive a small amount {test_amount} to an address of this wallet - Receber uma pequena quantia {test_amount} para um endereço desta carteira + Date + Data + + + WalletIdDialog - Received {amount} - Recebido {amount} + Choose wallet name + Escolha o nome da carteira - Check if received - Verificar se recebeu + Wallet name: + Nome da carteira: - - - DescriptorEdit - Wallet setup not finished. Please finish before creating a Backup pdf. - Configuração da carteira não concluída. Por favor, termine antes de criar um pdf de Backup. + Error + Erro - - - QTProtoWallet - Setup wallet - Configurar carteira + A wallet with the same name already exists. + Uma carteira com o mesmo nome já existe. - Balance + WalletSteps - Confirmed - Confirmado + You must have an initilized wallet first + Você deve ter uma carteira inicializada primeiro - Unmatured - Não amadurecido + Validate Backup + Validar Backup - Unconfirmed - Não confirmado + Receive Test + Teste de Recebimento - - - wallet - Confirmed - Confirmado + Put in secure locations + Colocar em locais seguros - Local - Local + Register multisig on signers + Registrar multisig nos assinantes - Unconfirmed - Não confirmado + Send test {j} + Teste de envio {j} - Unconfirmed parent - Pai não confirmado + Send test + Teste de envio - - - MyTreeView - Copy - Copiar + and + e - Copy as csv - Copiar como csv + Send Test + Teste de Envio - - - hist_list - Copy as csv - Copiar como csv + Sign with {label} + Assinar com {label} - Details - Detalhes + The wallet is not funded. Please fund the wallet. + A carteira não está financiada. Por favor, financie a carteira. - Edit with higher fee (RBF) - Editar com taxa mais alta (RBF) + Turn on hardware signer + Ligue o assinante de hardware - Export binary transactions - Exportar transações binárias + Generate Seed + Gerar Semente - Funded - Financiado + Import signer info + Importar informações do assinante - Funded or Unused - Financiado ou Não Utilizado + Backup Seed + Backup da Semente + + + + address_list + + All status + Todos os estados Unused Não utilizado - Receiving - Recebimento + Funded + Financiado - Try cancel transaction (RBF) - Tentar cancelar transação (RBF) + Used + Usado - All status - Todos os estados + Funded or Unused + Financiado ou Não Utilizado All types Todos os tipos + + Receiving + Recebimento + Change Troco + + + basetab - Used - Usado + Next step + Próximo passo - View on block explorer - Ver no explorador de blocos + Previous Step + Passo Anterior - FloatingButtonBar + d - Create Transaction - Criar Transação + Signer {i} + Assinante {i} - Previous Step - Passo Anterior + Open Transaction/PSBT + Abrir Transação/PSBT - Fill the transaction fields - Preencher os campos da transação + Recovery Signer {i} + Assinante de Recuperação {i} - Yes, I see the transaction in the history - Sim, eu vejo a transação no histórico + Text copied to Clipboard + Texto copiado para a Área de Transferência - - - BalanceChart - Date - Data + {} copied to Clipboard + {} copiado para a Área de Transferência - - - WalletBalanceChart - Date - Data + Read QR code from camera + Ler código QR da câmera - Balance ({unit}) - Saldo ({unit}) + Copy to clipboard + Copiar para a área de transferência + + + Create PDF + Criar PDF + + + Create random mnemonic + Criar mnemônico aleatório + + + Open file + Abrir arquivo descriptor - - Wallet Descriptor - Descritor da Carteira - Wallet Type Tipo de Carteira @@ -1877,114 +1929,106 @@ If you make a mistake here, your money is lost! Address Type Tipo de Endereço + + Wallet Descriptor + Descritor da Carteira + - SignatureImporterQR + hist_list - Scan QR code - Digitalizar código QR + All status + Todos os estados - bitcoin_tx libary error. The txid should not be changed during finalizing - Erro da biblioteca bitcoin_tx. O identificador de transação não deve ser alterado durante a finalização + View on block explorer + Ver no explorador de blocos - The txid of the signed psbt doesnt match the original txid - O identificador de transação do psbt assinado não corresponde ao txid original + Copy as csv + Copiar como csv - - - mytreeview - Type to filter - Digite para filtrar + Export binary transactions + Exportar transações binárias - Type to search... - Digite para pesquisar... + Edit with higher fee (RBF) + Editar com taxa mais alta (RBF) - Export as CSV - Exportar como CSV + Try cancel transaction (RBF) + Tentar cancelar transação (RBF) - - - BitcoinQuickReceive - Receive Address - Endereço de Recebimento + Unused + Não utilizado - Quick Receive - Receber Rápido + Funded + Financiado - - - recipients - Address Already Used - Endereço Já Usado - - - - PasswordQuestion - - Password Input - Entrada de Senha + Used + Usado - Submit - Enviar + Funded or Unused + Financiado ou Não Utilizado - Please enter your password: - Por favor, digite sua senha: + All types + Todos os tipos - - - WalletIdDialog - Error - Erro + Receiving + Recebimento - Choose wallet name - Escolha o nome da carteira + Change + Troco - Wallet name: - Nome da carteira: + Details + Detalhes + + + lib_load - A wallet with the same name already exists. - Uma carteira com o mesmo nome já existe. + You are missing the {link} +Please install it. + Você está faltando o {link} Por favor, instale-o. - BackupSeed + menu - Write the 24-word seed onto the printed pdf. - Escreva a semente de 24 palavras no pdf impresso. + Import Labels + Importar Etiquetas - Write each 24-word seed onto the printed pdf. - Escreva cada semente de 24 palavras no pdf impresso. + Import Labels (BIP329 / Sparrow) + Importar Etiquetas (BIP329 / Sparrow) - Print recovery sheet - Imprimir folha de recuperação + Import Labels (Electrum Wallet) + Importar Etiquetas (Carteira Electrum) + + + mytreeview - Print the pdf (it also contains the wallet descriptor) - Imprimir o pdf (também contém o descritor da carteira) + Type to search... + Digite para pesquisar... - Previous Step - Passo Anterior + Type to filter + Digite para filtrar - Please complete the previous steps. - Por favor, complete os passos anteriores. + Export as CSV + Exportar como CSV @@ -1993,23 +2037,19 @@ If you make a mistake here, your money is lost! This is a private and fast way to connect to the bitcoin network. Esta é uma maneira privada e rápida de se conectar à rede bitcoin. - - Run your bitcoind with "bitcoind -chain=regtest" - Execute seu bitcoind com "bitcoind -chain=regtest" - Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. Execute seu bitcoind com "bitcoind -chain=signet" No entanto, este é um signet diferente de mutinynet.com. - - Run your bitcoind with "bitcoind -chain=test" - Execute seu bitcoind com "bitcoind -chain=test" - The server can associate your IP address with the wallet addresses. It is best to use your own server, such as {link}. O servidor pode associar seu endereço IP aos endereços da carteira. É melhor usar seu próprio servidor, como {link}. + + You can setup {link} with an electrum server on {server} and a block explorer on {explorer} + Você pode configurar {link} com um servidor electrum em {server} e um explorador de blocos em {explorer} + A good option is {link} and a block explorer on {explorer}. Uma boa opção é {link} e um explorador de blocos em {explorer}. @@ -2018,258 +2058,259 @@ It is best to use your own server, such as {link}. A good option is {link} and a block explorer on {explorer}. There is a {faucet}. Uma boa opção é {link} e um explorador de blocos em {explorer}. Há uma {faucet}. + + You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} + Você pode configurar {setup} com um servidor esplora em {server} e um explorador de blocos em {explorer} + You can connect your own Bitcoin node, such as {link}. Você pode conectar seu próprio nó Bitcoin, como {link}. - You can setup {link} with an electrum server on {server} and a block explorer on {explorer} - Você pode configurar {link} com um servidor electrum em {server} e um explorador de blocos em {explorer} + Run your bitcoind with "bitcoind -chain=regtest" + Execute seu bitcoind com "bitcoind -chain=regtest" - You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} - Você pode configurar {setup} com um servidor esplora em {server} e um explorador de blocos em {explorer} + Run your bitcoind with "bitcoind -chain=test" + Execute seu bitcoind com "bitcoind -chain=test" - AddressListWithToolbar + recipients - Export Labels - Exportar Etiquetas + Address Already Used + Endereço Já Usado + + + tageditor - Generate to selected adddresses - Gerar para endereços selecionados + Delete {name} + Excluir {name} - Show Filter - Mostrar Filtro + Add new {name} + Adicionar novo {name} + + + This {name} exists already. + Este {name} já existe. - CloseButton + tutorial - Close - Fechar + Never share the 24 secret words with anyone! + Nunca compartilhe as 24 palavras secretas com ninguém! + + + Never type them into any computer or cellphone! + Nunca digite-as em qualquer computador ou celular! + + + Never make a picture of them! + Nunca faça uma foto delas! - address_list + util - Funded - Financiado + Unconfirmed + Não confirmado - Funded or Unused - Financiado ou Não Utilizado + Failed to export to file. + Falha ao exportar para o arquivo. - Unused - Não utilizado + Balance: {amount} + Saldo: {amount} - Receiving - Recebimento + Unknown + Desconhecido - All status - Todos os estados + {} seconds ago + {} segundos atrás - All types - Todos os tipos + in {} seconds + em {} segundos - Change - Troco + less than a minute ago + menos de um minuto atrás - Used - Usado + in less than a minute + em menos de um minuto - - - ScreenshotsGenerateSeed - Generate 24 secret seed words on each hardware signer - Gerar 24 palavras secretas de semente em cada assinante de hardware + about {} minutes ago + cerca de {} minutos atrás - - - TrustedDevice - Device id: {id} - ID do dispositivo: {id} + in about {} minutes + em cerca de {} minutos - Can share Transactions - Pode compartilhar Transações + about 1 hour ago + cerca de 1 hora atrás - Syncing Address labels - Sincronizando etiquetas de endereço + Unconfirmed parent + Pai não confirmado - - - ScreenshotsRegisterMultisig - Import the multisig information in the hardware signer - Importar as informações do multisig no assinante de hardware + in about 1 hour + em cerca de 1 hora - - - menu - Import Labels - Importar Etiquetas + about {} hours ago + cerca de {} horas atrás - Import Labels (BIP329 / Sparrow) - Importar Etiquetas (BIP329 / Sparrow) + in about {} hours + em cerca de {} horas - Import Labels (Electrum Wallet) - Importar Etiquetas (Carteira Electrum) + about 1 day ago + cerca de 1 dia atrás - - - NostrSync - Go to {untrusted} - Ir para {untrusted} + in about 1 day + em cerca de 1 dia - To complete the connection, accept my {id} request on the other device {other}. - Para completar a conexão, aceite meu pedido de {id} no outro dispositivo {other}. + about {} days ago + cerca de {} dias atrás - - - BTCSpinBox - Max ≈ {amount} - Máx. ≈ {amount} + in about {} days + em cerca de {} dias - - - NotificationBarRegtest - Change Network - Mudar Rede + about 1 month ago + cerca de 1 mês atrás - Network = {network}. The coins are worthless! - Rede = {network}. As moedas não valem nada! + in about 1 month + em cerca de 1 mês - - - UpdateNotificationBar - No update found - Nenhuma atualização encontrada + about {} months ago + cerca de {} meses atrás - New version available {tag} - Nova versão disponível {tag} + Not Verified + Não verificado - Please install {link} to automatically verify the signature of the update. - Por favor, instale {link} para verificar automaticamente a assinatura da atualização. + in about {} months + em cerca de {} meses - Please install GPG via "brew install gnupg" to automatically verify the signature of the update. - Por favor, instale GPG via "brew install gnupg" para verificar automaticamente a assinatura da atualização. + about 1 year ago + cerca de 1 ano atrás - Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. - Por favor, instale GPG via "sudo apt-get -y install gpg" para verificar automaticamente a assinatura da atualização. + in about 1 year + em cerca de 1 ano - Check for Update - Verificar Atualização + over {} years ago + mais de {} anos atrás - You have already the newest version. - Você já possui a versão mais nova. + in over {} years + em mais de {} anos - - - tutorial - Never share the 24 secret words with anyone! - Nunca compartilhe as 24 palavras secretas com ninguém! + Cannot bump fee + Não é possível aumentar a taxa - Never type them into any computer or cellphone! - Nunca digite-as em qualquer computador ou celular! + Cannot cancel transaction + Não é possível cancelar a transação - Never make a picture of them! - Nunca faça uma foto delas! + Cannot create child transaction + Não é possível criar uma transação filha - - - SignatureImporterWallet - The txid of the signed psbt doesnt match the original txid. Aborting - O identificador de transação do psbt assinado não corresponde ao identificador de transação original. Abortando + Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files + Corrupção detectada no arquivo da carteira. Por favor, restaure sua carteira a partir da semente e compare os endereços nos dois arquivos - - - ValidateBackup - Previous Step - Passo Anterior + Local + Local - Yes, I am sure all 24 words are correct - Sim, tenho certeza de que todas as 24 palavras estão corretas + Insufficient funds + Fundos insuficientes - - - basetab - Previous Step - Passo Anterior + Dynamic fee estimates not available + Estimativas de taxa dinâmica não disponíveis - Next step - Próximo passo + Incorrect password + Senha incorreta - - - BlockingWaitingDialog - Please wait - Por favor, aguarde + Transaction is unrelated to this wallet. + A transação é irrelevante para esta carteira. - - - ScreenshotsResetSigner - Reset the hardware signer. - Resetar o assinante de hardware. + Failed to import from file. + Falha ao importar do arquivo. - ScreenshotsRestoreSigner + utxo_list - Restore the hardware signer. - Restaurar o assinante de hardware. + Unconfirmed UTXO is spent by transaction {is_spent_by_txid} + UTXO não confirmado é gasto pela transação {is_spent_by_txid} - - - lib_load - You are missing the {link} -Please install it. - Você está faltando o {link} Por favor, instale-o. + Unconfirmed UTXO + UTXO não confirmado + + + Open transaction + Abrir transação + + + View on block explorer + Ver no explorador de blocos + + + Copy txid:out + Copiar txid:out + + + Copy as csv + Copiar como csv - UtxoListWithToolbar + wallet - {amount} selected - {amount} selecionado + Confirmed + Confirmado + + + Unconfirmed + Não confirmado + + + Unconfirmed parent + Pai não confirmado + + + Local + Local diff --git a/bitcoin_safe/gui/locales/app_ru_RU.qm b/bitcoin_safe/gui/locales/app_ru_RU.qm index 80573857b7e3c7424cb4a87b41015299d3a1857d..9cec633be4d317dcd103707d37f52fde98d1a338 100644 GIT binary patch delta 5289 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 diff --git a/bitcoin_safe/gui/locales/app_ru_RU.ts b/bitcoin_safe/gui/locales/app_ru_RU.ts index 61e846d..b1e176f 100644 --- a/bitcoin_safe/gui/locales/app_ru_RU.ts +++ b/bitcoin_safe/gui/locales/app_ru_RU.ts @@ -2,1150 +2,1275 @@ - FeeGroup + AddressDialog - ... is the minimum to replace the existing transactions. - ... это минимум для замены существующих транзакций. + Address + Адрес - {rate} is the minimum for {rbf} - {rate} это минимум для {rbf} + Receiving address of wallet '{wallet_id}' (with index {index}) + Адрес получения кошелька '{wallet_id}' (с индексом {index}) - High fee - Высокая комиссия + Change address of wallet '{wallet_id}' (with index {index}) + Адрес сдачи кошелька '{wallet_id}' (с индексом {index}) - High fee rate - Высокая ставка комиссии + Script Pubkey + Скрипт публичного ключа - High fee rate! - Высокая ставка комиссии! + Address descriptor + Описание адреса - High fee ratio: {ratio}% - Высокое соотношение комиссии: {ratio}% + Details + Детали - Fee - Комиссия + Advanced + Расширенные + + + AddressList - The transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - Комиссия за транзакцию составляет: {fee}, что составляет {percent}% от отправленной суммы {sent} + Address {address} + Адрес {address} - The estimated transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - Приблизительная комиссия за транзакцию составляет: {fee}, что составляет {percent}% от отправленной суммы {sent} + change + сдача - Approximate fee rate - Приблизительная ставка комиссии + receiving + получение - in ~{n}. Block - примерно в {n}. блоке + change address + адрес сдачи - The high prio mempool fee rate is {rate} - Ставка комиссии в высокоприоритетном мемпуле составляет {rate} + receiving address + адрес получения - Fee rate could not be determined - Ставка комиссии не может быть определена + Details + Детали - - - util - {} seconds ago - {} секунд назад + View on block explorer + Посмотреть в блок-эксплорере - Balance: {amount} - Баланс: {amount} + Copy as csv + Копировать в CSV - over {} years ago - более {} лет назад + Export Labels + Экспортировать метки - Dynamic fee estimates not available - Динамические оценки комиссии недоступны + Tx + Транзакция - Local - Локальный + Type + Тип - less than a minute ago - менее минуты назад + Index + Индекс - in less than a minute - менее чем через минуту + Address + Адрес - Unconfirmed parent - Не подтвержденный родитель + Category + Категория - Unconfirmed - Не подтверждено + Label + Метка - Not Verified - Не проверено + Balance + Баланс - Failed to import from file. - Не удалось импортировать из файла. + Fiat Balance + Баланс в фиатной валюте + + + AddressListWithToolbar - Failed to export to file. - Не удалось экспортировать в файл. + Show Filter + Показать фильтр - Insufficient funds - Недостаточно средств + Export Labels + Экспортировать метки - Unknown - Неизвестно + Generate to selected adddresses + Генерировать на выбранные адреса + + + BTCSpinBox - Cannot cancel transaction - Нельзя отменить транзакцию + Max ≈ {amount} + Макс. ≈ {amount} + + + BackupSeed - Cannot bump fee - Нельзя повысить комиссию + Please complete the previous steps. + Пожалуйста, завершите предыдущие шаги. - Cannot create child transaction - Нельзя создать дочернюю транзакцию + Print recovery sheet + Распечатать лист восстановления - Incorrect password - Неправильный пароль + Previous Step + Предыдущий шаг - Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files - Обнаружено повреждение файла кошелька. Пожалуйста, восстановите свой кошелек из семени и сравните адреса в обоих файлах + Print the pdf (it also contains the wallet descriptor) + Распечатать PDF (он также содержит описание кошелька) - about {} days ago - около {} дней назад + Write each 24-word seed onto the printed pdf. + Записать каждое 24-словное семя на распечатанном PDF. - about {} months ago - около {} месяцев назад + Write the 24-word seed onto the printed pdf. + Записать 24-словное семя на распечатанном PDF. + + + Balance - about {} minutes ago - около {} минут назад + Confirmed + Подтверждено - about {} hours ago - около {} часов назад + Unconfirmed + Не подтверждено - about 1 year ago - около 1 года назад + Unmatured + Не созревшее + + + BalanceChart - about 1 day ago - около 1 дня назад + Date + Дата + + + + BitcoinQuickReceive + + Quick Receive + Быстрое получение - about 1 month ago - около 1 месяца назад + Receive Address + Адрес получения + + + BlockingWaitingDialog - about 1 hour ago - около 1 часа назад + Please wait + Пожалуйста, подождите + + + BuyHardware - in about {} days - примерно через {} дней + Do you need to buy a hardware signer? + Вам нужно купить аппаратный подписывающий устройство? - in about {} months - примерно через {} месяцев + Buy a {name} + Купить {name} - in about {} minutes - примерно через {} минут + Buy a Coldcard +5% off + Купить Coldcard со скидкой 5% - in about {} hours - примерно через {} часов + Turn on your {n} hardware signers + Включите ваши {n} аппаратных подписывающих устройств - in about 1 year - примерно через 1 год + Turn on your hardware signer + Включите ваше аппаратное подписывающее устройство + + + CategoryEditor - in about 1 day - примерно через 1 день + category + категория + + + ChatGui - in about 1 month - примерно через 1 месяц + Type your message here... + Введите свое сообщение здесь... - in about 1 hour - примерно через 1 час + Share a PSBT + Поделиться PSBT - Transaction is unrelated to this wallet. - Транзакция не относится к этому кошельку. + Send + Отправить - in {} seconds - через {} секунд + Open Transaction/PSBT + Открыть транзакцию/PSBT - in over {} years - через более {} лет + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + Все файлы (*);;PSBT (*.psbt);;Транзакция (*.tx) + + + Me: {text} + Я: {text} - d + CloseButton - {} copied to Clipboard - {} скопировано в буфер обмена + Close + Закрыть + + + ConfirmedBlock - Recovery Signer {i} - Восстановительное подписывающее устройство {i} + Block {n} + Блок {n} + + + ConnectedDevices - Copy to clipboard - Копировать в буфер обмена + Reset identity for this device + Сбросить идентификацию для этого устройства - Open Transaction/PSBT - Открыть транзакцию/PSBT + Trusted + Доверенный - Open file - Открыть файл + UnTrusted + Недоверенный - Signer {i} - Подписывающее устройство {i} + My id: {id} + Мой идентификатор: {id} + + + DescriptorEdit - Create PDF - Создать PDF + Wallet setup not finished. Please finish before creating a Backup pdf. + Настройка кошелька не завершена. Пожалуйста, завершите перед созданием резервной копии в PDF. + + + DescriptorUI - Create random mnemonic - Создать случайное мнемоническое выражение + Required Signers + Необходимые подписывающие устройства - Read QR code from camera - Считать QR-код с камеры + Scan Address Limit + Лимит сканирования адресов - Text copied to Clipboard - Текст скопирован в буфер обмена + Paste or scan your descriptor, if you restore a wallet. + Вставьте или отсканируйте ваш дескриптор, если вы восстанавливаете кошелек. + + + This "descriptor" contains all information to reconstruct the wallet. +Please back up this descriptor to be able to recover the funds! + Этот "дескриптор" содержит всю информацию для воссоздания кошелька. Пожалуйста, сделайте резервную копию этого дескриптора, чтобы иметь возможность восстановить средства! - KeyStoreUI + DistributeSeeds - {data_type} cannot be used here. - {data_type} здесь использовать нельзя. + Place each seed backup and hardware signer in a secure location, such: + Поместите каждую резервную копию семени и аппаратное подписывающее устройство в надежное место, например: - {xpub} is not a valid public xpub - {xpub} не является действительным публичным xpub + Seed backup {j} and hardware signer {j} should be in location {j} + Резервная копия семени {j} и аппаратное подписывающее устройство {j} должны находиться в месте {j} - xPub - xPub + Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. + Выберите надежные места тщательно, учитывая, что вам нужно посетить {m} из {n}, чтобы потратить средства из вашего мультисиг-кошелька. - The xpub is in SLIP132 format. Converting to standard format. - xpub в формате SLIP132. Преобразование в стандартный формат. + Store the seed backup in a <b>very</b> secure location (like a vault). + Храните резервную копию семени в <b>очень</b> надежном месте (например, в сейфе). + + + The seed backup (24 words) give total control over the funds. + Резервная копия семени (24 слова) дает полный контроль над средствами. + + + Store the hardware signer in secure location. + Храните аппаратное подписывающее устройство внадежном месте. надежном месте. + + + Finish + Завершить + + + + Downloader + + Download Progress + Прогресс загрузки + + + Download {} + Загрузить {} + + + Show {} in Folder + Показать {} в папке + + + + ExportDataSimple + + Enlarge + Увеличить + + + Share with single device + Поделиться с одним устройством - No signer data for the expected key_origin {expected_key_origin} found. - Данные подписывающего устройства для ожидаемого происхождения ключа {expected_key_origin} не найдены. + PSBT + PSBT - Import - Импорт + Transaction + Транзакция - Import fingerprint and xpub - Импортировать отпечаток и xpub + Not available + Недоступно - Import file or text - Импортировать файл или текст + Please enable the sync tab first + Пожалуйста, сначала включите вкладку синхронизации - Label - Метка + Please enable syncing in the wallet {wallet_id} first + Пожалуйста, сначала включите синхронизацию в кошельке {wallet_id} - Name of signing device: ...... -Location of signing device: ..... - Название подписывающего устройства: ...... Местоположение подписывающего устройства: ..... + Save as image + Сохранить как изображение - OK - ОК + Export file + Экспортировать файл - Description - Описание + Copy to clipboard + Копировать в буфер обмена - Fingerprint - Отпечаток + Copy {name} + Копировать {name} - Connect USB - Подключить USB + Copy TxId + Копировать идентификатор транзакции - Please paste descriptors into the descriptor field in the top right. - Пожалуйста, вставьте дескрипторы в поле дескриптора в правом верхнем углу. + Copy JSON + Копировать JSON - Please paste the exported file (like coldcard-export.json or sparrow-export.json) - Пожалуйста, вставьте экспортированный файл (например, coldcard-export.json или sparrow-export.json): + Share with trusted devices + Поделиться с доверенными устройствами - Please paste the exported file (like coldcard-export.json or sparrow-export.json): - Пожалуйста, вставьте экспортированный файл (например, coldcard-export.json или sparrow-export.json): + Share with all devices in {wallet_id} + Поделиться со всеми устройствами в {wallet_id} + + + FeeGroup - Please import the public key information from the hardware wallet first - Пожалуйста, сначала импортируйте информацию о публичном ключ + Fee + Комиссия - xPub Origin - Происхождение xPub + The transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + Комиссия за транзакцию составляет: {fee}, что составляет {percent}% от отправленной суммы {sent} - The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. - Происхождение xPub {key_origin} и xPub принадлежат друг другу. Пожалуйста, выберите правильную пару происхождения xPub. + The estimated transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + Приблизительная комиссия за транзакцию составляет: {fee}, что составляет {percent}% от отправленной суммы {sent} - The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} - Происхождение xPub {key_origin} не соответствует ожидаемому {expected_key_origin} для {self.get_address_type().name} + High fee rate! + Высокая ставка комиссии! - Manual - Ручной + The high prio mempool fee rate is {rate} + Ставка комиссии в высокоприоритетном мемпуле составляет {rate} - Seed - Семя + ... is the minimum to replace the existing transactions. + ... это минимум для замены существующих транзакций. - Scan - Сканировать + High fee rate + Высокая ставка комиссии - Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. - Стандарт для выбранного типа адреса {type} - {expected_key_origin}. Пожалуйста, исправьте, если вы не уверены. + High fee + Высокая комиссия - - - MempoolButtons - {n}. Block - {n}. Блок + Approximate fee rate + Приблизительная ставка комиссии - Next Block - Следующий блок + in ~{n}. Block + примерно в {n}. блоке - - - UITx_Creator - {num_inputs} Inputs: {inputs} - {num_inputs} Входы: {inputs} + {rate} is the minimum for {rbf} + {rate} это минимум для {rbf} - The inputs {inputs} conflict with these confirmed txids {txids}. - Входы {inputs} конфликтуют с этими подтвержденными идентификаторами транзакций {txids}. + Fee rate could not be determined + Ставка комиссии не может быть определена - Select a category that fits the recipient best - Выберите категорию, которая лучше всего подходит получателю + High fee ratio: {ratio}% + Высокое соотношение комиссии: {ratio}% + + + FloatingButtonBar - Add foreign UTXOs - Добавить внешние UTXO + Fill the transaction fields + Заполните поля транзакции - Add Inputs - Добавить входы + Create Transaction + Создать транзакцию - Adding outpoints {outpoints} - Добавление точек выхода {outpoints} + Yes, I see the transaction in the history + Да, я вижу транзакцию в истории - Load UTXOs - Загрузить UTXO + Previous Step + Предыдущий шаг + + + HistList - Send Category - Категория отправки + Wallet + Кошелек - The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. - Неподтвержденные зависимые транзакции {txids} будут удалены этой новой транзакцией, которую вы создаете. + Status + Статус - Please paste UTXO here - Пожалуйста, вставьте UTXO здесь + Category + Категория - Please paste UTXO here in the format txid:outpoint -txid:outpoint - Пожалуйста, вставьте UTXO здесь в формате txid:outpoint txid:outpoint + Label + Метка - Please select an input category on the left, that fits the transaction recipients. - Пожалуйста, выберите категорию входа слева, которая подходит получателям транзакции. + Amount + Сумма - Advanced - Расширенные + Balance + Баланс - Reduce future fees -by merging address balances - Снизить будущие комиссии за счет объединения балансов адресов + Txid + Txid - This checkbox automatically checks -below {rate} - Этот флажок автоматически проверяется ниже {rate} + Cannot fetch wallet '{id}'. Please open the wallet first. + Не удается получить кошелек '{id}'. Пожалуйста, сначала откройте кошелек. - MainWindow + ImportXpubs - &Version: {} - &Версия: {} + 2. Import wallet information into Bitcoin Safe + 2. Импортировать информацию о кошельке в Bitcoin Safe - &Change Password - &Изменить пароль + Skip step + Пропустить шаг - &Change/Export - &Изменить/Экспортировать + Next step + Следующий шаг - &Wallet - &Кошелек + Previous Step + Предыдущий шаг + + + KeyStoreUI - &License - &Лицензия + Import fingerprint and xpub + Импортировать отпечаток и xpub - &Settings - &Настройки + {data_type} cannot be used here. + {data_type} здесь использовать нельзя. - &Network Settings - &Настройки сети + The xpub is in SLIP132 format. Converting to standard format. + xpub в формате SLIP132. Преобразование в стандартный формат. - &New Wallet - &Новый кошелек + Import + Импорт - &About - &О программе + Manual + Ручной - &Open Wallet - &Открыть кошелек + Description + Описание - &Rename Wallet - &Переименовать кошелек + Label + Метка - &Show/Hide Tutorial - &Показать/Скрыть учебник + Fingerprint + Отпечаток - &Check for update - &Проверить наличие обновлений + xPub Origin + Происхождение xPub - &Save Current Wallet - &Сохранить текущий кошелек + xPub + xPub - &Transaction - &Транзакция + Seed + Семя - &Transaction and PSBT - &Транзакция и PSBT + OK + ОК - &Export for Coldcard - &Экспорт для Coldcard + Name of signing device: ...... +Location of signing device: ..... + Название подписывающего устройства: ...... Местоположение подписывающего устройства: ..... - &Languages - &Языки + Import file or text + Импортировать файл или текст - KYC-Exchange - KYC-Биржа + Scan + Сканировать - OK - OK + Connect USB + Подключить USB - PSBT {txid} - PSBT {txid} + {xpub} is not a valid public xpub + {xpub} не является действительным публичным xpub - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - Все файлы (*);;PSBT (*.psbt);;Транзакция (*.tx) + Please import the public key information from the hardware wallet first + Пожалуйста, сначала импортируйте информацию о публичном ключ - All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) - Все файлы (*);;Файлы JSON (*.jsonl);;Файлы JSON (*.json) + Please paste the exported file (like coldcard-export.json or sparrow-export.json): + Пожалуйста, вставьте экспортированный файл (например, coldcard-export.json или sparrow-export.json): - Paste your Bitcoin Transaction or PSBT in here or drop a file - Вставьте вашу биткойн-транзакцию или PSBT сюда или перетащите файл + Please paste the exported file (like coldcard-export.json or sparrow-export.json) + Пожалуйста, вставьте экспортированный файл (например, coldcard-export.json или sparrow-export.json): - Selected file: {file_path} - Выбранный файл: {file_path} + Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. + Стандарт для выбранного типа адреса {type} - {expected_key_origin}. Пожалуйста, исправьте, если вы не уверены. - Friends - Друзья + The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. + Происхождение xPub {key_origin} и xPub принадлежат друг другу. Пожалуйста, выберите правильную пару происхождения xPub. - Closing tab {name} - Закрытие вкладки {name} + The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} + Происхождение xPub {key_origin} не соответствует ожидаемому {expected_key_origin} для {self.get_address_type().name} - Closing wallet {id} - Закрытие кошелька {id} + No signer data for the expected key_origin {expected_key_origin} found. + Данные подписывающего устройства для ожидаемого происхождения ключа {expected_key_origin} не найдены. - Close wallet - Закрыть кошелек + Please paste descriptors into the descriptor field in the top right. + Пожалуйста, вставьте дескрипторы в поле дескриптора в правом верхнем углу. + + + LabelTimeEstimation - Close wallet {id}? - Закрыть кошелек {id}? + ~in {t} min + примерно через {t} мин - From &QR Code - Из &QR кода + ~in {t} hours + примерно через {t} часов + + + MainWindow - From &text - Из &текста + &Wallet + &Кошелек - From &file - Из &файла + Re&fresh + Об&новить - The wallet {file_path} is already open. - Кошелек {file_path} уже открыт. + &Transaction + &Транзакция - The wallet {file_path} is already open. Do you want to open the wallet anyway? - Кошелек {file_path} уже открыт. Вы хотите открыть кошелек в любом случае? + &Transaction and PSBT + &Транзакция и PSBT - No wallet open. Please open the sender wallet to edit this thransaction. - Кошелек не открыт. Пожалуйста, откройте отправляющий кошелек для редактирования этой транзакции. + From &file + Из &файла - A wallet with id {name} is already open. - Кошелек с идентификатором {name} уже открыт. + From &text + Из &текста - Wallet already open - Кошелек уже открыт + From &QR Code + Из &QR кода - new - новый + &Settings + &Настройки - Re&fresh - Об&новить + &Network Settings + &Настройки сети - Please open the sender wallet to edit this thransaction. - Откройте отправляющий кошелек для редактирования этой транзакции. + &Show/Hide Tutorial + &Показать/Скрыть учебник - Open &Recent - Открыть &Недавние + &Languages + &Языки - Open Wallet - Открыть кошелек + &New Wallet + &Новый кошелек - Open Transaction or PSBT - Открыть транзакцию или PSBT + &About + &О программе - Open Transaction/PSBT - Открыть транзакцию/PSBT + &Version: {} + &Версия: {} - Please enter the password for {filename}: - Пожалуйста, введите пароль для {filename}: + &Check for update + &Проверить наличие обновлений - Please paste your Bitcoin Transaction or PSBT in here, or drop a file - Пожалуйста, вставьте вашу биткойн-транзакцию или PSBT сюда, или перетащите файл + &License + &Лицензия Please select the wallet Пожалуйста, выберите кошелек - Please complete the wallet setup. - Пожалуйста, завершите настройку кошелька. + test + тест Please select the wallet first. Пожалуйста, сначала выберите кошелек. - There is no such file: {file_path} - Такого файла нет: {file_path} - - - test - тест + Open Transaction/PSBT + Открыть транзакцию/PSBT - Transaction {txid} - Транзакция {txid} + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + Все файлы (*);;PSBT (*.psbt);;Транзакция (*.tx) - Wallet Files (*.wallet) - Файлы кошелька (*.wallet) + Selected file: {file_path} + Выбранный файл: {file_path} - Export labels - Экспортировать метки + &Open Wallet + &Открыть кошелек - All Files (*);;JSON Files (*.json) - Все файлы (*);;Файлы JSON (*.json) + No wallet open. Please open the sender wallet to edit this thransaction. + Кошелек не открыт. Пожалуйста, откройте отправляющий кошелек для редактирования этой транзакции. - All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) - Все файлы (*);;Файлы JSONL (*.jsonl);;Файлы JSON (*.json) + Please open the sender wallet to edit this thransaction. + Откройте отправляющий кошелек для редактирования этой транзакции. - Import Electrum Wallet labels - Импортировать метки кошелька Electrum + Open Transaction or PSBT + Открыть транзакцию или PSBT - Import labels - Импортировать метки + OK + OK - - - Recipients - + Add Recipient - + Добавить получателя + Please paste your Bitcoin Transaction or PSBT in here, or drop a file + Пожалуйста, вставьте вашу биткойн-транзакцию или PSBT сюда, или перетащите файл - Recipients - Получатели + Paste your Bitcoin Transaction or PSBT in here or drop a file + Вставьте вашу биткойн-транзакцию или PSBT сюда или перетащите файл - - - MempoolProjectedBlock - ~{n}. Block - ~{n}. Блок + Transaction {txid} + Транзакция {txid} - Unconfirmed - Не подтверждено + PSBT {txid} + PSBT {txid} - - - NewWalletWelcomeScreen - 1 secure location to store the seed backup (on paper or steel) is needed - 1 надежное место для хранения резервной копии семени (на бумаге или стали) необходимо + Open Wallet + Открыть кошелек - 1 signing devices - 1 подписывающее устройство + Wallet Files (*.wallet) + Файлы кошелька (*.wallet) - 1 seed (24 secret words) is all you need to access your funds - 1 семя (24 секретных слова) - это все, что вам нужно для доступа к вашим средствам + Open &Recent + Открыть &Недавние - 2 of 3 Multi-Signature Wal - 2 из 3 мульти-подписи + The wallet {file_path} is already open. + Кошелек {file_path} уже открыт. - 3 secure locations (each with 1 seed backup + wallet descriptor are needed) - 3 надежных места (каждое с 1 резервной копией семени + дескриптор кошелька) необходимы + The wallet {file_path} is already open. Do you want to open the wallet anyway? + Кошелек {file_path} уже открыт. Вы хотите открыть кошелек в любом случае? - 3 signing devices - 3 подписывающих устройства + Wallet already open + Кошелек уже открыт - Choose Single Signature - Выбрать кошелек одиночной подписи + There is no such file: {file_path} + Такого файла нет: {file_path} - Choose Multi-Signature - Выбрать мульти-подписной кошелек + Please enter the password for {filename}: + Пожалуйста, введите пароль для {filename}: - The wallet descriptor (QR-code) is necessary to recover the wallet - Дескриптор кошелька (QR-код) необходим для восстановления кошелька + Export labels + Экспортировать метки - If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) - Если 1 семя было потеряно или украдено, все средства можно перевести в новый кошелек с 2 оставшимися семенами + дескриптор кошелька (QR-код) + All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) + Все файлы (*);;Файлы JSON (*.jsonl);;Файлы JSON (*.json) - If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately - Если вы обманом заставите хакеров получить ваше семя, ваши биткойны будут украдены немедленно + Import labels + Импортировать метки - Single Signature Wallet - Кошелек одиночной подписи + All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) + Все файлы (*);;Файлы JSONL (*.jsonl);;Файлы JSON (*.json) - Best for large funds - Лучше всего для крупных средств + Import Electrum Wallet labels + Импортировать метки кошелька Electrum - Best for medium-sized funds - Лучше всего для средних средств + &Save Current Wallet + &Сохранить текущий кошелек - Less support material online in case of recovery - Меньше материалов для поддержки онлайн в случае восстановления + All Files (*);;JSON Files (*.json) + Все файлы (*);;Файлы JSON (*.json) - Customize the wallet to your needs - Настройте кошелек в соответствии с вашими потребностями + new + новый - Cons: - Недостатки: + Friends + Друзья - Custom or restore existing Wallet - Пользовательский или восстановить существующий кошелек + KYC-Exchange + KYC-Биржа - Pros: - Преимущества: + A wallet with id {name} is already open. + Кошелек с идентификатором {name} уже открыт. - Create new wallet - Создать новый кошелек + Please complete the wallet setup. + Пожалуйста, завершите настройку кошелька. - Create custom wallet - Создать пользовательский кошелек + Close wallet {id}? + Закрыть кошелек {id}? - - - RegisterMultisig - 1. Export wallet descriptor - 1. Экспортировать дескриптор кошелька + Close wallet + Закрыть кошелек - 2. Import in the hardware signer - 2. Импортировать в аппаратное подписывающее устройство + Closing wallet {id} + Закрытие кошелька {id} - 2. Import in each hardware signer - 2. Импортировать в каждое аппаратное подписывающее устройство + Closing tab {name} + Закрытие вкладки {name} - Your balance {balance} is greater than a maximally allowed test amount of {amount}! -Please do the hardware signer reset only with a lower balance! (Send some funds out before) - Ваш баланс {balance} больше, чем максимально допустимая тестовая сумма {amount}! Пожалуйста, сбросьте аппаратное подписывающее устройство только с меньшим балансом! (Отправьте некоторые средства до) + &Change/Export + &Изменить/Экспортировать - Yes, I registered the multisig on the {n} hardware signer - Да, я зарегистрировал мультисиг на {n} аппаратном подписывающем устройстве + &Rename Wallet + &Переименовать кошелек - Previous Step - Предыдущий шаг + &Change Password + &Изменить пароль - Export file to register the multisig on Coldcard - Экспортировать файл для регистрации мультисига на Coldcard + &Export for Coldcard + &Экспорт для Coldcard - ScreenshotsExportXpub + MempoolButtons - 1. Export the wallet information from the hardware signer - 1. Экспортировать информацию о кошельке из аппаратного подписывающего устройства + Next Block + Следующий блок + + + {n}. Block + {n}. Блок - ImportXpubs + MempoolProjectedBlock - 2. Import wallet information into Bitcoin Safe - 2. Импортировать информацию о кошельке в Bitcoin Safe + Unconfirmed + Не подтверждено - Previous Step - Предыдущий шаг + ~{n}. Block + ~{n}. Блок + + + MyTreeView - Skip step - Пропустить шаг + Copy as csv + Копировать как csv - Next step - Следующий шаг + Copy + Копировать NetworkSettingsUI + + Manual + Ручной + + + Port: + Порт: + + + Mode: + Режим: + IP Address: IP-адрес: - SSL: - SSL: + Username: + Имя пользователя: + + + Password: + Пароль: Mempool Instance URL URL экземпляра Mempool - URL: - URL: + Responses: + {name}: {status} + Mempool Instance: {server} + Ответы: {name}: {status} Экземпляр Mempool: {server} Automatic Автоматический - Enable SSL - Включить SSL + Apply && Restart + Применить && Перезагрузить - Username: - Имя пользователя: + Test Connection + Тестировать соединение + + + Network Settings + Настройки сети Blockchain data source Источник данных блокчейна - Network Settings - Настройки сети + Enable SSL + Включить SSL - Responses: - {name}: {status} - Mempool Instance: {server} - Ответы: {name}: {status} Экземпляр Mempool: {server} + URL: + URL: - Password: - Пароль: + SSL: + SSL: + + + NewWalletWelcomeScreen - Port: - Порт: + Create new wallet + Создать новый кошелек - Apply && Restart - Применить && Перезагрузить + Choose Single Signature + Выбрать кошелек одиночной подписи - Mode: - Режим: + 2 of 3 Multi-Signature Wal + 2 из 3 мульти-подписи - Manual - Ручной + Best for large funds + Лучше всего для крупных средств - Test Connection - Тестировать соединение + If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) + Если 1 семя было потеряно или украдено, все средства можно перевести в новый кошелек с 2 оставшимися семенами + дескриптор кошелька (QR-код) - - - SignatureImporterClipboard - OK - OK + 3 secure locations (each with 1 seed backup + wallet descriptor are needed) + 3 надежных места (каждое с 1 резервной копией семени + дескриптор кошелька) необходимы - Paste your PSBT in here or drop a file - Вставьте ваш PSBT сюда или перетащите файл + The wallet descriptor (QR-code) is necessary to recover the wallet + Дескриптор кошелька (QR-код) необходим для восстановления кошелька - Import signed PSBT - Импортировать подписанный PSBT + 3 signing devices + 3 подписывающих устройства - Please paste your PSBT in here, or drop a file - Пожалуйста, вставьте ваш PSBT сюда или перетащите файл + Choose Multi-Signature + Выбрать мульти-подписной кошелек - - - SignatureImporterFile - OK - OK + Custom or restore existing Wallet + Пользовательский или восстановить существующий кошелек - Paste your PSBT in here or drop a file - Вставьте ваш PSBT сюда или перетащите файл + Customize the wallet to your needs + Настройте кошелек в соответствии с вашими потребностями - Please paste your PSBT in here, or drop a file - Пожалуйста, вставьте ваш PSBT сюда или перетащите файл + Single Signature Wallet + Кошелек одиночной подписи - - - ExportDataSimple - PSBT - PSBT + Less support material online in case of recovery + Меньше материалов для поддержки онлайн в случае восстановления - Copy {name} - Копировать {name} + Create custom wallet + Создать пользовательский кошелек - Copy JSON - Копировать JSON + Best for medium-sized funds + Лучше всего для средних средств - Copy to clipboard - Копировать в буфер обмена + Pros: + Преимущества: - Copy TxId - Копировать идентификатор транзакции + 1 seed (24 secret words) is all you need to access your funds + 1 семя (24 секретных слова) - это все, что вам нужно для доступа к вашим средствам - Not available - Недоступно + 1 secure location to store the seed backup (on paper or steel) is needed + 1 надежное место для хранения резервной копии семени (на бумаге или стали) необходимо - Share with trusted devices - Поделиться с доверенными устройствами + Cons: + Недостатки: - Share with single device - Поделиться с одним устройством + If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately + Если вы обманом заставите хакеров получить ваше семя, ваши биткойны будут украдены немедленно - Share with all devices in {wallet_id} - Поделиться со всеми устройствами в {wallet_id} + 1 signing devices + 1 подписывающее устройство + + + NostrSync - Please enable the sync tab first - Пожалуйста, сначала включите вкладку синхронизации + Go to {untrusted} + Перейти к {untrusted} - Please enable syncing in the wallet {wallet_id} first - Пожалуйста, сначала включите синхронизацию в кошельке {wallet_id} + To complete the connection, accept my {id} request on the other device {other}. + Для завершения соединения примите мой запрос {id} на другом устройстве {other}. + + + NotificationBarRegtest - Save as image - Сохранить как изображение + Change Network + Изменить сеть - Transaction - Транзакция + Network = {network}. The coins are worthless! + Сеть = {network}. Монеты без ценности! + + + + PasswordCreation + + Create Password + Создать пароль - Enlarge - Увеличить + Enter your password: + Введите ваш пароль: - Export file - Экспортировать файл + Show Password + Показать пароль - - - HistList - Txid - Txid + Re-enter your password: + Введите пароль еще раз: - Balance - Баланс + Submit + Отправить - Category - Категория + Hide Password + Скрыть пароль - Wallet - Кошелек + Passwords do not match! + Пароли не совпадают! - Label - Метка + Error + Ошибка + + + PasswordQuestion - Cannot fetch wallet '{id}'. Please open the wallet first. - Не удается получить кошелек '{id}'. Пожалуйста, сначала откройте кошелек. + Password Input + Ввод пароля - Status - Статус + Please enter your password: + Пожалуйста, введите ваш пароль: - Amount - Сумма + Submit + Отправить - AddressDialog + QTProtoWallet - Address - Адрес + Setup wallet + Настройка кошелька + + + QTWallet - Receiving address of wallet '{wallet_id}' (with index {index}) - Адрес получения кошелька '{wallet_id}' (с индексом {index}) + Send + Отправить - Change address of wallet '{wallet_id}' (with index {index}) - Адрес сдачи кошелька '{wallet_id}' (с индексом {index}) + Password incorrect + Неверный пароль - Details - Детали + Change password + Изменить пароль - Address descriptor - Описание адреса + New password: + Новый пароль: - Advanced - Расширенные + Wallet saved + Кошелек сохранен - Script Pubkey - Скрипт публичного ключа + The transactions {txs} in wallet '{wallet}' were removed from the history!!! + Транзакции {txs} в кошельке '{wallet}' были удалены из истории!!! - - - AddressList - Address - Адрес + New transaction in wallet '{wallet}': +{txs} + Новая транзакция в кошельке '{wallet}': {txs} - Address {address} - Адрес {address} + New transactions in wallet '{wallet}': +{txs} + Новые транзакции в кошельке '{wallet}': {txs} - receiving address - адрес получения + Click for new address + Нажмите для нового адреса - change address - адрес сдачи + Descriptor + Дескриптор - Balance - Баланс + Sync + Синхронизация - Fiat Balance - Баланс в фиатной валюте + History + История - Details - Детали + Receive + Получить - Index - Индекс + No changes to apply. + Нет изменений для применения. - Category - Категория + Backup saved to {filename} + Резервная копия сохранена в {filename} - Copy as csv - Копировать в CSV + Backup failed. Aborting Changes. + Не удалось сохранить резервную копию. Изменения отменены. - Label - Метка + Cannot move the wallet file, because {file_path} exists + Не удается переместить файл кошелька, потому что {file_path} существует + + + ReceiveTest - receiving - получение + Received {amount} + Получено {amount} - View on block explorer - Посмотреть в блок-эксплорере + No wallet setup yet + Настройка кошелька еще не завершена - change - сдача + Receive a small amount {test_amount} to an address of this wallet + Получите небольшую сумму {test_amount} на адрес этого кошелька - Type - Тип + Next step + Следующий шаг - Tx - Транзакция + Check if received + Проверьте, получено ли - Export Labels - Экспортировать метки + Previous Step + Предыдущий шаг @@ -1155,482 +1280,472 @@ Please do the hardware signer reset only with a lower balance! (Send some fund Адрес - Enter address here - Введите адрес здесь + Label + Метка - Enter label for recipient address - Введите метку для адреса получателя + Amount + Сумма Enter label here Введите метку здесь - Wallet "{id}" - Кошелек "{id}" + Send max + Отправить максимум - Label - Метка + Enter address here + Введите адрес здесь - Send max - Отправить максимум + Enter label for recipient address + Введите метку для адреса получателя - Amount - Сумма + Wallet "{id}" + Кошелек "{id}" - UTXOList + Recipients - Address - Адрес + Recipients + Получатели - Category - Категория + + Add Recipient + + Добавить получателя + + + RegisterMultisig - Wallet - Кошелек + Export file to register the multisig on Coldcard + Экспортировать файл для регистрации мультисига на Coldcard - Label - Метка + Your balance {balance} is greater than a maximally allowed test amount of {amount}! +Please do the hardware signer reset only with a lower balance! (Send some funds out before) + Ваш баланс {balance} больше, чем максимально допустимая тестовая сумма {amount}! Пожалуйста, сбросьте аппаратное подписывающее устройство только с меньшим балансом! (Отправьте некоторые средства до) - Parents - Родители + 1. Export wallet descriptor + 1. Экспортировать дескриптор кошелька - Amount - Сумма + Yes, I registered the multisig on the {n} hardware signer + Да, я зарегистрировал мультисиг на {n} аппаратном подписывающем устройстве - Outpoint - Точка выхода + Previous Step + Предыдущий шаг - - - BitcoinQuickReceive - Receive Address - Адрес получения + 2. Import in each hardware signer + 2. Импортировать в каждое аппаратное подписывающее устройство - Quick Receive - Быстрое получение + 2. Import in the hardware signer + 2. Импортировать в аппаратное подписывающее устройство - recipients + ScreenshotsExportXpub - Address Already Used - Адрес уже использован + 1. Export the wallet information from the hardware signer + 1. Экспортировать информацию о кошельке из аппаратного подписывающего устройства - WalletBalanceChart - - Balance ({unit}) - Баланс ({unit}) - + ScreenshotsGenerateSeed - Date - Дата + Generate 24 secret seed words on each hardware signer + Сгенерировать 24 секретных семенных слова на каждом аппаратном подписывающем устройстве - ConfirmedBlock + ScreenshotsRegisterMultisig - Block {n} - Блок {n} + Import the multisig information in the hardware signer + Импортировать информацию о мультисиге в аппаратное подписывающее устройство - BuyHardware - - Do you need to buy a hardware signer? - Вам нужно купить аппаратный подписывающий устройство? - - - Turn on your hardware signer - Включите ваше аппаратное подписывающее устройство - - - Turn on your {n} hardware signers - Включите ваши {n} аппаратных подписывающих устройств - + ScreenshotsResetSigner - Buy a {name} - Купить {name} + Reset the hardware signer. + Сбросить аппаратное подписывающее устройство. + + + ScreenshotsRestoreSigner - Buy a Coldcard -5% off - Купить Coldcard со скидкой 5% + Restore the hardware signer. + Восстановить аппаратное подписывающее устройство. - PasswordCreation + ScreenshotsViewSeed - Enter your password: - Введите ваш пароль: + Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. +If you make a mistake here, your money is lost! + Сравните 24 слова на бумаге для резервной копии с 'Просмотреть семенные слова' от Coldcard. Если вы здесь допустите ошибку, ваши деньги будут потеряны! + + + SendTest - Re-enter your password: - Введите пароль еще раз: + You made {n} outgoing transactions already. Would you like to skip this spend test? + У вас уже было {n} исходящих транзакций. Хотели бы вы пропустить этот тест на расход? - Submit - Отправить + Skip spend test? + Пропустить тест на расход? - Error - Ошибка + Complete the send test to ensure the hardware signer works! + Завершите тест отправки, чтобы убедиться, что аппаратное подписывающее устройство работает! + + + SignatureImporterClipboard - Passwords do not match! - Пароли не совпадают! + Import signed PSBT + Импортировать подписанный PSBT - Show Password - Показать пароль + OK + OK - Hide Password - Скрыть пароль + Please paste your PSBT in here, or drop a file + Пожалуйста, вставьте ваш PSBT сюда или перетащите файл - Create Password - Создать пароль + Paste your PSBT in here or drop a file + Вставьте ваш PSBT сюда или перетащите файл - mytreeview + SignatureImporterFile - Type to search... - Введите для поиска... + OK + OK - Type to filter - Фильтр по типу + Please paste your PSBT in here, or drop a file + Пожалуйста, вставьте ваш PSBT сюда или перетащите файл - Export as CSV - Экспортировать как CSV + Paste your PSBT in here or drop a file + Вставьте ваш PSBT сюда или перетащите файл - ChatGui - - Type your message here... - Введите свое сообщение здесь... - - - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - Все файлы (*);;PSBT (*.psbt);;Транзакция (*.tx) - - - Open Transaction/PSBT - Открыть транзакцию/PSBT - + SignatureImporterQR - Send - Отправить + Scan QR code + Сканировать QR-код - Share a PSBT - Поделиться PSBT + The txid of the signed psbt doesnt match the original txid + Идентификатор транзакции подписанного psbt не совпадает с оригинальным txid - Me: {text} - Я: {text} + bitcoin_tx libary error. The txid should not be changed during finalizing + Ошибка библиотеки bitcoin_tx. Идентификатор транзакции не должен быть изменен во время финализации - PasswordQuestion - - Password Input - Ввод пароля - + SignatureImporterUSB - Submit - Отправить + USB Signing + Подпись USB - Please enter your password: - Пожалуйста, введите ваш пароль: + Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. + Пожалуйста, сделайте 'Кошелек --> Экспорт --> Экспорт для ...' и зарегистрируйте мультисигнатурный кошелек на аппаратном подписывающем устройстве. - address_list + SignatureImporterWallet - All status - Весь статус + The txid of the signed psbt doesnt match the original txid. Aborting + Идентификатор транзакции подписанного psbt не совпадает с оригинальным Идентификатором транзакции. Прерывание + + + SyncTab - All types - Все типы + Encrypted syncing to trusted devices + Зашифрованная синхронизация с доверенными устройствами - Used - Использованный + Open received Transactions and PSBTs automatically in a new tab + Открывать полученные транзакции и PSBT автоматически в новой вкладке - Unused - Неиспользованный + Opening {name} from {author} + Открываю {name} от {author} - Receiving - Получение + Received message '{description}' from {author} + Получено сообщение '{description}' от {author} + + + TrustedDevice - Change - Сдача + Device id: {id} + Идентификатор устройства: {id} - Funded - Финансированный + Syncing Address labels + Синхронизация меток адресов - Funded or Unused - Финансированный или неиспользованный + Can share Transactions + Может делиться транзакциями - hist_list - - All status - Весь статус - + TxSigningSteps - All types - Все типы + Export transaction to any hardware signer + Экспортировать транзакцию на любое аппаратное подписывающее устройство - Details - Детали + Sign with a different hardware signer + Подписать другим аппаратным подписывающим устройством - Used - Использованный + Import signature + Импортировать подпись - Copy as csv - Копировать как csv + Transaction signed with the private key belonging to {label} + Транзакция подписана частным ключом, принадлежащим {label} + + + UITx_Creator - Unused - Неиспользованный + Select a category that fits the recipient best + Выберите категорию, которая лучше всего подходит получателю - Receiving - Получение + Add Inputs + Добавить входы - Try cancel transaction (RBF) - Попробовать отменить транзакцию (RBF) + Load UTXOs + Загрузить UTXO - View on block explorer - Посмотреть в блок-эксплорере + Please paste UTXO here in the format txid:outpoint +txid:outpoint + Пожалуйста, вставьте UTXO здесь в формате txid:outpoint txid:outpoint - Edit with higher fee (RBF) - Редактировать с высокой комиссией (RBF) + Please paste UTXO here + Пожалуйста, вставьте UTXO здесь - Change - Сдача + The inputs {inputs} conflict with these confirmed txids {txids}. + Входы {inputs} конфликтуют с этими подтвержденными идентификаторами транзакций {txids}. - Funded - Финансированный + The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. + Неподтвержденные зависимые транзакции {txids} будут удалены этой новой транзакцией, которую вы создаете. - Funded or Unused - Финансированный или неиспользованный + Reduce future fees +by merging address balances + Снизить будущие комиссии за счет объединения балансов адресов - Export binary transactions - Экспортировать бинарные транзакции + Send Category + Категория отправки - - - WalletSteps - Turn on hardware signer - Включить аппаратное подписывающее устройство + Advanced + Расширенные - Register multisig on signers - Зарегистрировать мультисиг на подписывающих устройствах + Add foreign UTXOs + Добавить внешние UTXO - and - и + This checkbox automatically checks +below {rate} + Этот флажок автоматически проверяется ниже {rate} - Import signer info - Импортировать информацию о подписывающем устройстве + Please select an input category on the left, that fits the transaction recipients. + Пожалуйста, выберите категорию входа слева, которая подходит получателям транзакции. - The wallet is not funded. Please fund the wallet. - Кошелек не финансирован. Пожалуйста, финансируйте кошелек. + {num_inputs} Inputs: {inputs} + {num_inputs} Входы: {inputs} - Sign with {label} - Подписать {label} + Adding outpoints {outpoints} + Добавление точек выхода {outpoints} + + + UITx_Viewer - Put in secure locations - Поместить в надежные места + Inputs + Входы - Validate Backup - Проверить резервную копию + Recipients + Получатели - Send test - Провести тест отправки + Edit + Редактировать - Send test {j} - Провести тест отправки {j} + Edit with increased fee (RBF) + Редактировать с увеличенной комиссией (RBF) - Receive Test - Провести тест получения + Previous step + Предыдущий шаг - Backup Seed - Резервное копирование семени + Next step + Следующий шаг - Generate Seed - Сгенерировать семя + Send + Отправить - You must have an initilized wallet first - Сначала у вас должен быть инициализированный кошелек + Invalid Signatures + Недействительные подписи - Send Test - Тест отправки + The txid of the signed psbt doesnt match the original txid + Идентификатор транзакции подписанного psbt не совпадает с оригинальным txid - ScreenshotsRestoreSigner + UTXOList - Restore the hardware signer. - Восстановить аппаратное подписывающее устройство. + Wallet + Кошелек - - - DescriptorUI - Paste or scan your descriptor, if you restore a wallet. - Вставьте или отсканируйте ваш дескриптор, если вы восстанавливаете кошелек. + Outpoint + Точка выхода - Scan Address Limit - Лимит сканирования адресов + Address + Адрес - Required Signers - Необходимые подписывающие устройства + Category + Категория - This "descriptor" contains all information to reconstruct the wallet. -Please back up this descriptor to be able to recover the funds! - Этот "дескриптор" содержит всю информацию для воссоздания кошелька. Пожалуйста, сделайте резервную копию этого дескриптора, чтобы иметь возможность восстановить средства! + Label + Метка - - - UITx_Viewer - Inputs - Входы + Amount + Сумма - The txid of the signed psbt doesnt match the original txid - Идентификатор транзакции подписанного psbt не совпадает с оригинальным txid + Parents + Родители + + + UnTrustedDevice - Invalid Signatures - Недействительные подписи + Trust {id} + Доверять {id} - Send - Отправить + Accept trust request from {other} + Принять запрос доверия от {other} + + + UpdateNotificationBar - Recipients - Получатели + Check for Update + Проверить наличие обновлений - Previous step - Предыдущий шаг + Signature verified. + Подпись проверена. - Edit - Редактировать + New version available {tag} + Новая версия доступна {tag} - Edit with increased fee (RBF) - Редактировать с увеличенной комиссией (RBF) + You have already the newest version. + У вас уже есть последняя версия. - Next step - Следующий шаг + No update found + Обновление не найдено - - - net_conf - You can setup {link} with an electrum server on {server} and a block explorer on {explorer} - Вы можете настроить {link} с электрум-сервером на {server} и блок-эксплорером на {explorer} + Could not verify the download. Please try again later. + Не удалось проверить загрузку. Пожалуйста, попробуйте позже. - You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} - Вы можете настроить {setup} с сервером esplora на {server} и блок-эксплорером на {explorer} + Please install {link} to automatically verify the signature of the update. + Пожалуйста, установите {link}, чтобы автоматически проверить подпись обновления. - You can connect your own Bitcoin node, such as {link}. - Вы можете подключить свой собственный биткойн-узел, например {link}. + Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. + Пожалуйста, установите GPG через "sudo apt-get -y install gpg", чтобы автоматически проверить подпись обновления. - Run your bitcoind with "bitcoind -chain=regtest" - Запустите ваш bitcoind с "bitcoind -chain=regtest" + Please install GPG via "brew install gnupg" to automatically verify the signature of the update. + Пожалуйста, установите GPG через "brew install gnupg", чтобы автоматически проверить подпись обновления. - Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. - Запустите ваш bitcoind с "bitcoind -chain=signet" Это, однако, другой signet, чем mutinynet.com. + Signature doesn't match!!! Please try again. + Подпись не совпадает!!! Попробуйте еще раз. + + + UtxoListWithToolbar - Run your bitcoind with "bitcoind -chain=test" - Запустите ваш bitcoind с "bitcoind -chain=test" + {amount} selected + {amount} выбрано + + + ValidateBackup - The server can associate your IP address with the wallet addresses. -It is best to use your own server, such as {link}. - Сервер может ассоциировать ваш IP-адрес с адресами кошелька. Лучше всего использовать свой собственный сервер, например {link}. + Yes, I am sure all 24 words are correct + Да, я уверен, что все 24 слова верны - A good option is {link} and a block explorer on {explorer}. - Хороший вариант - {link} и блок-эксплорер на {explorer}. + Previous Step + Предыдущий шаг + + + WalletBalanceChart - A good option is {link} and a block explorer on {explorer}. There is a {faucet}. - Хороший вариант - {link} и блок-эксплорер на {explorer}. Есть {faucet}. + Balance ({unit}) + Баланс ({unit}) - This is a private and fast way to connect to the bitcoin network. - Это приватный и быстрый способ подключения к биткойн-сети. + Date + Дата @@ -1643,633 +1758,559 @@ It is best to use your own server, such as {link}. Wallet name: Имя кошелька: - - A wallet with the same name already exists. - Кошелек с таким именем уже существует. - Error Ошибка + + A wallet with the same name already exists. + Кошелек с таким именем уже существует. + - DistributeSeeds + WalletSteps - Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. - Выберите надежные места тщательно, учитывая, что вам нужно посетить {m} из {n}, чтобы потратить средства из вашего мультисиг-кошелька. + You must have an initilized wallet first + Сначала у вас должен быть инициализированный кошелек - Finish - Завершить + Validate Backup + Проверить резервную копию - Place each seed backup and hardware signer in a secure location, such: - Поместите каждую резервную копию семени и аппаратное подписывающее устройство в надежное место, например: + Receive Test + Провести тест получения - The seed backup (24 words) give total control over the funds. - Резервная копия семени (24 слова) дает полный контроль над средствами. + Put in secure locations + Поместить в надежные места - Seed backup {j} and hardware signer {j} should be in location {j} - Резервная копия семени {j} и аппаратное подписывающее устройство {j} должны находиться в месте {j} + Register multisig on signers + Зарегистрировать мультисиг на подписывающих устройствах - Store the hardware signer in secure location. - Храните аппаратное подписывающее устройство внадежном месте. надежном месте. + Send test {j} + Провести тест отправки {j} - Store the seed backup in a <b>very</b> secure location (like a vault). - Храните резервную копию семени в <b>очень</b> надежном месте (например, в сейфе). + Send test + Провести тест отправки - - - AddressListWithToolbar - Generate to selected adddresses - Генерировать на выбранные адреса + and + и - Show Filter - Показать фильтр + Send Test + Тест отправки - Export Labels - Экспортировать метки + Sign with {label} + Подписать {label} - - - FloatingButtonBar - Yes, I see the transaction in the history - Да, я вижу транзакцию в истории + The wallet is not funded. Please fund the wallet. + Кошелек не финансирован. Пожалуйста, финансируйте кошелек. - Fill the transaction fields - Заполните поля транзакции + Turn on hardware signer + Включить аппаратное подписывающее устройство - Previous Step - Предыдущий шаг + Generate Seed + Сгенерировать семя - Create Transaction - Создать транзакцию + Import signer info + Импортировать информацию о подписывающем устройстве + + + Backup Seed + Резервное копирование семени - ValidateBackup + address_list - Yes, I am sure all 24 words are correct - Да, я уверен, что все 24 слова верны + All status + Весь статус - Previous Step - Предыдущий шаг + Unused + Неиспользованный - - - BalanceChart - Date - Дата + Funded + Финансированный - - - QTWallet - Descriptor - Дескриптор + Used + Использованный - Change password - Изменить пароль + Funded or Unused + Финансированный или неиспользованный - History - История + All types + Все типы - Wallet saved - Кошелек сохранен + Receiving + Получение + + + Change + Сдача + + + + basetab + + Next step + Следующий шаг + + + Previous Step + Предыдущий шаг + + + d - Click for new address - Нажмите для нового адреса + Signer {i} + Подписывающее устройство {i} - Cannot move the wallet file, because {file_path} exists - Не удается переместить файл кошелька, потому что {file_path} существует + Open Transaction/PSBT + Открыть транзакцию/PSBT - Backup failed. Aborting Changes. - Не удалось сохранить резервную копию. Изменения отменены. + Recovery Signer {i} + Восстановительное подписывающее устройство {i} - Password incorrect - Неверный пароль + Text copied to Clipboard + Текст скопирован в буфер обмена - No changes to apply. - Нет изменений для применения. + {} copied to Clipboard + {} скопировано в буфер обмена - New password: - Новый пароль: + Read QR code from camera + Считать QR-код с камеры - Send - Отправить + Copy to clipboard + Копировать в буфер обмена - Receive - Получить + Create PDF + Создать PDF - Backup saved to {filename} - Резервная копия сохранена в {filename} + Create random mnemonic + Создать случайное мнемоническое выражение - Sync - Синхронизация + Open file + Открыть файл descriptor - Wallet Descriptor - Дескриптор кошелька + Wallet Type + Тип кошелька Address Type Тип адреса - Wallet Type - Тип кошелька + Wallet Descriptor + Дескриптор кошелька - NostrSync + hist_list - To complete the connection, accept my {id} request on the other device {other}. - Для завершения соединения примите мой запрос {id} на другом устройстве {other}. + All status + Весь статус - Go to {untrusted} - Перейти к {untrusted} + View on block explorer + Посмотреть в блок-эксплорере - - - tageditor - Add new {name} - Добавить новый {name} + Copy as csv + Копировать как csv - Delete {name} - Удалить {name} + Export binary transactions + Экспортировать бинарные транзакции - This {name} exists already. - Этот {name} уже существует. + Edit with higher fee (RBF) + Редактировать с высокой комиссией (RBF) - - - ConnectedDevices - Trusted - Доверенный + Try cancel transaction (RBF) + Попробовать отменить транзакцию (RBF) - My id: {id} - Мой идентификатор: {id} + Unused + Неиспользованный - UnTrusted - Недоверенный + Funded + Финансированный - Reset identity for this device - Сбросить идентификацию для этого устройства + Used + Использованный - - - UnTrustedDevice - Trust {id} - Доверять {id} + Funded or Unused + Финансированный или неиспользованный - Accept trust request from {other} - Принять запрос доверия от {other} + All types + Все типы - - - SendTest - Complete the send test to ensure the hardware signer works! - Завершите тест отправки, чтобы убедиться, что аппаратное подписывающее устройство работает! + Receiving + Получение - Skip spend test? - Пропустить тест на расход? + Change + Сдача - You made {n} outgoing transactions already. Would you like to skip this spend test? - У вас уже было {n} исходящих транзакций. Хотели бы вы пропустить этот тест на расход? + Details + Детали - CloseButton + lib_load - Close - Закрыть + You are missing the {link} +Please install it. + У вас отсутствует {link}. Пожалуйста, установите его. - BackupSeed - - Write the 24-word seed onto the printed pdf. - Записать 24-словное семя на распечатанном PDF. - - - Write each 24-word seed onto the printed pdf. - Записать каждое 24-словное семя на распечатанном PDF. - - - Please complete the previous steps. - Пожалуйста, завершите предыдущие шаги. - + menu - Previous Step - Предыдущий шаг + Import Labels + Импортировать метки - Print the pdf (it also contains the wallet descriptor) - Распечатать PDF (он также содержит описание кошелька) + Import Labels (BIP329 / Sparrow) + Импортировать метки (BIP329 / Sparrow) - Print recovery sheet - Распечатать лист восстановления + Import Labels (Electrum Wallet) + Импортировать метки (кошелек Electrum) - SyncTab - - Encrypted syncing to trusted devices - Зашифрованная синхронизация с доверенными устройствами - + mytreeview - Open received Transactions and PSBTs automatically in a new tab - Открывать полученные транзакции и PSBT автоматически в новой вкладке + Type to search... + Введите для поиска... - Opening {name} from {author} - Открываю {name} от {author} + Type to filter + Фильтр по типу - Received message '{description}' from {author} - Получено сообщение '{description}' от {author} + Export as CSV + Экспортировать как CSV - SignatureImporterQR + net_conf - The txid of the signed psbt doesnt match the original txid - Идентификатор транзакции подписанного psbt не совпадает с оригинальным txid + This is a private and fast way to connect to the bitcoin network. + Это приватный и быстрый способ подключения к биткойн-сети. - bitcoin_tx libary error. The txid should not be changed during finalizing - Ошибка библиотеки bitcoin_tx. Идентификатор транзакции не должен быть изменен во время финализации + Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. + Запустите ваш bitcoind с "bitcoind -chain=signet" Это, однако, другой signet, чем mutinynet.com. - Scan QR code - Сканировать QR-код + The server can associate your IP address with the wallet addresses. +It is best to use your own server, such as {link}. + Сервер может ассоциировать ваш IP-адрес с адресами кошелька. Лучше всего использовать свой собственный сервер, например {link}. - - - SignatureImporterWallet - The txid of the signed psbt doesnt match the original txid. Aborting - Идентификатор транзакции подписанного psbt не совпадает с оригинальным Идентификатором транзакции. Прерывание + You can setup {link} with an electrum server on {server} and a block explorer on {explorer} + Вы можете настроить {link} с электрум-сервером на {server} и блок-эксплорером на {explorer} - - - TrustedDevice - Device id: {id} - Идентификатор устройства: {id} + A good option is {link} and a block explorer on {explorer}. + Хороший вариант - {link} и блок-эксплорер на {explorer}. - Can share Transactions - Может делиться транзакциями + A good option is {link} and a block explorer on {explorer}. There is a {faucet}. + Хороший вариант - {link} и блок-эксплорер на {explorer}. Есть {faucet}. - Syncing Address labels - Синхронизация меток адресов + You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} + Вы можете настроить {setup} с сервером esplora на {server} и блок-эксплорером на {explorer} - - - NotificationBarRegtest - Change Network - Изменить сеть + You can connect your own Bitcoin node, such as {link}. + Вы можете подключить свой собственный биткойн-узел, например {link}. - Network = {network}. The coins are worthless! - Сеть = {network}. Монеты без ценности! + Run your bitcoind with "bitcoind -chain=regtest" + Запустите ваш bitcoind с "bitcoind -chain=regtest" + + + Run your bitcoind with "bitcoind -chain=test" + Запустите ваш bitcoind с "bitcoind -chain=test" - ScreenshotsRegisterMultisig + recipients - Import the multisig information in the hardware signer - Импортировать информацию о мультисиге в аппаратное подписывающее устройство + Address Already Used + Адрес уже использован - menu + tageditor - Import Labels - Импортировать метки + Delete {name} + Удалить {name} - Import Labels (BIP329 / Sparrow) - Импортировать метки (BIP329 / Sparrow) + Add new {name} + Добавить новый {name} - Import Labels (Electrum Wallet) - Импортировать метки (кошелек Electrum) + This {name} exists already. + Этот {name} уже существует. - TxSigningSteps - - Import signature - Импортировать подпись - + tutorial - Sign with a different hardware signer - Подписать другим аппаратным подписывающим устройством + Never share the 24 secret words with anyone! + Никогда не делитесь 24 секретными словами с кем-либо! - Transaction signed with the private key belonging to {label} - Транзакция подписана частным ключом, принадлежащим {label} + Never type them into any computer or cellphone! + Никогда не вводите их в какой-либо компьютер или мобильный телефон! - Export transaction to any hardware signer - Экспортировать транзакцию на любое аппаратное подписывающее устройство + Never make a picture of them! + Никогда не делайте фотографии их! - CategoryEditor + util - category - категория + Unconfirmed + Не подтверждено - - - MyTreeView - Copy - Копировать + Failed to export to file. + Не удалось экспортировать в файл. - Copy as csv - Копировать как csv + Balance: {amount} + Баланс: {amount} - - - utxo_list - Copy txid:out - Копировать txid:out + Unknown + Неизвестно - Copy as csv - Копировать как csv + {} seconds ago + {} секунд назад - Unconfirmed UTXO - Не подтвержденный UTXO + in {} seconds + через {} секунд - Unconfirmed UTXO is spent by transaction {is_spent_by_txid} - Не подтвержденный UTXO потрачен транзакцией {is_spent_by_txid} + less than a minute ago + менее минуты назад - Open transaction - Открыть транзакцию + in less than a minute + менее чем через минуту - View on block explorer - Посмотреть в блок-эксплорере + about {} minutes ago + около {} минут назад - - - wallet - Local - Локальный + in about {} minutes + примерно через {} минут + + + about 1 hour ago + около 1 часа назад Unconfirmed parent Не подтвержденный родитель - Unconfirmed - Не подтверждено + in about 1 hour + примерно через 1 час - Confirmed - Подтверждено + about {} hours ago + около {} часов назад - - - BTCSpinBox - Max ≈ {amount} - Макс. ≈ {amount} + in about {} hours + примерно через {} часов - - - QTProtoWallet - Setup wallet - Настройка кошелька + about 1 day ago + около 1 дня назад - - - ReceiveTest - No wallet setup yet - Настройка кошелька еще не завершена + in about 1 day + примерно через 1 день - Received {amount} - Получено {amount} + about {} days ago + около {} дней назад - Receive a small amount {test_amount} to an address of this wallet - Получите небольшую сумму {test_amount} на адрес этого кошелька + in about {} days + примерно через {} дней - Previous Step - Предыдущий шаг + about 1 month ago + около 1 месяца назад - Check if received - Проверьте, получено ли + in about 1 month + примерно через 1 месяц - Next step - Следующий шаг + about {} months ago + около {} месяцев назад - - - DescriptorEdit - Wallet setup not finished. Please finish before creating a Backup pdf. - Настройка кошелька не завершена. Пожалуйста, завершите перед созданием резервной копии в PDF. + Not Verified + Не проверено - - - Balance - Unconfirmed - Не подтверждено + in about {} months + примерно через {} месяцев - Unmatured - Не созревшее + about 1 year ago + около 1 года назад - Confirmed - Подтверждено + in about 1 year + примерно через 1 год - - - tutorial - Never type them into any computer or cellphone! - Никогда не вводите их в какой-либо компьютер или мобильный телефон! + over {} years ago + более {} лет назад - Never make a picture of them! - Никогда не делайте фотографии их! + in over {} years + через более {} лет - Never share the 24 secret words with anyone! - Никогда не делитесь 24 секретными словами с кем-либо! + Cannot bump fee + Нельзя повысить комиссию - - - UpdateNotificationBar - New version available {tag} - Новая версия доступна {tag} + Cannot cancel transaction + Нельзя отменить транзакцию - No update found - Обновление не найдено + Cannot create child transaction + Нельзя создать дочернюю транзакцию - Please install {link} to automatically verify the signature of the update. - Пожалуйста, установите {link}, чтобы автоматически проверить подпись обновления. + Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files + Обнаружено повреждение файла кошелька. Пожалуйста, восстановите свой кошелек из семени и сравните адреса в обоих файлах - Please install GPG via "brew install gnupg" to automatically verify the signature of the update. - Пожалуйста, установите GPG через "brew install gnupg", чтобы автоматически проверить подпись обновления. + Local + Локальный - Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. - Пожалуйста, установите GPG через "sudo apt-get -y install gpg", чтобы автоматически проверить подпись обновления. + Insufficient funds + Недостаточно средств - Check for Update - Проверить наличие обновлений + Dynamic fee estimates not available + Динамические оценки комиссии недоступны - You have already the newest version. - У вас уже есть последняя версия. + Incorrect password + Неправильный пароль - - - SignatureImporterUSB - USB Signing - Подпись USB + Transaction is unrelated to this wallet. + Транзакция не относится к этому кошельку. - Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. - Пожалуйста, сделайте 'Кошелек --> Экспорт --> Экспорт для ...' и зарегистрируйте мультисигнатурный кошелек на аппаратном подписывающем устройстве. + Failed to import from file. + Не удалось импортировать из файла. - BlockingWaitingDialog + utxo_list - Please wait - Пожалуйста, подождите + Unconfirmed UTXO is spent by transaction {is_spent_by_txid} + Не подтвержденный UTXO потрачен транзакцией {is_spent_by_txid} - - - basetab - Previous Step - Предыдущий шаг + Unconfirmed UTXO + Не подтвержденный UTXO - Next step - Следующий шаг + Open transaction + Открыть транзакцию - - - LabelTimeEstimation - ~in {t} min - примерно через {t} мин + View on block explorer + Посмотреть в блок-эксплорере - ~in {t} hours - примерно через {t} часов + Copy txid:out + Копировать txid:out - - - ScreenshotsResetSigner - Reset the hardware signer. - Сбросить аппаратное подписывающее устройство. + Copy as csv + Копировать как csv - ScreenshotsGenerateSeed + wallet - Generate 24 secret seed words on each hardware signer - Сгенерировать 24 секретных семенных слова на каждом аппаратном подписывающем устройстве + Confirmed + Подтверждено - - - ScreenshotsViewSeed - Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. -If you make a mistake here, your money is lost! - Сравните 24 слова на бумаге для резервной копии с 'Просмотреть семенные слова' от Coldcard. Если вы здесь допустите ошибку, ваши деньги будут потеряны! + Unconfirmed + Не подтверждено - - - lib_load - You are missing the {link} -Please install it. - У вас отсутствует {link}. Пожалуйста, установите его. + Unconfirmed parent + Не подтвержденный родитель - - - UtxoListWithToolbar - {amount} selected - {amount} выбрано + Local + Локальный diff --git a/bitcoin_safe/gui/locales/app_zh_CN.qm b/bitcoin_safe/gui/locales/app_zh_CN.qm index b769d41b7814f26ee70f2a1f950e35357d238379..5bf63491a62886b7887cc3b6565c85b2b3abcfa9 100644 GIT binary patch delta 5002 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 LWtG>~Sy}%N#*e;0 diff --git a/bitcoin_safe/gui/locales/app_zh_CN.ts b/bitcoin_safe/gui/locales/app_zh_CN.ts index f347d09..a178ede 100644 --- a/bitcoin_safe/gui/locales/app_zh_CN.ts +++ b/bitcoin_safe/gui/locales/app_zh_CN.ts @@ -2,882 +2,972 @@ - FeeGroup + AddressDialog - ... is the minimum to replace the existing transactions. - ...是替换现有交易的最低限度。 + Address + 地址 - {rate} is the minimum for {rbf} - {rate}是{rbf}的最低费率 + Receiving address of wallet '{wallet_id}' (with index {index}) + 接收钱包'{wallet_id}'的地址(索引为{index}) - The transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - 交易费用为:{fee},即发送值{sent}的{percent}% + Change address of wallet '{wallet_id}' (with index {index}) + 钱包'{wallet_id}'的找零地址(索引为{index}) - Approximate fee rate - 大约费率 + Script Pubkey + 脚本公钥 - Fee rate could not be determined - 无法确定费率 + Address descriptor + 地址描述 - in ~{n}. Block - 约在{n}个区块 + Details + 详细信息 - Fee - 费用 + Advanced + 高级 + + + AddressList - The estimated transaction fee is: -{fee}, which is {percent}% of -the sending value {sent} - 预估的交易费用为:{fee},即发送值{sent}的{percent}% + Address {address} + 地址 {address} - The high prio mempool fee rate is {rate} - 高优先级内存池费率为{rate} + change + 找零 - High fee rate - 高费率 + receiving + 接收 - High fee rate! - 高费率! + change address + 找零地址 - High fee - 高费用 + receiving address + 接收地址 - High fee ratio: {ratio}% - 高费用比率:{ratio}% + Details + 详细信息 - - - d - {} copied to Clipboard - {}已复制到剪贴板 + View on block explorer + 在区块浏览器上查看 - Read QR code from camera - 从相机读取二维码 + Copy as csv + 复制为csv - Create PDF - 创建PDF + Export Labels + 导出标签 - Create random mnemonic - 创建随机助记词 + Tx + 交易 - Copy to clipboard - 复制到剪贴板 + Type + 类型 - Recovery Signer {i} - 恢复签名者 {i} + Index + 索引 - Open Transaction/PSBT - 打开交易/PSBT + Address + 地址 - Open file - 打开文件 + Category + 类别 - Text copied to Clipboard - 文本已复制到剪贴板 + Label + 标签 - Signer {i} - 签名者 {i} + Balance + 余额 + + + Fiat Balance + 法币余额 - util + AddressListWithToolbar - {} seconds ago - {}秒前 + Show Filter + 显示筛选器 - in less than a minute - 不到一分钟内 + Export Labels + 导出标签 - less than a minute ago - 不到一分钟前 + Generate to selected adddresses + 生成到选定地址 + + + BTCSpinBox - Transaction is unrelated to this wallet. - 交易与此钱包无关。 + Max ≈ {amount} + 最大约 {amount} + + + BackupSeed - Failed to import from file. - 从文件导入失败。 + Please complete the previous steps. + 请完成前面的步骤。 - Balance: {amount} - 余额:{amount} + Print recovery sheet + 打印恢复表 - Dynamic fee estimates not available - 动态费用估算不可用 + Previous Step + 上一步 - in {} seconds - 在{}秒内 + Print the pdf (it also contains the wallet descriptor) + 打印PDF(其中包含钱包描述) - in about {} months - 在大约{}个月内 + Write each 24-word seed onto the printed pdf. + 将每个24个词的种子写在打印出的PDF上。 - in about {} minutes - 在大约{}分钟内 + Write the 24-word seed onto the printed pdf. + 将24个词的种子写在打印出的PDF上。 + + + Balance - in about {} days - 在大约{}天内 + Confirmed + 已确认 - in about {} hours - 在大约{}小时内 + Unconfirmed + 未确认 - in about 1 month - 在大约1个月内 + Unmatured + 未成熟 + + + BalanceChart - in about 1 day - 在大约1天内 + Date + 日期 + + + BitcoinQuickReceive - in about 1 hour - 在大约1小时内 + Quick Receive + 快速接收 - in about 1 year - 在大约1年内 + Receive Address + 接收地址 + + + BlockingWaitingDialog - in over {} years - 在超过{}年内 + Please wait + 请等待 + + + BuyHardware - about {} months ago - 大约{}个月前 + Do you need to buy a hardware signer? + 你需要购买硬件签名器吗? - about {} minutes ago - 大约{}分钟前 + Buy a {name} + 购买{name} - about {} days ago - 大约{}天前 + Buy a Coldcard +5% off + 购买Coldcard享受5%的折扣 - about {} hours ago - 大约{}小时前 + Turn on your {n} hardware signers + 打开你的{n}硬件签名器 - about 1 month ago - 大约1个月前 + Turn on your hardware signer + 打开您的硬件签名器 + + + CategoryEditor - about 1 day ago - 大约1天前 + category + 类别 + + + ChatGui - about 1 hour ago - 大约1小时前 + Type your message here... + 在此输入您的信息... - about 1 year ago - 大约1年前 + Share a PSBT + 分享一个PSBT - Incorrect password - 密码错误 + Send + 发送 - Failed to export to file. - 导出到文件失败。 + Open Transaction/PSBT + 打开交易/PSBT - Cannot create child transaction - 无法创建子交易 + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + 所有文件 (*);;PSBT (*.psbt);;交易 (*.tx) - Cannot cancel transaction - 无法取消交易 + Me: {text} + 我:{text} - - Cannot bump fee - 无法提高费用 + + + CloseButton + + Close + 关闭 + + + ConfirmedBlock - Unknown - 未知 + Block {n} + 区块 {n} + + + ConnectedDevices - Unconfirmed - 未确认 + Reset identity for this device + 为此设备重置身份 - Unconfirmed parent - 未确认的父交易 + Trusted + 可信的 - Not Verified - 未验证 + UnTrusted + 不可信的 - Local - 本地 + My id: {id} + 我的ID:{id} + + + DescriptorEdit - Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files - 检测到钱包文件损坏。请从种子恢复您的钱包,并比较两个文件中的地址 + Wallet setup not finished. Please finish before creating a Backup pdf. + 钱包设置未完成。请在创建备份PDF之前完成设置。 + + + DescriptorUI - Insufficient funds - 资金不足 + Required Signers + 需要的签名者 - over {} years ago - 超过{}年前 + Scan Address Limit + 扫描地址限制 + + + Paste or scan your descriptor, if you restore a wallet. + 如果您恢复钱包,请粘贴或扫描您的描述。 + + + This "descriptor" contains all information to reconstruct the wallet. +Please back up this descriptor to be able to recover the funds! + 这个“描述”包含重建钱包所需的所有信息。请备份此描述以便能够恢复资金! - KeyStoreUI + DistributeSeeds - {data_type} cannot be used here. - {data_type} 在此处无法使用。 + Place each seed backup and hardware signer in a secure location, such: + 将每个种子备份和硬件签名器放在安全的地方,例如: - {xpub} is not a valid public xpub - {xpub} 不是有效的公共xpub + Seed backup {j} and hardware signer {j} should be in location {j} + 种子备份{j}和硬件签名器{j}应放在位置{j} - xPub - xPub + Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. + 请仔细选择安全的地方,考虑到你需要去3个位置中的2个去消费你的多签钱包。 - xPub Origin - xPub来源 + Store the seed backup in a <b>very</b> secure location (like a vault). + 将种子备份存放在非常安全的地方(如金库)。 - The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} - xPub来源 {key_origin} 不是 {self.get_address_type().name} 所期望的 {expected_key_origin} + The seed backup (24 words) give total control over the funds. + 种子备份(24个词)可以完全控制资金。 - The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. - xPub来源 {key_origin} 与xPub属于一对,请选择正确的xPub来源配对。 + Store the hardware signer in secure location. + 将硬件签名器存放在安全的地方。 - The xpub is in SLIP132 format. Converting to standard format. - xpub采用SLIP132格式。转换为标准格式。 + Finish + 完成 + + + Downloader - Import - 导入 + Download Progress + 下载进度 - Import fingerprint and xpub - 导入指纹和xpub + Download {} + 下载 {} - Import file or text - 导入文件或文本 + Show {} in Folder + 在文件夹中显示 {} + + + ExportDataSimple - Manual - 手动 + Enlarge + 放大 - Scan - 扫描 + Share with single device + 与单个设备共享 - Fingerprint - 指纹 + PSBT + PSBT - Description - 描述 + Transaction + 交易 - Label - 标签 + Not available + 不可用 - No signer data for the expected key_origin {expected_key_origin} found. - 没有找到期望的关键来源 {expected_key_origin} 的签名数据。 + Please enable the sync tab first + 请先启用同步标签页 - OK - 确定 + Please enable syncing in the wallet {wallet_id} first + 请先在钱包{wallet_id}中启用同步 - Seed - 种子 + Save as image + 保存为图片 - Name of signing device: ...... -Location of signing device: ..... - 签名设备名称:...... -签名设备位置:...... + Export file + 导出文件 - Please import the public key information from the hardware wallet first - 请先从硬件钱包导入公钥信息 + Copy to clipboard + 复制到剪贴板 - Please paste descriptors into the descriptor field in the top right. - 请将描述粘贴到右上角的描述字段中。 + Copy {name} + 复制{name} - Please paste the exported file (like coldcard-export.json or sparrow-export.json) - 请粘贴导出的文件(如 coldcard-export.json 或 sparrow-export.json) + Copy TxId + 复制交易标识符 - Please paste the exported file (like coldcard-export.json or sparrow-export.json): - 请粘贴导出的文件(如 coldcard-export.json 或 sparrow-export.json): + Copy JSON + 复制JSON - Connect USB - 连接USB + Share with trusted devices + 与可信设备共享 - Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. - 选定地址类型 {type} 的标准是 {expected_key_origin}。如果您不确定,请进行更正。 + Share with all devices in {wallet_id} + 与{wallet_id}中的所有设备共享 - MempoolButtons + FeeGroup - {n}. Block - {n}区块 + Fee + 费用 - Next Block - 下一个区块 + The transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + 交易费用为:{fee},即发送值{sent}的{percent}% - - - UITx_Creator - {num_inputs} Inputs: {inputs} - {num_inputs} 输入:{inputs} + The estimated transaction fee is: +{fee}, which is {percent}% of +the sending value {sent} + 预估的交易费用为:{fee},即发送值{sent}的{percent}% - Load UTXOs - 加载UTXOs + High fee rate! + 高费率! - Send Category - 发送类别 + The high prio mempool fee rate is {rate} + 高优先级内存池费率为{rate} - The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. - 您正在创建的这个新交易将移除这些未确认的依赖交易{txids}。 + ... is the minimum to replace the existing transactions. + ...是替换现有交易的最低限度。 - This checkbox automatically checks -below {rate} - 此复选框将自动勾选低于{rate}的选项 + High fee rate + 高费率 - Add foreign UTXOs - 添加外部UTXOs + High fee + 高费用 - Add Inputs - 添加输入 + Approximate fee rate + 大约费率 - Adding outpoints {outpoints} - 添加输出点{outpoints} + in ~{n}. Block + 约在{n}个区块 - Please select an input category on the left, that fits the transaction recipients. - 请在左侧选择一个输入类别,适合交易接收者。 + {rate} is the minimum for {rbf} + {rate}是{rbf}的最低费率 - Please paste UTXO here - 请在此粘贴UTXO + Fee rate could not be determined + 无法确定费率 - Please paste UTXO here in the format txid:outpoint -txid:outpoint - 请按格式 -txid:outpoint -txid:outpoint -粘贴UTXO + High fee ratio: {ratio}% + 高费用比率:{ratio}% + + + FloatingButtonBar - The inputs {inputs} conflict with these confirmed txids {txids}. - 输入{inputs}与这些已确认的txid {txids}冲突。 + Fill the transaction fields + 填写交易信息 - Select a category that fits the recipient best - 选择最适合接收者的类别 + Create Transaction + 创建交易 - Reduce future fees -by merging address balances - 通过合并地址余额来减少未来的费用 + Yes, I see the transaction in the history + 是的,我在历史记录中看到了交易 - Advanced - 高级 + Previous Step + 上一步 - MainWindow + HistList - &Save Current Wallet - &保存当前钱包 + Wallet + 钱包 - &Export for Coldcard - &导出至Coldcard + Status + 状态 - &Open Wallet - &打开钱包 + Category + 类别 - &New Wallet - &新建钱包 + Label + 标签 - &Show/Hide Tutorial - &显示/隐藏教程 + Amount + 金额 - &Change Password - &更改密码 + Balance + 余额 - &Check for update - &检查更新 + Txid + 交易标识符 - &Version: {} - &版本:{} + Cannot fetch wallet '{id}'. Please open the wallet first. + 无法获取钱包'{id}'。请先打开钱包。 + + + ImportXpubs - &Network Settings - &网络设置 + 2. Import wallet information into Bitcoin Safe + 2. 将钱包信息导入比特币保险库 - &Rename Wallet - &重命名钱包 + Skip step + 跳过此步 - KYC-Exchange - KYC-交易所 + Next step + 下一步 - PSBT {txid} - PSBT {txid} + Previous Step + 上一步 + + + KeyStoreUI - A wallet with id {name} is already open. - 一个ID为 {name} 的钱包已经打开。 + Import fingerprint and xpub + 导入指纹和xpub - &Transaction - 交易 + {data_type} cannot be used here. + {data_type} 在此处无法使用。 - Transaction {txid} - 交易 {txid} + The xpub is in SLIP132 format. Converting to standard format. + xpub采用SLIP132格式。转换为标准格式。 - &Transaction and PSBT - 交易和PSBT + Import + 导入 - &About - 关于 + Manual + 手动 - Close wallet - 关闭钱包 + Description + 描述 - Close wallet {id}? - 关闭钱包 {id} 吗? + Label + 标签 - Re&fresh - 刷新& + Fingerprint + 指纹 - Paste your Bitcoin Transaction or PSBT in here or drop a file - 在此粘贴您的比特币交易或PSBT或拖放文件 + xPub Origin + xPub来源 - Export labels - 导出标签 + xPub + xPub - All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) - 所有文件 (*);;JSON 文件 (*.jsonl);;JSON 文件 (*.json) + Seed + 种子 - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - 所有文件 (*);;PSBT (*.psbt);;交易 (*.tx) + OK + 确定 - Open &Recent - 打开&最近 + Name of signing device: ...... +Location of signing device: ..... + 签名设备名称:...... +签名设备位置:...... - Open Transaction/PSBT - 打开交易/PSBT + Import file or text + 导入文件或文本 - Open Transaction or PSBT - 打开交易或PSBT + Scan + 扫描 - Open Wallet - 打开钱包 + Connect USB + 连接USB - new - 新的 + {xpub} is not a valid public xpub + {xpub} 不是有效的公共xpub - &Change/Export - 更改/导出 + Please import the public key information from the hardware wallet first + 请先从硬件钱包导入公钥信息 - Friends - 朋友 + Please paste the exported file (like coldcard-export.json or sparrow-export.json): + 请粘贴导出的文件(如 coldcard-export.json 或 sparrow-export.json): - From &QR Code - 来自&二维码 + Please paste the exported file (like coldcard-export.json or sparrow-export.json) + 请粘贴导出的文件(如 coldcard-export.json 或 sparrow-export.json) - From &file - 来自&文件 + Standart for the selected address type {type} is {expected_key_origin}. Please correct if you are not sure. + 选定地址类型 {type} 的标准是 {expected_key_origin}。如果您不确定,请进行更正。 - From &text - 来自&文本 + The xPub origin {key_origin} and the xPub belong together. Please choose the correct xPub origin pair. + xPub来源 {key_origin} 与xPub属于一对,请选择正确的xPub来源配对。 - Closing tab {name} - 正在关闭标签页 {name} + The xPub Origin {key_origin} is not the expected {expected_key_origin} for {self.get_address_type().name} + xPub来源 {key_origin} 不是 {self.get_address_type().name} 所期望的 {expected_key_origin} - Closing wallet {id} - 正在关闭钱包 {id} + No signer data for the expected key_origin {expected_key_origin} found. + 没有找到期望的关键来源 {expected_key_origin} 的签名数据。 - No wallet open. Please open the sender wallet to edit this thransaction. - 没有打开钱包。请打开发送者钱包以编辑此交易。 + Please paste descriptors into the descriptor field in the top right. + 请将描述粘贴到右上角的描述字段中。 + + + LabelTimeEstimation - There is no such file: {file_path} - 没有这样的文件:{file_path} + ~in {t} min + 大约在{t}分钟内 - test - 测试 + ~in {t} hours + 大约在{t}小时内 + + + MainWindow - OK - 确定 + &Wallet + 钱包 - &License - 许可证 + Re&fresh + 刷新& - &Settings - 设置 + &Transaction + 交易 - &Languages - 语言 + &Transaction and PSBT + 交易和PSBT - Please select the wallet first. - 请先选择钱包。 + From &file + 来自&文件 - Please paste your Bitcoin Transaction or PSBT in here, or drop a file - 请在此粘贴您的比特币交易或PSBT,或拖放文件 + From &text + 来自&文本 - Please complete the wallet setup. - 请完成钱包设置。 + From &QR Code + 来自&二维码 - Please open the sender wallet to edit this thransaction. - 请打开发送者钱包以编辑此交易。 + &Settings + 设置 - Please enter the password for {filename}: - 请输入 {filename} 的密码: + &Network Settings + &网络设置 - Please select the wallet - 请选择钱包 + &Show/Hide Tutorial + &显示/隐藏教程 - Selected file: {file_path} - 选中的文件:{file_path} + &Languages + 语言 - &Wallet - 钱包 + &New Wallet + &新建钱包 - The wallet {file_path} is already open. - 钱包 {file_path} 已经打开。 + &About + 关于 - The wallet {file_path} is already open. Do you want to open the wallet anyway? - 钱包 {file_path} 已经打开。您还想再打开这个钱包吗? + &Version: {} + &版本:{} - Wallet already open - 钱包已经打开 + &Check for update + &检查更新 - Wallet Files (*.wallet) - 钱包文件 (*.wallet) + &License + 许可证 - All Files (*);;JSON Files (*.json) - 所有文件 (*);;JSON 文件 (*.json) + Please select the wallet + 请选择钱包 - All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) - 所有文件 (*);;JSONL 文件 (*.jsonl);;JSON 文件 (*.json) + test + 测试 - Import Electrum Wallet labels - 导入 Electrum 钱包标签 + Please select the wallet first. + 请先选择钱包。 - Import labels - 导入标签 + Open Transaction/PSBT + 打开交易/PSBT - - - Recipients - + Add Recipient - + 添加接收人 + All Files (*);;PSBT (*.psbt);;Transation (*.tx) + 所有文件 (*);;PSBT (*.psbt);;交易 (*.tx) - Recipients - 接收人 + Selected file: {file_path} + 选中的文件:{file_path} - - - ScreenshotsExportXpub - 1. Export the wallet information from the hardware signer - 1. 从硬件签名器导出钱包信息 + &Open Wallet + &打开钱包 - - - RegisterMultisig - 1. Export wallet descriptor - 1. 导出钱包描述 + No wallet open. Please open the sender wallet to edit this thransaction. + 没有打开钱包。请打开发送者钱包以编辑此交易。 - 2. Import in each hardware signer - 2. 在每个硬件签名器中导入 + Please open the sender wallet to edit this thransaction. + 请打开发送者钱包以编辑此交易。 - 2. Import in the hardware signer - 2. 在硬件签名器中导入 + Open Transaction or PSBT + 打开交易或PSBT - Previous Step - 上一步 + OK + 确定 - Your balance {balance} is greater than a maximally allowed test amount of {amount}! -Please do the hardware signer reset only with a lower balance! (Send some funds out before) - 你的余额{balance}超过了允许的最大测试金额{amount}!请仅在余额较低时重置硬件签名器!(在此之前请发送一些资金) + Please paste your Bitcoin Transaction or PSBT in here, or drop a file + 请在此粘贴您的比特币交易或PSBT,或拖放文件 - Export file to register the multisig on Coldcard - 导出文件以在Coldcard上注册多签 + Paste your Bitcoin Transaction or PSBT in here or drop a file + 在此粘贴您的比特币交易或PSBT或拖放文件 - Yes, I registered the multisig on the {n} hardware signer - 是的,我在{n}硬件签名器上注册了多签 + Transaction {txid} + 交易 {txid} - - - NewWalletWelcomeScreen - 1 seed (24 secret words) is all you need to access your funds - 1个种子(24个秘密词)就能访问你的资金 + PSBT {txid} + PSBT {txid} - 1 signing devices - 1个签名设备 + Open Wallet + 打开钱包 - 2 of 3 Multi-Signature Wal - 2的3多签名钱包 + Wallet Files (*.wallet) + 钱包文件 (*.wallet) - 3 signing devices - 3个签名设备 + Open &Recent + 打开&最近 - Pros: - 优点: + The wallet {file_path} is already open. + 钱包 {file_path} 已经打开。 - Create new wallet - 创建新钱包 + The wallet {file_path} is already open. Do you want to open the wallet anyway? + 钱包 {file_path} 已经打开。您还想再打开这个钱包吗? - Create custom wallet - 创建自定义钱包 + Wallet already open + 钱包已经打开 - Single Signature Wallet - 单签名钱包 + There is no such file: {file_path} + 没有这样的文件:{file_path} - If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) - 如果1个种子丢失或被盗,可以使用剩余的2个种子加钱包描述(二维码)将所有资金转移到新钱包 + Please enter the password for {filename}: + 请输入 {filename} 的密码: - If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately - 如果你被骗让黑客获取你的种子,你的比特币将立即被盗 + Export labels + 导出标签 - Less support material online in case of recovery - 恢复时在线支持材料较少 + All Files (*);;JSON Files (*.jsonl);;JSON Files (*.json) + 所有文件 (*);;JSON 文件 (*.jsonl);;JSON 文件 (*.json) - Customize the wallet to your needs - 根据你的需求定制钱包 + Import labels + 导入标签 - Cons: - 缺点: + All Files (*);;JSONL Files (*.jsonl);;JSON Files (*.json) + 所有文件 (*);;JSONL 文件 (*.jsonl);;JSON 文件 (*.json) - Custom or restore existing Wallet - 自定义或恢复现有钱包 + Import Electrum Wallet labels + 导入 Electrum 钱包标签 - Best for medium-sized funds - 适合中等规模的资金 + &Save Current Wallet + &保存当前钱包 - Best for large funds - 适合大额资金 + All Files (*);;JSON Files (*.json) + 所有文件 (*);;JSON 文件 (*.json) - Choose Single Signature - 选择单签名 + new + 新的 - Choose Multi-Signature - 选择多重签名 + Friends + 朋友 - The wallet descriptor (QR-code) is necessary to recover the wallet - 钱包描述(二维码)是恢复钱包所必需的 + KYC-Exchange + KYC-交易所 - 1 secure location to store the seed backup (on paper or steel) is needed - 需要1个安全位置存放种子备份(纸张或钢材) + A wallet with id {name} is already open. + 一个ID为 {name} 的钱包已经打开。 - 3 secure locations (each with 1 seed backup + wallet descriptor are needed) - 需要3个安全位置(每个位置有1个种子备份加钱包描述) + Please complete the wallet setup. + 请完成钱包设置。 - - - ImportXpubs - 2. Import wallet information into Bitcoin Safe - 2. 将钱包信息导入比特币保险库 + Close wallet {id}? + 关闭钱包 {id} 吗? - Previous Step - 上一步 + Close wallet + 关闭钱包 - Next step - 下一步 + Closing wallet {id} + 正在关闭钱包 {id} - Skip step - 跳过此步 + Closing tab {name} + 正在关闭标签页 {name} + + + &Change/Export + 更改/导出 + + + &Rename Wallet + &重命名钱包 + + + &Change Password + &更改密码 + + + &Export for Coldcard + &导出至Coldcard - SignatureImporterQR + MempoolButtons - bitcoin_tx libary error. The txid should not be changed during finalizing - bitcoin_tx库错误。在完成过程中不应更改txid + Next Block + 下一个区块 - The txid of the signed psbt doesnt match the original txid - 已签名的psbt的交易标识符与原始交易标识符不匹配 + {n}. Block + {n}区块 + + + MempoolProjectedBlock - Scan QR code - 扫描二维码 + Unconfirmed + 未确认 + + + ~{n}. Block + 约{n}区块 + + + + MyTreeView + + Copy as csv + 复制为csv + + + Copy + 复制 NetworkSettingsUI - IP Address: - IP地址: + Manual + 手动 - Mempool Instance URL - Mempool实例URL + Port: + 端口: - SSL: - SSL: + Mode: + 模式: - URL: - URL: + IP Address: + IP地址: - Blockchain data source - 区块链数据源 + Username: + 用户名: - Enable SSL - 启用SSL + Password: + 密码: + + + Mempool Instance URL + Mempool实例URL Responses: @@ -888,688 +978,697 @@ Please do the hardware signer reset only with a lower balance! (Send some fund Mempool实例:{server} - Password: - 密码: + Automatic + 自动 Apply && Restart 应用并重启 - - Manual - 手动 - - - Mode: - 模式: - Test Connection 测试连接 - - Username: - 用户名: - - - Port: - 端口: - Network Settings 网络设置 - Automatic - 自动 + Blockchain data source + 区块链数据源 - - - ExportDataSimple - PSBT - PSBT + Enable SSL + 启用SSL - Not available - 不可用 + URL: + URL: - Share with all devices in {wallet_id} - 与{wallet_id}中的所有设备共享 - - - Share with single device - 与单个设备共享 + SSL: + SSL: + + + NewWalletWelcomeScreen - Share with trusted devices - 与可信设备共享 + Create new wallet + 创建新钱包 - Transaction - 交易 + Choose Single Signature + 选择单签名 - Save as image - 保存为图片 + 2 of 3 Multi-Signature Wal + 2的3多签名钱包 - Copy {name} - 复制{name} + Best for large funds + 适合大额资金 - Copy JSON - 复制JSON + If 1 seed was lost or stolen, all the funds can be transferred to a new wallet with the 2 remaining seeds + wallet descriptor (QR-code) + 如果1个种子丢失或被盗,可以使用剩余的2个种子加钱包描述(二维码)将所有资金转移到新钱包 - Copy TxId - 复制交易标识符 + 3 secure locations (each with 1 seed backup + wallet descriptor are needed) + 需要3个安全位置(每个位置有1个种子备份加钱包描述) - Copy to clipboard - 复制到剪贴板 + The wallet descriptor (QR-code) is necessary to recover the wallet + 钱包描述(二维码)是恢复钱包所必需的 - Export file - 导出文件 + 3 signing devices + 3个签名设备 - Enlarge - 放大 + Choose Multi-Signature + 选择多重签名 - Please enable the sync tab first - 请先启用同步标签页 + Custom or restore existing Wallet + 自定义或恢复现有钱包 - Please enable syncing in the wallet {wallet_id} first - 请先在钱包{wallet_id}中启用同步 + Customize the wallet to your needs + 根据你的需求定制钱包 - - - SignatureImporterUSB - USB Signing - USB签名 + Single Signature Wallet + 单签名钱包 - Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. - 请执行'钱包 --> 导出 --> 导出给...' 并在硬件签名器上注册多重签名钱包。 + Less support material online in case of recovery + 恢复时在线支持材料较少 - - - WalletIdDialog - A wallet with the same name already exists. - 一个同名的钱包已存在。 + Create custom wallet + 创建自定义钱包 - Choose wallet name - 选择钱包名称 + Best for medium-sized funds + 适合中等规模的资金 - Wallet name: - 钱包名称: + Pros: + 优点: - Error - 错误 + 1 seed (24 secret words) is all you need to access your funds + 1个种子(24个秘密词)就能访问你的资金 - - - net_conf - A good option is {link} and a block explorer on {explorer}. - 一个好选择是 {link} 和一个在 {explorer} 上的区块浏览器。 + 1 secure location to store the seed backup (on paper or steel) is needed + 需要1个安全位置存放种子备份(纸张或钢材) - A good option is {link} and a block explorer on {explorer}. There is a {faucet}. - 一个好选择是 {link} 和一个在 {explorer} 上的区块浏览器。这里有一个 {faucet}。 + Cons: + 缺点: - Run your bitcoind with "bitcoind -chain=regtest" - 使用 "bitcoind -chain=regtest" 运行您的bitcoind + If you get tricked into giving hackers your seed, your Bitcoin will be stolen immediately + 如果你被骗让黑客获取你的种子,你的比特币将立即被盗 - Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. - 使用 "bitcoind -chain=signet" 运行您的bitcoind,但这和mutinynet.com的signet不同。 + 1 signing devices + 1个签名设备 + + + NostrSync - Run your bitcoind with "bitcoind -chain=test" - 使用 "bitcoind -chain=test" 运行您的bitcoind + Go to {untrusted} + 前往{untrusted} - You can setup {link} with an electrum server on {server} and a block explorer on {explorer} - 您可以在 {server} 上设置 {link},并在 {explorer} 上设置一个区块浏览器 + To complete the connection, accept my {id} request on the other device {other}. + 为完成连接,请在另一设备{other}上接受我的{id}请求。 + + + NotificationBarRegtest - You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} - 您可以在 {server} 上设置 {setup},并在 {explorer} 上设置一个esplora服务器 + Change Network + 更换网络 - You can connect your own Bitcoin node, such as {link}. - 您可以连接您自己的比特币节点,如 {link}。 + Network = {network}. The coins are worthless! + 网络 = {network}。这些币没有价值! + + + PasswordCreation - The server can associate your IP address with the wallet addresses. -It is best to use your own server, such as {link}. - 服务器可以将您的IP地址与钱包地址关联。最好使用您自己的服务器,如 {link}。 + Create Password + 创建密码 - This is a private and fast way to connect to the bitcoin network. - 这是一种私密且快速的连接到比特币网络的方式。 + Enter your password: + 输入您的密码: - - - BackupSeed - Previous Step - 上一步 + Show Password + 显示密码 - Write the 24-word seed onto the printed pdf. - 将24个词的种子写在打印出的PDF上。 + Re-enter your password: + 重新输入您的密码: - Write each 24-word seed onto the printed pdf. - 将每个24个词的种子写在打印出的PDF上。 + Submit + 提交 - Print the pdf (it also contains the wallet descriptor) - 打印PDF(其中包含钱包描述) + Hide Password + 隐藏密码 - Print recovery sheet - 打印恢复表 + Passwords do not match! + 密码不匹配! - Please complete the previous steps. - 请完成前面的步骤。 + Error + 错误 - FloatingButtonBar + PasswordQuestion - Previous Step - 上一步 + Password Input + 密码输入 - Create Transaction - 创建交易 + Please enter your password: + 请输入您的密码: - Fill the transaction fields - 填写交易信息 + Submit + 提交 + + + QTProtoWallet - Yes, I see the transaction in the history - 是的,我在历史记录中看到了交易 + Setup wallet + 设置钱包 - ReceiveTest + QTWallet - Previous Step - 上一步 + Send + 发送 - Next step - 下一步 + Password incorrect + 密码错误 - Receive a small amount {test_amount} to an address of this wallet - 接收少量金额 {test_amount} 到这个钱包的一个地址 + Change password + 更改密码 - Received {amount} - 收到{amount} + New password: + 新密码: - Check if received - 检查是否收到 + Wallet saved + 钱包已保存 - No wallet setup yet - 还未设置钱包 + The transactions {txs} in wallet '{wallet}' were removed from the history!!! + 钱包“{wallet}”中的交易{txs}已从历史记录中删除! - - - UITx_Viewer - Previous step - 上一步 + New transaction in wallet '{wallet}': +{txs} + 钱包“{wallet}”中有新交易:{txs} - Next step - 下一步 + New transactions in wallet '{wallet}': +{txs} + 钱包“{wallet}”中有新交易:{txs} - Edit with increased fee (RBF) - 使用增加的费用编辑(RBF) + Click for new address + 点击获取新地址 - Send - 发送 + Descriptor + 描述 - The txid of the signed psbt doesnt match the original txid - 已签名的psbt的交易标识符与原始交易标识符不匹配 + Sync + 同步 - Recipients - 接收人 + History + 历史记录 - Invalid Signatures - 签名无效 + Receive + 接收 - Edit - 编辑 + No changes to apply. + 没有变更可应用。 - Inputs - 输入 + Backup saved to {filename} + 备份已保存到{filename} - - - ValidateBackup - Previous Step - 上一步 + Backup failed. Aborting Changes. + 备份失败。正在中止更改。 - Yes, I am sure all 24 words are correct - 是的,我确定所有24个词都是正确的 + Cannot move the wallet file, because {file_path} exists + 无法移动钱包文件,因为{file_path}已存在 - basetab + ReceiveTest - Previous Step - 上一步 + Received {amount} + 收到{amount} - Next step - 下一步 + No wallet setup yet + 还未设置钱包 - - - ConnectedDevices - UnTrusted - 不可信的 + Receive a small amount {test_amount} to an address of this wallet + 接收少量金额 {test_amount} 到这个钱包的一个地址 - Reset identity for this device - 为此设备重置身份 + Next step + 下一步 - Trusted - 可信的 + Check if received + 检查是否收到 - My id: {id} - 我的ID:{id} + Previous Step + 上一步 - NostrSync - - To complete the connection, accept my {id} request on the other device {other}. - 为完成连接,请在另一设备{other}上接受我的{id}请求。 - + RecipientGroupBox - Go to {untrusted} - 前往{untrusted} + Address + 地址 - - - AddressList - Tx - 交易 + Label + 标签 - Balance - 余额 + Amount + 金额 - View on block explorer - 在区块浏览器上查看 + Enter label here + 在此输入标签 - Address - 地址 + Send max + 发送最大值 - Address {address} - 地址 {address} + Enter address here + 在此输入地址 - Copy as csv - 复制为csv + Enter label for recipient address + 输入接收地址的标签 - Export Labels - 导出标签 + Wallet "{id}" + 钱包 "{id}" + + + Recipients - change - 找零 + Recipients + 接收人 - change address - 找零地址 + + Add Recipient + + 添加接收人 + + + RegisterMultisig - receiving - 接收 + Export file to register the multisig on Coldcard + 导出文件以在Coldcard上注册多签 - receiving address - 接收地址 + Your balance {balance} is greater than a maximally allowed test amount of {amount}! +Please do the hardware signer reset only with a lower balance! (Send some funds out before) + 你的余额{balance}超过了允许的最大测试金额{amount}!请仅在余额较低时重置硬件签名器!(在此之前请发送一些资金) - Label - 标签 + 1. Export wallet descriptor + 1. 导出钱包描述 - Fiat Balance - 法币余额 + Yes, I registered the multisig on the {n} hardware signer + 是的,我在{n}硬件签名器上注册了多签 - Category - 类别 + Previous Step + 上一步 - Type - 类型 + 2. Import in each hardware signer + 2. 在每个硬件签名器中导入 - Index - 索引 + 2. Import in the hardware signer + 2. 在硬件签名器中导入 + + + ScreenshotsExportXpub - Details - 详细信息 + 1. Export the wallet information from the hardware signer + 1. 从硬件签名器导出钱包信息 - HistList + ScreenshotsGenerateSeed - Txid - 交易标识符 + Generate 24 secret seed words on each hardware signer + 在每个硬件签名器上生成24个秘密种子词 + + + ScreenshotsRegisterMultisig - Balance - 余额 + Import the multisig information in the hardware signer + 在硬件签名器中导入多签信息 + + + ScreenshotsResetSigner - Cannot fetch wallet '{id}'. Please open the wallet first. - 无法获取钱包'{id}'。请先打开钱包。 + Reset the hardware signer. + 重置硬件签名器。 + + + ScreenshotsRestoreSigner - Label - 标签 + Restore the hardware signer. + 恢复硬件签名器。 + + + ScreenshotsViewSeed - Status - 状态 + Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. +If you make a mistake here, your money is lost! + 将备份纸上的24个词与Coldcard的“查看种子词”比较。如果这里出错,你的钱就丢了! + + + SendTest - Category - 类别 + You made {n} outgoing transactions already. Would you like to skip this spend test? + 你已经进行了{n}次外出交易。你想跳过这次支出测试吗? - Amount - 金额 + Skip spend test? + 跳过支出测试? - Wallet - 钱包 + Complete the send test to ensure the hardware signer works! + 完成发送测试以确保硬件签名器工作正常! - SyncTab + SignatureImporterClipboard - Received message '{description}' from {author} - 从{author}收到消息'{description}' + Import signed PSBT + 导入已签名的PSBT - Encrypted syncing to trusted devices - 加密同步到可信设备 + OK + 确定 - Open received Transactions and PSBTs automatically in a new tab - 在新标签页中自动打开接收到的交易和PSBTs + Please paste your PSBT in here, or drop a file + 请在此粘贴您的PSBT,或拖放文件 - Opening {name} from {author} - 正在打开{author}的{name} + Paste your PSBT in here or drop a file + 在此粘贴您的PSBT或拖放文件 - DistributeSeeds - - Choose the secure places carefully, considering that you need to go to {m} of the {n}, to spend from your multisig-wallet. - 请仔细选择安全的地方,考虑到你需要去3个位置中的2个去消费你的多签钱包。 - + SignatureImporterFile - Finish - 完成 + OK + 确定 - Place each seed backup and hardware signer in a secure location, such: - 将每个种子备份和硬件签名器放在安全的地方,例如: + Please paste your PSBT in here, or drop a file + 请在此粘贴您的PSBT,或拖放文件 - Store the hardware signer in secure location. - 将硬件签名器存放在安全的地方。 + Paste your PSBT in here or drop a file + 在此粘贴您的PSBT或拖放文件 + + + SignatureImporterQR - Store the seed backup in a <b>very</b> secure location (like a vault). - 将种子备份存放在非常安全的地方(如金库)。 + Scan QR code + 扫描二维码 - The seed backup (24 words) give total control over the funds. - 种子备份(24个词)可以完全控制资金。 + The txid of the signed psbt doesnt match the original txid + 已签名的psbt的交易标识符与原始交易标识符不匹配 - Seed backup {j} and hardware signer {j} should be in location {j} - 种子备份{j}和硬件签名器{j}应放在位置{j} + bitcoin_tx libary error. The txid should not be changed during finalizing + bitcoin_tx库错误。在完成过程中不应更改txid - WalletBalanceChart + SignatureImporterUSB - Balance ({unit}) - 余额({unit}) + USB Signing + USB签名 - Date - 日期 + Please do 'Wallet --> Export --> Export for ...' and register the multisignature wallet on the hardware signer. + 请执行'钱包 --> 导出 --> 导出给...' 并在硬件签名器上注册多重签名钱包。 - SendTest - - You made {n} outgoing transactions already. Would you like to skip this spend test? - 你已经进行了{n}次外出交易。你想跳过这次支出测试吗? - - - Complete the send test to ensure the hardware signer works! - 完成发送测试以确保硬件签名器工作正常! - + SignatureImporterWallet - Skip spend test? - 跳过支出测试? + The txid of the signed psbt doesnt match the original txid. Aborting + 已签名的psbt的交易标识符与原始交易标识符不匹配。正在中止 - BuyHardware + SyncTab - Do you need to buy a hardware signer? - 你需要购买硬件签名器吗? + Encrypted syncing to trusted devices + 加密同步到可信设备 - Turn on your {n} hardware signers - 打开你的{n}硬件签名器 + Open received Transactions and PSBTs automatically in a new tab + 在新标签页中自动打开接收到的交易和PSBTs - Turn on your hardware signer - 打开您的硬件签名器 + Opening {name} from {author} + 正在打开{author}的{name} - Buy a {name} - 购买{name} + Received message '{description}' from {author} + 从{author}收到消息'{description}' + + + TrustedDevice - Buy a Coldcard -5% off - 购买Coldcard享受5%的折扣 + Device id: {id} + 设备ID:{id} + + + Syncing Address labels + 同步地址标签 + + + Can share Transactions + 可以共享交易 - WalletSteps + TxSigningSteps - Sign with {label} - 使用{label}签名 + Export transaction to any hardware signer + 将交易导出到任何硬件签名器 - Send Test - 发送测试 + Sign with a different hardware signer + 使用不同的硬件签名器签名 - Send test - 发送测试 + Import signature + 导入签名 - Send test {j} - 发送测试{j} + Transaction signed with the private key belonging to {label} + 使用属于{label}的私钥签署的交易 + + + UITx_Creator - and - + Select a category that fits the recipient best + 选择最适合接收者的类别 - Register multisig on signers - 在签名器上注册多签 + Add Inputs + 添加输入 - Backup Seed - 备份种子 + Load UTXOs + 加载UTXOs - Import signer info - 导入签名器信息 + Please paste UTXO here in the format txid:outpoint +txid:outpoint + 请按格式 +txid:outpoint +txid:outpoint +粘贴UTXO - You must have an initilized wallet first - 您必须首先有一个初始化的钱包 + Please paste UTXO here + 请在此粘贴UTXO - Turn on hardware signer - 打开硬件签名器 + The inputs {inputs} conflict with these confirmed txids {txids}. + 输入{inputs}与这些已确认的txid {txids}冲突。 - Receive Test - 接收测试 + The unconfirmed dependent transactions {txids} will be removed by this new transaction you are creating. + 您正在创建的这个新交易将移除这些未确认的依赖交易{txids}。 - Put in secure locations - 放在安全位置 + Reduce future fees +by merging address balances + 通过合并地址余额来减少未来的费用 - Generate Seed - 生成种子 + Send Category + 发送类别 - The wallet is not funded. Please fund the wallet. - 钱包未获资金。请为钱包充值。 + Advanced + 高级 - Validate Backup - 验证备份 + Add foreign UTXOs + 添加外部UTXOs - - - TxSigningSteps - Sign with a different hardware signer - 使用不同的硬件签名器签名 + This checkbox automatically checks +below {rate} + 此复选框将自动勾选低于{rate}的选项 - Transaction signed with the private key belonging to {label} - 使用属于{label}的私钥签署的交易 + Please select an input category on the left, that fits the transaction recipients. + 请在左侧选择一个输入类别,适合交易接收者。 - Import signature - 导入签名 + {num_inputs} Inputs: {inputs} + {num_inputs} 输入:{inputs} - Export transaction to any hardware signer - 将交易导出到任何硬件签名器 + Adding outpoints {outpoints} + 添加输出点{outpoints} - hist_list + UITx_Viewer - Edit with higher fee (RBF) - 使用更高费用编辑(RBF) + Inputs + 输入 - View on block explorer - 在区块浏览器上查看 + Recipients + 接收人 - Copy as csv - 复制为csv + Edit + 编辑 - Export binary transactions - 导出二进制交易 + Edit with increased fee (RBF) + 使用增加的费用编辑(RBF) - Try cancel transaction (RBF) - 尝试取消交易(RBF) + Previous step + 上一步 - Used - 已使用 + Next step + 下一步 - Funded - 已资助 + Send + 发送 - Funded or Unused - 已资助或未使用 + Invalid Signatures + 签名无效 - All status - 所有状态 + The txid of the signed psbt doesnt match the original txid + 已签名的psbt的交易标识符与原始交易标识符不匹配 + + + UTXOList - All types - 所有类型 + Wallet + 钱包 - Change - 找零 + Outpoint + 输出点 - Receiving - 接收 + Address + 地址 - Unused - 未使用 + Category + 类别 - Details - 详细信息 + Label + 标签 + + + Amount + 金额 + + + Parents + 父交易 @@ -1584,699 +1683,641 @@ It is best to use your own server, such as {link}. - CloseButton + UpdateNotificationBar - Close - 关闭 + Check for Update + 检查更新 - - - BTCSpinBox - Max ≈ {amount} - 最大约 {amount} + Signature verified. + 签名已验证 - - - ChatGui - Share a PSBT - 分享一个PSBT + New version available {tag} + 新版本可用 {tag} - Send - 发送 + You have already the newest version. + 您已经拥有最新版本。 - Type your message here... - 在此输入您的信息... + No update found + 未找到更新 - Me: {text} - 我:{text} + Could not verify the download. Please try again later. + 无法验证下载,请稍后再试 - All Files (*);;PSBT (*.psbt);;Transation (*.tx) - 所有文件 (*);;PSBT (*.psbt);;交易 (*.tx) + Please install {link} to automatically verify the signature of the update. + 请安装 {link} 以自动验证更新的签名。 - Open Transaction/PSBT - 打开交易/PSBT + Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. + 请通过 "sudo apt-get -y install gpg" 安装 GPG 以自动验证更新的签名。 - - - PasswordCreation - Create Password - 创建密码 + Please install GPG via "brew install gnupg" to automatically verify the signature of the update. + 请通过 "brew install gnupg" 安装 GPG 以自动验证更新的签名。 - Passwords do not match! - 密码不匹配! + Signature doesn't match!!! Please try again. + 签名不匹配,请重试 + + + UtxoListWithToolbar - Submit - 提交 + {amount} selected + {amount} 选中 + + + ValidateBackup - Show Password - 显示密码 + Yes, I am sure all 24 words are correct + 是的,我确定所有24个词都是正确的 - Enter your password: - 输入您的密码: + Previous Step + 上一步 + + + WalletBalanceChart - Re-enter your password: - 重新输入您的密码: + Balance ({unit}) + 余额({unit}) - Error - 错误 - - - Hide Password - 隐藏密码 + Date + 日期 - tageditor + WalletIdDialog - Delete {name} - 删除{name} + Choose wallet name + 选择钱包名称 - Add new {name} - 添加新的{name} + Wallet name: + 钱包名称: - This {name} exists already. - 这个{name}已经存在。 + Error + 错误 - - - ConfirmedBlock - Block {n} - 区块 {n} + A wallet with the same name already exists. + 一个同名的钱包已存在。 - QTWallet + WalletSteps - History - 历史记录 + You must have an initilized wallet first + 您必须首先有一个初始化的钱包 - Send - 发送 + Validate Backup + 验证备份 - Sync - 同步 + Receive Test + 接收测试 - Backup failed. Aborting Changes. - 备份失败。正在中止更改。 + Put in secure locations + 放在安全位置 - Backup saved to {filename} - 备份已保存到{filename} + Register multisig on signers + 在签名器上注册多签 - Password incorrect - 密码错误 + Send test {j} + 发送测试{j} - Receive - 接收 + Send test + 发送测试 - Descriptor - 描述 + and + - New password: - 新密码: + Send Test + 发送测试 - Cannot move the wallet file, because {file_path} exists - 无法移动钱包文件,因为{file_path}已存在 + Sign with {label} + 使用{label}签名 - Change password - 更改密码 + The wallet is not funded. Please fund the wallet. + 钱包未获资金。请为钱包充值。 - No changes to apply. - 没有变更可应用。 + Turn on hardware signer + 打开硬件签名器 - Click for new address - 点击获取新地址 + Generate Seed + 生成种子 - Wallet saved - 钱包已保存 + Import signer info + 导入签名器信息 + + + Backup Seed + 备份种子 - RecipientGroupBox + address_list - Send max - 发送最大值 + All status + 所有状态 - Enter address here - 在此输入地址 + Unused + 未使用 - Enter label here - 在此输入标签 + Funded + 已资助 - Address - 地址 + Used + 已使用 - Label - 标签 + Funded or Unused + 已资助或未使用 - Enter label for recipient address - 输入接收地址的标签 + All types + 所有类型 - Amount - 金额 + Receiving + 接收 - Wallet "{id}" - 钱包 "{id}" + Change + 找零 - TrustedDevice - - Can share Transactions - 可以共享交易 - + basetab - Syncing Address labels - 同步地址标签 + Next step + 下一步 - Device id: {id} - 设备ID:{id} + Previous Step + 上一步 - utxo_list + d - View on block explorer - 在区块浏览器上查看 + Signer {i} + 签名者 {i} - Copy as csv - 复制为csv + Open Transaction/PSBT + 打开交易/PSBT - Copy txid:out - 复制交易ID:输出 + Recovery Signer {i} + 恢复签名者 {i} - Open transaction - 打开交易 + Text copied to Clipboard + 文本已复制到剪贴板 - Unconfirmed UTXO - 未确认的UTXO + {} copied to Clipboard + {}已复制到剪贴板 - Unconfirmed UTXO is spent by transaction {is_spent_by_txid} - 未确认的UTXO已被交易{is_spent_by_txid}使用 + Read QR code from camera + 从相机读取二维码 - - - SignatureImporterClipboard - Paste your PSBT in here or drop a file - 在此粘贴您的PSBT或拖放文件 + Copy to clipboard + 复制到剪贴板 - Import signed PSBT - 导入已签名的PSBT + Create PDF + 创建PDF - OK - 确定 + Create random mnemonic + 创建随机助记词 - Please paste your PSBT in here, or drop a file - 请在此粘贴您的PSBT,或拖放文件 + Open file + 打开文件 - SignatureImporterFile + descriptor - Paste your PSBT in here or drop a file - 在此粘贴您的PSBT或拖放文件 + Wallet Type + 钱包类型 - OK - 确定 + Address Type + 地址类型 - Please paste your PSBT in here, or drop a file - 请在此粘贴您的PSBT,或拖放文件 + Wallet Descriptor + 钱包描述 - ScreenshotsGenerateSeed + hist_list - Generate 24 secret seed words on each hardware signer - 在每个硬件签名器上生成24个秘密种子词 + All status + 所有状态 - - - ScreenshotsRegisterMultisig - Import the multisig information in the hardware signer - 在硬件签名器中导入多签信息 + View on block explorer + 在区块浏览器上查看 - - - AddressDialog - Address - 地址 + Copy as csv + 复制为csv - Address descriptor - 地址描述 + Export binary transactions + 导出二进制交易 - Receiving address of wallet '{wallet_id}' (with index {index}) - 接收钱包'{wallet_id}'的地址(索引为{index}) + Edit with higher fee (RBF) + 使用更高费用编辑(RBF) - Script Pubkey - 脚本公钥 + Try cancel transaction (RBF) + 尝试取消交易(RBF) - Details - 详细信息 + Unused + 未使用 - Change address of wallet '{wallet_id}' (with index {index}) - 钱包'{wallet_id}'的找零地址(索引为{index}) + Funded + 已资助 - Advanced - 高级 + Used + 已使用 - - - UTXOList - Address - 地址 + Funded or Unused + 已资助或未使用 - Label - 标签 + All types + 所有类型 - Parents - 父交易 + Receiving + 接收 - Category - 类别 - - - Outpoint - 输出点 - - - Amount - 金额 + Change + 找零 - Wallet - 钱包 + Details + 详细信息 - recipients + lib_load - Address Already Used - 地址已被使用 + You are missing the {link} +Please install it. + 您缺少 {link} +请安装它。 - descriptor + menu - Address Type - 地址类型 + Import Labels + 导入标签 - Wallet Descriptor - 钱包描述 + Import Labels (BIP329 / Sparrow) + 导入标签(BIP329 / Sparrow) - Wallet Type - 钱包类型 + Import Labels (Electrum Wallet) + 导入标签(Electrum 钱包) - MyTreeView + mytreeview - Copy - 复制 + Type to search... + 输入以搜索... - Copy as csv - 复制为csv + Type to filter + 输入以过滤 + + + Export as CSV + 导出为CSV - LabelTimeEstimation + net_conf - ~in {t} min - 大约在{t}分钟内 + This is a private and fast way to connect to the bitcoin network. + 这是一种私密且快速的连接到比特币网络的方式。 - ~in {t} hours - 大约在{t}小时内 + Run your bitcoind with "bitcoind -chain=signet" This however is a different signet than mutinynet.com. + 使用 "bitcoind -chain=signet" 运行您的bitcoind,但这和mutinynet.com的signet不同。 - - - DescriptorUI - Paste or scan your descriptor, if you restore a wallet. - 如果您恢复钱包,请粘贴或扫描您的描述。 + The server can associate your IP address with the wallet addresses. +It is best to use your own server, such as {link}. + 服务器可以将您的IP地址与钱包地址关联。最好使用您自己的服务器,如 {link}。 - Scan Address Limit - 扫描地址限制 + You can setup {link} with an electrum server on {server} and a block explorer on {explorer} + 您可以在 {server} 上设置 {link},并在 {explorer} 上设置一个区块浏览器 - This "descriptor" contains all information to reconstruct the wallet. -Please back up this descriptor to be able to recover the funds! - 这个“描述”包含重建钱包所需的所有信息。请备份此描述以便能够恢复资金! + A good option is {link} and a block explorer on {explorer}. + 一个好选择是 {link} 和一个在 {explorer} 上的区块浏览器。 - Required Signers - 需要的签名者 + A good option is {link} and a block explorer on {explorer}. There is a {faucet}. + 一个好选择是 {link} 和一个在 {explorer} 上的区块浏览器。这里有一个 {faucet}。 - - - PasswordQuestion - Password Input - 密码输入 + You can setup {setup} with an esplora server on {server} and a block explorer on {explorer} + 您可以在 {server} 上设置 {setup},并在 {explorer} 上设置一个esplora服务器 - Submit - 提交 + You can connect your own Bitcoin node, such as {link}. + 您可以连接您自己的比特币节点,如 {link}。 - Please enter your password: - 请输入您的密码: + Run your bitcoind with "bitcoind -chain=regtest" + 使用 "bitcoind -chain=regtest" 运行您的bitcoind + + + Run your bitcoind with "bitcoind -chain=test" + 使用 "bitcoind -chain=test" 运行您的bitcoind - menu + recipients - Import Labels - 导入标签 + Address Already Used + 地址已被使用 + + + tageditor - Import Labels (BIP329 / Sparrow) - 导入标签(BIP329 / Sparrow) + Delete {name} + 删除{name} - Import Labels (Electrum Wallet) - 导入标签(Electrum 钱包) + Add new {name} + 添加新的{name} + + + This {name} exists already. + 这个{name}已经存在。 - mytreeview + tutorial - Export as CSV - 导出为CSV + Never share the 24 secret words with anyone! + 永远不要与任何人分享24个秘密词! - Type to search... - 输入以搜索... + Never type them into any computer or cellphone! + 永远不要将它们输入任何计算机或手机! - Type to filter - 输入以过滤 + Never make a picture of them! + 永远不要拍下它们的照片! - AddressListWithToolbar + util - Export Labels - 导出标签 + Unconfirmed + 未确认 - Show Filter - 显示筛选器 + Failed to export to file. + 导出到文件失败。 - Generate to selected adddresses - 生成到选定地址 + Balance: {amount} + 余额:{amount} - - - ScreenshotsViewSeed - Compare the 24 words on the backup paper to 'View Seed Words' from Coldcard. -If you make a mistake here, your money is lost! - 将备份纸上的24个词与Coldcard的“查看种子词”比较。如果这里出错,你的钱就丢了! + Unknown + 未知 - - - address_list - Used - 已使用 + {} seconds ago + {}秒前 - Funded - 已资助 + in {} seconds + 在{}秒内 - Funded or Unused - 已资助或未使用 + less than a minute ago + 不到一分钟前 - All status - 所有状态 + in less than a minute + 不到一分钟内 - All types - 所有类型 + about {} minutes ago + 大约{}分钟前 - Change - 找零 + in about {} minutes + 在大约{}分钟内 - Receiving - 接收 + about 1 hour ago + 大约1小时前 - Unused - 未使用 + Unconfirmed parent + 未确认的父交易 - - - Balance - Confirmed - 已确认 + in about 1 hour + 在大约1小时内 - Unmatured - 未成熟 + about {} hours ago + 大约{}小时前 - Unconfirmed - 未确认 + in about {} hours + 在大约{}小时内 - - - wallet - Confirmed - 已确认 + about 1 day ago + 大约1天前 - Unconfirmed - 未确认 + in about 1 day + 在大约1天内 - Unconfirmed parent - 未确认的父交易 + about {} days ago + 大约{}天前 - Local - 本地 + in about {} days + 在大约{}天内 - - - SignatureImporterWallet - The txid of the signed psbt doesnt match the original txid. Aborting - 已签名的psbt的交易标识符与原始交易标识符不匹配。正在中止 + about 1 month ago + 大约1个月前 - - - BitcoinQuickReceive - Quick Receive - 快速接收 + in about 1 month + 在大约1个月内 - Receive Address - 接收地址 + about {} months ago + 大约{}个月前 - - - ScreenshotsRestoreSigner - Restore the hardware signer. - 恢复硬件签名器。 + Not Verified + 未验证 - - - UpdateNotificationBar - You have already the newest version. - 您已经拥有最新版本。 + in about {} months + 在大约{}个月内 - New version available {tag} - 新版本可用 {tag} + about 1 year ago + 大约1年前 - No update found - 未找到更新 + in about 1 year + 在大约1年内 - Check for Update - 检查更新 + over {} years ago + 超过{}年前 - Please install {link} to automatically verify the signature of the update. - 请安装 {link} 以自动验证更新的签名。 + in over {} years + 在超过{}年内 - Please install GPG via "brew install gnupg" to automatically verify the signature of the update. - 请通过 "brew install gnupg" 安装 GPG 以自动验证更新的签名。 + Cannot bump fee + 无法提高费用 - Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update. - 请通过 "sudo apt-get -y install gpg" 安装 GPG 以自动验证更新的签名。 + Cannot cancel transaction + 无法取消交易 - - - lib_load - You are missing the {link} -Please install it. - 您缺少 {link} -请安装它。 + Cannot create child transaction + 无法创建子交易 - - - BalanceChart - Date - 日期 + Wallet file corruption detected. Please restore your wallet from seed, and compare the addresses in both files + 检测到钱包文件损坏。请从种子恢复您的钱包,并比较两个文件中的地址 - - - NotificationBarRegtest - Change Network - 更换网络 + Local + 本地 - Network = {network}. The coins are worthless! - 网络 = {network}。这些币没有价值! + Insufficient funds + 资金不足 - - - MempoolProjectedBlock - Unconfirmed - 未确认 + Dynamic fee estimates not available + 动态费用估算不可用 - ~{n}. Block - 约{n}区块 + Incorrect password + 密码错误 + + + Transaction is unrelated to this wallet. + 交易与此钱包无关。 + + + Failed to import from file. + 从文件导入失败。 - tutorial + utxo_list - Never share the 24 secret words with anyone! - 永远不要与任何人分享24个秘密词! + Unconfirmed UTXO is spent by transaction {is_spent_by_txid} + 未确认的UTXO已被交易{is_spent_by_txid}使用 - Never type them into any computer or cellphone! - 永远不要将它们输入任何计算机或手机! + Unconfirmed UTXO + 未确认的UTXO - Never make a picture of them! - 永远不要拍下它们的照片! + Open transaction + 打开交易 - - - CategoryEditor - category - 类别 + View on block explorer + 在区块浏览器上查看 - - - QTProtoWallet - Setup wallet - 设置钱包 + Copy txid:out + 复制交易ID:输出 - - - BlockingWaitingDialog - Please wait - 请等待 + Copy as csv + 复制为csv - ScreenshotsResetSigner + wallet - Reset the hardware signer. - 重置硬件签名器。 + Confirmed + 已确认 - - - DescriptorEdit - Wallet setup not finished. Please finish before creating a Backup pdf. - 钱包设置未完成。请在创建备份PDF之前完成设置。 + Unconfirmed + 未确认 - - - UtxoListWithToolbar - {amount} selected - {amount} 选中 + Unconfirmed parent + 未确认的父交易 + + + Local + 本地 diff --git a/bitcoin_safe/gui/qt/block_change_signals.py b/bitcoin_safe/gui/qt/block_change_signals.py index 929507d..82a73e1 100644 --- a/bitcoin_safe/gui/qt/block_change_signals.py +++ b/bitcoin_safe/gui/qt/block_change_signals.py @@ -77,6 +77,9 @@ def __enter__(self): if self.all_widgets is None: self.all_widgets = self.fill_widget_list() + # remove the already blocked ones + self.all_widgets = set([w for w in self.all_widgets if not w.signalsBlocked()]) + for widget in self.all_widgets: widget.blockSignals(True) diff --git a/bitcoin_safe/gui/qt/descriptor_ui.py b/bitcoin_safe/gui/qt/descriptor_ui.py index 4bef2ca..b63d490 100644 --- a/bitcoin_safe/gui/qt/descriptor_ui.py +++ b/bitcoin_safe/gui/qt/descriptor_ui.py @@ -240,10 +240,17 @@ def set_combo_box_address_type_default(self): def get_address_type_from_ui(self) -> AddressType: address_types = get_address_types(self.protowallet.is_multisig()) - address_type = address_types[self.comboBox_address_type.currentIndex()] + # sanity check + assert ( + self.comboBox_address_type.currentText() + == address_types[self.comboBox_address_type.currentIndex()].name + ) + assert ( + self.comboBox_address_type.currentData() + == address_types[self.comboBox_address_type.currentIndex()] + ) - assert address_type.name == self.comboBox_address_type.currentText() - return address_type + return self.comboBox_address_type.currentData() def get_m_of_n_from_ui(self) -> Tuple[int, int]: return (self.spin_req.value(), self.spin_signers.value()) @@ -289,16 +296,18 @@ def repopulate_comboBox_address_type(self, is_multisig: bool): address_type_names = [a.name for a in address_types] # Get the current items in the combo box - current_items = [ + current_names = [ self.comboBox_address_type.itemText(i) for i in range(self.comboBox_address_type.count()) ] # Check if the new list is different from the current items - if address_type_names != current_items: + if address_type_names != current_names: # Clear and update the combo box self.comboBox_address_type.clear() - self.comboBox_address_type.addItems(address_type_names) + for address_type in address_types: + self.comboBox_address_type.addItem(address_type.name, userData=address_type) + default_address_type = get_default_address_type(is_multisig).name if default_address_type in address_type_names: self.comboBox_address_type.setCurrentIndex(address_type_names.index(default_address_type)) @@ -322,6 +331,7 @@ def create_wallet_type_and_descriptor(self): self.label_signers = QLabel() self.spin_req = QSpinBox() + self.spin_req.setObjectName("spin_req") self.spin_req.setMinimum(1) self.spin_req.setMaximum(10) @@ -330,6 +340,7 @@ def create_wallet_type_and_descriptor(self): self.label_of.setAlignment(Qt.AlignmentFlag.AlignCenter) self.spin_signers = QSpinBox() + self.spin_signers.setObjectName("spin_signers") self.spin_signers.setMinimum(1) self.spin_signers.setMaximum(10) diff --git a/bitcoin_safe/gui/qt/downloader.py b/bitcoin_safe/gui/qt/downloader.py index 382b2d3..5e5ad9a 100644 --- a/bitcoin_safe/gui/qt/downloader.py +++ b/bitcoin_safe/gui/qt/downloader.py @@ -83,11 +83,11 @@ def __init__(self, url, destination_dir): self.initUI() def initUI(self): - self.setWindowTitle("Download Progress") + self.setWindowTitle(self.tr("Download Progress")) self.layout = QVBoxLayout() # Use the filename in the button text - self.startButton = QPushButton(f"Download {self.filename}") + self.startButton = QPushButton(self.tr("Download {}").format(self.filename)) download_icon = self.style().standardIcon(QStyle.StandardPixmap.SP_DriveNetIcon) self.startButton.setIcon(download_icon) self.startButton.clicked.connect(self.startDownload) @@ -99,7 +99,7 @@ def initUI(self): self.progress.hide() # Use the filename in the button text - self.showFileButton = QPushButton(f"Show {self.filename} in Folder") + self.showFileButton = QPushButton(self.tr("Show {} in Folder").format(self.filename)) open_icon = self.style().standardIcon(QStyle.StandardPixmap.SP_DirOpenIcon) self.showFileButton.setIcon(open_icon) self.showFileButton.clicked.connect(self.showFile) diff --git a/bitcoin_safe/gui/qt/extended_tabwidget.py b/bitcoin_safe/gui/qt/extended_tabwidget.py index ca5c442..562d883 100644 --- a/bitcoin_safe/gui/qt/extended_tabwidget.py +++ b/bitcoin_safe/gui/qt/extended_tabwidget.py @@ -34,12 +34,14 @@ QLineEdit, QSizePolicy, QSpacerItem, + QTabWidget, QTextEdit, QVBoxLayout, QWidget, ) from bitcoin_safe.gui.qt.data_tab_widget import DataTabWidget +from bitcoin_safe.gui.qt.util import add_tab_to_tabs, read_QIcon, remove_tab class ExtendedTabWidget(DataTabWidget): @@ -98,16 +100,18 @@ def resizeEvent(self, event: QResizeEvent): super().resizeEvent(event) -class ExtendedTabWidgetWithLoading(ExtendedTabWidget): - def __init__(self, parent=None): - super().__init__(parent) +class LoadingWalletTab(QWidget): + def __init__(self, tabs: QTabWidget, name: str, focus=True): + super().__init__(tabs) + self.tabs = tabs + self.name = name + self.focus = focus # Create a QWidget to serve as a container for the QLabel - self.labelContainer = QWidget(self) - self.labelContainer.setLayout(QVBoxLayout()) # Setting the layout directly + self.setLayout(QVBoxLayout()) # Setting the layout directly # Create and configure QLabel - self.emptyLabel = QLabel("Loading, please wait...", self.labelContainer) + self.emptyLabel = QLabel("Loading, please wait...", self) self.emptyLabel.setAlignment(Qt.AlignmentFlag.AlignCenter | Qt.AlignmentFlag.AlignVCenter) self.emptyLabel.setStyleSheet("font-size: 16pt;") # Adjust the font size as needed @@ -116,20 +120,23 @@ def __init__(self, parent=None): spacerBottom = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) # Add spacers and label to the layout - self.labelContainer.layout().addItem(spacerTop) - self.labelContainer.layout().addWidget(self.emptyLabel) - self.labelContainer.layout().addItem(spacerBottom) - - # Connect the signal to update visibility based on tab count - self.currentChanged.connect(self.updateVisibility) - - def updateVisibility(self, index): - if self.count() == 0: - self.labelContainer.show() - self.tabBar().hide() - else: - self.labelContainer.hide() - self.tabBar().show() + self.layout().addItem(spacerTop) + self.layout().addWidget(self.emptyLabel) + self.layout().addItem(spacerBottom) + + def __enter__(self): + add_tab_to_tabs( + self.tabs, + self, + read_QIcon("status_waiting.png"), + self.name, + self.name, + focus=self.focus, + ) + QApplication.processEvents() + + def __exit__(self, exc_type, exc_value, traceback): + remove_tab(self, self.tabs) # Usage example diff --git a/bitcoin_safe/gui/qt/main.py b/bitcoin_safe/gui/qt/main.py index 78cdb08..074e6a1 100644 --- a/bitcoin_safe/gui/qt/main.py +++ b/bitcoin_safe/gui/qt/main.py @@ -47,7 +47,7 @@ import os import shlex import sys -from typing import Deque, Dict, Literal, Optional, Tuple, Union +from typing import Deque, Dict, List, Literal, Optional, Tuple, Union import bdkpython as bdk from bitcoin_qrreader import bitcoin_qr, bitcoin_qr_gui @@ -83,7 +83,7 @@ from . import address_dialog from .dialog_import import ImportDialog from .dialogs import PasswordQuestion, WalletIdDialog, question_dialog -from .extended_tabwidget import ExtendedTabWidgetWithLoading +from .extended_tabwidget import ExtendedTabWidget, LoadingWalletTab from .network_settings.main import NetworkSettingsUI from .new_wallet_welcome_screen import NewWalletWelcomeScreen from .qt_wallet import QTProtoWallet, QTWallet, QtWalletBase @@ -203,7 +203,7 @@ def setupUi(self, MainWindow: QWidget): MainWindow.setMinimumSize(w, h) ##### - self.tab_wallets = ExtendedTabWidgetWithLoading(self) + self.tab_wallets = ExtendedTabWidget(self) self.tab_wallets.tabBar().setExpanding(True) # This will expand tabs to fill the tab widget width self.tab_wallets.setTabBarAutoHide(False) self.tab_wallets.setMovable(True) # Enable tab reordering @@ -229,7 +229,7 @@ def setupUi(self, MainWindow: QWidget): vbox.addWidget(notification_bar) self.update_notification_bar = UpdateNotificationBar(signals_min=self.signals) - # self.update_notification_bar.check() # TODO: disable this, after it got more stable + self.update_notification_bar.check() # TODO: disable this, after it got more stable vbox.addWidget(self.update_notification_bar) vbox.addWidget(self.tab_wallets) @@ -744,8 +744,8 @@ def get_outpoints(): return viewer.main_widget, viewer - def open_last_opened_wallets(self): - opened_wallets = [] + def open_last_opened_wallets(self) -> List[QTWallet]: + opened_wallets: List[QTWallet] = [] for file_path in self.config.last_wallet_files.get(str(self.config.network), []): qt_wallet = self.open_wallet(file_path=str(rel_home_path_to_abs_path(file_path))) if qt_wallet: @@ -823,11 +823,7 @@ def open_wallet(self, file_path: Optional[str] = None): qt_wallet.file_path = file_path qt_wallet.sync() - # ensure that the newest open file moves to the top of the queue, but isn't added multiple times - recent_wallets = self.config.recently_open_wallets[self.config.network] - if qt_wallet.file_path in recent_wallets: - recent_wallets.remove(qt_wallet.file_path) - recent_wallets.append(qt_wallet.file_path) + self.add_recently_open_wallet(qt_wallet.file_path) self.signals.finished_open_wallet.emit(wallet.id) return qt_wallet @@ -931,7 +927,7 @@ def new_wallet(self): def new_wallet_id(self) -> str: return self.tr("new") + str(len(self.qt_wallets)) - def create_qtwallet_from_protowallet(self, protowallet: ProtoWallet): + def create_qtwallet_from_protowallet(self, protowallet: ProtoWallet) -> QTWallet: wallet = Wallet.from_protowallet( protowallet, @@ -944,6 +940,7 @@ def create_qtwallet_from_protowallet(self, protowallet: ProtoWallet): qt_wallet.address_list_tags.add(self.tr("KYC-Exchange")) qt_wallet.save() qt_wallet.sync() + return qt_wallet def create_qtwallet_from_ui( self, @@ -954,7 +951,9 @@ def create_qtwallet_from_ui( ): if keystore_uis.ask_accept_unexpected_origins(): self.tab_wallets.removeTab(self.tab_wallets.indexOf(wallet_tab)) - self.create_qtwallet_from_protowallet(protowallet=protowallet) + qt_wallet = self.create_qtwallet_from_protowallet(protowallet=protowallet) + qt_wallet.tabs.setCurrentWidget(qt_wallet.history_tab) + else: wallet_steps.set_current_index(wallet_steps.current_index() - 1) return @@ -1027,19 +1026,6 @@ def create_qtprotowallet(self, m_of_n: Tuple[int, int], show_tutorial=False) -> return qtprotowallet - # def add_loading_tab(self)->QWidget: - # tab = QWidget() - # emptyLabel = QLabel("Loading, please wait...", self) - # emptyLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) - - # self.tab_wallets.addTab(tab) - # return tab - - # def remove_loading_tab(self, loading_tab:QWidget): - # idx = self.tab_wallets.indexOf(loading_tab) - # if idx != -1: - # self.tab_wallets.removeTab(idx) - def add_qt_wallet(self, wallet: Wallet) -> QTWallet: def set_tab_widget_icon(tab: QWidget, icon: QIcon): idx = self.tab_wallets.indexOf(tab) @@ -1050,31 +1036,32 @@ def set_tab_widget_icon(tab: QWidget, icon: QIcon): name=wallet.id ) - qt_wallet = QTWallet( - wallet, - self.config, - self.signals, - self.mempool_data, - self.fx, - set_tab_widget_icon=set_tab_widget_icon, - ) - qt_wallet.signal_close_wallet.connect(lambda: self.remove_qt_wallet(qt_wallet)) + with LoadingWalletTab(self.tab_wallets, wallet.id, focus=True): + qt_wallet = QTWallet( + wallet, + self.config, + self.signals, + self.mempool_data, + self.fx, + set_tab_widget_icon=set_tab_widget_icon, + ) + qt_wallet.signal_close_wallet.connect(lambda: self.remove_qt_wallet(qt_wallet)) - # tutorial - qt_wallet.wallet_steps = WalletSteps( - wallet_tabs=qt_wallet.tabs, - qtwalletbase=qt_wallet, - qt_wallet=qt_wallet, - ) - # save after every step - qt_wallet.wallet_steps.signal_set_current_widget.connect(lambda widget: qt_wallet.save()) + # tutorial + qt_wallet.wallet_steps = WalletSteps( + wallet_tabs=qt_wallet.tabs, + qtwalletbase=qt_wallet, + qt_wallet=qt_wallet, + ) + # save after every step + qt_wallet.wallet_steps.signal_set_current_widget.connect(lambda widget: qt_wallet.save()) # add to tabs self.qt_wallets[wallet.id] = qt_wallet add_tab_to_tabs( self.tab_wallets, qt_wallet.tab, - read_QIcon("file.png"), + read_QIcon("status_waiting.png"), qt_wallet.wallet.id, qt_wallet.wallet.id, focus=True, @@ -1164,11 +1151,17 @@ def remove_qt_wallet(self, qt_wallet: QTWallet): if self.tab_wallets.widget(i) == qt_wallet.tab: self.tab_wallets.removeTab(i) + self.add_recently_open_wallet(qt_wallet.file_path) + qt_wallet.close() QTWallet.remove_lockfile(wallet_file_path=Path(qt_wallet.file_path)) del self.qt_wallets[qt_wallet.wallet.id] self.event_wallet_tab_closed() + def add_recently_open_wallet(self, file_path: str): + self.config.add_recently_open_wallet(file_path) + self.populate_recent_wallets_menu() + def remove_all_qt_wallet(self): for qt_wallet in self.qt_wallets.copy().values(): diff --git a/bitcoin_safe/gui/qt/nostr_sync/nostr.py b/bitcoin_safe/gui/qt/nostr_sync/nostr.py index 2d7d2cd..f99519e 100644 --- a/bitcoin_safe/gui/qt/nostr_sync/nostr.py +++ b/bitcoin_safe/gui/qt/nostr_sync/nostr.py @@ -41,7 +41,7 @@ import zlib from collections import deque from dataclasses import dataclass -from typing import Any, Callable, Dict, List, Optional +from typing import Any, Callable, Dict, List, Optional, Set import bdkpython as bdk import cbor2 @@ -49,14 +49,17 @@ from bitcoin_qrreader.bitcoin_qr import Data, DataType from nostr_sdk import ( Client, - ClientSigner, Event, EventId, Filter, HandleNotification, Keys, + Kind, + KindEnum, + NostrSigner, PublicKey, Relay, + RelayMessage, RelayStatus, SecretKey, Timestamp, @@ -417,7 +420,7 @@ def get_relays(nip: str = "4") -> List[str]: def get_recipient_public_key(event: Event) -> Optional[PublicKey]: - if event.kind() != 4: + if not event.kind().match_enum(KindEnum.ENCRYPTED_DIRECT_MESSAGE()): return None for tag in event.tags(): tag_enum = tag.as_enum() @@ -562,7 +565,7 @@ def __init__( self.from_serialized = from_serialized def is_dm_for_me(self, event: Event) -> bool: - if event.kind() != 4: + if not event.kind().match_enum(KindEnum.ENCRYPTED_DIRECT_MESSAGE()): return False recipient_public_key = get_recipient_public_key(event) if not recipient_public_key: @@ -600,14 +603,14 @@ def handle_dm_event(self, event: Event): logger.debug(f"Processed dm: {nostr_dm}") def dm_is_alreay_in_queue(self, dm: BaseDM) -> bool: - for item in self.queue: + for item in list(self.queue): if not isinstance(item, BaseDM): continue if item == dm: return True return False - def handle(self, relay_url: str, event: Event): + def handle(self, relay_url: str, subscription_id: str, event: Event): # logger.debug(f"Received new event from {relay_url}: {event.as_json()}") # logger.debug("Decrypting event") try: @@ -615,7 +618,7 @@ def handle(self, relay_url: str, event: Event): except Exception as e: logger.error(f"Error during handle: {str(e)} of {relay_url}") - def handle_msg(self, relay_url, msg): + def handle_msg(self, relay_url: str, msg: RelayMessage): pass # logger.debug(f"Received direct message: {msg}") @@ -642,11 +645,11 @@ def __init__( self.queue: deque[BaseDM] = deque(maxlen=10000) # self.events is used for replaying events from dump self.events: list[Event] = events if events else [] - self.current_filter_dict: dict[str, Filter] = {} + self.current_subscription_dict: Dict[str, PublicKey] = {} # subscription_id: PublicKey self.timer = QTimer() # Initialize the client with the private key - signer = ClientSigner.keys(self.keys) + signer = NostrSigner.keys(self.keys) self.client = Client(signer) self.notification_handler = NotificationHandler( @@ -658,14 +661,14 @@ def __init__( ) self.client.handle_notifications(self.notification_handler) - def get_currently_allowed(self): - allow_list = set(self.current_filter_dict.keys()) + def get_currently_allowed(self) -> Set[str]: + allow_list = set([k.to_bech32() for k in self.current_subscription_dict.values()]) allow_list.add(self.keys.public_key().to_bech32()) allow_list.update(self.allow_list) return allow_list def public_key_was_published(self, public_key: PublicKey) -> bool: - for dm in self.queue: + for dm in list(self.queue): if isinstance(dm, ProtocolDM): if dm.public_key_bech32 == public_key.to_bech32(): return True @@ -689,12 +692,17 @@ def send(self, dm: BaseDM, receiver: PublicKey) -> Optional[EventId]: return None def _get_filter(self, recipient: PublicKey, author: PublicKey, start_time: datetime = None): - this_filter = Filter().pubkeys([recipient]).authors([author]).kind(4) + this_filter = ( + Filter() + .pubkeys([recipient]) + .authors([author]) + .kind(Kind.from_enum(KindEnum.ENCRYPTED_DIRECT_MESSAGE())) + ) if start_time: this_filter = this_filter.since(timestamp=Timestamp.from_secs(int(start_time.timestamp()))) return this_filter - def _filters(self, author_public_keys: list[PublicKey], start_time: datetime = None) -> dict[str, Filter]: + def _filters(self, author_public_keys: List[PublicKey], start_time: datetime = None) -> dict[str, Filter]: recipient_public_key = self.keys.public_key() return { author_public_key.to_bech32(): self._get_filter( @@ -705,31 +713,27 @@ def _filters(self, author_public_keys: list[PublicKey], start_time: datetime = N for author_public_key in author_public_keys } - def subscribe(self, public_keys: List[PublicKey], start_time: datetime = None): + def subscribe(self, public_key: PublicKey, start_time: datetime = None) -> str: "overwrites previous filters" - if not self.client.is_running() or not self.get_connected_relays(): + if not self.get_connected_relays(): self.ensure_connected() self._start_timer() - self.current_filter_dict.update(self._filters(public_keys, start_time=start_time)) - logger.debug(f"self.current_filter_dict {self.current_filter_dict}") - filters = list(self.current_filter_dict.values()) - if filters: - self.client.subscribe(filters) - else: - self.client.unsubscribe() + subscription_id = self.client.subscribe( + self._filters([public_key], start_time=start_time).values(), opts=None + ) + self.current_subscription_dict[subscription_id] = public_key + return subscription_id def unsubscribe_all(self): - self.current_filter_dict = {} - self.subscribe([]) + self.unsubscribe(list(self.current_subscription_dict.values())) def unsubscribe(self, public_keys: List[PublicKey]): - for key in self._filters(public_keys).keys(): - if key in self.current_filter_dict: - del self.current_filter_dict[key] - - self.subscribe([]) + for subscription_id, pub_key in list(self.current_subscription_dict.items()): + if pub_key in public_keys: + self.client.unsubscribe(subscription_id) + del self.current_subscription_dict[subscription_id] def _start_timer(self, delay_retry_connect=5): if not self.use_timer: @@ -780,7 +784,7 @@ def include_item(item: BaseDM) -> bool: def from_dump( cls, d: Dict, signal_dm: pyqtSignal, from_serialized: Callable[[str], BaseDM] ) -> "DmConnection": - d["keys"] = Keys(sk=SecretKey.from_bech32(d["keys"])) + d["keys"] = Keys(secret_key=SecretKey.from_bech32(d["keys"])) d["events"] = [Event.from_json(json_item) for json_item in d["events"]] @@ -790,7 +794,7 @@ def replay_events(self): # now handle the events as if they came from a relay for event in self.events: - self.notification_handler.handle(relay_url="from_storage", event=event) + self.notification_handler.handle(relay_url="from_storage", event=event, subscription_id="replay") class NostrProtocol(QObject): @@ -840,7 +844,7 @@ def publish_trust_me_back(self, author_public_key: PublicKey, recipient_public_k self.dm_connection.send(dm, self.dm_connection.keys.public_key()) def subscribe(self): - self.dm_connection.subscribe([self.dm_connection.keys.public_key()], start_time=self.start_time) + self.dm_connection.subscribe(self.dm_connection.keys.public_key(), start_time=self.start_time) def dump(self, exclude_protocol_public_key_bech32s: List[str] = None): return { @@ -895,7 +899,7 @@ def from_serialized(self, base64_encoded_data: str) -> BitcoinDM: def add_member(self, new_member: PublicKey): if new_member.to_bech32() not in [k.to_bech32() for k in self.members]: self.members.append(new_member) - self.dm_connection.subscribe([new_member]) + self.dm_connection.subscribe(new_member) logger.debug(f"Add {new_member.to_bech32()} as trusted") def remove_member(self, remove_member: PublicKey): @@ -918,7 +922,8 @@ def members_including_me(self): return self.members + [self.dm_connection.keys.public_key()] def subscribe(self): - self.dm_connection.subscribe(self.members_including_me(), start_time=self.start_time) + for public_key in self.members_including_me(): + self.dm_connection.subscribe(public_key, start_time=self.start_time) def dump(self): forbidden_data_types = [DataType.LabelsBip329] diff --git a/bitcoin_safe/gui/qt/qt_wallet.py b/bitcoin_safe/gui/qt/qt_wallet.py index d197a81..5c61b65 100644 --- a/bitcoin_safe/gui/qt/qt_wallet.py +++ b/bitcoin_safe/gui/qt/qt_wallet.py @@ -54,12 +54,13 @@ from bitcoin_safe.gui.qt.my_treeview import SearchableTab, TreeViewWithToolbar from bitcoin_safe.gui.qt.sync_tab import SyncTab from bitcoin_safe.threading_manager import NoThread, TaskThread +from bitcoin_safe.util import Satoshis from ...config import UserConfig from ...execute_config import ENABLE_THREADING from ...mempool import MempoolData from ...signals import SignalFunction, Signals, UpdateFilter -from ...tx import TxUiInfos +from ...tx import TxUiInfos, short_tx_id from ...wallet import ProtoWallet, Wallet, filename_clean, get_wallets from .address_list import AddressList, AddressListWithToolbar from .bitcoin_quick_receive import BitcoinQuickReceive @@ -524,12 +525,47 @@ def cancel_setting_changes(self): self.wallet_descriptor_ui.protowallet = self.wallet.as_protowallet() self.wallet_descriptor_ui.set_all_ui_from_protowallet() + def notify_on_new_txs(self): + def format_txs(txs: List[bdk.TransactionDetails]) -> str: + return " \n".join( + [ + f"{Satoshis( tx.received- tx.sent, self.config.network).diff(unit=True)} in {short_tx_id( tx.txid)}" + for tx in txs + ] + ) + + delta_txs = self.wallet.bdkwallet.list_delta_transactions(access_marker="notifications") + # if transactions were removed (reorg or other), then recalculate everything + if delta_txs.removed: + Message( + self.tr( + "The transactions {txs} in wallet '{wallet}' were removed from the history!!!" + ).format(txs=format_txs(delta_txs.removed), wallet=self.wallet.id), + no_show=True, + ).emit_with(self.signals.notification) + elif delta_txs.appended: + if len(delta_txs.appended) == 1: + Message( + self.tr("New transaction in wallet '{wallet}':\n{txs}").format( + txs=format_txs(delta_txs.appended), wallet=self.wallet.id + ), + no_show=True, + ).emit_with(self.signals.notification) + else: + Message( + self.tr("New transactions in wallet '{wallet}':\n{txs}").format( + txs=format_txs(delta_txs.appended), wallet=self.wallet.id + ), + no_show=True, + ).emit_with(self.signals.notification) + def refresh_caches_and_ui_lists(self, threaded=ENABLE_THREADING): # before the wallet UI updates, we have to refresh the wallet caches to make the UI update faster logger.debug("refresh_caches_and_ui_lists") self.wallet.clear_cache() def do(): + self.notify_on_new_txs() self.wallet.fill_commonly_used_caches() def on_done(result): diff --git a/bitcoin_safe/gui/qt/search_tree_view.py b/bitcoin_safe/gui/qt/search_tree_view.py index 234e52d..063e0d4 100644 --- a/bitcoin_safe/gui/qt/search_tree_view.py +++ b/bitcoin_safe/gui/qt/search_tree_view.py @@ -138,9 +138,10 @@ def demo_on_click(item: ResultItem): class CustomTreeView(QTreeView): - def __init__(self, parent=None, on_click=None): + def __init__(self, parent=None, on_click=None, on_double_click=None): super().__init__(parent) self.on_click = on_click + self.on_double_click = on_double_click self.setModel(QStandardItemModel()) self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) # Vertical scrollbar @@ -161,6 +162,7 @@ def __init__(self, parent=None, on_click=None): # Connect the clicked signal to the callback function self.clicked.connect(self.handle_item_clicked) + self.doubleClicked.connect(self.handle_item_double_clicked) def model(self) -> QStandardItemModel: return super().model() @@ -189,10 +191,22 @@ def handle_item_clicked(self, index: QModelIndex): if self.on_click and index.isValid(): # Retrieve the item from the model item = self.model().itemFromIndex(index) + if not item: + return # Perform the action you want based on the clicked item # For example, call a custom method of the item (if your item class has one) self.on_click(item.result_item) + def handle_item_double_clicked(self, index: QModelIndex): + if self.on_double_click and index.isValid(): + # Retrieve the item from the model + item = self.model().itemFromIndex(index) + if not item: + return + # Perform the action you want based on the clicked item + # For example, call a custom method of the item (if your item class has one) + self.on_double_click(item.result_item) + class CustomPopup(QFrame): def __init__(self, parent=None): @@ -238,7 +252,7 @@ def __init__( self.popup = CustomPopup(self) - self.tree_view = CustomTreeView(self, on_click=on_click) + self.tree_view = CustomTreeView(self, on_click=on_click, on_double_click=self.on_double_click) self.tree_view.setVisible(False) if results_in_popup: self.popup.layout().addWidget(self.tree_view) @@ -254,6 +268,10 @@ def __init__( # Install event filter on the main window self.window().installEventFilter(self) + def on_double_click(self, result_item: ResultItem): + "Here is what is done on the 2. click of a double click" + self.popup.hide() + def updateUi(self): self.search_field.setPlaceholderText(translate("mytreeview", "Type to search...")) diff --git a/bitcoin_safe/gui/qt/sync_tab.py b/bitcoin_safe/gui/qt/sync_tab.py index 1c6d452..1e6ead2 100644 --- a/bitcoin_safe/gui/qt/sync_tab.py +++ b/bitcoin_safe/gui/qt/sync_tab.py @@ -161,7 +161,7 @@ def from_descriptor_new_device_keys( ) -> "SyncTab": encoded_wallet_descriptor = hashlib.sha256(multipath_descriptor.as_string().encode()).hexdigest() protocol_keys = nostr_sdk.Keys( - sk=nostr_sdk.SecretKey.from_hex( + secret_key=nostr_sdk.SecretKey.from_hex( hashlib.sha256(encoded_wallet_descriptor.encode("utf-8")).hexdigest() ) ) diff --git a/bitcoin_safe/gui/qt/update_notification_bar.py b/bitcoin_safe/gui/qt/update_notification_bar.py index 4ae2c1c..048c375 100644 --- a/bitcoin_safe/gui/qt/update_notification_bar.py +++ b/bitcoin_safe/gui/qt/update_notification_bar.py @@ -43,7 +43,7 @@ from bitcoin_safe.threading_manager import TaskThread from ... import __version__ -from ...html import link +from ...html import html_f, link from ...signals import SignalsMin from ...signature_manager import ( Asset, @@ -112,9 +112,16 @@ def refresh(self): self.download_container.setVisible(bool(self.assets)) if self.assets: if self.is_new_version_available(): - self.textLabel.setText(self.tr("New version available {tag}").format(self.get_asset_tag())) + self.textLabel.setText( + self.tr("New version available {tag}").format(tag=self.get_asset_tag()) + ) self.optionalButton.setVisible(False) self.setVisible(True) + + for asset in self.assets: + downloader = Downloader(url=asset.url, destination_dir=tempfile.gettempdir()) + downloader.finished.connect(self.on_download_finished) + self.download_container.layout().addWidget(downloader) else: self.textLabel.setText(self.tr("You have already the newest version.")) self.optionalButton.setVisible(True) @@ -122,39 +129,49 @@ def refresh(self): self.textLabel.setText(self.tr("No update found")) self.optionalButton.setVisible(True) - for asset in self.assets: - downloader = Downloader(url=asset.url, destination_dir=tempfile.gettempdir()) - downloader.finished.connect(self.on_download_finished) - self.download_container.layout().addWidget(downloader) - def on_download_finished(self, download_thread: DownloadThread): sig_file_path = self.verifyer.get_signature_from_web(download_thread.filename) + if not sig_file_path: + Message(self.tr("Could not verify the download. Please try again later.")) + self.refresh() + self.setVisible(False) + return + + if not self.verifyer.is_gnupg_installed(): + if platform.system() == "Windows": + txt = self.tr( + """Please install {link} to automatically verify the signature of the update.""" + ).format(link=link("https://www.gpg4win.org")) + elif platform.system() == "Linux": + txt = self.tr( + """Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update.""" + ) + elif platform.system() == "Darwin": + txt = self.tr( + """Please install GPG via "brew install gnupg" to automatically verify the signature of the update.""" + ) + Message(txt, type=MessageType.Error) + destination = self.get_download_folder() - if ( - not self.verifyer.is_gnupg_installed() - or sig_file_path - and self.verifyer.verify_signature(download_thread.filename, expected_public_key=self.key) - ): + was_signature_verified = None + if self.verifyer.is_gnupg_installed(): + was_signature_verified = self.verifyer.verify_signature( + download_thread.filename, expected_public_key=self.key + ) + if not was_signature_verified: + Message(self.tr("Signature doesn't match!!! Please try again."), type=MessageType.Error) + self.refresh() + self.setVisible(False) + return + else: + self.textLabel.setText(html_f(self.tr("Signature verified."), color="green", bf=True)) + + if not self.verifyer.is_gnupg_installed() or was_signature_verified: # overwrite the download_thread.filename so the show-button still works download_thread.filename = self.move_and_overwrite(download_thread.filename, destination) if sig_file_path: self.move_and_overwrite(sig_file_path, destination) - if not self.verifyer.is_gnupg_installed(): - if platform.system() == "Windows": - txt = self.tr( - """Please install {link} to automatically verify the signature of the update.""" - ).format(link=link("https://www.gpg4win.org")) - elif platform.system() == "Linux": - txt = self.tr( - """Please install GPG via "sudo apt-get -y install gpg" to automatically verify the signature of the update.""" - ) - elif platform.system() == "Darwin": - txt = self.tr( - """Please install GPG via "brew install gnupg" to automatically verify the signature of the update.""" - ) - Message(txt, type=MessageType.Error) - @staticmethod def move_and_overwrite(source: Path, destination: Path) -> Path: # convert destination to destination with filename diff --git a/bitcoin_safe/gui/qt/util.py b/bitcoin_safe/gui/qt/util.py index d630b17..5baaa4f 100644 --- a/bitcoin_safe/gui/qt/util.py +++ b/bitcoin_safe/gui/qt/util.py @@ -67,6 +67,7 @@ QPushButton, QSizePolicy, QSystemTrayIcon, + QTabWidget, QToolTip, QVBoxLayout, QWidget, @@ -306,6 +307,13 @@ def add_tab_to_tabs( tabs.setCurrentIndex(position) +def remove_tab(tab: QWidget, tabs: QTabWidget): + idx = tabs.indexOf(tab) + if idx is None or idx < 0: + return + tabs.removeTab(idx) + + class Buttons(QHBoxLayout): def __init__(self, *buttons): QHBoxLayout.__init__(self) @@ -423,20 +431,30 @@ def msg_box( ) -def custom_exception_handler(exc_type, exc_value, exc_traceback): +def custom_exception_handler(exc_type, exc_value, exc_traceback=None): """Custom exception handler to catch unhandled exceptions and display an error message box.""" title = "Error" + try: + # Format the traceback for the email + "".join(traceback.format_exception(exc_type, exc_value, exc_traceback)) + error_message = f"{exc_type.__name__}: {exc_value}" - # Format the traceback - "".join(traceback.format_exception(exc_type, exc_value, exc_traceback)) - error_message = f"{exc_type.__name__}: {exc_value}" - - QMessageBox.critical( - None, title, f"{error_message}\n\nPlease send the error report via email, so the bug can be fixed." - ) + logger.critical(error_message, exc_info=(exc_type, exc_value, exc_traceback)) + QMessageBox.critical( + None, + title, + f"{error_message}\n\nPlease send the error report via email, so the bug can be fixed.", + ) - logger.critical(error_message, exc_info=(exc_type, exc_value, exc_traceback)) + except: + error_message = str([exc_type, exc_value, exc_traceback]) + logger.critical(error_message) + QMessageBox.critical( + None, + title, + f"{error_message}\n\nPlease send the error report via email, so the bug can be fixed.", + ) def caught_exception_message(e: Exception, title=None, log_traceback=False) -> Message: diff --git a/bitcoin_safe/signature_manager.py b/bitcoin_safe/signature_manager.py index 76cd126..54a900a 100644 --- a/bitcoin_safe/signature_manager.py +++ b/bitcoin_safe/signature_manager.py @@ -56,12 +56,12 @@ def extract_prefix_and_version(filename: str) -> tuple[Optional[str], Optional[s import re # try with - separator - match = re.search(r"(.*?)-(\d+\.\d+\.\d+)", filename) + match = re.search(r"(.*?)-([\d\.]+[a-zA-Z0-9]*)-", filename) if match: return (match.group(1), match.group(2)) # try with _ separator - match = re.search(r"(.*?)_(\d+\.\d+\.\d+)", filename) + match = re.search(r"(.*?)_([\d\.]+[a-zA-Z0-9]*)_", filename) if match: return (match.group(1), match.group(2)) return (None, None) @@ -117,6 +117,7 @@ def __init__( ) -> None: self.list_of_known_keys = list_of_known_keys if list_of_known_keys else [] self._gpg = None + self.import_known_keys() @staticmethod def _get_gpg_path() -> Optional[str]: @@ -171,7 +172,6 @@ def gpg(self): raise EnvironmentError("GnuPG is not installed on this system.") def import_known_keys(self) -> None: - self.gpg() for key in self.list_of_known_keys: self.gpg.import_keys(key.key) diff --git a/bitcoin_safe/threading_manager.py b/bitcoin_safe/threading_manager.py index 2e4d57f..5cf40cf 100644 --- a/bitcoin_safe/threading_manager.py +++ b/bitcoin_safe/threading_manager.py @@ -157,9 +157,9 @@ def __init__(self, *args, **kwargs): def add_and_start( self, task, - on_success=None, - on_done=None, - on_error=None, + on_success: Callable = None, + on_done: Callable = None, + on_error: Callable = None, ): result = None try: diff --git a/poetry.lock b/poetry.lock index ccd71fd..9191b14 100644 --- a/poetry.lock +++ b/poetry.lock @@ -143,13 +143,13 @@ pyzbar = ">=0.1.9,<0.2.0" [[package]] name = "bitcoin-usb" -version = "0.1.13" +version = "0.1.14" description = "Wrapper around hwi, such that one can sign bdk PSBTs directly" optional = false python-versions = "<3.12,>=3.8.1" files = [ - {file = "bitcoin_usb-0.1.13-py3-none-any.whl", hash = "sha256:83051a232529616e468d3f970cccc05dd69dec22047b87d97cf6b3c37447046a"}, - {file = "bitcoin_usb-0.1.13.tar.gz", hash = "sha256:a612cf978d733bf79538b7a96988e716e6aa6901fae8e68f9ea8b4ce6913e139"}, + {file = "bitcoin_usb-0.1.14-py3-none-any.whl", hash = "sha256:9ad375c09989a15b6ac20f4b84b3e5126e2ca152b2b42a49a1717f0de75763fe"}, + {file = "bitcoin_usb-0.1.14.tar.gz", hash = "sha256:6037da73e7040ea8dbc82c88393c6cf88a00d4bd8544c952ee70092225045061"}, ] [package.dependencies] @@ -687,13 +687,13 @@ cffi = ">=1.3.0" [[package]] name = "filelock" -version = "3.13.4" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, - {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] @@ -924,13 +924,13 @@ qt = ["pyside2 (>=5.14.0,<6.0.0)"] [[package]] name = "identify" -version = "2.5.35" +version = "2.5.36" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, - {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -979,13 +979,13 @@ files = [ [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1009,166 +1009,149 @@ files = [ [[package]] name = "lxml" -version = "5.2.1" +version = "5.2.2" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" files = [ - {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f7785f4f789fdb522729ae465adcaa099e2a3441519df750ebdccc481d961a1"}, - {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cc6ee342fb7fa2471bd9b6d6fdfc78925a697bf5c2bcd0a302e98b0d35bfad3"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:794f04eec78f1d0e35d9e0c36cbbb22e42d370dda1609fb03bcd7aeb458c6377"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817d420c60a5183953c783b0547d9eb43b7b344a2c46f69513d5952a78cddf3"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2213afee476546a7f37c7a9b4ad4d74b1e112a6fafffc9185d6d21f043128c81"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b070bbe8d3f0f6147689bed981d19bbb33070225373338df755a46893528104a"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e02c5175f63effbd7c5e590399c118d5db6183bbfe8e0d118bdb5c2d1b48d937"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3dc773b2861b37b41a6136e0b72a1a44689a9c4c101e0cddb6b854016acc0aa8"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:d7520db34088c96cc0e0a3ad51a4fd5b401f279ee112aa2b7f8f976d8582606d"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:bcbf4af004f98793a95355980764b3d80d47117678118a44a80b721c9913436a"}, - {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2b44bec7adf3e9305ce6cbfa47a4395667e744097faed97abb4728748ba7d47"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1c5bb205e9212d0ebddf946bc07e73fa245c864a5f90f341d11ce7b0b854475d"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2c9d147f754b1b0e723e6afb7ba1566ecb162fe4ea657f53d2139bbf894d050a"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3545039fa4779be2df51d6395e91a810f57122290864918b172d5dc7ca5bb433"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a91481dbcddf1736c98a80b122afa0f7296eeb80b72344d7f45dc9f781551f56"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2ddfe41ddc81f29a4c44c8ce239eda5ade4e7fc305fb7311759dd6229a080052"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a7baf9ffc238e4bf401299f50e971a45bfcc10a785522541a6e3179c83eabf0a"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:31e9a882013c2f6bd2f2c974241bf4ba68c85eba943648ce88936d23209a2e01"}, - {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a15438253b34e6362b2dc41475e7f80de76320f335e70c5528b7148cac253a1"}, - {file = "lxml-5.2.1-cp310-cp310-win32.whl", hash = "sha256:6992030d43b916407c9aa52e9673612ff39a575523c5f4cf72cdef75365709a5"}, - {file = "lxml-5.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:da052e7962ea2d5e5ef5bc0355d55007407087392cf465b7ad84ce5f3e25fe0f"}, - {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:70ac664a48aa64e5e635ae5566f5227f2ab7f66a3990d67566d9907edcbbf867"}, - {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1ae67b4e737cddc96c99461d2f75d218bdf7a0c3d3ad5604d1f5e7464a2f9ffe"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f18a5a84e16886898e51ab4b1d43acb3083c39b14c8caeb3589aabff0ee0b270"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6f2c8372b98208ce609c9e1d707f6918cc118fea4e2c754c9f0812c04ca116d"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:394ed3924d7a01b5bd9a0d9d946136e1c2f7b3dc337196d99e61740ed4bc6fe1"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d077bc40a1fe984e1a9931e801e42959a1e6598edc8a3223b061d30fbd26bbc"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764b521b75701f60683500d8621841bec41a65eb739b8466000c6fdbc256c240"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a6b45da02336895da82b9d472cd274b22dc27a5cea1d4b793874eead23dd14f"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:5ea7b6766ac2dfe4bcac8b8595107665a18ef01f8c8343f00710b85096d1b53a"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:e196a4ff48310ba62e53a8e0f97ca2bca83cdd2fe2934d8b5cb0df0a841b193a"}, - {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:200e63525948e325d6a13a76ba2911f927ad399ef64f57898cf7c74e69b71095"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dae0ed02f6b075426accbf6b2863c3d0a7eacc1b41fb40f2251d931e50188dad"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:ab31a88a651039a07a3ae327d68ebdd8bc589b16938c09ef3f32a4b809dc96ef"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:df2e6f546c4df14bc81f9498bbc007fbb87669f1bb707c6138878c46b06f6510"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5dd1537e7cc06efd81371f5d1a992bd5ab156b2b4f88834ca852de4a8ea523fa"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b9ec9c9978b708d488bec36b9e4c94d88fd12ccac3e62134a9d17ddba910ea9"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8e77c69d5892cb5ba71703c4057091e31ccf534bd7f129307a4d084d90d014b8"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a8d5c70e04aac1eda5c829a26d1f75c6e5286c74743133d9f742cda8e53b9c2f"}, - {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c94e75445b00319c1fad60f3c98b09cd63fe1134a8a953dcd48989ef42318534"}, - {file = "lxml-5.2.1-cp311-cp311-win32.whl", hash = "sha256:4951e4f7a5680a2db62f7f4ab2f84617674d36d2d76a729b9a8be4b59b3659be"}, - {file = "lxml-5.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:5c670c0406bdc845b474b680b9a5456c561c65cf366f8db5a60154088c92d102"}, - {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851"}, - {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0"}, - {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169"}, - {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4"}, - {file = "lxml-5.2.1-cp312-cp312-win32.whl", hash = "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134"}, - {file = "lxml-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a"}, - {file = "lxml-5.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:70a9768e1b9d79edca17890175ba915654ee1725975d69ab64813dd785a2bd5c"}, - {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38d7b9a690b090de999835f0443d8aa93ce5f2064035dfc48f27f02b4afc3d0"}, - {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5670fb70a828663cc37552a2a85bf2ac38475572b0e9b91283dc09efb52c41d1"}, - {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:958244ad566c3ffc385f47dddde4145088a0ab893504b54b52c041987a8c1863"}, - {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6241d4eee5f89453307c2f2bfa03b50362052ca0af1efecf9fef9a41a22bb4f"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2a66bf12fbd4666dd023b6f51223aed3d9f3b40fef06ce404cb75bafd3d89536"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:9123716666e25b7b71c4e1789ec829ed18663152008b58544d95b008ed9e21e9"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:0c3f67e2aeda739d1cc0b1102c9a9129f7dc83901226cc24dd72ba275ced4218"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5d5792e9b3fb8d16a19f46aa8208987cfeafe082363ee2745ea8b643d9cc5b45"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:88e22fc0a6684337d25c994381ed8a1580a6f5ebebd5ad41f89f663ff4ec2885"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:21c2e6b09565ba5b45ae161b438e033a86ad1736b8c838c766146eff8ceffff9"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_s390x.whl", hash = "sha256:afbbdb120d1e78d2ba8064a68058001b871154cc57787031b645c9142b937a62"}, - {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:627402ad8dea044dde2eccde4370560a2b750ef894c9578e1d4f8ffd54000461"}, - {file = "lxml-5.2.1-cp36-cp36m-win32.whl", hash = "sha256:e89580a581bf478d8dcb97d9cd011d567768e8bc4095f8557b21c4d4c5fea7d0"}, - {file = "lxml-5.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:59565f10607c244bc4c05c0c5fa0c190c990996e0c719d05deec7030c2aa8289"}, - {file = "lxml-5.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:857500f88b17a6479202ff5fe5f580fc3404922cd02ab3716197adf1ef628029"}, - {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56c22432809085b3f3ae04e6e7bdd36883d7258fcd90e53ba7b2e463efc7a6af"}, - {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a55ee573116ba208932e2d1a037cc4b10d2c1cb264ced2184d00b18ce585b2c0"}, - {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:6cf58416653c5901e12624e4013708b6e11142956e7f35e7a83f1ab02f3fe456"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:64c2baa7774bc22dd4474248ba16fe1a7f611c13ac6123408694d4cc93d66dbd"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:74b28c6334cca4dd704e8004cba1955af0b778cf449142e581e404bd211fb619"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7221d49259aa1e5a8f00d3d28b1e0b76031655ca74bb287123ef56c3db92f213"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3dbe858ee582cbb2c6294dc85f55b5f19c918c2597855e950f34b660f1a5ede6"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:04ab5415bf6c86e0518d57240a96c4d1fcfc3cb370bb2ac2a732b67f579e5a04"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:6ab833e4735a7e5533711a6ea2df26459b96f9eec36d23f74cafe03631647c41"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f443cdef978430887ed55112b491f670bba6462cea7a7742ff8f14b7abb98d75"}, - {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9e2addd2d1866fe112bc6f80117bcc6bc25191c5ed1bfbcf9f1386a884252ae8"}, - {file = "lxml-5.2.1-cp37-cp37m-win32.whl", hash = "sha256:f51969bac61441fd31f028d7b3b45962f3ecebf691a510495e5d2cd8c8092dbd"}, - {file = "lxml-5.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b0b58fbfa1bf7367dde8a557994e3b1637294be6cf2169810375caf8571a085c"}, - {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3e183c6e3298a2ed5af9d7a356ea823bccaab4ec2349dc9ed83999fd289d14d5"}, - {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:804f74efe22b6a227306dd890eecc4f8c59ff25ca35f1f14e7482bbce96ef10b"}, - {file = "lxml-5.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08802f0c56ed150cc6885ae0788a321b73505d2263ee56dad84d200cab11c07a"}, - {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8c09ed18ecb4ebf23e02b8e7a22a05d6411911e6fabef3a36e4f371f4f2585"}, - {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d30321949861404323c50aebeb1943461a67cd51d4200ab02babc58bd06a86"}, - {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b560e3aa4b1d49e0e6c847d72665384db35b2f5d45f8e6a5c0072e0283430533"}, - {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:058a1308914f20784c9f4674036527e7c04f7be6fb60f5d61353545aa7fcb739"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:adfb84ca6b87e06bc6b146dc7da7623395db1e31621c4785ad0658c5028b37d7"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:417d14450f06d51f363e41cace6488519038f940676ce9664b34ebf5653433a5"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a2dfe7e2473f9b59496247aad6e23b405ddf2e12ef0765677b0081c02d6c2c0b"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bf2e2458345d9bffb0d9ec16557d8858c9c88d2d11fed53998512504cd9df49b"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:58278b29cb89f3e43ff3e0c756abbd1518f3ee6adad9e35b51fb101c1c1daaec"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:64641a6068a16201366476731301441ce93457eb8452056f570133a6ceb15fca"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:78bfa756eab503673991bdcf464917ef7845a964903d3302c5f68417ecdc948c"}, - {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:11a04306fcba10cd9637e669fd73aa274c1c09ca64af79c041aa820ea992b637"}, - {file = "lxml-5.2.1-cp38-cp38-win32.whl", hash = "sha256:66bc5eb8a323ed9894f8fa0ee6cb3e3fb2403d99aee635078fd19a8bc7a5a5da"}, - {file = "lxml-5.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:9676bfc686fa6a3fa10cd4ae6b76cae8be26eb5ec6811d2a325636c460da1806"}, - {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cf22b41fdae514ee2f1691b6c3cdeae666d8b7fa9434de445f12bbeee0cf48dd"}, - {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec42088248c596dbd61d4ae8a5b004f97a4d91a9fd286f632e42e60b706718d7"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd53553ddad4a9c2f1f022756ae64abe16da1feb497edf4d9f87f99ec7cf86bd"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feaa45c0eae424d3e90d78823f3828e7dc42a42f21ed420db98da2c4ecf0a2cb"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddc678fb4c7e30cf830a2b5a8d869538bc55b28d6c68544d09c7d0d8f17694dc"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:853e074d4931dbcba7480d4dcab23d5c56bd9607f92825ab80ee2bd916edea53"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4691d60512798304acb9207987e7b2b7c44627ea88b9d77489bbe3e6cc3bd4"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:beb72935a941965c52990f3a32d7f07ce869fe21c6af8b34bf6a277b33a345d3"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:6588c459c5627fefa30139be4d2e28a2c2a1d0d1c265aad2ba1935a7863a4913"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:588008b8497667f1ddca7c99f2f85ce8511f8f7871b4a06ceede68ab62dff64b"}, - {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6787b643356111dfd4032b5bffe26d2f8331556ecb79e15dacb9275da02866e"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c17b64b0a6ef4e5affae6a3724010a7a66bda48a62cfe0674dabd46642e8b54"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:27aa20d45c2e0b8cd05da6d4759649170e8dfc4f4e5ef33a34d06f2d79075d57"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d4f2cc7060dc3646632d7f15fe68e2fa98f58e35dd5666cd525f3b35d3fed7f8"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff46d772d5f6f73564979cd77a4fffe55c916a05f3cb70e7c9c0590059fb29ef"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96323338e6c14e958d775700ec8a88346014a85e5de73ac7967db0367582049b"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:52421b41ac99e9d91934e4d0d0fe7da9f02bfa7536bb4431b4c05c906c8c6919"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7a7efd5b6d3e30d81ec68ab8a88252d7c7c6f13aaa875009fe3097eb4e30b84c"}, - {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ed777c1e8c99b63037b91f9d73a6aad20fd035d77ac84afcc205225f8f41188"}, - {file = "lxml-5.2.1-cp39-cp39-win32.whl", hash = "sha256:644df54d729ef810dcd0f7732e50e5ad1bd0a135278ed8d6bcb06f33b6b6f708"}, - {file = "lxml-5.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:9ca66b8e90daca431b7ca1408cae085d025326570e57749695d6a01454790e95"}, - {file = "lxml-5.2.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b0ff53900566bc6325ecde9181d89afadc59c5ffa39bddf084aaedfe3b06a11"}, - {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6037392f2d57793ab98d9e26798f44b8b4da2f2464388588f48ac52c489ea1"}, - {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9c07e7a45bb64e21df4b6aa623cb8ba214dfb47d2027d90eac197329bb5e94"}, - {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3249cc2989d9090eeac5467e50e9ec2d40704fea9ab72f36b034ea34ee65ca98"}, - {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f42038016852ae51b4088b2862126535cc4fc85802bfe30dea3500fdfaf1864e"}, - {file = "lxml-5.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:533658f8fbf056b70e434dff7e7aa611bcacb33e01f75de7f821810e48d1bb66"}, - {file = "lxml-5.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:622020d4521e22fb371e15f580d153134bfb68d6a429d1342a25f051ec72df1c"}, - {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7b51824aa0ee957ccd5a741c73e6851de55f40d807f08069eb4c5a26b2baa"}, - {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c6ad0fbf105f6bcc9300c00010a2ffa44ea6f555df1a2ad95c88f5656104817"}, - {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e233db59c8f76630c512ab4a4daf5a5986da5c3d5b44b8e9fc742f2a24dbd460"}, - {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a014510830df1475176466b6087fc0c08b47a36714823e58d8b8d7709132a96"}, - {file = "lxml-5.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d38c8f50ecf57f0463399569aa388b232cf1a2ffb8f0a9a5412d0db57e054860"}, - {file = "lxml-5.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5aea8212fb823e006b995c4dda533edcf98a893d941f173f6c9506126188860d"}, - {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff097ae562e637409b429a7ac958a20aab237a0378c42dabaa1e3abf2f896e5f"}, - {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f5d65c39f16717a47c36c756af0fb36144069c4718824b7533f803ecdf91138"}, - {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3d0c3dd24bb4605439bf91068598d00c6370684f8de4a67c2992683f6c309d6b"}, - {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e32be23d538753a8adb6c85bd539f5fd3b15cb987404327c569dfc5fd8366e85"}, - {file = "lxml-5.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cc518cea79fd1e2f6c90baafa28906d4309d24f3a63e801d855e7424c5b34144"}, - {file = "lxml-5.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0af35bd8ebf84888373630f73f24e86bf016642fb8576fba49d3d6b560b7cbc"}, - {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8aca2e3a72f37bfc7b14ba96d4056244001ddcc18382bd0daa087fd2e68a354"}, - {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ca1e8188b26a819387b29c3895c47a5e618708fe6f787f3b1a471de2c4a94d9"}, - {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c8ba129e6d3b0136a0f50345b2cb3db53f6bda5dd8c7f5d83fbccba97fb5dcb5"}, - {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e998e304036198b4f6914e6a1e2b6f925208a20e2042563d9734881150c6c246"}, - {file = "lxml-5.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d3be9b2076112e51b323bdf6d5a7f8a798de55fb8d95fcb64bd179460cdc0704"}, - {file = "lxml-5.2.1.tar.gz", hash = "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306"}, + {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:364d03207f3e603922d0d3932ef363d55bbf48e3647395765f9bfcbdf6d23632"}, + {file = "lxml-5.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50127c186f191b8917ea2fb8b206fbebe87fd414a6084d15568c27d0a21d60db"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4f025ef3db1c6da4460dd27c118d8cd136d0391da4e387a15e48e5c975147"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981a06a3076997adf7c743dcd0d7a0415582661e2517c7d961493572e909aa1d"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aef5474d913d3b05e613906ba4090433c515e13ea49c837aca18bde190853dff"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e275ea572389e41e8b039ac076a46cb87ee6b8542df3fff26f5baab43713bca"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5b65529bb2f21ac7861a0e94fdbf5dc0daab41497d18223b46ee8515e5ad297"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bcc98f911f10278d1daf14b87d65325851a1d29153caaf146877ec37031d5f36"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:b47633251727c8fe279f34025844b3b3a3e40cd1b198356d003aa146258d13a2"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:fbc9d316552f9ef7bba39f4edfad4a734d3d6f93341232a9dddadec4f15d425f"}, + {file = "lxml-5.2.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:13e69be35391ce72712184f69000cda04fc89689429179bc4c0ae5f0b7a8c21b"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3b6a30a9ab040b3f545b697cb3adbf3696c05a3a68aad172e3fd7ca73ab3c835"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a233bb68625a85126ac9f1fc66d24337d6e8a0f9207b688eec2e7c880f012ec0"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:dfa7c241073d8f2b8e8dbc7803c434f57dbb83ae2a3d7892dd068d99e96efe2c"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a7aca7964ac4bb07680d5c9d63b9d7028cace3e2d43175cb50bba8c5ad33316"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae4073a60ab98529ab8a72ebf429f2a8cc612619a8c04e08bed27450d52103c0"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ffb2be176fed4457e445fe540617f0252a72a8bc56208fd65a690fdb1f57660b"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e290d79a4107d7d794634ce3e985b9ae4f920380a813717adf61804904dc4393"}, + {file = "lxml-5.2.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:96e85aa09274955bb6bd483eaf5b12abadade01010478154b0ec70284c1b1526"}, + {file = "lxml-5.2.2-cp310-cp310-win32.whl", hash = "sha256:f956196ef61369f1685d14dad80611488d8dc1ef00be57c0c5a03064005b0f30"}, + {file = "lxml-5.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:875a3f90d7eb5c5d77e529080d95140eacb3c6d13ad5b616ee8095447b1d22e7"}, + {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45f9494613160d0405682f9eee781c7e6d1bf45f819654eb249f8f46a2c22545"}, + {file = "lxml-5.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0b3f2df149efb242cee2ffdeb6674b7f30d23c9a7af26595099afaf46ef4e88"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d28cb356f119a437cc58a13f8135ab8a4c8ece18159eb9194b0d269ec4e28083"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:657a972f46bbefdbba2d4f14413c0d079f9ae243bd68193cb5061b9732fa54c1"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b9ea10063efb77a965a8d5f4182806fbf59ed068b3c3fd6f30d2ac7bee734"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07542787f86112d46d07d4f3c4e7c760282011b354d012dc4141cc12a68cef5f"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:303f540ad2dddd35b92415b74b900c749ec2010e703ab3bfd6660979d01fd4ed"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2eb2227ce1ff998faf0cd7fe85bbf086aa41dfc5af3b1d80867ecfe75fb68df3"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:1d8a701774dfc42a2f0b8ccdfe7dbc140500d1049e0632a611985d943fcf12df"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:56793b7a1a091a7c286b5f4aa1fe4ae5d1446fe742d00cdf2ffb1077865db10d"}, + {file = "lxml-5.2.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eb00b549b13bd6d884c863554566095bf6fa9c3cecb2e7b399c4bc7904cb33b5"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a2569a1f15ae6c8c64108a2cd2b4a858fc1e13d25846be0666fc144715e32ab"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:8cf85a6e40ff1f37fe0f25719aadf443686b1ac7652593dc53c7ef9b8492b115"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:d237ba6664b8e60fd90b8549a149a74fcc675272e0e95539a00522e4ca688b04"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0b3f5016e00ae7630a4b83d0868fca1e3d494c78a75b1c7252606a3a1c5fc2ad"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23441e2b5339bc54dc949e9e675fa35efe858108404ef9aa92f0456929ef6fe8"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2fb0ba3e8566548d6c8e7dd82a8229ff47bd8fb8c2da237607ac8e5a1b8312e5"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:79d1fb9252e7e2cfe4de6e9a6610c7cbb99b9708e2c3e29057f487de5a9eaefa"}, + {file = "lxml-5.2.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6dcc3d17eac1df7859ae01202e9bb11ffa8c98949dcbeb1069c8b9a75917e01b"}, + {file = "lxml-5.2.2-cp311-cp311-win32.whl", hash = "sha256:4c30a2f83677876465f44c018830f608fa3c6a8a466eb223535035fbc16f3438"}, + {file = "lxml-5.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:49095a38eb333aaf44c06052fd2ec3b8f23e19747ca7ec6f6c954ffea6dbf7be"}, + {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7429e7faa1a60cad26ae4227f4dd0459efde239e494c7312624ce228e04f6391"}, + {file = "lxml-5.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:50ccb5d355961c0f12f6cf24b7187dbabd5433f29e15147a67995474f27d1776"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc911208b18842a3a57266d8e51fc3cfaccee90a5351b92079beed912a7914c2"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33ce9e786753743159799fdf8e92a5da351158c4bfb6f2db0bf31e7892a1feb5"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec87c44f619380878bd49ca109669c9f221d9ae6883a5bcb3616785fa8f94c97"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08ea0f606808354eb8f2dfaac095963cb25d9d28e27edcc375d7b30ab01abbf6"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75a9632f1d4f698b2e6e2e1ada40e71f369b15d69baddb8968dcc8e683839b18"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74da9f97daec6928567b48c90ea2c82a106b2d500f397eeb8941e47d30b1ca85"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:0969e92af09c5687d769731e3f39ed62427cc72176cebb54b7a9d52cc4fa3b73"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:9164361769b6ca7769079f4d426a41df6164879f7f3568be9086e15baca61466"}, + {file = "lxml-5.2.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d26a618ae1766279f2660aca0081b2220aca6bd1aa06b2cf73f07383faf48927"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab67ed772c584b7ef2379797bf14b82df9aa5f7438c5b9a09624dd834c1c1aaf"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3d1e35572a56941b32c239774d7e9ad724074d37f90c7a7d499ab98761bd80cf"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:8268cbcd48c5375f46e000adb1390572c98879eb4f77910c6053d25cc3ac2c67"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e282aedd63c639c07c3857097fc0e236f984ceb4089a8b284da1c526491e3f3d"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfdc2bfe69e9adf0df4915949c22a25b39d175d599bf98e7ddf620a13678585"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4aefd911793b5d2d7a921233a54c90329bf3d4a6817dc465f12ffdfe4fc7b8fe"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8b8df03a9e995b6211dafa63b32f9d405881518ff1ddd775db4e7b98fb545e1c"}, + {file = "lxml-5.2.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f11ae142f3a322d44513de1018b50f474f8f736bc3cd91d969f464b5bfef8836"}, + {file = "lxml-5.2.2-cp312-cp312-win32.whl", hash = "sha256:16a8326e51fcdffc886294c1e70b11ddccec836516a343f9ed0f82aac043c24a"}, + {file = "lxml-5.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:bbc4b80af581e18568ff07f6395c02114d05f4865c2812a1f02f2eaecf0bfd48"}, + {file = "lxml-5.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e3d9d13603410b72787579769469af730c38f2f25505573a5888a94b62b920f8"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38b67afb0a06b8575948641c1d6d68e41b83a3abeae2ca9eed2ac59892b36706"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c689d0d5381f56de7bd6966a4541bff6e08bf8d3871bbd89a0c6ab18aa699573"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:cf2a978c795b54c539f47964ec05e35c05bd045db5ca1e8366988c7f2fe6b3ce"}, + {file = "lxml-5.2.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:739e36ef7412b2bd940f75b278749106e6d025e40027c0b94a17ef7968d55d56"}, + {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d8bbcd21769594dbba9c37d3c819e2d5847656ca99c747ddb31ac1701d0c0ed9"}, + {file = "lxml-5.2.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:2304d3c93f2258ccf2cf7a6ba8c761d76ef84948d87bf9664e14d203da2cd264"}, + {file = "lxml-5.2.2-cp36-cp36m-win32.whl", hash = "sha256:02437fb7308386867c8b7b0e5bc4cd4b04548b1c5d089ffb8e7b31009b961dc3"}, + {file = "lxml-5.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edcfa83e03370032a489430215c1e7783128808fd3e2e0a3225deee278585196"}, + {file = "lxml-5.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:28bf95177400066596cdbcfc933312493799382879da504633d16cf60bba735b"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a745cc98d504d5bd2c19b10c79c61c7c3df9222629f1b6210c0368177589fb8"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b336b0416828022bfd5a2e3083e7f5ba54b96242159f83c7e3eebaec752f1716"}, + {file = "lxml-5.2.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:4bc6cb140a7a0ad1f7bc37e018d0ed690b7b6520ade518285dc3171f7a117905"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:57f0a0bbc9868e10ebe874e9f129d2917750adf008fe7b9c1598c0fbbfdde6a6"}, + {file = "lxml-5.2.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:60499fe961b21264e17a471ec296dcbf4365fbea611bf9e303ab69db7159ce61"}, + {file = "lxml-5.2.2-cp37-cp37m-win32.whl", hash = "sha256:d9b342c76003c6b9336a80efcc766748a333573abf9350f4094ee46b006ec18f"}, + {file = "lxml-5.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b16db2770517b8799c79aa80f4053cd6f8b716f21f8aca962725a9565ce3ee40"}, + {file = "lxml-5.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7ed07b3062b055d7a7f9d6557a251cc655eed0b3152b76de619516621c56f5d3"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60fdd125d85bf9c279ffb8e94c78c51b3b6a37711464e1f5f31078b45002421"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7e24cb69ee5f32e003f50e016d5fde438010c1022c96738b04fc2423e61706"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23cfafd56887eaed93d07bc4547abd5e09d837a002b791e9767765492a75883f"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19b4e485cd07b7d83e3fe3b72132e7df70bfac22b14fe4bf7a23822c3a35bff5"}, + {file = "lxml-5.2.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7ce7ad8abebe737ad6143d9d3bf94b88b93365ea30a5b81f6877ec9c0dee0a48"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e49b052b768bb74f58c7dda4e0bdf7b79d43a9204ca584ffe1fb48a6f3c84c66"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d14a0d029a4e176795cef99c056d58067c06195e0c7e2dbb293bf95c08f772a3"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:be49ad33819d7dcc28a309b86d4ed98e1a65f3075c6acd3cd4fe32103235222b"}, + {file = "lxml-5.2.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a6d17e0370d2516d5bb9062c7b4cb731cff921fc875644c3d751ad857ba9c5b1"}, + {file = "lxml-5.2.2-cp38-cp38-win32.whl", hash = "sha256:5b8c041b6265e08eac8a724b74b655404070b636a8dd6d7a13c3adc07882ef30"}, + {file = "lxml-5.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:f61efaf4bed1cc0860e567d2ecb2363974d414f7f1f124b1df368bbf183453a6"}, + {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb91819461b1b56d06fa4bcf86617fac795f6a99d12239fb0c68dbeba41a0a30"}, + {file = "lxml-5.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d4ed0c7cbecde7194cd3228c044e86bf73e30a23505af852857c09c24e77ec5d"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54401c77a63cc7d6dc4b4e173bb484f28a5607f3df71484709fe037c92d4f0ed"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:625e3ef310e7fa3a761d48ca7ea1f9d8718a32b1542e727d584d82f4453d5eeb"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:519895c99c815a1a24a926d5b60627ce5ea48e9f639a5cd328bda0515ea0f10c"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7079d5eb1c1315a858bbf180000757db8ad904a89476653232db835c3114001"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:343ab62e9ca78094f2306aefed67dcfad61c4683f87eee48ff2fd74902447726"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:cd9e78285da6c9ba2d5c769628f43ef66d96ac3085e59b10ad4f3707980710d3"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:546cf886f6242dff9ec206331209db9c8e1643ae642dea5fdbecae2453cb50fd"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:02f6a8eb6512fdc2fd4ca10a49c341c4e109aa6e9448cc4859af5b949622715a"}, + {file = "lxml-5.2.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:339ee4a4704bc724757cd5dd9dc8cf4d00980f5d3e6e06d5847c1b594ace68ab"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0a028b61a2e357ace98b1615fc03f76eb517cc028993964fe08ad514b1e8892d"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f90e552ecbad426eab352e7b2933091f2be77115bb16f09f78404861c8322981"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d83e2d94b69bf31ead2fa45f0acdef0757fa0458a129734f59f67f3d2eb7ef32"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a02d3c48f9bb1e10c7788d92c0c7db6f2002d024ab6e74d6f45ae33e3d0288a3"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6d68ce8e7b2075390e8ac1e1d3a99e8b6372c694bbe612632606d1d546794207"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:453d037e09a5176d92ec0fd282e934ed26d806331a8b70ab431a81e2fbabf56d"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:3b019d4ee84b683342af793b56bb35034bd749e4cbdd3d33f7d1107790f8c472"}, + {file = "lxml-5.2.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb3942960f0beb9f46e2a71a3aca220d1ca32feb5a398656be934320804c0df9"}, + {file = "lxml-5.2.2-cp39-cp39-win32.whl", hash = "sha256:ac6540c9fff6e3813d29d0403ee7a81897f1d8ecc09a8ff84d2eea70ede1cdbf"}, + {file = "lxml-5.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:610b5c77428a50269f38a534057444c249976433f40f53e3b47e68349cca1425"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b537bd04d7ccd7c6350cdaaaad911f6312cbd61e6e6045542f781c7f8b2e99d2"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4820c02195d6dfb7b8508ff276752f6b2ff8b64ae5d13ebe02e7667e035000b9"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a09f6184f17a80897172863a655467da2b11151ec98ba8d7af89f17bf63dae"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:76acba4c66c47d27c8365e7c10b3d8016a7da83d3191d053a58382311a8bf4e1"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b128092c927eaf485928cec0c28f6b8bead277e28acf56800e972aa2c2abd7a2"}, + {file = "lxml-5.2.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ae791f6bd43305aade8c0e22f816b34f3b72b6c820477aab4d18473a37e8090b"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a2f6a1bc2460e643785a2cde17293bd7a8f990884b822f7bca47bee0a82fc66b"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e8d351ff44c1638cb6e980623d517abd9f580d2e53bfcd18d8941c052a5a009"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bec4bd9133420c5c52d562469c754f27c5c9e36ee06abc169612c959bd7dbb07"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:55ce6b6d803890bd3cc89975fca9de1dff39729b43b73cb15ddd933b8bc20484"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab6a358d1286498d80fe67bd3d69fcbc7d1359b45b41e74c4a26964ca99c3f8"}, + {file = "lxml-5.2.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:06668e39e1f3c065349c51ac27ae430719d7806c026fec462e5693b08b95696b"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9cd5323344d8ebb9fb5e96da5de5ad4ebab993bbf51674259dbe9d7a18049525"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89feb82ca055af0fe797a2323ec9043b26bc371365847dbe83c7fd2e2f181c34"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e481bba1e11ba585fb06db666bfc23dbe181dbafc7b25776156120bf12e0d5a6"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d6c6ea6a11ca0ff9cd0390b885984ed31157c168565702959c25e2191674a14"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3d98de734abee23e61f6b8c2e08a88453ada7d6486dc7cdc82922a03968928db"}, + {file = "lxml-5.2.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:69ab77a1373f1e7563e0fb5a29a8440367dec051da6c7405333699d07444f511"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34e17913c431f5ae01d8658dbf792fdc457073dcdfbb31dc0cc6ab256e664a8d"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f8757b03208c3f50097761be2dea0aba02e94f0dc7023ed73a7bb14ff11eb0"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a520b4f9974b0a0a6ed73c2154de57cdfd0c8800f4f15ab2b73238ffed0b36e"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5e097646944b66207023bc3c634827de858aebc226d5d4d6d16f0b77566ea182"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b5e4ef22ff25bfd4ede5f8fb30f7b24446345f3e79d9b7455aef2836437bc38a"}, + {file = "lxml-5.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff69a9a0b4b17d78170c73abe2ab12084bdf1691550c5629ad1fe7849433f324"}, + {file = "lxml-5.2.2.tar.gz", hash = "sha256:bb2dc4898180bea79863d5487e5f9c7c34297414bad54bcd0f0852aee9cfdb87"}, ] [package.extras] @@ -1350,31 +1333,31 @@ cryptography = ">=2.8" [[package]] name = "nostr-sdk" -version = "0.8.0" +version = "0.11.0" description = "High level client library." optional = false python-versions = "*" files = [ - {file = "nostr_sdk-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3e73bd048f635372f075cf80c1fc0cdabfce194547b33c5c421d982113a39902"}, - {file = "nostr_sdk-0.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3e351a3215561a47314ab83d0e402bc04d850cb79851c5130d8247fd900aeb72"}, - {file = "nostr_sdk-0.8.0-cp310-cp310-manylinux_2_17_x86_64.whl", hash = "sha256:de2f9b5ddf3c562ba86d5819a18b57988bdabd8b961d264f3f45a65f26f7a2e5"}, - {file = "nostr_sdk-0.8.0-cp310-cp310-manylinux_2_31_aarch64.whl", hash = "sha256:4232a6132f3b2e0ab8d4909d617f43b96a4e7e8514b70326c55f74c23253d291"}, - {file = "nostr_sdk-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:9ccd994c01c3465713026c23bf429852412e7bd58eb0e97ea29239ea490b5063"}, - {file = "nostr_sdk-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:166010f2a3f8679df7c819bb2d59617a9965351c4ee28acda5a3acec1bb6932c"}, - {file = "nostr_sdk-0.8.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:a3971a8bb91217bec800652b100d4c2fc9c710509ff1d371ecc9976b65b194ec"}, - {file = "nostr_sdk-0.8.0-cp311-cp311-manylinux_2_17_x86_64.whl", hash = "sha256:c0516cb2dcd0dc6fb291cd0bd24ad744a4b3acf9ffefa709134188a8e66ed793"}, - {file = "nostr_sdk-0.8.0-cp311-cp311-manylinux_2_31_aarch64.whl", hash = "sha256:55e349568f675189549db924056952c3d702f19c0046a4ef4bf976292741b1dc"}, - {file = "nostr_sdk-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:f8ca0d65c4c97d5f6a5b8ece54ce1bc0b991a3bbf7267ff637373e0d49352c58"}, - {file = "nostr_sdk-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2dd4b2877e355945cbae3eca618c6363cb3330dc32b4dff1c2261c6381746cb"}, - {file = "nostr_sdk-0.8.0-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:d3365d916ae32beaa7666ad797990d7ec8ddcae61e52b1d63630b711109b662e"}, - {file = "nostr_sdk-0.8.0-cp312-cp312-manylinux_2_17_x86_64.whl", hash = "sha256:97eb57c2479460256ae4a673665c4d2007af247b8d3edaa5d0aaf18527655a8f"}, - {file = "nostr_sdk-0.8.0-cp312-cp312-manylinux_2_31_aarch64.whl", hash = "sha256:0b828c771af528405e946cd22385cef9365608509eb64923e2b2dd0b76339b86"}, - {file = "nostr_sdk-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ddbc135e18a800ec4dd38b6b3a11648573eb6294024db5c7ee1dd7be00e53a3"}, - {file = "nostr_sdk-0.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:305c26394a269f345667fbf1671556d97dedebd9417d83bed5e0794fad5db8ab"}, - {file = "nostr_sdk-0.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:353a572b3e43cfff52f7a41646a602d63bcdf2bfb02323c1f172a597d87ce9c1"}, - {file = "nostr_sdk-0.8.0-cp39-cp39-manylinux_2_17_x86_64.whl", hash = "sha256:7cc536ec1bd10b6321e326264ec14db913c15dfca8456f312e6acbf5517cd5b7"}, - {file = "nostr_sdk-0.8.0-cp39-cp39-manylinux_2_31_aarch64.whl", hash = "sha256:6ee0e0717d1ff9bfb6813f1977bdbc214c8d314dc1ffda999ffcba0f76ef1aa8"}, - {file = "nostr_sdk-0.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:256fcbea72498a415f1d2f2febb33d3f3bc771eb6ba17869138857d9deb2f33a"}, + {file = "nostr_sdk-0.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c2b1ab9cefd968e81815199ae0119749568b968726f81a237086f8eb82571ae0"}, + {file = "nostr_sdk-0.11.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:f1ca6774682ece51eb73a0352afcdb79ec702d4f347fe4ce8e96074cbff724c9"}, + {file = "nostr_sdk-0.11.0-cp310-cp310-manylinux_2_31_aarch64.whl", hash = "sha256:28a28de9145e04d8bb3e7b222017b95a407da26926fc90af8beb517e70832b51"}, + {file = "nostr_sdk-0.11.0-cp310-cp310-manylinux_2_31_x86_64.whl", hash = "sha256:1f4cad26ea3449cea72d97fb56af4a82491959e3adbfb2ea76b8ada7c79a6ed8"}, + {file = "nostr_sdk-0.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:994c509534ace04cb6262f1830b088cb405fc46ae34a4dd08ed911866cb4c5ab"}, + {file = "nostr_sdk-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e8c9aca8c4c85d2f7810f6fabe6c7b6c58baf659ebd79eefd4f6d9e65a5de2e"}, + {file = "nostr_sdk-0.11.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:3843d3ba049094ea89d8909bf38d3b5e47b260037ad4477cb57e9e0390238fa4"}, + {file = "nostr_sdk-0.11.0-cp311-cp311-manylinux_2_31_aarch64.whl", hash = "sha256:526ceab4a126d8ae3d71e078451e87f0b2a9af8425c0295de010defdcafeebd2"}, + {file = "nostr_sdk-0.11.0-cp311-cp311-manylinux_2_31_x86_64.whl", hash = "sha256:853d5ba5cfdfbb8938dc293e121fb5afdf18da6ac34c6f0a45d6738226daabbf"}, + {file = "nostr_sdk-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:c37ca037f995a0bd7d183df44b3a650eefacbaef06720606f0ccbd9f47d64e87"}, + {file = "nostr_sdk-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:92dce8428dd623383386ead8183394f28f4ad694b2127aa93338379bab229fd4"}, + {file = "nostr_sdk-0.11.0-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:c8a9af2ac95710a575b65f352c6375e80f09c097a0f3c44998a898e5bd685fa3"}, + {file = "nostr_sdk-0.11.0-cp312-cp312-manylinux_2_31_aarch64.whl", hash = "sha256:eb251751875a379deda5f5b00001dd69ea1f655c0d13f58bc39f463b224e9d27"}, + {file = "nostr_sdk-0.11.0-cp312-cp312-manylinux_2_31_x86_64.whl", hash = "sha256:ef9de5c28a74215cb381c6004b3cf8b87527212b5f768d3cd432c895e7a2afd1"}, + {file = "nostr_sdk-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:efba2ab075e60bf4ef1d93953da89edd2b3c79b7a92b490d7774695706ef14c8"}, + {file = "nostr_sdk-0.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:59f63726909260a189012320c0665193e5135d3515160b30e40c6dc180929687"}, + {file = "nostr_sdk-0.11.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:003086d44f331406bba53a80efd0417fe98ef29798dd750cb7562350a9aa205c"}, + {file = "nostr_sdk-0.11.0-cp39-cp39-manylinux_2_31_aarch64.whl", hash = "sha256:dfabca1ffb677434e323e760af37b09db0badfe8915daf83c972cbec68080850"}, + {file = "nostr_sdk-0.11.0-cp39-cp39-manylinux_2_31_x86_64.whl", hash = "sha256:758348a132baa232f08b29842c07b4a24333ca5c8ece2a6e880910f684e39d8d"}, + {file = "nostr_sdk-0.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:b8074a2e39a5a3b5a707acb2339dd119836ea54bfc63c8b377c30a5c6c3b0771"}, ] [[package]] @@ -1550,28 +1533,29 @@ files = [ [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1580,13 +1564,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.7.0" +version = "3.7.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.7.0-py2.py3-none-any.whl", hash = "sha256:5eae9e10c2b5ac51577c3452ec0a490455c45a0533f7960f993a0d01e59decab"}, - {file = "pre_commit-3.7.0.tar.gz", hash = "sha256:e209d61b8acdcf742404408531f0c37d49d2c734fd7cff2d6076083d191cb060"}, + {file = "pre_commit-3.7.1-py2.py3-none-any.whl", hash = "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"}, + {file = "pre_commit-3.7.1.tar.gz", hash = "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a"}, ] [package.dependencies] @@ -1742,17 +1726,16 @@ files = [ [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -1767,77 +1750,74 @@ files = [ [[package]] name = "pyproject-hooks" -version = "1.0.0" +version = "1.1.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" files = [ - {file = "pyproject_hooks-1.0.0-py3-none-any.whl", hash = "sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8"}, - {file = "pyproject_hooks-1.0.0.tar.gz", hash = "sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"}, + {file = "pyproject_hooks-1.1.0-py3-none-any.whl", hash = "sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2"}, + {file = "pyproject_hooks-1.1.0.tar.gz", hash = "sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965"}, ] -[package.dependencies] -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - [[package]] name = "pyqt6" -version = "6.6.1" +version = "6.7.0" description = "Python bindings for the Qt cross platform application toolkit" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8" files = [ - {file = "PyQt6-6.6.1-cp38-abi3-macosx_10_14_universal2.whl", hash = "sha256:6b43878d0bbbcf8b7de165d305ec0cb87113c8930c92de748a11c473a6db5085"}, - {file = "PyQt6-6.6.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5aa0e833cb5a79b93813f8181d9f145517dd5a46f4374544bcd1e93a8beec537"}, - {file = "PyQt6-6.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:03a656d5dc5ac31b6a9ad200f7f4f7ef49fa00ad7ce7a991b9bb691617141d12"}, - {file = "PyQt6-6.6.1.tar.gz", hash = "sha256:9f158aa29d205142c56f0f35d07784b8df0be28378d20a97bcda8bd64ffd0379"}, + {file = "PyQt6-6.7.0-cp38-abi3-macosx_10_14_universal2.whl", hash = "sha256:919ffb01020ece42209228bf94b4f2c156a6b77cc5a69a90a05e358b0333750b"}, + {file = "PyQt6-6.7.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e294f025f94493ee12b66efd6893fab309c9063172bb8a5b184f84dfc1ebcc49"}, + {file = "PyQt6-6.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:9d8865fb6357dba032002c4554a9648e88f2b4706c929cc51fba58edafad91fc"}, + {file = "PyQt6-6.7.0.tar.gz", hash = "sha256:3d31b2c59dc378ee26e16586d9469842483588142fc377280aad22aaf2fa6235"}, ] [package.dependencies] -PyQt6-Qt6 = ">=6.6.0" +PyQt6-Qt6 = ">=6.7.0,<6.8.0" PyQt6-sip = ">=13.6,<14" [[package]] name = "pyqt6-charts" -version = "6.6.0" +version = "6.7.0" description = "Python bindings for the Qt Charts library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "PyQt6_Charts-6.6.0-cp37-abi3-macosx_10_14_universal2.whl", hash = "sha256:d73a636cdc1baf998de9000382bab33d550c59a1dc28c19ab7d19331ba179b17"}, - {file = "PyQt6_Charts-6.6.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:140709b228fcb50d06c8323bd36e817bcceda5e02632a4e81874e001564400ab"}, - {file = "PyQt6_Charts-6.6.0-cp37-abi3-win_amd64.whl", hash = "sha256:053954657c5811aa7c22ffcaaf8423ac20ffdae15f67361daf95b734f3e2fe74"}, - {file = "PyQt6_Charts-6.6.0.tar.gz", hash = "sha256:14cc6e5d19cae80129524a42fa6332d0d5dada4282a9423425e6b9ae1b6bc56d"}, + {file = "PyQt6_Charts-6.7.0-cp38-abi3-macosx_10_14_universal2.whl", hash = "sha256:bb28fc14771a2dfa8d9bfc41e37f704902e4e50400055bdc9d1f4b07e33d294e"}, + {file = "PyQt6_Charts-6.7.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2808c22372a7ae365103a8ba3160dbaf025dd6dc744f8aa0e8b6dc97ef1afd83"}, + {file = "PyQt6_Charts-6.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:aabd0e796d7a3b23d234afde3bcf764490814e8db220db9bf0a5bbb5ad542887"}, + {file = "PyQt6_Charts-6.7.0.tar.gz", hash = "sha256:c4f7cf369928f7bf032e4e33f718d3b8fe66da176d4959fe30735a970d86f35c"}, ] [package.dependencies] PyQt6 = ">=6.2.0" -PyQt6-Charts-Qt6 = ">=6.6.0" -PyQt6-sip = ">=13.4,<14" +PyQt6-Charts-Qt6 = ">=6.7.0,<6.8.0" +PyQt6-sip = ">=13.6,<14" [[package]] name = "pyqt6-charts-qt6" -version = "6.6.3" +version = "6.7.0" description = "The subset of a Qt installation needed by PyQt6-Charts." optional = false python-versions = "*" files = [ - {file = "PyQt6_Charts_Qt6-6.6.3-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:108511fee98cfcb468d8488a5ef58e0f6df853ca252737118e3e0053c4a77503"}, - {file = "PyQt6_Charts_Qt6-6.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a13a73f971b61a931b74897f8982db580178b05d8cd39711bbd9e4e44c519c30"}, - {file = "PyQt6_Charts_Qt6-6.6.3-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:f15c236661559b746e1a1453d89ae41d0192228222e391ffccb9002455c81fc4"}, - {file = "PyQt6_Charts_Qt6-6.6.3-py3-none-win_amd64.whl", hash = "sha256:90b39278148ec0efacec176feb03d29c6f0fe44e253522e387863a984446f81f"}, + {file = "PyQt6_Charts_Qt6-6.7.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:a5362c15e37599b5f5443472c49908b6e1e0fed83fe2d35175de32a28b07e37a"}, + {file = "PyQt6_Charts_Qt6-6.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7019dc63a9539b20832a86e504f65117d8d41a4eb883f8730f5b99d0415e0255"}, + {file = "PyQt6_Charts_Qt6-6.7.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:35b2d0e0ee06088c355aa5ac562454c38a4bf9d5b83b419463d77cc9f3a25869"}, + {file = "PyQt6_Charts_Qt6-6.7.0-py3-none-win_amd64.whl", hash = "sha256:692842fc11345e60feb4beae405a0b4ce0bdd33ba429354d4735f43801158c11"}, ] [[package]] name = "pyqt6-qt6" -version = "6.6.3" +version = "6.7.0" description = "The subset of a Qt installation needed by PyQt6." optional = false python-versions = "*" files = [ - {file = "PyQt6_Qt6-6.6.3-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:1674d161ea49a36e9146fd652e789d413a246cc2455ac8bf9c76902b4bd3b986"}, - {file = "PyQt6_Qt6-6.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:18fe1fbbc709dcff5c513e3cac7b1d7b630fb189e6d32a1601f193d73d326f42"}, - {file = "PyQt6_Qt6-6.6.3-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:6ae465dfcbb819dae5e18e8c96abba735b5bb2f16c066497dda4b7ca17c066ce"}, - {file = "PyQt6_Qt6-6.6.3-py3-none-win_amd64.whl", hash = "sha256:dbe509eccc579f8818b2b2e8ba93e27986facdd1d4d83ef1c7d9bd47cdf32651"}, + {file = "PyQt6_Qt6-6.7.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:c8993f4c5ec4587cf56c37e32bec5c7e19cf96e330faa6c4feeb1e9c90a048e6"}, + {file = "PyQt6_Qt6-6.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a3ae3200799081103a099b7bfd70854d7fd922475ce327fb4493633d08c59cf0"}, + {file = "PyQt6_Qt6-6.7.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:383842a058b3fd0546df59fbd7f593dd609761d28a0185eb1a8983dee2a5f5d0"}, + {file = "PyQt6_Qt6-6.7.0-py3-none-win_amd64.whl", hash = "sha256:091810ed703fe747ef83d07506fcfdfd8f172215590175cc23cdfe0fc09b20ad"}, ] [[package]] @@ -1927,6 +1907,21 @@ pytest = "*" dev = ["pre-commit", "tox"] doc = ["sphinx", "sphinx-rtd-theme"] +[[package]] +name = "pytest-xvfb" +version = "3.0.0" +description = "A pytest plugin to run Xvfb (or Xephyr/Xvnc) for tests." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-xvfb-3.0.0.tar.gz", hash = "sha256:3746ab1f4d1159f03f751638d053689ccd284291b38b8fb03d3ebbe7bf69cfc0"}, + {file = "pytest_xvfb-3.0.0-py3-none-any.whl", hash = "sha256:352f247c788457ccdfcfeec8a47a2a6594c8eaf22f0302dae9e2635bb23975c2"}, +] + +[package.dependencies] +pytest = ">=2.8.1" +pyvirtualdisplay = ">=1.3" + [[package]] name = "python-bitcointx" version = "1.1.4" @@ -1979,6 +1974,17 @@ text-unidecode = ">=1.3" [package.extras] unidecode = ["Unidecode (>=1.1.1)"] +[[package]] +name = "pyvirtualdisplay" +version = "3.0" +description = "python wrapper for Xvfb, Xephyr and Xvnc" +optional = false +python-versions = "*" +files = [ + {file = "PyVirtualDisplay-3.0-py3-none-any.whl", hash = "sha256:40d4b8dfe4b8de8552e28eb367647f311f88a130bf837fe910e7f180d5477f0e"}, + {file = "PyVirtualDisplay-3.0.tar.gz", hash = "sha256:09755bc3ceb6eb725fb07eca5425f43f2358d3bf08e00d2a9b792a1aedd16159"}, +] + [[package]] name = "pyyaml" version = "6.0" @@ -2140,22 +2146,6 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] -[[package]] -name = "sip" -version = "6.8.3" -description = "A Python bindings generator for C/C++ libraries" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sip-6.8.3-py3-none-any.whl", hash = "sha256:11c332566de0d752df92906101260e81401bf574417a6bc31fb99364ae6b652d"}, - {file = "sip-6.8.3.tar.gz", hash = "sha256:888547b018bb24c36aded519e93d3e513d4c6aa0ba55b7cc1affbd45cf10762c"}, -] - -[package.dependencies] -packaging = "*" -setuptools = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} - [[package]] name = "six" version = "1.16.0" @@ -2258,33 +2248,33 @@ files = [ [[package]] name = "translate-toolkit" -version = "3.12.2" +version = "3.13.0" description = "Tools and API for translation and localization engineering." optional = false python-versions = ">=3.8" files = [ - {file = "translate-toolkit-3.12.2.tar.gz", hash = "sha256:acee42b816f7796809b9b4768693664f6bd19fb96eae3d8dfec0932fa8761706"}, - {file = "translate_toolkit-3.12.2-py3-none-any.whl", hash = "sha256:bcf6e28307965cf80c8ce8a5b8a27e106d34e7b315e3acb545bde2884493daab"}, + {file = "translate_toolkit-3.13.0-py3-none-any.whl", hash = "sha256:375e96e5af8a4942ed1f21ef70ae55c0435602e223eede2f0f4a14f2779e75c7"}, + {file = "translate_toolkit-3.13.0.tar.gz", hash = "sha256:d31a1191894d0ad4ed99697663f1462e9a1820af3bbcf6848235add20cc00e62"}, ] [package.dependencies] lxml = ">=4.6.3" [package.extras] -all = ["BeautifulSoup4 (>=4.3)", "aeidon (==1.13)", "charset-normalizer (==3.3.2)", "cheroot (==10.0.0)", "fluent.syntax (==0.19.0)", "iniparse (==0.5)", "mistletoe (==1.3.0)", "phply (==1.2.6)", "pyenchant (==3.2.2)", "pyparsing (==3.1.1)", "python-Levenshtein (>=0.12)", "ruamel.yaml (==0.18.5)", "vobject (==0.9.6.1)"] +all = ["BeautifulSoup4 (>=4.3)", "aeidon (==1.14.1)", "charset-normalizer (==3.3.2)", "cheroot (==10.0.0)", "fluent.syntax (==0.19.0)", "iniparse (==0.5)", "mistletoe (==1.3.0)", "phply (==1.2.6)", "pyenchant (==3.2.2)", "pyparsing (==3.1.2)", "python-Levenshtein (>=0.12)", "ruamel.yaml (==0.18.6)", "vobject (==0.9.7)"] chardet = ["charset-normalizer (==3.3.2)"] fluent = ["fluent.syntax (==0.19.0)"] -ical = ["vobject (==0.9.6.1)"] +ical = ["vobject (==0.9.7)"] ini = ["iniparse (==0.5)"] levenshtein = ["python-Levenshtein (>=0.12)"] markdown = ["mistletoe (==1.3.0)"] php = ["phply (==1.2.6)"] -rc = ["pyparsing (==3.1.1)"] +rc = ["pyparsing (==3.1.2)"] spellcheck = ["pyenchant (==3.2.2)"] -subtitles = ["aeidon (==1.13)"] +subtitles = ["aeidon (==1.14.1)"] tmserver = ["cheroot (==10.0.0)"] trados = ["BeautifulSoup4 (>=4.3)"] -yaml = ["ruamel.yaml (==0.18.5)"] +yaml = ["ruamel.yaml (==0.18.6)"] [[package]] name = "types-python-dateutil" @@ -2327,13 +2317,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.25.3" +version = "20.26.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.3-py3-none-any.whl", hash = "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e"}, - {file = "virtualenv-20.25.3.tar.gz", hash = "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be"}, + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, ] [package.dependencies] @@ -2361,20 +2351,20 @@ test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "zipp" -version = "3.18.1" +version = "3.18.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "ff2ba6e448a1bbad6e09bd752369c25eccc76740edc13a0323dd0278269eea70" +content-hash = "caee95bcd39e7ffbc69ad262ea0b62c57d085dd0b2dbcb19068ea33c719ee0f0" diff --git a/pyproject.toml b/pyproject.toml index 7ee0c54..6baf002 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ show_error_codes = true [tool.poetry] name = "bitcoin-safe" -version = "0.6.1a0" +version = "0.6.2a0" description = "Long-term Bitcoin savings made Easy" authors = [ "andreasgriffin ",] license = "GPL-3.0" @@ -25,7 +25,7 @@ source = "init" [tool.briefcase] project_name = "Bitcoin-Safe" bundle = "org.bitcoin-safe" -version = "0.6.1a0" +version = "0.6.2a0" url = "https://bitcoin-safe.org" license = "GNU General Public License v3 (GPLv3)" author = "Andreas Griffin" @@ -44,13 +44,12 @@ cryptography = "40.0.2" hwi = ">=2.3.1" appdirs = "1.4.4" reportlab = "4.0.8" -nostr-sdk = "^0.8.0" +nostr-sdk = "0.11.0" cbor2 = "^5.6.0" bitcoin-qrreader = ">=0.8.7" -bitcoin-usb = ">=0.1.13" +bitcoin-usb = ">=0.1.14" pyqt6 = "^6.6.1" pyqt6-charts = "^6.6.0" -sip = "^6.8.3" electrumsv-secp256k1 = "^18.0.0" python-gnupg = "^0.5.2" @@ -61,20 +60,21 @@ long_description = "More details about the app should go here.\n" sources = [ "bitcoin_safe",] test_sources = [ "tests",] test_requires = [ "pytest",] -requires = [ "appdirs==1.4.4", "arrow==1.3.0", "asn1crypto==1.5.1", "atomicwrites==1.4.1", "attrs==23.2.0", "base58==2.1.1", "bdkpython==0.31.0", "binaryornot==0.4.4", "bitcoin-qrreader==0.8.7", "bitcoin-usb==0.1.13", "briefcase==0.3.17", "build==1.2.1", "cbor==1.0.0", "cbor2==5.6.3", "certifi==2024.2.2", "cffi==1.16.0", "cfgv==3.4.0", "chardet==5.2.0", "charset-normalizer==3.3.2", "click==8.1.7", "colorama==0.4.6", "cookiecutter==2.6.0", "cryptography==40.0.2", "defusedxml==0.7.1", "distlib==0.3.8", "dmgbuild==1.6.1", "ds-store==1.3.1", "ecdsa==0.19.0", "electrumsv-secp256k1==18.0.0", "filelock==3.13.4", "fonttools==4.51.0", "fpdf2==2.7.4", "gitdb==4.0.11", "gitpython==3.1.43", "hidapi==0.14.0", "hwi==2.3.1", "identify==2.5.35", "idna==3.7", "importlib-metadata==7.1.0", "iniconfig==2.0.0", "jinja2==3.1.3", "libusb1==3.1.0", "lxml==5.2.1", "mac-alias==2.2.2", "markdown-it-py==3.0.0", "markupsafe==2.1.5", "mdurl==0.1.2", "mnemonic==0.21", "mss==9.0.1", "nodeenv==1.8.0", "noiseprotocol==0.3.1", "nostr-sdk==0.8.0", "numpy==1.26.4", "opencv-python==4.9.0.80", "packaging==24.0", "pillow==9.5.0", "pip==24.0", "platformdirs==4.2.0", "pluggy==1.4.0", "pre-commit==3.7.0", "protobuf==4.25.3", "psutil==5.9.8", "py==1.11.0", "pyaes==1.6.1", "pycparser==2.22", "pygame==2.5.0", "pygments==2.17.2", "pyprof2calltree==1.4.5", "pyproject-hooks==1.0.0", "pyqt6==6.6.1", "pyqt6-charts==6.6.0", "pyqt6-charts-qt6==6.6.3", "pyqt6-qt6==6.6.3", "pyqt6-sip==13.6.0", "pyserial==3.5", "pytest==6.2.5", "pytest-qt==4.4.0", "python-bitcointx==1.1.4", "python-dateutil==2.9.0.post0", "python-gnupg==0.5.2", "python-slugify==8.0.4", "pyyaml==6.0", "pyzbar==0.1.9", "reportlab==4.0.8", "requests==2.31.0", "rich==13.7.1", "segno==1.5.3", "semver==3.0.2", "setuptools==69.5.1", "sip==6.8.3", "six==1.16.0", "smmap==5.0.1", "snakeviz==2.2.0", "text-unidecode==1.3", "toml==0.10.2", "tomli==2.0.1", "tomli-w==1.0.0", "tornado==6.4", "translate-toolkit==3.12.2", "types-python-dateutil==2.9.0.20240316", "typing-extensions==4.11.0", "urllib3==2.2.1", "virtualenv==20.25.3", "wheel==0.43.0", "zipp==3.18.1",] +requires = [ "appdirs==1.4.4", "arrow==1.3.0", "asn1crypto==1.5.1", "atomicwrites==1.4.1", "attrs==23.2.0", "base58==2.1.1", "bdkpython==0.31.0", "binaryornot==0.4.4", "bitcoin-qrreader==0.8.7", "bitcoin-usb==0.1.13", "briefcase==0.3.17", "build==1.2.1", "cbor==1.0.0", "cbor2==5.6.3", "certifi==2024.2.2", "cffi==1.16.0", "cfgv==3.4.0", "chardet==5.2.0", "charset-normalizer==3.3.2", "click==8.1.7", "colorama==0.4.6", "cookiecutter==2.6.0", "cryptography==40.0.2", "defusedxml==0.7.1", "distlib==0.3.8", "dmgbuild==1.6.1", "ds-store==1.3.1", "ecdsa==0.19.0", "electrumsv-secp256k1==18.0.0", "filelock==3.14.0", "fonttools==4.51.0", "fpdf2==2.7.4", "gitdb==4.0.11", "gitpython==3.1.43", "hidapi==0.14.0", "hwi==2.3.1", "identify==2.5.36", "idna==3.7", "importlib-metadata==7.1.0", "iniconfig==2.0.0", "jinja2==3.1.4", "libusb1==3.1.0", "lxml==5.2.2", "mac-alias==2.2.2", "markdown-it-py==3.0.0", "markupsafe==2.1.5", "mdurl==0.1.2", "mnemonic==0.21", "mss==9.0.1", "nodeenv==1.8.0", "noiseprotocol==0.3.1", "nostr-sdk==0.8.0", "numpy==1.26.4", "opencv-python==4.9.0.80", "packaging==24.0", "pillow==9.5.0", "pip==24.0", "platformdirs==4.2.2", "pluggy==1.5.0", "pre-commit==3.7.1", "protobuf==4.25.3", "psutil==5.9.8", "py==1.11.0", "pyaes==1.6.1", "pycparser==2.22", "pygame==2.5.0", "pygments==2.18.0", "pyprof2calltree==1.4.5", "pyproject-hooks==1.1.0", "pyqt6==6.7.0", "pyqt6-charts==6.7.0", "pyqt6-charts-qt6==6.7.0", "pyqt6-qt6==6.7.0", "pyqt6-sip==13.6.0", "pyserial==3.5", "pytest==6.2.5", "pytest-qt==4.4.0", "python-bitcointx==1.1.4", "python-dateutil==2.9.0.post0", "python-gnupg==0.5.2", "python-slugify==8.0.4", "pyyaml==6.0", "pyzbar==0.1.9", "reportlab==4.0.8", "requests==2.31.0", "rich==13.7.1", "segno==1.5.3", "semver==3.0.2", "setuptools==69.5.1", "sip==6.8.3", "six==1.16.0", "smmap==5.0.1", "snakeviz==2.2.0", "text-unidecode==1.3", "toml==0.10.2", "tomli==2.0.1", "tomli-w==1.0.0", "tornado==6.4", "translate-toolkit==3.13.0", "types-python-dateutil==2.9.0.20240316", "typing-extensions==4.11.0", "urllib3==2.2.1", "virtualenv==20.26.2", "wheel==0.43.0", "zipp==3.18.2",] icon = "tools/resources/icon" resources = [ "bitcoin_safe/gui/locales/*.qm",] [tool.poetry.group.dev.dependencies] pytest = "^6.0" pytest-qt = "^4.4.0" -briefcase = "^0.3.17" +briefcase = "0.3.17" requests = "^2.31.0" pre-commit = "^3.6.2" python-gnupg = "^0.5.2" translate-toolkit = "^3.12.2" snakeviz = "^2.2.0" pyprof2calltree = "^1.4.5" +pytest-xvfb = "^3.0.0" [tool.briefcase.app.bitcoin-safe.macOS] universal_build = true diff --git a/tests/gui/qt/test_gui_setup_wallet.py b/tests/gui/qt/test_gui_setup_wallet.py index 4234701..f07b16b 100644 --- a/tests/gui/qt/test_gui_setup_wallet.py +++ b/tests/gui/qt/test_gui_setup_wallet.py @@ -27,31 +27,21 @@ # SOFTWARE. -# def test_dialog_interaction_yes(qtbot: QtBot, test_start_time: datetime) -> None: -# with main_window_context() as main_window: -# assert main_window.windowTitle() == "Bitcoin Safe - REGTEST" +import inspect import logging import os from datetime import datetime from pathlib import Path from time import sleep -from typing import Optional from unittest.mock import patch from PyQt6 import QtGui from PyQt6.QtTest import QTest -from PyQt6.QtWidgets import ( - QDialogButtonBox, - QFileDialog, - QMessageBox, - QPushButton, - QTabWidget, - QWidget, -) +from PyQt6.QtWidgets import QDialogButtonBox, QMessageBox, QPushButton from pytestqt.qtbot import QtBot from bitcoin_safe.config import UserConfig -from bitcoin_safe.gui.qt.dialogs import PasswordCreation, WalletIdDialog +from bitcoin_safe.gui.qt.dialogs import WalletIdDialog from bitcoin_safe.gui.qt.keystore_ui import SignerUI from bitcoin_safe.gui.qt.qt_wallet import QTProtoWallet, QTWallet from bitcoin_safe.gui.qt.tutorial import ( @@ -76,9 +66,12 @@ from .test_helpers import ( # type: ignore Shutter, assert_message_box, + close_wallet, do_modal_click, + get_tab_with_title, get_widget_top_level, main_window_context, + save_wallet, test_config, test_start_time, ) @@ -86,31 +79,19 @@ logger = logging.getLogger(__name__) -def get_tab_with_title(tabs: QTabWidget, title: str) -> Optional[QWidget]: - """ - Returns the tab with the specified title from a QTabWidget. - - :param tabs: The QTabWidget instance containing the tabs. - :param title: The title of the tab to find. - :return: The QWidget of the tab with the specified title, or None if not found. - """ - for index in range(tabs.count()): - if tabs.tabText(index).lower() == title.lower(): - return tabs.widget(index) - return None - - def test_tutorial_wallet_setup( qtbot: QtBot, test_start_time: datetime, test_config: UserConfig, bitcoin_core: Path, faucet: Faucet, - wallet_name="test wallet 0", + wallet_name="test_tutorial_wallet_setup", amount=int(1e6), ) -> None: # bitcoin_core: Path, - shutter = Shutter(qtbot, test_start_time) - shutter.create_symlink(test_start_time, test_config=test_config) + frame = inspect.currentframe() + assert frame + shutter = Shutter(qtbot, name=f"{test_start_time}_{inspect.getframeinfo(frame).function }") + shutter.create_symlink(test_config=test_config) with main_window_context(test_config=test_config) as (app, main_window): QTest.qWaitForWindowExposed(main_window) # This will wait until the window is fully exposed assert main_window.windowTitle() == "Bitcoin Safe - REGTEST" @@ -209,17 +190,13 @@ def wrong_entry_xpub_try_to_proceed(dialog: QMessageBox): ]: assert keystore.edit_xpub.input_field.styleSheet() == "" - # check that you cannot go further without import xpub - def password_creation(dialog: PasswordCreation): - shutter.save(dialog) - dialog.submit_button.click() - - wallet_file = Path(test_config.config_dir) / f"{wallet_name}.wallet" - with patch.object( - QFileDialog, "getSaveFileName", return_value=(str(wallet_file), "All Files (*)") - ) as mock_open: - do_modal_click(step.button_create_wallet, password_creation, qtbot, cls=PasswordCreation) - mock_open.assert_called_once() + save_wallet( + shutter=shutter, + test_config=test_config, + wallet_name=wallet_name, + qtbot=qtbot, + save_button=step.button_create_wallet, + ) page3() diff --git a/tests/gui/qt/test_gui_setup_wallet_custom.py b/tests/gui/qt/test_gui_setup_wallet_custom.py new file mode 100644 index 0000000..9347e91 --- /dev/null +++ b/tests/gui/qt/test_gui_setup_wallet_custom.py @@ -0,0 +1,228 @@ +# +# Bitcoin Safe +# Copyright (C) 2024 Andreas Griffin +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of version 3 of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see https://www.gnu.org/licenses/gpl-3.0.html +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + +import inspect +import logging +from datetime import datetime +from pathlib import Path +from time import sleep + +import bdkpython as bdk +from bitcoin_usb.address_types import AddressTypes +from PyQt6.QtTest import QTest +from PyQt6.QtWidgets import QDialogButtonBox +from pytestqt.qtbot import QtBot + +from bitcoin_safe.config import UserConfig +from bitcoin_safe.gui.qt.block_change_signals import BlockChangesSignals +from bitcoin_safe.gui.qt.dialogs import WalletIdDialog +from bitcoin_safe.gui.qt.qt_wallet import QTProtoWallet +from bitcoin_safe.logging_setup import setup_logging # type: ignore +from tests.gui.qt.test_gui_setup_wallet import ( + close_wallet, + get_tab_with_title, + save_wallet, +) + +from ...test_setup_bitcoin_core import Faucet, bitcoin_core, faucet # type: ignore +from .test_helpers import ( # type: ignore + Shutter, + assert_message_box, + close_wallet, + do_modal_click, + get_tab_with_title, + get_widget_top_level, + main_window_context, + save_wallet, + test_config, + test_start_time, +) + +logger = logging.getLogger(__name__) + + +def test_custom_wallet_setup_custom_single_sig( + qtbot: QtBot, + test_start_time: datetime, + test_config: UserConfig, + bitcoin_core: Path, + faucet: Faucet, + wallet_name="test_custom_wallet_setup_custom_single_sig", + amount=int(1e6), +) -> None: # bitcoin_core: Path, + frame = inspect.currentframe() + assert frame + shutter = Shutter(qtbot, name=f"{test_start_time}_{inspect.getframeinfo(frame).function }") + + shutter.create_symlink(test_config=test_config) + with main_window_context(test_config=test_config) as (app, main_window): + QTest.qWaitForWindowExposed(main_window) # This will wait until the window is fully exposed + assert main_window.windowTitle() == "Bitcoin Safe - REGTEST" + + shutter.save(main_window) + + w = main_window.welcome_screen.pushButton_custom_wallet + + def on_wallet_id_dialog(dialog: WalletIdDialog): + shutter.save(dialog) + dialog.name_input.setText(wallet_name) + shutter.save(dialog) + + dialog.buttonbox.button(QDialogButtonBox.StandardButton.Ok).click() + shutter.save(main_window) + + do_modal_click(w, on_wallet_id_dialog, qtbot, cls=WalletIdDialog) + + w = get_tab_with_title(main_window.tab_wallets, title=wallet_name) + qt_proto_wallet = main_window.tab_wallets.get_data_for_tab(w) + assert isinstance(qt_proto_wallet, QTProtoWallet) + + def test_block_change_signals(): + with BlockChangesSignals([qt_proto_wallet.wallet_descriptor_ui.tab]): + assert qt_proto_wallet.wallet_descriptor_ui.spin_req.signalsBlocked() + with BlockChangesSignals([qt_proto_wallet.wallet_descriptor_ui.tab]): + with BlockChangesSignals([qt_proto_wallet.wallet_descriptor_ui.tab]): + assert qt_proto_wallet.wallet_descriptor_ui.spin_req.signalsBlocked() + assert qt_proto_wallet.wallet_descriptor_ui.spin_req.signalsBlocked() + + def check_consistent(): + signers = qt_proto_wallet.wallet_descriptor_ui.spin_signers.value() + qt_proto_wallet.wallet_descriptor_ui.spin_req.value() + + assert signers == len(qt_proto_wallet.wallet_descriptor_ui.keystore_uis.keystore_uis) + for i in range(signers): + assert qt_proto_wallet.wallet_descriptor_ui.keystore_uis.tabText( + i + ) == qt_proto_wallet.protowallet.signer_name(i) + + if qt_proto_wallet.protowallet.is_multisig(): + assert AddressTypes.p2wsh in [ + qt_proto_wallet.wallet_descriptor_ui.comboBox_address_type.itemData(i) + for i in range(qt_proto_wallet.wallet_descriptor_ui.comboBox_address_type.count()) + ] + else: + assert AddressTypes.p2pkh in [ + qt_proto_wallet.wallet_descriptor_ui.comboBox_address_type.itemData(i) + for i in range(qt_proto_wallet.wallet_descriptor_ui.comboBox_address_type.count()) + ] + + def page1(): + shutter.save(main_window) + + assert qt_proto_wallet.wallet_descriptor_ui.spin_req.value() == 3 + assert qt_proto_wallet.wallet_descriptor_ui.spin_signers.value() == 5 + assert ( + qt_proto_wallet.wallet_descriptor_ui.comboBox_address_type.currentData() == AddressTypes.p2wsh + ) + assert qt_proto_wallet.wallet_descriptor_ui.spin_gap.value() == 20 + assert len(qt_proto_wallet.wallet_descriptor_ui.keystore_uis.keystore_uis) == 5 + + shutter.save(main_window) + check_consistent() + test_block_change_signals() + + page1() + + def change_to_single_sig(): + assert qt_proto_wallet.protowallet.is_multisig() + qt_proto_wallet.wallet_descriptor_ui.spin_req.setValue(1) + assert qt_proto_wallet.wallet_descriptor_ui.spin_req.value() == 1 + + # change to single sig + qt_proto_wallet.wallet_descriptor_ui.spin_signers.setValue(1) + assert qt_proto_wallet.wallet_descriptor_ui.spin_signers.value() == 1 + + assert not qt_proto_wallet.protowallet.is_multisig() + + shutter.save(main_window) + check_consistent() + + change_to_single_sig() + + def do_save_wallet(): + key = qt_proto_wallet.wallet_descriptor_ui.keystore_uis.keystore_uis[0] + key.tabs_import_type.setCurrentWidget(key.tab_manual) + + shutter.save(main_window) + + if key.edit_seed.mnemonic_button: + key.edit_seed.mnemonic_button.click() + + assert key.edit_seed.text() + assert key.edit_xpub.text() + assert key.edit_fingerprint.text() + assert ( + key.edit_key_origin.text() + == f"m/84h/{0 if bdk.Network.REGTEST==bdk.Network.BITCOIN else 1}h/0h" + ) + + shutter.save(main_window) + + save_wallet( + shutter=shutter, + test_config=test_config, + wallet_name=wallet_name, + qtbot=qtbot, + save_button=qt_proto_wallet.wallet_descriptor_ui.button_box.button( + QDialogButtonBox.StandardButton.Apply + ), + ) + + assert main_window.tab_wallets.count() == 1, "there should be only 1 wallet open" + + do_save_wallet() + + main_window.tab_wallets.get_data_for_tab(w) + + def do_close_wallet(): + + close_wallet( + shutter=shutter, + test_config=test_config, + wallet_name=wallet_name, + qtbot=qtbot, + main_window=main_window, + ) + + shutter.save(main_window) + + do_close_wallet() + + def do_open_wallet(): + assert ( + wallet_name in list(main_window.config.recently_open_wallets[main_window.config.network])[0] + ) + + shutter.save(main_window) + + do_open_wallet() + + # end + shutter.save(main_window) + sleep(2) diff --git a/tests/gui/qt/test_helpers.py b/tests/gui/qt/test_helpers.py index 42554d3..b6b1103 100644 --- a/tests/gui/qt/test_helpers.py +++ b/tests/gui/qt/test_helpers.py @@ -35,16 +35,25 @@ from datetime import datetime from pathlib import Path from time import sleep -from typing import Callable, Generator, Optional, Tuple, Type, TypeVar +from typing import Callable, Generator, Optional, Tuple, Type, TypeVar, Union from unittest.mock import patch import bdkpython as bdk import pytest from PyQt6 import QtCore -from PyQt6.QtWidgets import QApplication, QMainWindow, QMessageBox, QPushButton, QWidget +from PyQt6.QtWidgets import ( + QApplication, + QFileDialog, + QMainWindow, + QMessageBox, + QPushButton, + QTabWidget, + QWidget, +) from pytestqt.qtbot import QtBot from bitcoin_safe.config import UserConfig +from bitcoin_safe.gui.qt.dialogs import PasswordCreation from bitcoin_safe.gui.qt.main import MainWindow from bitcoin_safe.pythonbdk_types import BlockchainType from tests.test_setup_bitcoin_core import ( @@ -122,28 +131,28 @@ def main_window_context(test_config: UserConfig) -> Generator[Tuple[QApplication class Shutter: - def __init__(self, qtbot: QtBot, test_start_time: datetime) -> None: + def __init__(self, qtbot: QtBot, name: str) -> None: self.qtbot = qtbot - self.test_start_time = test_start_time + self.name = name def save(self, widget, delay=0.2): QApplication.processEvents() sleep(delay) - self.save_screenshot(widget, self.qtbot, self.test_start_time) + self.save_screenshot(widget, self.qtbot, self.name) @staticmethod - def directory(test_start_time: datetime) -> Path: + def directory(name: str) -> Path: """Saves a screenshot of the given main window using qtbot to the 'screenshots' directory with a timestamp.""" # Ensure the 'screenshots' directory exists - screenshots_dir = Path("tests") / "output" / f"screenshots_{test_start_time}" + screenshots_dir = Path("tests") / "output" / f"screenshots_{name}" screenshots_dir.mkdir(exist_ok=True, parents=True) return screenshots_dir @staticmethod - def save_screenshot(widget: QMainWindow, qtbot: QtBot, test_start_time: datetime) -> Path: + def save_screenshot(widget: QMainWindow, qtbot: QtBot, name: str) -> Path: """Saves a screenshot of the given main window using qtbot to the 'screenshots' directory with a timestamp.""" # Ensure the 'screenshots' directory exists - screenshots_dir = Shutter.directory(test_start_time) + screenshots_dir = Shutter.directory(name) # Take a screenshot using qtbot, which returns the path to the temporary saved file temp_filepath: Path = qtbot.screenshot(widget) @@ -156,9 +165,8 @@ def save_screenshot(widget: QMainWindow, qtbot: QtBot, test_start_time: datetime return final_filepath - @staticmethod - def create_symlink(test_start_time: datetime, test_config: UserConfig): - screenshots_dir = Shutter.directory(test_start_time) + def create_symlink(self, test_config: UserConfig): + screenshots_dir = Shutter.directory(self.name) (screenshots_dir / "config_dir").symlink_to(test_config.config_dir) @@ -205,7 +213,7 @@ def get_widget_top_level(cls: Type[T], qtbot: QtBot, title=None, wait=True, time def do_modal_click( - click_pushbutton: QWidget, + click_pushbutton: Union[Callable, QWidget], on_open: Callable[[T], None], qtbot: QtBot, button: QtCore.Qt.MouseButton = QtCore.Qt.MouseButton.LeftButton, @@ -222,8 +230,11 @@ def click(): print("Do on_open") on_open(dialog) - QtCore.QTimer.singleShot(10, click) - qtbot.mouseClick(click_pushbutton, button) + QtCore.QTimer.singleShot(200, click) + if callable(click_pushbutton): + click_pushbutton() + else: + qtbot.mouseClick(click_pushbutton, button) def assert_message_box(click_pushbutton: QPushButton, tile: str, message_text: str): @@ -249,3 +260,48 @@ def simulate_user_response( qtbot.mouseClick(widget.button(button_type), QtCore.Qt.MouseButton.LeftButton) return True return None + + +def get_tab_with_title(tabs: QTabWidget, title: str) -> Optional[QWidget]: + """ + Returns the tab with the specified title from a QTabWidget. + + :param tabs: The QTabWidget instance containing the tabs. + :param title: The title of the tab to find. + :return: The QWidget of the tab with the specified title, or None if not found. + """ + for index in range(tabs.count()): + if tabs.tabText(index).lower() == title.lower(): + return tabs.widget(index) + return None + + +def save_wallet( + shutter: Shutter, test_config: UserConfig, wallet_name: str, qtbot: QtBot, save_button: QPushButton +): + + # check that you cannot go further without import xpub + def password_creation(dialog: PasswordCreation): + shutter.save(dialog) + dialog.submit_button.click() + + wallet_file = Path(test_config.config_dir) / f"{wallet_name}.wallet" + with patch.object( + QFileDialog, "getSaveFileName", return_value=(str(wallet_file), "All Files (*)") + ) as mock_open: + do_modal_click(save_button, password_creation, qtbot, cls=PasswordCreation) + mock_open.assert_called_once() + + +def close_wallet( + shutter: Shutter, test_config: UserConfig, wallet_name: str, qtbot: QtBot, main_window: MainWindow +): + + # check that you cannot go further without import xpub + def password_creation(dialog: QMessageBox): + shutter.save(dialog) + dialog.button(QMessageBox.StandardButton.Yes).click() + + index = main_window.tab_wallets.indexOf(main_window.qt_wallets[wallet_name].tab) + + do_modal_click(lambda: main_window.close_tab(index), password_creation, qtbot, cls=QMessageBox) diff --git a/tests/test_signature_manager.py b/tests/test_signature_manager.py index c4f5770..3a85b82 100644 --- a/tests/test_signature_manager.py +++ b/tests/test_signature_manager.py @@ -26,18 +26,30 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. - +import logging import tempfile from pathlib import Path from bitcoin_safe.signature_manager import KnownGPGKeys, SignatureVerifyer +logger = logging.getLogger(__name__) + def test_download_manifest_and_verify(): manager = SignatureVerifyer(list_of_known_keys=KnownGPGKeys.all()) with tempfile.TemporaryDirectory() as tempdir: + logger.debug(f"tempdir {tempdir}") sig_filename = manager.get_signature_from_web(Path(tempdir) / "Sparrow-1.8.4-x86_64.dmg") + logger.debug(f"sig_filename {sig_filename}") assert sig_filename == Path(tempdir) / "sparrow-1.8.4-manifest.txt.asc" assert manager.is_signature_file_available(Path(tempdir) / "sparrow-1.8.4-manifest.txt") assert manager._verify_file(Path(tempdir) / "sparrow-1.8.4-manifest.txt", signature_file=sig_filename) + + +from pytestqt.qtbot import QtBot + + +def test_signer_finalizes_ofn_final_sig_receive(qtbot: QtBot): + + pass diff --git a/tests/test_signers.py b/tests/test_signers.py index 9b36876..ad38137 100644 --- a/tests/test_signers.py +++ b/tests/test_signers.py @@ -228,18 +228,22 @@ def gen_multisig_descriptor_str( def pytest_bdk_setup_single_sig(network=bdk.Network.REGTEST) -> PyTestBDKSetup: - + logger.debug("pytest_bdk_setup_single_sig start") blockchain_config = get_blockchain_config(network=network) + logger.debug(f"blockchain_config = {blockchain_config}") blockchain = bdk.Blockchain(blockchain_config) + logger.debug(f"blockchain = {blockchain}") mnemonic = bdk.Mnemonic.from_string(test_seeds[0]) + logger.debug(f"mnemonic = {mnemonic}") descriptor = bdk.Descriptor.new_bip84( secret_key=bdk.DescriptorSecretKey(network, mnemonic, ""), keychain=bdk.KeychainKind.EXTERNAL, network=network, ) + logger.debug(f"descriptor = {descriptor}") wallet = bdk.Wallet( descriptor=descriptor, @@ -247,17 +251,20 @@ def pytest_bdk_setup_single_sig(network=bdk.Network.REGTEST) -> PyTestBDKSetup: network=network, database_config=bdk.DatabaseConfig.MEMORY(), ) + logger.debug(f"wallet = {wallet}") return PyTestBDKSetup(network=network, blockchain=blockchain, descriptors=[descriptor], wallets=[wallet]) @pytest.fixture def pytest_2_of_3_multisig_wallets() -> PyTestBDKSetup: + logger.debug("prepare fixture pytest_2_of_3_multisig_wallets") return pytest_bdk_setup_multisig(m=2, n=3, network=bdk.Network.REGTEST) @pytest.fixture def pytest_siglesig_wallet() -> PyTestBDKSetup: + logger.debug("prepare fixture pytest_siglesig_wallet") return pytest_bdk_setup_single_sig(network=bdk.Network.REGTEST) diff --git a/tools/build.py b/tools/build.py index 33bee48..8222e9a 100644 --- a/tools/build.py +++ b/tools/build.py @@ -30,6 +30,7 @@ import argparse import csv import logging +import operator import os import platform import shlex @@ -37,7 +38,7 @@ import subprocess from pathlib import Path from subprocess import CompletedProcess -from typing import List, Literal +from typing import List, Literal, Tuple, Union import toml @@ -81,6 +82,37 @@ def get_all_ts_files(self) -> List[str]: def _ts_file(self, language: str) -> Path: return self.ts_folder / f"{self.prefix}_{language}.ts" + @staticmethod + def sort_csv(input_file: Path, output_file: Path, sort_columns: Union[Tuple[str, ...], List[str]]): + """ + Sorts a CSV file by specified columns and writes the sorted data to another CSV file. + + Parameters: + input_file (Path): The input CSV file path. + output_file (Path): The output CSV file path. + sort_columns (Tuple[str, ...]): A tuple of column names to sort the CSV data by (in priority order). + """ + # Read the CSV file into a list of dictionaries + with open(str(input_file), mode="r", newline="", encoding="utf-8") as infile: + reader = csv.DictReader(infile) + rows = list(reader) + + # Validate that all sort columns are in the fieldnames + fieldnames = reader.fieldnames + assert fieldnames + for col in sort_columns: + if col not in fieldnames: + raise ValueError(f"Column '{col}' not found in CSV file") + + # Sort the rows by the specified columns (in priority order) + sorted_rows = sorted(rows, key=operator.itemgetter(*sort_columns)) + + # Write the sorted data to the output CSV file + with open(str(output_file), mode="w", newline="", encoding="utf-8") as outfile: + writer = csv.DictWriter(outfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL) + writer.writeheader() + writer.writerows(sorted_rows) + def update_translations_from_py(self): for language in self.languages: ts_file = self._ts_file(language) @@ -89,10 +121,17 @@ def update_translations_from_py(self): ) # -no-obsolete run_local(f"ts2po {ts_file} -o {ts_file.with_suffix('.po')}") run_local(f"po2csv {ts_file.with_suffix('.po')} -o {ts_file.with_suffix('.csv')}") + self.sort_csv( + ts_file.with_suffix(".csv"), + ts_file.with_suffix(".csv"), + sort_columns=["target", "location", "source"], + ) + self.delete_po_files() self.compile() - def quote_csv(self, input_file, output_file): + @staticmethod + def quote_csv(input_file, output_file): # Read the CSV content from the input file with open(input_file, newline="") as infile: reader = csv.reader(infile) @@ -108,7 +147,11 @@ def csv_to_ts(self): ts_file = self._ts_file(language) # csv2po cannot handle partially quoted files - self.quote_csv(ts_file.with_suffix(".csv"), ts_file.with_suffix(".csv")) + self.sort_csv( + ts_file.with_suffix(".csv"), + ts_file.with_suffix(".csv"), + sort_columns=["location", "source", "target"], + ) run_local(f"csv2po {ts_file.with_suffix('.csv')} -o {ts_file.with_suffix('.po')}") run_local(f"po2ts {ts_file.with_suffix('.po')} -o {ts_file}") self.delete_po_files() From 51bf4894cfad16e664ffd9d6b0a41f50dc3c5fd9 Mon Sep 17 00:00:00 2001 From: andreasgriffin Date: Thu, 16 May 2024 18:26:31 +0200 Subject: [PATCH 2/3] debug --- .github/workflows/python-tests.yml | 58 +++++-- bitcoin_safe/fx.py | 1 + bitcoin_safe/gui/qt/language_chooser.py | 2 + bitcoin_safe/gui/qt/main.py | 8 +- .../gui/qt/new_wallet_welcome_screen.py | 1 + bitcoin_safe/gui/qt/notification_bar.py | 5 +- bitcoin_safe/gui/qt/spinning_button.py | 2 + bitcoin_safe/gui/qt/tutorial.py | 4 + bitcoin_safe/mempool.py | 8 +- bitcoin_safe/signature_manager.py | 1 + poetry.lock | 146 +++++++++--------- pyproject.toml | 2 +- tests/gui/qt/test_gui_setup_wallet.py | 3 + tests/gui/qt/test_helpers.py | 2 +- tests/test_signature_manager.py | 8 - 15 files changed, 152 insertions(+), 99 deletions(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 4e04c50..8bc12e2 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -1,4 +1,4 @@ -name: Python Tests +name: Python Tests with PyQt6 on: push: @@ -6,26 +6,58 @@ on: pull_request: branches: [ "main" ] -permissions: - contents: read - jobs: test: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + strategy: + matrix: + python-version: ['3.10'] + os: [ ubuntu-latest ] # [macos-latest, ubuntu-latest, windows-latest] + env: + DISPLAY: ":99.0" # Display setting for Xvfb on Linux + QT_SELECT: "qt6" # Environment variable to select Qt6 steps: - - name: Check out code - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v3 + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: ${{ matrix.python-version }} - - name: Install system dependencies + - name: Setup xvfb (Linux) + if: runner.os == 'Linux' run: | sudo apt-get update - sudo apt-get install -y xvfb libegl1-mesa + sudo apt-get install -y xvfb \ + libxkbcommon-x11-0 \ + libxcb-icccm4 \ + libxcb-image0 \ + libxcb-keysyms1 \ + libxcb-randr0 \ + libxcb-render-util0 \ + libxcb-xinerama0 \ + libxcb-xinput0 \ + libxcb-xfixes0 \ + libxcb-shape0 \ + libglib2.0-0 \ + libgl1-mesa-dev \ + '^libxcb.*-dev' \ + libx11-xcb-dev \ + libglu1-mesa-dev \ + libxrender-dev \ + libxi-dev \ + libxkbcommon-dev \ + libxkbcommon-x11-dev + sudo /usr/bin/Xvfb $DISPLAY -screen 0 1280x1024x24 & + + - name: Start Xvfb + run: | + export DISPLAY=:99.0 + /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX +render -noreset + sleep 3 + sleep 1 - name: Install Python dependencies run: | diff --git a/bitcoin_safe/fx.py b/bitcoin_safe/fx.py index 7702a96..2f830d1 100644 --- a/bitcoin_safe/fx.py +++ b/bitcoin_safe/fx.py @@ -49,6 +49,7 @@ def __init__(self, signals_min: SignalsMin) -> None: self.rates: Dict[str, Dict] = {} self.update() + logger.debug(f"initialized {self}") def update(self): def on_success(data): diff --git a/bitcoin_safe/gui/qt/language_chooser.py b/bitcoin_safe/gui/qt/language_chooser.py index 900d7fe..aa2a0d3 100644 --- a/bitcoin_safe/gui/qt/language_chooser.py +++ b/bitcoin_safe/gui/qt/language_chooser.py @@ -98,11 +98,13 @@ def __init__(self, parent: QWidget, config: UserConfig, signal_language_switch: # Start with default language (English) in the list self.availableLanguages = {"en_US": QLocale(QLocale.Language.English).nativeLanguageName()} + logger.debug(f"initialized {self}") def default_lang(self): return list(self.availableLanguages.keys())[0] def dialog_choose_language(self, parent) -> str: + logger.debug(f"dialog_choose_language") dialog = LanguageDialog(self.get_languages(), parent) lang = dialog.choose_language() if not lang: diff --git a/bitcoin_safe/gui/qt/main.py b/bitcoin_safe/gui/qt/main.py index 074e6a1..1cfede7 100644 --- a/bitcoin_safe/gui/qt/main.py +++ b/bitcoin_safe/gui/qt/main.py @@ -109,7 +109,7 @@ def __init__( ): "If netowrk == None, then the network from the user config will be taken" super().__init__() - first_boot = not (UserConfig.exists()) + config_present = UserConfig.exists() or config self.config = config if config else UserConfig.from_file() self.config.network = bdk.Network._member_map_[network.upper()] if network else self.config.network self.address_dialogs: Deque[address_dialog.AddressDialog] = deque(maxlen=1000) @@ -122,7 +122,7 @@ def __init__( self.fx = FX(signals_min=self.signals) self.language_chooser = LanguageChooser(self, self.config, self.signals.language_switch) - if first_boot: + if not config_present: self.config.language_code = self.language_chooser.dialog_choose_language(self) self.language_chooser.set_language(self.config.language_code) self.setupUi(self) @@ -145,6 +145,8 @@ def __init__( self.welcome_screen = NewWalletWelcomeScreen( self.tab_wallets, network=self.config.network, signals=self.signals ) + + # signals self.welcome_screen.signal_onclick_single_signature.connect(self.click_create_single_signature_wallet) self.welcome_screen.signal_onclick_multisig_signature.connect( self.click_create_multisig_signature_wallet @@ -192,6 +194,7 @@ def set_title(self): self.setWindowTitle(title) def setupUi(self, MainWindow: QWidget): + logger.debug(f"start setupUi") # sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) # sizePolicy.setHorizontalStretch(0) # sizePolicy.setVerticalStretch(0) @@ -243,6 +246,7 @@ def setupUi(self, MainWindow: QWidget): # self.setWindowIcon(read_QIcon("electrum.png")) self.init_menubar() self.set_title() + logger.debug(f"done setupUi") def init_menubar(self): self.menubar = QMenuBar() diff --git a/bitcoin_safe/gui/qt/new_wallet_welcome_screen.py b/bitcoin_safe/gui/qt/new_wallet_welcome_screen.py index 5759e5b..c781a23 100644 --- a/bitcoin_safe/gui/qt/new_wallet_welcome_screen.py +++ b/bitcoin_safe/gui/qt/new_wallet_welcome_screen.py @@ -76,6 +76,7 @@ def __init__(self, main_tabs: DataTabWidget, network: Network, signals: Signals) self.pushButton_custom_wallet.clicked.connect( lambda: call_call_functions([self.signal_onclick_custom_signature.emit, self.remove_tab]) ) + logger.debug(f"initialized welcome_screen = {self}") def add_new_wallet_welcome_tab(self): add_tab_to_tabs( diff --git a/bitcoin_safe/gui/qt/notification_bar.py b/bitcoin_safe/gui/qt/notification_bar.py index a11d56d..5cc9cb8 100644 --- a/bitcoin_safe/gui/qt/notification_bar.py +++ b/bitcoin_safe/gui/qt/notification_bar.py @@ -26,7 +26,7 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. - +import logging import sys from typing import Callable, Optional @@ -45,6 +45,8 @@ from .recipients import CloseButton +logger = logging.getLogger(__name__) + class NotificationBar(QWidget): def __init__( @@ -101,6 +103,7 @@ def __init__( if has_close_button: main_widget.layout().addWidget(self.closeButton) self.closeButton.setFixedSize(self.sizeHint().height(), self.sizeHint().height()) + logger.debug(f"initialized {self}") def set_background_color(self, color: str): self.setStyleSheet(f"background-color: {color};") # Set the background color for the notification bar diff --git a/bitcoin_safe/gui/qt/spinning_button.py b/bitcoin_safe/gui/qt/spinning_button.py index 5b37c65..b5ac996 100644 --- a/bitcoin_safe/gui/qt/spinning_button.py +++ b/bitcoin_safe/gui/qt/spinning_button.py @@ -54,6 +54,8 @@ def __init__(self, text: str, enable_signal=None, svg_path=None, parent=None): self.set_enable_signal(enable_signal) def on_clicked(self): + if not self.isEnabled(): + return self.start_spin() self.setDisabled(True) diff --git a/bitcoin_safe/gui/qt/tutorial.py b/bitcoin_safe/gui/qt/tutorial.py index 8b18f9e..2aa3298 100644 --- a/bitcoin_safe/gui/qt/tutorial.py +++ b/bitcoin_safe/gui/qt/tutorial.py @@ -1058,7 +1058,9 @@ def change_index(self, index: int): self.set_current_index(index) def go_to_previous_index(self): + logger.info(f"go_to_previous_index: Old index {self.current_index()} = {self.current_step()}") self.change_index(max(self.current_index() - 1, 0)) + logger.info(f"go_to_previous_index: Switched index {self.current_index()} = {self.current_step()}") def go_to_next_index(self): if self.step_bar.current_index + 1 >= self.step_bar.number_of_steps: @@ -1066,7 +1068,9 @@ def go_to_next_index(self): self.set_visibilities() return + logger.info(f"go_to_next_index: Old index {self.current_index()} = {self.current_step()}") self.change_index(min(self.step_bar.current_index + 1, self.step_bar.number_of_steps - 1)) + logger.info(f"go_to_next_index: Switched index {self.current_index()} = {self.current_step()}") def get_send_tests_steps(self) -> List[TutorialStep]: m, n = self.qtwalletbase.get_mn_tuple() diff --git a/bitcoin_safe/mempool.py b/bitcoin_safe/mempool.py index cb62dad..01d3fed 100644 --- a/bitcoin_safe/mempool.py +++ b/bitcoin_safe/mempool.py @@ -239,6 +239,7 @@ def __init__(self, network_config: NetworkConfig, signals_min: SignalsMin) -> No "total_fee": 0, "fee_histogram": [], } + logger.debug(f"initialized {self}") def _empty_mempool_blocks(self) -> List[Dict[str, Any]]: return [ @@ -301,6 +302,7 @@ def set_data_from_mempoolspace(self, force=False): def on_mempool_blocks(mempool_blocks): if mempool_blocks: self.mempool_blocks = mempool_blocks + logger.info(f"Updated mempool_blocks {mempool_blocks}") threaded_fetch( f"{self.network_config.mempool_url}api/v1/fees/mempool-blocks", @@ -308,10 +310,12 @@ def on_mempool_blocks(mempool_blocks): self, signals_min=self.signals_min, ) + logger.debug(f"started on_mempool_blocks") def on_recommended(recommended): if recommended: self.recommended = recommended + logger.info(f"Updated recommended {recommended}") threaded_fetch( f"{self.network_config.mempool_url}api/v1/fees/recommended", @@ -319,12 +323,13 @@ def on_recommended(recommended): self, signals_min=self.signals_min, ) + logger.debug(f"started on_recommended") def on_mempool_dict(mempool_dict): if mempool_dict: self.mempool_dict = mempool_dict + logger.info(f"Updated mempool_dict {mempool_dict}") self.signal_data_updated.emit() - logger.info(f"Updated mempool_dict {mempool_dict}") threaded_fetch( f"{self.network_config.mempool_url}api/mempool", @@ -332,6 +337,7 @@ def on_mempool_dict(mempool_dict): self, signals_min=self.signals_min, ) + logger.debug(f"started on_mempool_dict") def fetch_block_tip_height(self) -> int: response = fetch_from_url(f"{self.network_config.mempool_url}api/blocks/tip/height") diff --git a/bitcoin_safe/signature_manager.py b/bitcoin_safe/signature_manager.py index 54a900a..70b929f 100644 --- a/bitcoin_safe/signature_manager.py +++ b/bitcoin_safe/signature_manager.py @@ -83,6 +83,7 @@ class Asset: class GitHubAssetDownloader: def __init__(self, repository: str) -> None: self.repository = repository + logger.debug(f"initialized {self}") def _get_assets(self, api_url): try: diff --git a/poetry.lock b/poetry.lock index 9191b14..c8e571a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -121,13 +121,13 @@ chardet = ">=3.0.2" [[package]] name = "bitcoin-qrreader" -version = "0.8.7" +version = "0.8.8" description = "A python bitcoin qr reader" optional = false python-versions = "<3.12,>=3.8" files = [ - {file = "bitcoin_qrreader-0.8.7-py3-none-any.whl", hash = "sha256:ff75c984a32831caf60f4910e0f54518cb1e8f9171c16dba396e5dca1a49ccc5"}, - {file = "bitcoin_qrreader-0.8.7.tar.gz", hash = "sha256:45d353a7504b567335e3a3e23b5578479c938043b6f42f118a84cec32c3a40bc"}, + {file = "bitcoin_qrreader-0.8.8-py3-none-any.whl", hash = "sha256:9ed4b5a8da30aed03b8f376e4ffa452361bf5038d2d672d8fc29d1e5f7571369"}, + {file = "bitcoin_qrreader-0.8.8.tar.gz", hash = "sha256:926b9d3698d5aacf7a1b33a96a092ef2e4dbae6f811f111d5ce44c56520bb5cf"}, ] [package.dependencies] @@ -136,10 +136,10 @@ bdkpython = "0.31.0" hwi = "2.3.1" mss = "9.0.1" numpy = ">=1.21.0,<2.0.0" -opencv-python = ">=4.9.0.80,<5.0.0.0" -pygame = "2.5.0" -pyqt6 = ">=6.6.1,<7.0.0" -pyzbar = ">=0.1.9,<0.2.0" +opencv-python-headless = ">=4.9.0.80,<5.0.0.0" +pygame = "2.5.2" +pyqt6 = ">=6.7.0,<7.0.0" +pyzbar = "0.1.9" [[package]] name = "bitcoin-usb" @@ -1406,19 +1406,19 @@ files = [ ] [[package]] -name = "opencv-python" +name = "opencv-python-headless" version = "4.9.0.80" description = "Wrapper package for OpenCV python bindings." optional = false python-versions = ">=3.6" files = [ - {file = "opencv-python-4.9.0.80.tar.gz", hash = "sha256:1a9f0e6267de3a1a1db0c54213d022c7c8b5b9ca4b580e80bdc58516c922c9e1"}, - {file = "opencv_python-4.9.0.80-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:7e5f7aa4486651a6ebfa8ed4b594b65bd2d2f41beeb4241a3e4b1b85acbbbadb"}, - {file = "opencv_python-4.9.0.80-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:71dfb9555ccccdd77305fc3dcca5897fbf0cf28b297c51ee55e079c065d812a3"}, - {file = "opencv_python-4.9.0.80-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b34a52e9da36dda8c151c6394aed602e4b17fa041df0b9f5b93ae10b0fcca2a"}, - {file = "opencv_python-4.9.0.80-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4088cab82b66a3b37ffc452976b14a3c599269c247895ae9ceb4066d8188a57"}, - {file = "opencv_python-4.9.0.80-cp37-abi3-win32.whl", hash = "sha256:dcf000c36dd1651118a2462257e3a9e76db789a78432e1f303c7bac54f63ef6c"}, - {file = "opencv_python-4.9.0.80-cp37-abi3-win_amd64.whl", hash = "sha256:3f16f08e02b2a2da44259c7cc712e779eff1dd8b55fdb0323e8cab09548086c0"}, + {file = "opencv-python-headless-4.9.0.80.tar.gz", hash = "sha256:71a4cd8cf7c37122901d8e81295db7fb188730e33a0e40039a4e59c1030b0958"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:2ea8a2edc4db87841991b2fbab55fc07b97ecb602e0f47d5d485bd75cee17c1a"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:e0ee54e27be493e8f7850847edae3128e18b540dac1d7b2e4001b8944e11e1c6"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57ce2865e8fec431c6f97a81e9faaf23fa5be61011d0a75ccf47a3c0d65fa73d"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:976656362d68d9f40a5c66f83901430538002465f7db59142784f3893918f3df"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-win32.whl", hash = "sha256:11e3849d83e6651d4e7699aadda9ec7ed7c38957cbbcb99db074f2a2d2de9670"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-win_amd64.whl", hash = "sha256:a8056c2cb37cd65dfcdf4153ca16f7362afcf3a50d600d6bb69c660fc61ee29c"}, ] [package.dependencies] @@ -1662,66 +1662,68 @@ files = [ [[package]] name = "pygame" -version = "2.5.0" +version = "2.5.2" description = "Python Game Development" optional = false python-versions = ">=3.6" files = [ - {file = "pygame-2.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e34a2b5660acc298d0a66ce16f13a7ca1c56c2a685e40afef3a0cf6eaf3f44b3"}, - {file = "pygame-2.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:875dbde88b899fb7f48d6f0e87f70c3dcc8ee87a947c3df817d949a9741dbcf5"}, - {file = "pygame-2.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:854dc9106210d1a3a83914af53fc234c0bed65a39f5e6098a8eb489da354ad0c"}, - {file = "pygame-2.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e1898db0fd7b868a31c29204813f447c59390350fd806904d80bebde094f3f8"}, - {file = "pygame-2.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22d5eac9b9936c7dc2813a750bc8efd53234ad1afc32eb99d6f64bb403c2b9aa"}, - {file = "pygame-2.5.0-cp310-cp310-win32.whl", hash = "sha256:e9eed550b8921080a3c7524202822fc2cf7226e0ffd3c4e4d16510ba44b24e6f"}, - {file = "pygame-2.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:93128beb1154c443f05a66bfbf3f1d4eb8659157ab3b45e4a0454e5905440431"}, - {file = "pygame-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c71d5b3ec232113cbd2e23a19eb01eef1818db41892d0d5efbac3901f940da66"}, - {file = "pygame-2.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b763062b1996de26a28600e7a8f138d5b36ba0ddd63c65ccbd06124cd95bab70"}, - {file = "pygame-2.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b6a42109f922352c524565fceb22bf8f8b6e4b00d38306e6f5b4c673048f4a"}, - {file = "pygame-2.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bcb19c8ee3fc794ab3a7cb5b5fb1ad38da6866dfbba4af3699a84a828c8a4b9"}, - {file = "pygame-2.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c66b7abc38511c7ca08c5bb58a3bfc14fa51b4e5f85a1786777afc9e584a14dd"}, - {file = "pygame-2.5.0-cp311-cp311-win32.whl", hash = "sha256:46cf1c9b20fb11c7d836c02dd5fc2ca843b699c0e2bc4130cf4ad2f855db5f7f"}, - {file = "pygame-2.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:f7b77b5019a9a6342535f53c75cef912b218cd24e98505828418f135aacc0a1b"}, - {file = "pygame-2.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ddec0c823fd0869fe4a75ba906dcb7889db0e0c289ce8c03d4ce0a67351ab66"}, - {file = "pygame-2.5.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bae93ce29b8337a5e02507603094c51740c9f496272ef070e2624e9647776568"}, - {file = "pygame-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c80a1ad38d11102b4dfa0519aa2a26fea534503b259872609acc9adb1860884e"}, - {file = "pygame-2.5.0-cp312-cp312-win32.whl", hash = "sha256:8ffebcafda0add8072f82999498113be37494694fa36e02155cfaf1a0ba56fe2"}, - {file = "pygame-2.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:574e310ba708da0c34b71c4158aa7cdca3cf3e16c4100dcd1d3c931a9c6705b4"}, - {file = "pygame-2.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:275e4fab379620c3b262cd58c457eea80001e91bc2e04d306ddb0ba548c969bf"}, - {file = "pygame-2.5.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c116a96a2784bd1724476dbf9c48bfea466ee493a736bdfa04ecbc3f193de0bc"}, - {file = "pygame-2.5.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4a0787ade8723323a3ba874bb725010bb08990a77327fc85f42474f3a840447"}, - {file = "pygame-2.5.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cb39b660da1b56a1704ec4aa72bac538030786e23607fb25b8a66f357ffe3a"}, - {file = "pygame-2.5.0-cp36-cp36m-win32.whl", hash = "sha256:d051420667dd9fc8103b3cf994c03e46ee90b1c4a72c174737b8c14729ddf68e"}, - {file = "pygame-2.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6b58356510b7c38836eb81cf08983b58f280da99580d4f17e89ed0ddb707c29c"}, - {file = "pygame-2.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:80f167d8fcec7cd3107f829784ad721b1b7532c19fdf42b3aabbb51f7347850f"}, - {file = "pygame-2.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef96e9a2d8fd9526b89657d192c42dd7c551bfa381fa98ec52d45443e9713818"}, - {file = "pygame-2.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e21d53279fb504b267ae06b565b72d9f95ecbf1f2dd8c705329b287f38295d98"}, - {file = "pygame-2.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147cc0256a5df1316590f351febf6205ef2907564fb0d902935834b91e183486"}, - {file = "pygame-2.5.0-cp37-cp37m-win32.whl", hash = "sha256:e47696154d689180e4eea8c1d6f2bac923986119219db6ad0d2e60ab1f525e8c"}, - {file = "pygame-2.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4c87fa8fa1f3ea94069119accd6d4b5fbf869c2b2954a19b45162dfb3b7c885e"}, - {file = "pygame-2.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:143550078ab10f290cd7c8715a46853e0dc598fd6cdd1561ecb4d6e3116a6b26"}, - {file = "pygame-2.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:969de806bed49b28972862acba652f05ece9420bbdf5f925c970c6a18a9fd1f9"}, - {file = "pygame-2.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5d3b0da31ea341b86ef96d6b13c0ddcb25f5320186b7215bc870f08119d2f80"}, - {file = "pygame-2.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23effd50121468f1dc41022230485bff515154191a9d343224850aa3ed3b7f0"}, - {file = "pygame-2.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce4116db6924b544ff8ff03f7ef681c8baf9c6e039a1ec21e26b4ebdaa0e994"}, - {file = "pygame-2.5.0-cp38-cp38-win32.whl", hash = "sha256:50a89c15412506d95e98792435f49a73101788db30ad9c562f611c7aa7b437fa"}, - {file = "pygame-2.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:df1d8affdbe9f417cc7141581e3d08e4b09f708060d3127d2016fd591b2e4f68"}, - {file = "pygame-2.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:99965da24d0bf138d9ac6b7494b9a12781c1510cf936616d1d0c46a736777f6a"}, - {file = "pygame-2.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:daa81057c1beb71a9fb96253457197ad03ee988ba546a166f253bd92a98a9a11"}, - {file = "pygame-2.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ca85da605f6621c99c05f272a5dcf85bf0badcdca45f16ff2bee9a9d41ae042"}, - {file = "pygame-2.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:603d403997d46b07022097861c8b0ff76c6192f8a2f5f89f1a6a978d4411b715"}, - {file = "pygame-2.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7babaeac11544f3e4d7a15756a27f943dc5fff276481fdc9d90415a903ad31a9"}, - {file = "pygame-2.5.0-cp39-cp39-win32.whl", hash = "sha256:9d2126f91699223f0c36845d1c7b2cdfe2f1753ef85b8410ea613e8bd212ca33"}, - {file = "pygame-2.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:8062adc409f0b2742d7996b9b470494025c5e3b73d0d03e3798708dcf5d195cd"}, - {file = "pygame-2.5.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:1bd14adf6151b6ac2f617a8fd71621f1c125209c41a359d3c1cf4bf3904dba5f"}, - {file = "pygame-2.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b11708f1c7b1671db15246275adcb18cf384f5f7e73532e26999968876c5099"}, - {file = "pygame-2.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6830e431575697f7a11f7731798445242e37eb07ae9007f7be33083f700e9b1e"}, - {file = "pygame-2.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7dd80addfdf7dc1f0e04f81c98acb96580726783172256f2ebc955a967e84124"}, - {file = "pygame-2.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c2cbd9d1a0a3969d6e1c6b0741279c843b4a36ef3804d324874d0a2f0e49816"}, - {file = "pygame-2.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef373b9865c740f18236f2324e17e7f2111e27c6a4a5b67c490c72a8a8b8de77"}, - {file = "pygame-2.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3959038a3e2034cee3f15471786a3bac35baeaa1f7503dc7402bb49d25b5ddbc"}, - {file = "pygame-2.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:583d9c8ad033ad51da8485427139d047afb649f49e42d4fa88477f73734ad4b0"}, - {file = "pygame-2.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b650e925d2e8c82c16bdeae6e7fc5d6ca4ac659a1412da4ecd923ef9d688cb"}, - {file = "pygame-2.5.0.tar.gz", hash = "sha256:edd5745b79435976d92c0a7318aedcafcb7ac4567125ac6ba88aa473559ef9ab"}, + {file = "pygame-2.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a0769eb628c818761755eb0a0ca8216b95270ea8cbcbc82227e39ac9644643da"}, + {file = "pygame-2.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed9a3d98adafa0805ccbaaff5d2996a2b5795381285d8437a4a5d248dbd12b4a"}, + {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30d1618672a55e8c6669281ba264464b3ab563158e40d89e8c8b3faa0febebd"}, + {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39690e9be9baf58b7359d1f3b2336e1fd6f92fedbbce42987be5df27f8d30718"}, + {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03879ec299c9f4ba23901b2649a96b2143f0a5d787f0b6c39469989e2320caf1"}, + {file = "pygame-2.5.2-cp310-cp310-win32.whl", hash = "sha256:74e1d6284100e294f445832e6f6343be4fe4748decc4f8a51131ae197dae8584"}, + {file = "pygame-2.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:485239c7d32265fd35b76ae8f64f34b0637ae11e69d76de15710c4b9edcc7c8d"}, + {file = "pygame-2.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34646ca20e163dc6f6cf8170f1e12a2e41726780112594ac061fa448cf7ccd75"}, + {file = "pygame-2.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b8a6e351665ed26ea791f0e1fd649d3f483e8681892caef9d471f488f9ea5ee"}, + {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc346965847aef00013fa2364f41a64f068cd096dcc7778fc306ca3735f0eedf"}, + {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35632035fd81261f2d797fa810ea8c46111bd78ceb6089d52b61ed7dc3c5d05f"}, + {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e24d05184e4195fe5ebcdce8b18ecb086f00182b9ae460a86682d312ce8d31f"}, + {file = "pygame-2.5.2-cp311-cp311-win32.whl", hash = "sha256:f02c1c7505af18d426d355ac9872bd5c916b27f7b0fe224749930662bea47a50"}, + {file = "pygame-2.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6d58c8cf937815d3b7cdc0fa9590c5129cb2c9658b72d00e8a4568dea2ff1d42"}, + {file = "pygame-2.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1a2a43802bb5e89ce2b3b775744e78db4f9a201bf8d059b946c61722840ceea8"}, + {file = "pygame-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1c289f2613c44fe70a1e40769de4a49c5ab5a29b9376f1692bb1a15c9c1c9bfa"}, + {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:074aa6c6e110c925f7f27f00c7733c6303407edc61d738882985091d1eb2ef17"}, + {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe0228501ec616779a0b9c4299e837877783e18df294dd690b9ab0eed3d8aaab"}, + {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31648d38ecdc2335ffc0e38fb18a84b3339730521505dac68514f83a1092e3f4"}, + {file = "pygame-2.5.2-cp312-cp312-win32.whl", hash = "sha256:224c308856334bc792f696e9278e50d099a87c116f7fc314cd6aa3ff99d21592"}, + {file = "pygame-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:dd2d2650faf54f9a0f5bd0db8409f79609319725f8f08af6507a0609deadcad4"}, + {file = "pygame-2.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b30bc1220c457169571aac998e54b013aaeb732d2fd8744966cb1cfab1f61d1"}, + {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78fcd7643358b886a44127ff7dec9041c056c212b3a98977674f83f99e9b12d3"}, + {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cf093a51cb294ede56c29d4acf41538c00f297fcf78a9b186fb7d23c0577b6"}, + {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe323acbf53a0195c8c98b1b941eba7ac24e3e2b28ae48e8cda566f15fc4945"}, + {file = "pygame-2.5.2-cp36-cp36m-win32.whl", hash = "sha256:5697528266b4716d9cdd44a5a1d210f4d86ef801d0f64ca5da5d0816704009d9"}, + {file = "pygame-2.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edda1f7cff4806a4fa39e0e8ccd75f38d1d340fa5fc52d8582ade87aca247d92"}, + {file = "pygame-2.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9bd738fd4ecc224769d0b4a719f96900a86578e26e0105193658a32966df2aae"}, + {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30a8d7cf12363b4140bf2f93b5eec4028376ca1d0fe4b550588f836279485308"}, + {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc12e4dea3e88ea8a553de6d56a37b704dbe2aed95105889f6afeb4b96e62097"}, + {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b34c73cb328024f8db3cb6487a37e54000148988275d8d6e5adf99d9323c937"}, + {file = "pygame-2.5.2-cp37-cp37m-win32.whl", hash = "sha256:7d0a2794649defa57ef50b096a99f7113d3d0c2e32d1426cafa7d618eadce4c7"}, + {file = "pygame-2.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:41f8779f52e0f6e6e6ccb8f0b5536e432bf386ee29c721a1c22cada7767b0cef"}, + {file = "pygame-2.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:677e37bc0ea7afd89dde5a88ced4458aa8656159c70a576eea68b5622ee1997b"}, + {file = "pygame-2.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47a8415d2bd60e6909823b5643a1d4ef5cc29417d817f2a214b255f6fa3a1e4c"}, + {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ff21201df6278b8ca2e948fb148ffe88f5481fd03760f381dd61e45954c7dff"}, + {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29a84b2e02814b9ba925357fd2e1df78efe5e1aa64dc3051eaed95d2b96eafd"}, + {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d78485c4d21133d6b2fbb504cd544ca655e50b6eb551d2995b3aa6035928adda"}, + {file = "pygame-2.5.2-cp38-cp38-win32.whl", hash = "sha256:d851247239548aa357c4a6840fb67adc2d570ce7cb56988d036a723d26b48bff"}, + {file = "pygame-2.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:88d1cdacc2d3471eceab98bf0c93c14d3a8461f93e58e3d926f20d4de3a75554"}, + {file = "pygame-2.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4f1559e7efe4efb9dc19d2d811d702f325d9605f9f6f9ececa39ee6890c798f5"}, + {file = "pygame-2.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf2191b756ceb0e8458a761d0c665b0c70b538570449e0d39b75a5ba94ac5cf0"}, + {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cf2257447ce7f2d6de37e5fb019d2bbe32ed05a5721ace8bc78c2d9beaf3aee"}, + {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cbbfaba2b81434d62631d0b08b85fab16cf4a36e40b80298d3868927e1299"}, + {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daca456d5b9f52e088e06a127dec182b3638a775684fb2260f25d664351cf1ae"}, + {file = "pygame-2.5.2-cp39-cp39-win32.whl", hash = "sha256:3b3e619e33d11c297d7a57a82db40681f9c2c3ae1d5bf06003520b4fe30c435d"}, + {file = "pygame-2.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:1822d534bb7fe756804647b6da2c9ea5d7a62d8796b2e15d172d3be085de28c6"}, + {file = "pygame-2.5.2-pp36-pypy36_pp73-win32.whl", hash = "sha256:e708fc8f709a0fe1d1876489345f2e443d47f3976d33455e2e1e937f972f8677"}, + {file = "pygame-2.5.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c13edebc43c240fb0532969e914f0ccefff5ae7e50b0b788d08ad2c15ef793e4"}, + {file = "pygame-2.5.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:263b4a7cbfc9fe2055abc21b0251cc17dea6dff750f0e1c598919ff350cdbffe"}, + {file = "pygame-2.5.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e58e2b0c791041e4bccafa5bd7650623ba1592b8fe62ae0a276b7d0ecb314b6c"}, + {file = "pygame-2.5.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0bd67426c02ffe6c9827fc4bcbda9442fbc451d29b17c83a3c088c56fef2c90"}, + {file = "pygame-2.5.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dcff6cbba1584cf7732ce1dbdd044406cd4f6e296d13bcb7fba963fb4aeefc9"}, + {file = "pygame-2.5.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce4b6c0bfe44d00bb0998a6517bd0cf9455f642f30f91bc671ad41c05bf6f6ae"}, + {file = "pygame-2.5.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68c4e8e60b725ffc7a6c6ecd9bb5fcc5ed2d6e0e2a2c4a29a8454856ef16ad63"}, + {file = "pygame-2.5.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f3849f97372a3381c66955f99a0d58485ccd513c3d00c030b869094ce6997a6"}, + {file = "pygame-2.5.2.tar.gz", hash = "sha256:c1b89eb5d539e7ac5cf75513125fb5f2f0a2d918b1fd6e981f23bf0ac1b1c24a"}, ] [[package]] @@ -2367,4 +2369,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "caee95bcd39e7ffbc69ad262ea0b62c57d085dd0b2dbcb19068ea33c719ee0f0" +content-hash = "c36d795e0843a24ae2da6d875fb1f42d6ded4aebf55d9ccd3c7538592222d7b3" diff --git a/pyproject.toml b/pyproject.toml index 6baf002..637eb35 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ appdirs = "1.4.4" reportlab = "4.0.8" nostr-sdk = "0.11.0" cbor2 = "^5.6.0" -bitcoin-qrreader = ">=0.8.7" +bitcoin-qrreader = ">=0.8.8" bitcoin-usb = ">=0.1.14" pyqt6 = "^6.6.1" pyqt6-charts = "^6.6.0" diff --git a/tests/gui/qt/test_gui_setup_wallet.py b/tests/gui/qt/test_gui_setup_wallet.py index f07b16b..f3c9658 100644 --- a/tests/gui/qt/test_gui_setup_wallet.py +++ b/tests/gui/qt/test_gui_setup_wallet.py @@ -88,11 +88,14 @@ def test_tutorial_wallet_setup( wallet_name="test_tutorial_wallet_setup", amount=int(1e6), ) -> None: # bitcoin_core: Path, + logger.debug(f"start test_tutorial_wallet_setup") frame = inspect.currentframe() assert frame shutter = Shutter(qtbot, name=f"{test_start_time}_{inspect.getframeinfo(frame).function }") shutter.create_symlink(test_config=test_config) + logger.debug(f"shutter = {shutter}") with main_window_context(test_config=test_config) as (app, main_window): + logger.debug(f"(app, main_window) = {(app, main_window)}") QTest.qWaitForWindowExposed(main_window) # This will wait until the window is fully exposed assert main_window.windowTitle() == "Bitcoin Safe - REGTEST" diff --git a/tests/gui/qt/test_helpers.py b/tests/gui/qt/test_helpers.py index b6b1103..87b0220 100644 --- a/tests/gui/qt/test_helpers.py +++ b/tests/gui/qt/test_helpers.py @@ -239,8 +239,8 @@ def click(): def assert_message_box(click_pushbutton: QPushButton, tile: str, message_text: str): with patch("bitcoin_safe.gui.qt.util.QMessageBox") as mock_msgbox: - click_pushbutton.click() while not mock_msgbox.called: + click_pushbutton.click() QApplication.processEvents() sleep(0.2) diff --git a/tests/test_signature_manager.py b/tests/test_signature_manager.py index 3a85b82..f37864b 100644 --- a/tests/test_signature_manager.py +++ b/tests/test_signature_manager.py @@ -45,11 +45,3 @@ def test_download_manifest_and_verify(): assert sig_filename == Path(tempdir) / "sparrow-1.8.4-manifest.txt.asc" assert manager.is_signature_file_available(Path(tempdir) / "sparrow-1.8.4-manifest.txt") assert manager._verify_file(Path(tempdir) / "sparrow-1.8.4-manifest.txt", signature_file=sig_filename) - - -from pytestqt.qtbot import QtBot - - -def test_signer_finalizes_ofn_final_sig_receive(qtbot: QtBot): - - pass From a11effce07bba49a345931fd7e82ba22daf2ba47 Mon Sep 17 00:00:00 2001 From: andreasgriffin Date: Thu, 16 May 2024 21:37:46 +0200 Subject: [PATCH 3/3] windows pytests --- .github/workflows/python-tests.yml | 3 +- .pre-commit-config.yaml | 2 +- bitcoin_safe/gui/qt/main.py | 12 +- tests/gui/qt/test_gui_setup_wallet.py | 2 +- tests/gui/qt/test_gui_setup_wallet_custom.py | 2 +- tests/gui/qt/test_helpers.py | 13 +- tests/test_setup_bitcoin_core.py | 172 ++++++++++++++++--- tools/check_header.py | 15 +- 8 files changed, 182 insertions(+), 39 deletions(-) diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 8bc12e2..f8ce1eb 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: python-version: ['3.10'] - os: [ ubuntu-latest ] # [macos-latest, ubuntu-latest, windows-latest] + os: [ ubuntu-latest ] # [macos-latest, ubuntu-latest, windows-latest] env: DISPLAY: ":99.0" # Display setting for Xvfb on Linux QT_SELECT: "qt6" # Environment variable to select Qt6 @@ -53,6 +53,7 @@ jobs: sudo /usr/bin/Xvfb $DISPLAY -screen 0 1280x1024x24 & - name: Start Xvfb + if: runner.os == 'Linux' run: | export DISPLAY=:99.0 /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1920x1200x24 -ac +extension GLX +render -noreset diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f2825ff..9dc6851 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ repos: hooks: - id: check-header name: Check Python File Headers - entry: python tools/check_header.py + entry: poetry run python tools/check_header.py language: system types: [python] files: '\.py$' diff --git a/bitcoin_safe/gui/qt/main.py b/bitcoin_safe/gui/qt/main.py index 1cfede7..f939561 100644 --- a/bitcoin_safe/gui/qt/main.py +++ b/bitcoin_safe/gui/qt/main.py @@ -1072,12 +1072,12 @@ def set_tab_widget_icon(tab: QWidget, icon: QIcon): data=qt_wallet, ) - search_box = SearchWallets( - lambda: list(self.qt_wallets.values()), - signal_min=self.signals, - parent=self.tab_wallets, - ) - qt_wallet.tabs.set_top_right_widget(search_box) + # search_box = SearchWallets( + # lambda: list(self.qt_wallets.values()), + # signal_min=self.signals, + # parent=self.tab_wallets, + # ) + # qt_wallet.tabs.set_top_right_widget(search_box) qt_wallet.wallet_steps.set_visibilities() self.signals.event_wallet_tab_added.emit() diff --git a/tests/gui/qt/test_gui_setup_wallet.py b/tests/gui/qt/test_gui_setup_wallet.py index f3c9658..7b60893 100644 --- a/tests/gui/qt/test_gui_setup_wallet.py +++ b/tests/gui/qt/test_gui_setup_wallet.py @@ -91,7 +91,7 @@ def test_tutorial_wallet_setup( logger.debug(f"start test_tutorial_wallet_setup") frame = inspect.currentframe() assert frame - shutter = Shutter(qtbot, name=f"{test_start_time}_{inspect.getframeinfo(frame).function }") + shutter = Shutter(qtbot, name=f"{test_start_time.timestamp()}_{inspect.getframeinfo(frame).function }") shutter.create_symlink(test_config=test_config) logger.debug(f"shutter = {shutter}") with main_window_context(test_config=test_config) as (app, main_window): diff --git a/tests/gui/qt/test_gui_setup_wallet_custom.py b/tests/gui/qt/test_gui_setup_wallet_custom.py index 9347e91..fdc86b3 100644 --- a/tests/gui/qt/test_gui_setup_wallet_custom.py +++ b/tests/gui/qt/test_gui_setup_wallet_custom.py @@ -78,7 +78,7 @@ def test_custom_wallet_setup_custom_single_sig( ) -> None: # bitcoin_core: Path, frame = inspect.currentframe() assert frame - shutter = Shutter(qtbot, name=f"{test_start_time}_{inspect.getframeinfo(frame).function }") + shutter = Shutter(qtbot, name=f"{test_start_time.timestamp()}_{inspect.getframeinfo(frame).function }") shutter.create_symlink(test_config=test_config) with main_window_context(test_config=test_config) as (app, main_window): diff --git a/tests/gui/qt/test_helpers.py b/tests/gui/qt/test_helpers.py index 87b0220..af856f1 100644 --- a/tests/gui/qt/test_helpers.py +++ b/tests/gui/qt/test_helpers.py @@ -29,6 +29,8 @@ import inspect import logging +import os +import platform import shutil import tempfile from contextlib import contextmanager @@ -167,7 +169,16 @@ def save_screenshot(widget: QMainWindow, qtbot: QtBot, name: str) -> Path: def create_symlink(self, test_config: UserConfig): screenshots_dir = Shutter.directory(self.name) - (screenshots_dir / "config_dir").symlink_to(test_config.config_dir) + link_name = screenshots_dir / "config_dir" + + if platform.system() == "Windows": + # Use mklink to create a directory junction on Windows + if os.system(f'mklink /J "{link_name}" "{test_config.config_dir}"') != 0: + raise OSError( + f"Failed to create directory junction from {link_name} to {test_config.config_dir}" + ) + else: + link_name.symlink_to(test_config.config_dir) def _get_widget_top_level(cls: Type[T], title=None) -> Optional[T]: diff --git a/tests/test_setup_bitcoin_core.py b/tests/test_setup_bitcoin_core.py index 9c0dcc3..ac1c476 100644 --- a/tests/test_setup_bitcoin_core.py +++ b/tests/test_setup_bitcoin_core.py @@ -29,10 +29,14 @@ import json import logging +import os +import platform import shlex +import shutil import subprocess import tarfile import time +import zipfile from pathlib import Path from typing import Generator @@ -81,33 +85,160 @@ BITCOIN_BIN_DIR = BITCOIN_EXTRACT_DIR / "bin" -def bitcoin_cli(command, bitcoin_core: Path): +def runcmd(cmd, background=False): + try: + system = platform.system() + if system == "Windows": + # On Windows, use subprocess.Popen to start the process without blocking + process = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True + ) + else: + process = subprocess.Popen( + shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True + ) + + if background: + return process + stdout, stderr = process.communicate() + if stderr: + raise Exception(stderr) + return stdout + + except subprocess.CalledProcessError as e: + print(f"An error occurred while running bitcoind: {e}") + return None + except Exception as e: + print(f"An unexpected error occurred: {e}") + return None + + +def bitcoind(): + """ """ + system = platform.system() + executable = "bitcoind.exe" if system == "Windows" else "bitcoind" + cmd = f"{BITCOIN_BIN_DIR / executable} -regtest -conf={BITCOIN_CONF}" + + if system != "Windows": + cmd += " -daemon" + + runcmd(cmd, background=True) + + +def bitcoin_cli( + command, + bitcoin_core: Path, + bitcoin_host=BITCOIN_HOST, + bitcoin_port=BITCOIN_PORT, + rpc_user=RPC_USER, + rpc_password=RPC_PASSWORD, +): + """ + Run a bitcoin-cli command with the specified parameters. + + Parameters: + - command: The bitcoin-cli command to execute. + - bitcoin_core: Path to the directory containing bitcoin-cli. + - bitcoin_host: Host for RPC connection (default: localhost). + - bitcoin_port: Port for RPC connection (default: 8332). + - rpc_user: RPC username (default: bitcoin). + - rpc_password: RPC password (default: bitcoin). + + Returns: + - The result of subprocess.run containing stdout, stderr, and return code. + """ + system = platform.system() + executable = "bitcoin-cli.exe" if system == "Windows" else "bitcoin-cli" cmd = ( - str(bitcoin_core / "bitcoin-cli") - + f" -rpcconnect={BITCOIN_HOST} -rpcport={BITCOIN_PORT} -regtest -rpcuser=bitcoin -rpcpassword=bitcoin " + str(bitcoin_core / executable) + + f" -rpcconnect={bitcoin_host} -rpcport={bitcoin_port} -regtest -rpcuser={rpc_user} -rpcpassword={rpc_password} " + command ) - return subprocess.run(shlex.split(cmd), capture_output=True, text=True) + return runcmd(cmd) + + +def get_default_bitcoin_data_dir(): + """Get the default Bitcoin data directory based on the operating system.""" + system = platform.system() + if system == "Windows": + appdata = os.getenv("APPDATA") + assert appdata + return Path(appdata) / "Bitcoin" + elif system == "Darwin": # macOS + return Path.home() / "Library" / "Application Support" / "Bitcoin" + else: # Assume Linux/Unix + return Path.home() / ".bitcoin" + + +def remove_bitcoin_regtest_folder(custom_datadir=None): + """ + Remove the regtest folder from the Bitcoin data directory. + + Parameters: + - custom_datadir: Optional custom Bitcoin data directory. + """ + try: + if custom_datadir: + bitcoin_data_dir = Path(custom_datadir) + else: + bitcoin_data_dir = get_default_bitcoin_data_dir() + + regtest_dir = bitcoin_data_dir / "regtest" + + if regtest_dir.exists() and regtest_dir.is_dir(): + shutil.rmtree(regtest_dir) + print(f"Removed {regtest_dir}") + else: + print(f"{regtest_dir} does not exist or is not a directory") + except Exception as e: + print(f"An error occurred: {e}") + + +def download_bitcoin(): + system = platform.system() + + if system == "Windows": + archive_extension = "zip" + url = ( + f"https://bitcoincore.org/bin/bitcoin-core-{BITCOIN_VERSION}/bitcoin-{BITCOIN_VERSION}-win64.zip" + ) + elif system == "Darwin": # macOS + archive_extension = "tar.gz" + url = f"https://bitcoincore.org/bin/bitcoin-core-{BITCOIN_VERSION}/bitcoin-{BITCOIN_VERSION}-x86_64-apple-darwin.tar.gz" + else: # Assume Linux + archive_extension = "tar.gz" + url = f"https://bitcoincore.org/bin/bitcoin-core-{BITCOIN_VERSION}/bitcoin-{BITCOIN_VERSION}-x86_64-linux-gnu.tar.gz" - -@pytest.fixture(scope="session") -def bitcoin_core() -> Generator[Path, None, None]: - # Ensure Bitcoin Core directory exists - BITCOIN_DIR.mkdir(exist_ok=True) + BITCOIN_ARCHIVE = BITCOIN_DIR / f"bitcoin-{BITCOIN_VERSION}.{archive_extension}" # Download Bitcoin Core if necessary if not BITCOIN_ARCHIVE.exists(): - print(f"Downloading Bitcoin Core {BITCOIN_VERSION}...") - url = f"https://bitcoincore.org/bin/bitcoin-core-{BITCOIN_VERSION}/bitcoin-{BITCOIN_VERSION}-x86_64-linux-gnu.tar.gz" - response = requests.get(url, timeout=2) + logger.info(f"Downloading Bitcoin Core {BITCOIN_VERSION}...") + response = requests.get(url, timeout=10) + response.raise_for_status() BITCOIN_ARCHIVE.write_bytes(response.content) # Extract Bitcoin Core if necessary if not BITCOIN_BIN_DIR.exists(): - print(f"Extracting Bitcoin Core {BITCOIN_VERSION}...") - with tarfile.open(BITCOIN_ARCHIVE, "r:gz") as tar: - tar.extractall(path=BITCOIN_DIR) + logger.info(f"Extracting Bitcoin Core {BITCOIN_VERSION}...") + if archive_extension == "tar.gz": + with tarfile.open(BITCOIN_ARCHIVE, "r:gz") as tar: + tar.extractall(path=BITCOIN_DIR) + elif archive_extension == "zip": + with zipfile.ZipFile(BITCOIN_ARCHIVE, "r") as zip_ref: + zip_ref.extractall(path=BITCOIN_DIR) + else: + raise ValueError(f"Unsupported archive extension: {archive_extension}") + + logger.info(f"Bitcoin Core {BITCOIN_VERSION} is ready to use.") + +@pytest.fixture(scope="session") +def bitcoin_core() -> Generator[Path, None, None]: + # Ensure Bitcoin Core directory exists + BITCOIN_DIR.mkdir(exist_ok=True) + + download_bitcoin() # Create bitcoin.conf BITCOIN_CONF.write_text(BITCOIN_CONF_CONTENT) @@ -116,10 +247,10 @@ def bitcoin_core() -> Generator[Path, None, None]: # to ensure bitcoind is stopped time.sleep(1) # remove the previous chain - subprocess.run(shlex.split(f"rm -rf {Path.home() / '.bitcoin' / 'regtest'}")) + remove_bitcoin_regtest_folder() # Start Bitcoin Core - subprocess.run(shlex.split(f"{BITCOIN_BIN_DIR / 'bitcoind'} -regtest -daemon -conf={BITCOIN_CONF}")) + bitcoind() # Wait for Bitcoin Core to start time.sleep(5) @@ -135,11 +266,8 @@ def test_get_blockchain_info(bitcoin_core: Path): # Execute the command to get blockchain information result = bitcoin_cli("getblockchaininfo", bitcoin_core) - # Check if there was an error - assert result.stderr == "", f"Error getting blockchain info: {result.stderr}" - # Parse the output as JSON - blockchain_info = json.loads(result.stdout) + blockchain_info = json.loads(result) # Verify some expected fields are present and correct assert blockchain_info["chain"] == "regtest", "The chain type should be 'regtest'" @@ -152,7 +280,7 @@ def mine_blocks( ): # Mine n blocks to the specified address result = bitcoin_cli(f"generatetoaddress {n} {address}", bitcoin_core) - return result.stdout.strip() + return result.strip() class Faucet: diff --git a/tools/check_header.py b/tools/check_header.py index d2c8f8f..d09686b 100644 --- a/tools/check_header.py +++ b/tools/check_header.py @@ -28,6 +28,7 @@ import os +import platform import sys from pathlib import Path @@ -95,13 +96,15 @@ def find_python_files(): if __name__ == "__main__": + success = True - for file_path in sys.argv[1:]: - if Path(file_path).name.startswith("_"): - continue - if not check_header(file_path): - print(f"Header missing or incorrect in file: {file_path}") - success = False + if platform.system() != "Windows": + for file_path in sys.argv[1:]: + if Path(file_path).name.startswith("_"): + continue + if not check_header(file_path): + print(f"Header missing or incorrect in file: {file_path}") + success = False if not success: sys.exit(1)