feat(wallet): consolidate notes per address, keeping each address's funds in place
Users who keep funds apart under different labelled addresses can now shed notes (smaller wallet, faster scans/witness rebuilds) without the funds being merged into a single address. - Merge/Consolidate dialog: "Where should the funds go?" - Into one address (unchanged) or Keep in each address. The latter lists shielded addresses with 2+ spendable notes (label, note count, amount; too-small ones disabled) and merges each address's notes back into that address with z_mergetoaddress [addr] addr. Addresses with more notes than the batch size get several batches (the daemon locks a batch's notes before returning, so calls take disjoint notes); the dialog suggests a second run after those confirm. Per-address progress; ops keep running if the dialog is closed. The Consolidate (wallet-size) preset opens in this mode; Merge keeps "Into one". Shielded only: a transparent address can't take a merge's output. - services/note_consolidation: groupSpendableNotes, worthConsolidating, estimateBatches, consolidateInPlace (pure; driven by a merge-call function), with unit tests against a stand-in following dragonxd's rules. - fake_dragonxd: optional note wallet (FAKE_WALLET_NOTES, FAKE_MERGE_SECS) with z_mergetoaddress and its operations. - i18n: 17 new keys in all 8 languages; CJK subset rebuilt. - UI sweep: modal-consolidate target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,176 @@ def load_english_keys():
|
||||
|
||||
# All translations for the 158 missing keys
|
||||
TRANSLATIONS = {
|
||||
"merge_where": {
|
||||
"de": "Wohin sollen die Mittel gehen?",
|
||||
"es": "¿Adónde deben ir los fondos?",
|
||||
"fr": "Où doivent aller les fonds ?",
|
||||
"pt": "Para onde devem ir os fundos?",
|
||||
"ru": "Куда направить средства?",
|
||||
"zh": "资金应转到哪里?",
|
||||
"ja": "資金の移動先",
|
||||
"ko": "자금을 어디로 보낼까요?",
|
||||
},
|
||||
"merge_into_one": {
|
||||
"de": "In eine Adresse",
|
||||
"es": "A una sola dirección",
|
||||
"fr": "Vers une seule adresse",
|
||||
"pt": "Para um só endereço",
|
||||
"ru": "На один адрес",
|
||||
"zh": "合并到一个地址",
|
||||
"ja": "1 つのアドレスへ",
|
||||
"ko": "한 주소로",
|
||||
},
|
||||
"merge_keep_each": {
|
||||
"de": "In jeder Adresse belassen",
|
||||
"es": "Mantener en cada dirección",
|
||||
"fr": "Garder dans chaque adresse",
|
||||
"pt": "Manter em cada endereço",
|
||||
"ru": "Оставить в каждом адресе",
|
||||
"zh": "保留在各自地址",
|
||||
"ja": "各アドレスに残す",
|
||||
"ko": "각 주소에 유지",
|
||||
},
|
||||
"merge_keep_each_desc": {
|
||||
"de": "Die Notes jeder Adresse werden in genau diese Adresse zurückgeführt, sodass Mittel, die Sie unter verschiedenen Bezeichnungen getrennt halten, getrennt bleiben. Nur abgeschirmte Adressen – transparente Mittel können nur abgeschirmt werden (In eine Adresse).",
|
||||
"es": "Las notas de cada dirección se fusionan de nuevo en esa misma dirección, así que los fondos que mantienes separados con distintas etiquetas siguen separados. Solo direcciones blindadas: los fondos transparentes solo pueden blindarse (A una sola dirección).",
|
||||
"fr": "Les notes de chaque adresse sont refusionnées dans cette même adresse : les fonds que vous gardez séparés sous des libellés différents restent séparés. Adresses blindées uniquement — les fonds transparents ne peuvent qu'être blindés (Vers une seule adresse).",
|
||||
"pt": "As notas de cada endereço são mescladas de volta nesse mesmo endereço, então os fundos que você mantém separados com rótulos diferentes continuam separados. Só endereços blindados — fundos transparentes só podem ser blindados (Para um só endereço).",
|
||||
"ru": "Заметки каждого адреса объединяются обратно в тот же адрес, поэтому средства, которые вы держите раздельно под разными метками, остаются раздельными. Только экранированные адреса — прозрачные средства можно только экранировать («На один адрес»).",
|
||||
"zh": "每个地址的票据会合并回该地址本身,因此您用不同标签分开存放的资金仍保持分开。仅限屏蔽地址——透明资金只能被屏蔽(合并到一个地址)。",
|
||||
"ja": "各アドレスのノートはそのアドレス自身に統合されるため、ラベルごとに分けている資金は分かれたままです。シールドアドレスのみ対象です。透明アドレスの資金はシールドすることしかできません(1 つのアドレスへ)。",
|
||||
"ko": "각 주소의 노트는 같은 주소로 다시 병합되므로, 다른 라벨로 나눠 둔 자금은 계속 나뉜 상태로 유지됩니다. 차폐 주소만 해당되며, 투명 자금은 차폐만 할 수 있습니다(한 주소로).",
|
||||
},
|
||||
"merge_keep_each_none": {
|
||||
"de": "Jede abgeschirmte Adresse hat bereits nur eine Note – nichts zu konsolidieren.",
|
||||
"es": "Cada dirección blindada ya tiene una sola nota: no hay nada que consolidar.",
|
||||
"fr": "Chaque adresse blindée ne contient déjà qu'une seule note — rien à consolider.",
|
||||
"pt": "Cada endereço blindado já tem uma única nota — nada a consolidar.",
|
||||
"ru": "На каждом экранированном адресе уже одна заметка — объединять нечего.",
|
||||
"zh": "每个屏蔽地址都只有一张票据——无需整合。",
|
||||
"ja": "すべてのシールドアドレスのノートはすでに 1 つです。統合するものはありません。",
|
||||
"ko": "모든 차폐 주소에 노트가 이미 하나뿐입니다. 통합할 것이 없습니다.",
|
||||
},
|
||||
"merge_keep_each_row_fmt": {
|
||||
"de": "%s · %d Notes · %s DRGX",
|
||||
"es": "%s · %d notas · %s DRGX",
|
||||
"fr": "%s · %d notes · %s DRGX",
|
||||
"pt": "%s · %d notas · %s DRGX",
|
||||
"ru": "%s · заметок: %d · %s DRGX",
|
||||
"zh": "%s · %d 张票据 · %s DRGX",
|
||||
"ja": "%s · ノート %d 件 · %s DRGX",
|
||||
"ko": "%s · 노트 %d개 · %s DRGX",
|
||||
},
|
||||
"merge_keep_each_too_small": {
|
||||
"de": "Zu klein zum Konsolidieren: Die Gebühr würde diese Mittel aufbrauchen.",
|
||||
"es": "Demasiado poco para consolidar: la comisión se llevaría estos fondos.",
|
||||
"fr": "Trop faible pour être consolidé : les frais absorberaient ces fonds.",
|
||||
"pt": "Pequeno demais para consolidar: a taxa consumiria esses fundos.",
|
||||
"ru": "Слишком мало для объединения: комиссия съест эти средства.",
|
||||
"zh": "金额太小,无法整合:手续费会耗尽这些资金。",
|
||||
"ja": "少なすぎて統合できません。手数料でこの資金がなくなります。",
|
||||
"ko": "너무 적어서 통합할 수 없습니다. 수수료가 이 자금을 모두 소모합니다.",
|
||||
},
|
||||
"merge_keep_each_batches_fmt": {
|
||||
"de": "Adressen mit mehr als %d Notes werden in mehreren Durchgängen zusammengeführt; führen Sie es nach deren Bestätigung erneut aus, um den Rest zusammenzuführen.",
|
||||
"es": "Las direcciones con más de %d notas se fusionan en varios lotes; vuelve a ejecutarlo cuando se confirmen para fusionar el resto.",
|
||||
"fr": "Les adresses de plus de %d notes sont fusionnées en plusieurs lots ; relancez l'opération une fois ceux-ci confirmés pour fusionner le reste.",
|
||||
"pt": "Endereços com mais de %d notas são mesclados em vários lotes; execute de novo depois que forem confirmados para mesclar o restante.",
|
||||
"ru": "Адреса с более чем %d заметками объединяются в несколько партий; запустите снова после их подтверждения, чтобы объединить остальное.",
|
||||
"zh": "超过 %d 张票据的地址会分多批合并;确认后再运行一次即可合并其余部分。",
|
||||
"ja": "ノートが %d 件を超えるアドレスは複数回に分けて統合されます。承認後にもう一度実行すると残りが統合されます。",
|
||||
"ko": "노트가 %d개를 넘는 주소는 여러 번에 나눠 병합됩니다. 확인된 후 다시 실행하면 나머지가 병합됩니다.",
|
||||
},
|
||||
"merge_keep_each_confirm_fmt": {
|
||||
"de": "%d Notes in %d Adressen konsolidieren? Jede Adresse behält ihre eigenen Mittel. Gebühren: etwa %s DRGX (eine pro Durchgang).",
|
||||
"es": "¿Consolidar %d notas en %d direcciones? Cada dirección conserva sus propios fondos. Comisiones: unos %s DRGX (una por lote).",
|
||||
"fr": "Consolider %d notes dans %d adresses ? Chaque adresse garde ses propres fonds. Frais : environ %s DRGX (un par lot).",
|
||||
"pt": "Consolidar %d notas em %d endereços? Cada endereço mantém seus próprios fundos. Taxas: cerca de %s DRGX (uma por lote).",
|
||||
"ru": "Объединить %d заметок на %d адресах? Каждый адрес сохраняет свои средства. Комиссии: около %s DRGX (по одной на партию).",
|
||||
"zh": "整合 %d 张票据,涉及 %d 个地址?每个地址保留各自的资金。手续费:约 %s DRGX(每批一次)。",
|
||||
"ja": "%d 件のノートを %d 個のアドレスで統合しますか?各アドレスの資金はそのまま残ります。手数料:約 %s DRGX(1 回ごとに 1 件)。",
|
||||
"ko": "노트 %d개를 주소 %d개에서 통합할까요? 각 주소는 자기 자금을 그대로 유지합니다. 수수료: 약 %s DRGX(배치마다 1회).",
|
||||
},
|
||||
"merge_keep_each_select": {
|
||||
"de": "Wählen Sie mindestens eine Adresse zum Konsolidieren aus.",
|
||||
"es": "Marca al menos una dirección para consolidar.",
|
||||
"fr": "Cochez au moins une adresse à consolider.",
|
||||
"pt": "Marque pelo menos um endereço para consolidar.",
|
||||
"ru": "Отметьте хотя бы один адрес для объединения.",
|
||||
"zh": "请至少勾选一个要整合的地址。",
|
||||
"ja": "統合するアドレスを 1 つ以上選んでください。",
|
||||
"ko": "통합할 주소를 하나 이상 선택하세요.",
|
||||
},
|
||||
"merge_keep_each_nothing_submitted": {
|
||||
"de": "Nichts wurde konsolidiert – der Node hat jede Zusammenführung abgelehnt.",
|
||||
"es": "No se consolidó nada: el nodo rechazó todas las fusiones.",
|
||||
"fr": "Rien n'a été consolidé — le nœud a refusé chaque fusion.",
|
||||
"pt": "Nada foi consolidado — o nó recusou todas as mesclagens.",
|
||||
"ru": "Ничего не объединено — узел отклонил все объединения.",
|
||||
"zh": "没有任何整合——节点拒绝了所有合并。",
|
||||
"ja": "何も統合されませんでした。ノードがすべての統合を拒否しました。",
|
||||
"ko": "아무것도 통합되지 않았습니다. 노드가 모든 병합을 거부했습니다.",
|
||||
},
|
||||
"merge_keep_each_some_failed": {
|
||||
"de": "Einige Zusammenführungen sind fehlgeschlagen – siehe Liste oben.",
|
||||
"es": "Algunas fusiones fallaron; consulta la lista de arriba.",
|
||||
"fr": "Certaines fusions ont échoué — voir la liste ci-dessus.",
|
||||
"pt": "Algumas mesclagens falharam — veja a lista acima.",
|
||||
"ru": "Некоторые объединения не удались — см. список выше.",
|
||||
"zh": "部分合并失败——请查看上方列表。",
|
||||
"ja": "一部の統合に失敗しました。上の一覧を確認してください。",
|
||||
"ko": "일부 병합에 실패했습니다. 위 목록을 확인하세요.",
|
||||
},
|
||||
"merge_keep_each_status_not_started": {
|
||||
"de": "%s – nicht gestartet: %s",
|
||||
"es": "%s: no iniciado: %s",
|
||||
"fr": "%s — non démarré : %s",
|
||||
"pt": "%s — não iniciado: %s",
|
||||
"ru": "%s — не запущено: %s",
|
||||
"zh": "%s——未开始:%s",
|
||||
"ja": "%s — 開始されませんでした:%s",
|
||||
"ko": "%s — 시작되지 않음: %s",
|
||||
},
|
||||
"merge_keep_each_status_failed": {
|
||||
"de": "%s – fehlgeschlagen: %s",
|
||||
"es": "%s: falló: %s",
|
||||
"fr": "%s — échec : %s",
|
||||
"pt": "%s — falhou: %s",
|
||||
"ru": "%s — ошибка: %s",
|
||||
"zh": "%s——失败:%s",
|
||||
"ja": "%s — 失敗:%s",
|
||||
"ko": "%s — 실패: %s",
|
||||
},
|
||||
"merge_keep_each_status_done": {
|
||||
"de": "%s – fertig: %d Notes in %d Durchgang/Durchgängen zusammengeführt",
|
||||
"es": "%s: listo: %d notas fusionadas en %d lote(s)",
|
||||
"fr": "%s — terminé : %d notes fusionnées en %d lot(s)",
|
||||
"pt": "%s — concluído: %d notas mescladas em %d lote(s)",
|
||||
"ru": "%s — готово: объединено заметок: %d, партий: %d",
|
||||
"zh": "%s——完成:已合并 %d 张票据,共 %d 批",
|
||||
"ja": "%s — 完了:%d 件のノートを %d 回で統合",
|
||||
"ko": "%s — 완료: 노트 %d개를 %d번에 걸쳐 병합",
|
||||
},
|
||||
"merge_keep_each_status_running": {
|
||||
"de": "%s – %d Notes werden zusammengeführt (%d von %d Durchgängen fertig)…",
|
||||
"es": "%s: fusionando %d notas (%d de %d lotes listos)…",
|
||||
"fr": "%s — fusion de %d notes (%d lots sur %d terminés)…",
|
||||
"pt": "%s — mesclando %d notas (%d de %d lotes concluídos)…",
|
||||
"ru": "%s — объединение %d заметок (готово партий: %d из %d)…",
|
||||
"zh": "%s——正在合并 %d 张票据(已完成 %d/%d 批)…",
|
||||
"ja": "%s — %d 件のノートを統合中(%d / %d 回完了)…",
|
||||
"ko": "%s — 노트 %d개 병합 중(%d/%d 배치 완료)…",
|
||||
},
|
||||
"merge_keep_each_run_again": {
|
||||
"de": "Adressen, die in mehreren Durchgängen zusammengeführt wurden, haben jetzt eine Note pro Durchgang. Führen Sie dies nach deren Bestätigung erneut aus, um sie zu einer zusammenzuführen.",
|
||||
"es": "Las direcciones fusionadas en varios lotes tienen ahora una nota por lote. Vuelve a ejecutarlo cuando se confirmen para fusionarlas en una.",
|
||||
"fr": "Les adresses fusionnées en plusieurs lots contiennent maintenant une note par lot. Relancez l'opération une fois ceux-ci confirmés pour les fusionner en une seule.",
|
||||
"pt": "Endereços mesclados em vários lotes agora têm uma nota por lote. Execute de novo depois que forem confirmados para mesclá-las em uma.",
|
||||
"ru": "На адресах, объединённых в несколько партий, теперь по одной заметке на партию. Запустите снова после их подтверждения, чтобы объединить их в одну.",
|
||||
"zh": "分多批合并的地址现在每批各有一张票据。确认后再运行一次,即可把它们合并为一张。",
|
||||
"ja": "複数回に分けて統合したアドレスには、回数分のノートが残っています。承認後にもう一度実行すると 1 つにまとめられます。",
|
||||
"ko": "여러 번에 나눠 병합된 주소에는 배치마다 노트가 하나씩 남아 있습니다. 확인된 후 다시 실행하면 하나로 병합됩니다.",
|
||||
},
|
||||
"mining_addr_explainer": {
|
||||
"de": "Empfängt nur Solo-Mining-Belohnungen – das Netzwerk lehnt Zahlungen an diese Adresse ab. Belohnungen werden automatisch abgeschirmt, sobald sie gereift sind.",
|
||||
"es": "Solo recibe recompensas de minería en solitario; la red rechaza los pagos a esta dirección. Las recompensas se blindan automáticamente cuando maduran.",
|
||||
|
||||
Reference in New Issue
Block a user