aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-06-24 08:59:31 -0700
committerAdam Soltys <[email protected]>2026-06-24 08:59:31 -0700
commit17acf5ec80a0c0b0acc44a6a8373e154c68d4748 (patch)
treea3fb56b85cc9cd21962ed64b084294096948d75b
parentf59cca61111f38963099190bdbbce9a76bc3fafe (diff)
downloadcoinosv3-17acf5ec80a0c0b0acc44a6a8373e154c68d4748.tar.gz
coinosv3-17acf5ec80a0c0b0acc44a6a8373e154c68d4748.zip
Split translations into per-language files, lazy-loaded
Only English is bundled in index.html now; the other 19 languages are emitted as dist/locales/<code>.json and fetched on demand when a visitor actually uses one (via auto-detect, the picker, or ?lang=xx). This drops index.html from ~511KB to ~318KB; a non-English visitor fetches just their one ~8-10KB locale, which the service worker then caches for offline use. t() falls back to English until a locale resolves. - i18n.js keeps only en + a loadLocale() fetcher; locale data moved to src/locales/*.json. - build.js emits dist/locales/; dev.js serves /locales/<code>.json. - Deploy hook publishes the locales/ subdir. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
-rw-r--r--build.js25
-rw-r--r--dev.js10
-rw-r--r--src/app.js17
-rw-r--r--src/i18n.js1468
-rw-r--r--src/locales/ar.json145
-rw-r--r--src/locales/bn.json145
-rw-r--r--src/locales/de.json145
-rw-r--r--src/locales/es.json145
-rw-r--r--src/locales/fr.json145
-rw-r--r--src/locales/hi.json145
-rw-r--r--src/locales/id.json145
-rw-r--r--src/locales/ja.json145
-rw-r--r--src/locales/ko.json145
-rw-r--r--src/locales/mr.json145
-rw-r--r--src/locales/pt.json145
-rw-r--r--src/locales/ru.json145
-rw-r--r--src/locales/sw.json145
-rw-r--r--src/locales/ta.json145
-rw-r--r--src/locales/te.json145
-rw-r--r--src/locales/tr.json145
-rw-r--r--src/locales/ur.json145
-rw-r--r--src/locales/vi.json145
-rw-r--r--src/locales/zh.json145
23 files changed, 2816 insertions, 1459 deletions
diff --git a/build.js b/build.js
index e99b0a4..52b29af 100644
--- a/build.js
+++ b/build.js
@@ -9,7 +9,7 @@
// installed. index.html stays self-contained; these are optional extras that
// simply 404 (harmlessly) when the file is opened on its own from file://.
-import { mkdir } from 'node:fs/promises';
+import { mkdir, readdir } from 'node:fs/promises';
const FAVICON =
'data:image/svg+xml,' +
@@ -77,7 +77,21 @@ self.addEventListener('fetch', (e) => {
);
return;
}
- e.respondWith(caches.match(req).then((hit) => hit || fetch(req)));
+ // Cache-first, but cache same-origin assets (e.g. the chosen locale, icons)
+ // on first fetch so they're available offline without precaching them all.
+ e.respondWith(
+ caches.match(req).then(
+ (hit) =>
+ hit ||
+ fetch(req).then((res) => {
+ if (res.ok) {
+ const copy = res.clone();
+ caches.open(CACHE).then((c) => c.put(req, copy));
+ }
+ return res;
+ })
+ )
+ );
});
`;
@@ -148,6 +162,11 @@ if (import.meta.main) {
// browser without BarcodeDetector opens the scanner.
await Bun.write('dist/jsqr.js', await buildJsQr());
+ // Per-language strings — fetched on demand so visitors only download theirs.
+ await mkdir('dist/locales', { recursive: true });
+ const locales = await readdir('src/locales');
+ for (const f of locales) await Bun.write('dist/locales/' + f, Bun.file('src/locales/' + f));
+
// PWA sidecars.
await Bun.write('dist/manifest.webmanifest', JSON.stringify(MANIFEST, null, 2));
const version = Bun.hash(html).toString(36);
@@ -156,5 +175,5 @@ if (import.meta.main) {
const kb = (Buffer.byteLength(html) / 1024).toFixed(0);
console.log(`✓ dist/index.html written (${kb} KB) — open it offline, no server needed`);
- console.log(`✓ PWA: manifest.webmanifest, sw.js (cold-${version}), ${STATIC.length} icons, jsqr.js`);
+ console.log(`✓ PWA: manifest.webmanifest, sw.js (cold-${version}), ${STATIC.length} icons, jsqr.js, ${locales.length} locales`);
}
diff --git a/dev.js b/dev.js
index dde8813..b1d64d8 100644
--- a/dev.js
+++ b/dev.js
@@ -9,11 +9,19 @@ Bun.serve({
port,
async fetch(req) {
try {
- if (new URL(req.url).pathname === '/jsqr.js') {
+ const path = new URL(req.url).pathname;
+ if (path === '/jsqr.js') {
return new Response(await buildJsQr({ minify: false }), {
headers: { 'content-type': 'text/javascript; charset=utf-8' },
});
}
+ const loc = path.match(/^\/locales\/([a-z]{2})\.json$/);
+ if (loc) {
+ const f = Bun.file('src/locales/' + loc[1] + '.json');
+ return (await f.exists())
+ ? new Response(f, { headers: { 'content-type': 'application/json; charset=utf-8' } })
+ : new Response('{}', { status: 404, headers: { 'content-type': 'application/json' } });
+ }
const html = await buildHtml({ minify: false });
return new Response(html, {
headers: { 'content-type': 'text/html; charset=utf-8' },
diff --git a/src/app.js b/src/app.js
index 5fd5c1a..c43ec6f 100644
--- a/src/app.js
+++ b/src/app.js
@@ -9,7 +9,7 @@ import { qrSvg } from './qr.js';
import { scanQr } from './scan.js';
import { getSyncConfig, setSyncConfig } from './nostr.js';
import { getExplorerConfig, setExplorerConfig, EXPLORER_PRESETS } from './api.js';
-import { t, LANGS, getLang, setLang, isRTL } from './i18n.js';
+import { t, LANGS, getLang, setLang, isRTL, loadLocale } from './i18n.js';
import {
fmtBtc,
fmtSats,
@@ -773,8 +773,10 @@ function languagePicker() {
'select',
{
value: getLang(),
- onChange: (e) => {
- setLang(e.target.value);
+ onChange: async (e) => {
+ const code = e.target.value;
+ setLang(code);
+ await loadLocale(code); // fetch the locale's strings before re-rendering
applyDir();
render();
},
@@ -1524,10 +1526,13 @@ async function importSnapshotFile(e) {
}
// ================================================================ start
-// Apply the detected/saved language direction, then restore a wallet left open
-// in this tab; otherwise show the unlock screen.
+// Load the active language's strings (English is inline; others are fetched),
+// apply text direction, then restore a wallet left open in this tab — otherwise
+// show the unlock screen.
applyDir();
-if (!restoreSession()) render();
+loadLocale(getLang()).finally(() => {
+ if (!restoreSession()) render();
+});
diff --git a/src/i18n.js b/src/i18n.js
index dbd878a..91234d7 100644
--- a/src/i18n.js
+++ b/src/i18n.js
@@ -178,1463 +178,33 @@ const STR = {
},
};
-// --- translations ---------------------------------------------------------
-// Helper to define a language as overrides on top of English keys.
-function def(code, map) {
- STR[code] = map;
+// --- locale loading -------------------------------------------------------
+// Only English is bundled; other languages are fetched on demand from
+// locales/<code>.json (emitted by the build) and cached, so each visitor only
+// downloads the language they use. t() falls back to English until it loads.
+const _inflight = new Map();
+export function loadLocale(code) {
+ if (code === 'en' || STR[code] || !SUPPORTED.has(code)) return Promise.resolve();
+ if (_inflight.has(code)) return _inflight.get(code);
+ const p = fetch('locales/' + code + '.json')
+ .then((r) => (r.ok ? r.json() : null))
+ .then((d) => { if (d) STR[code] = d; })
+ .catch(() => {})
+ .finally(() => _inflight.delete(code));
+ _inflight.set(code, p);
+ return p;
}
-def('es', {
- passphrase: "Frase de contraseña",
- howItWorks: "Cómo funciona",
- installApp: "Instalar app",
- hiwBasicsTitle: "Lo básico",
- hiwBasics1: "Cuando creas una billetera, la página genera doce palabras al azar. Esas palabras son la clave de tu billetera. Cualquiera que las tenga puede gastar las monedas, así que anótalas en papel y guárdalas en un lugar al que solo tú puedas acceder.",
- hiwBasics2: "Si pierdes las doce palabras y no tienes una copia de seguridad, las monedas se pierden para siempre. No hay enlace para restablecer ni nadie a quien llamar, así que respáldalas antes de poner dinero.",
- hiwBasics3: "No hay servidor ni cuenta. Toda la app es una única página que se ejecuta en tu navegador, así que nadie custodia tus monedas y ningún servidor ve jamás tus claves. Para mostrar tu saldo e historial, lee desde un explorador de bloques público (mempool.space por defecto, o tu propio nodo si configuras uno en Ajustes).",
- hiwBasics4: "Incluso puedes guardar esta página y abrirla directamente desde tu computadora sin conexión a internet. Sigue funcionando sin conexión.",
- hiwBasics5: "Sigue los estándares habituales de Bitcoin (una frase BIP39 de 12 palabras y claves SegWit nativas BIP84), así que si este sitio desapareciera algún día, puedes restaurar la misma frase en Sparrow, Electrum o cualquier otra billetera estándar y tus monedas estarán justo ahí.",
- hiwTribute: "El nombre Hal Wallet es un homenaje al legendario cypherpunk y pionero de Bitcoin, Hal Finney (1956–2014).",
- signExport: "Firmar y (transmitir en otro lugar)",
- scanQr: "Escanear QR",
- scanHint: "Apunta la cámara a un código QR",
- scanNoCamera: "No se pudo acceder a la cámara.",
- scanNoDecoder: "El escaneo de QR necesita conexión la primera vez que se usa.",
- scanUnrecognized: "No se pudo leer una dirección de Bitcoin de ese QR.",
- broadcastScanned: "¿Transmitir la transacción?",
- broadcastNow: "Transmitir",
- scanOffline: "Estás sin conexión — vuelve a conectarte para transmitir esta transacción.",
- loadingHistory: "Cargando transacciones…",
- explorer: "Explorador de bloques",
- explorerDesc: "El servidor que esta billetera consulta para saldos e historial. Apúntalo a tu propio nodo para máxima privacidad.",
- explorerUrl: "URL del servidor",
- explorerUrlHint: "Base REST de Esplora / electrs, p. ej. https://mempool.space/api",
- deviceSync: "Sincronización de dispositivos",
- deviceSyncDesc: "Mantén esta billetera sincronizada entre tus dispositivos guardando una copia cifrada en un relay de Nostr — solo un dispositivo con tu semilla puede leerla. Desactívala para mantener todo en este dispositivo.",
- syncAcross: "Sincronizar entre dispositivos",
- syncOn: "Activado",
- syncOff: "Desactivado",
- relaysLabel: "Relays",
- relaysHint: "Una URL wss:// por línea.",
- home: 'Inicio', logout: 'Cerrar sesión',
- createNew: 'Crear nuevo', importExisting: 'Importar existente',
- genIntro: 'Genera una nueva frase semilla de 12 palabras. Anótala. Es la única forma de recuperar este monedero.',
- generateSeed: 'Generar frase semilla',
- writeDownWarn: '⚠ Anota estas 12 palabras en papel, en orden. Cualquiera que las tenga puede gastar tus fondos.',
- copyPhrase: 'Copiar frase', regenerate: 'Regenerar', verifyBackup: 'Verificar copia', skipVerification: 'Omitir verificación',
- confirmBackupIntro: 'Confirma tu copia introduciendo las palabras solicitadas.', wordN: 'Palabra n.º {n}',
- reenterPassphrase: 'Reintroduce la contraseña', back: '← Atrás', openWallet: 'Abrir monedero',
- wordsMismatch: 'Esas palabras no coinciden con tu frase. Revisa tu copia.',
- passphraseMismatch: 'Esa contraseña no coincide con la que introdujiste.',
- seedPhrase: 'Frase semilla', seedPlaceholder: 'escribe tus palabras separadas por espacios',
- optionalPassphrase: 'Contraseña opcional', leaveBlank: 'déjalo en blanco si no se usa', show: 'Mostrar', hide: 'Ocultar',
- invalidSeed: 'Frase semilla no válida — revisa la ortografía y el orden.',
- keysNote: 'Las claves nunca salen de tu navegador. Funciona sin conexión. Guarda esta página y ábrela desde tu equipo.',
- balance: 'Saldo', pending: 'Pendiente',
- tabReceive: 'Recibir', tabSend: 'Enviar', tabHistory: 'Historial', tabSettings: 'Ajustes',
- copyAddress: 'Copiar dirección', paymentReceived: '¡Pago recibido!', tapToProceed: 'Toca en cualquier lugar para continuar',
- recipient: 'Destinatario', recipients: 'Destinatarios', max: 'Máx', feeRate: 'Tarifa',
- feeEconomy: 'Económica', feeNormal: 'Normal', feePriority: 'Prioritaria', feeCustom: 'Personalizada',
- selectedRate: 'Tarifa elegida: {n} sat/vB', coinSelection: 'Selección de monedas', automatic: 'Automática', manual: 'Manual',
- noCoins: 'No hay monedas disponibles.', nSelected: '{n} seleccionadas', addRecipient: '+ Añadir destinatario',
- reviewTx: 'Revisar transacción', remove: 'Quitar',
- enterRecipientAddr: 'Introduce una dirección de destino.', enterAddrForN: 'Introduce una dirección para el destinatario {n}.',
- enterValidAmtForN: 'Introduce un importe válido para el destinatario {n}.', selectCoin: 'Selecciona al menos una moneda para gastar.',
- networkFee: 'Comisión de red', offlineSignNote: 'Sin conexión: firma ahora y difunde la transacción desde un dispositivo conectado.',
- signBroadcast: 'Firmar y difundir', signTx: 'Firmar transacción', broadcastFailed: 'Falló la difusión: {msg}', signingFailed: 'Falló la firma: {msg}',
- done: 'Listo', txSignedNote: '✓ Transacción firmada. Difunde el código de abajo desde un dispositivo conectado (p. ej. mempool.space → Broadcast).',
- transactionId: 'ID de transacción', signedTxRaw: 'Transacción firmada (código)', copyHex: 'Copiar código', downloadLabel: 'Descargar',
- showQrAirgap: 'Mostrar QR (para transferencia sin conexión)', txBroadcast: '✓ ¡Transacción difundida!', copyTxid: 'Copiar ID de transacción', viewOnMempool: 'Ver en mempool.space ↗',
- noTxYet: 'Aún no hay transacciones.', received: 'Recibido', sent: 'Enviado', pendingTag: '⏳ pendiente', awaitingConfirmation: 'esperando confirmación',
- feeShort: 'comisión {x}', historyOffline: 'El historial no está disponible sin conexión.',
- status: 'Estado', confirmed: 'Confirmada', confirmedTag: 'confirmada', pendingInMempool: 'Pendiente (en mempool)', block: 'Bloque', date: 'Fecha',
- copyId: 'Copiar ID', backToHistory: '← Volver al historial',
- recoveryPhrase: 'Frase de recuperación', recoveryWarn: '⚠ Cualquiera que vea estas palabras puede robar tus fondos. Asegúrate de que nadie mire antes de mostrarlas.',
- bip39Passphrase: 'Contraseña', copyPassphrase: 'Copiar contraseña', revealRecovery: 'Mostrar frase de recuperación',
- offlineTransfer: 'Transferencia sin conexión', offlineTransferDesc: 'Exporta tus monedas en un dispositivo conectado, luego importa el archivo en uno sin conexión (con este monedero + semilla) para firmar sin internet.',
- exportSnapshot: '⤓ Exportar copia', importSnapshot: 'Importar copia…', rescan: 'Reescanear',
- rescanDesc: 'Tu dirección actual se actualiza automáticamente. Reescanea solo si enviaste un pago a una dirección antigua (reutilizada) y no aparece.',
- rescanWallet: 'Reescanear monedero', scanning: 'Escaneando…', language: 'Idioma',
- offlineBanner: 'Sin conexión a la red — trabajando sin conexión. Importa una copia en Ajustes para cargar monedas.', retry: 'Reintentar',
- copied: 'Copiado al portapapeles', snapshotExported: 'Copia exportada', importedNCoins: '{n} moneda(s) importada(s)',
- unmatchedSuffix: ' · {n} dirección(es) no pertenecen a este monedero', importFailed: 'Falló la importación: {msg}',
- copy: 'Copiar', switchUnit: 'Cambiar BTC / sats', footerMadeBy: 'hecho por', footerSourceOn: 'código disponible en',
-});
-
-def('fr', {
- passphrase: "Phrase secrète",
- howItWorks: "Comment ça marche",
- installApp: "Installer l’application",
- hiwBasicsTitle: "Les bases",
- hiwBasics1: "Quand vous créez un portefeuille, la page génère douze mots aléatoires. Ces mots sont la clé de votre portefeuille. Quiconque les possède peut dépenser les fonds, alors notez-les sur papier et gardez-les dans un endroit auquel vous seul avez accès.",
- hiwBasics2: "Si vous perdez les douze mots et n’avez pas de sauvegarde, les fonds sont perdus à jamais. Il n’y a aucun lien de réinitialisation ni personne à appeler, alors sauvegardez-les avant d’y déposer de l’argent.",
- hiwBasics3: "Il n’y a ni serveur ni compte. Toute l’application tient sur une seule page qui s’exécute dans votre navigateur : personne ne détient vos fonds et aucun serveur ne voit jamais vos clés. Pour afficher votre solde et votre historique, elle interroge un explorateur de blocs public (mempool.space par défaut, ou votre propre nœud si vous en configurez un dans les Réglages).",
- hiwBasics4: "Vous pouvez même enregistrer cette page et l’ouvrir directement depuis votre ordinateur sans aucune connexion Internet. Elle continue de fonctionner hors ligne.",
- hiwBasics5: "Elle respecte les standards habituels de Bitcoin (une phrase BIP39 de 12 mots et des clés SegWit natives BIP84), donc si ce site venait à disparaître, vous pourriez restaurer la même phrase dans Sparrow, Electrum ou tout autre portefeuille standard, et vos fonds y seraient.",
- hiwTribute: "Le nom Hal Wallet est un hommage au légendaire cypherpunk et pionnier de Bitcoin, Hal Finney (1956–2014).",
- signExport: "Signer et (diffuser ailleurs)",
- scanQr: "Scanner un QR",
- scanHint: "Pointez la caméra vers un code QR",
- scanNoCamera: "Impossible d’accéder à la caméra.",
- scanNoDecoder: "Le scan de QR nécessite une connexion lors de sa première utilisation.",
- scanUnrecognized: "Impossible de lire une adresse Bitcoin dans ce QR.",
- broadcastScanned: "Diffuser la transaction ?",
- broadcastNow: "Diffuser",
- scanOffline: "Vous êtes hors ligne — reconnectez-vous pour diffuser cette transaction.",
- loadingHistory: "Chargement des transactions…",
- explorer: "Explorateur de blocs",
- explorerDesc: "Le serveur que ce portefeuille interroge pour les soldes et l’historique. Pointez-le vers votre propre nœud pour une confidentialité maximale.",
- explorerUrl: "URL du serveur",
- explorerUrlHint: "Base REST Esplora / electrs, par ex. https://mempool.space/api",
- deviceSync: "Synchronisation des appareils",
- deviceSyncDesc: "Gardez ce portefeuille synchronisé entre vos appareils en stockant une copie chiffrée sur un relais Nostr — seul un appareil possédant votre seed peut la lire. Désactivez l’option pour tout conserver sur cet appareil.",
- syncAcross: "Synchroniser entre les appareils",
- syncOn: "Activé",
- syncOff: "Désactivé",
- relaysLabel: "Relais",
- relaysHint: "Une URL wss:// par ligne.",
- home: 'Accueil', logout: 'Déconnexion',
- createNew: 'Créer', importExisting: 'Importer',
- genIntro: 'Générez une nouvelle phrase de 12 mots. Notez-la. C’est le seul moyen de récupérer ce portefeuille.',
- generateSeed: 'Générer la phrase', writeDownWarn: '⚠ Notez ces 12 mots sur papier, dans l’ordre. Quiconque les a peut dépenser vos fonds.',
- copyPhrase: 'Copier la phrase', regenerate: 'Régénérer', verifyBackup: 'Vérifier la sauvegarde', skipVerification: 'Ignorer la vérification',
- confirmBackupIntro: 'Confirmez votre sauvegarde en saisissant les mots demandés.', wordN: 'Mot n° {n}',
- reenterPassphrase: 'Ressaisir la phrase secrète', back: '← Retour', openWallet: 'Ouvrir le portefeuille',
- wordsMismatch: 'Ces mots ne correspondent pas à votre phrase. Vérifiez votre sauvegarde.',
- passphraseMismatch: 'Cette phrase secrète ne correspond pas à celle saisie.',
- seedPhrase: 'Phrase de récupération', seedPlaceholder: 'saisissez vos mots séparés par des espaces',
- optionalPassphrase: 'Phrase secrète (facultative)', leaveBlank: 'laisser vide si non utilisée', show: 'Afficher', hide: 'Masquer',
- invalidSeed: 'Phrase invalide — vérifiez l’orthographe et l’ordre des mots.',
- keysNote: 'Les clés ne quittent jamais votre navigateur. Fonctionne hors ligne. Enregistrez cette page et ouvrez-la localement.',
- balance: 'Solde', pending: 'En attente',
- tabReceive: 'Recevoir', tabSend: 'Envoyer', tabHistory: 'Historique', tabSettings: 'Réglages',
- copyAddress: 'Copier l’adresse', paymentReceived: 'Paiement reçu !', tapToProceed: 'Touchez n’importe où pour continuer',
- recipient: 'Destinataire', recipients: 'Destinataires', max: 'Max', feeRate: 'Frais',
- feeEconomy: 'Économique', feeNormal: 'Normal', feePriority: 'Prioritaire', feeCustom: 'Personnalisé',
- selectedRate: 'Frais choisis : {n} sat/vB', coinSelection: 'Sélection des pièces', automatic: 'Automatique', manual: 'Manuel',
- noCoins: 'Aucune pièce disponible.', nSelected: '{n} sélectionnée(s)', addRecipient: '+ Ajouter un destinataire',
- reviewTx: 'Vérifier la transaction', remove: 'Retirer',
- enterRecipientAddr: 'Saisissez une adresse de destination.', enterAddrForN: 'Saisissez une adresse pour le destinataire {n}.',
- enterValidAmtForN: 'Saisissez un montant valide pour le destinataire {n}.', selectCoin: 'Sélectionnez au moins une pièce à dépenser.',
- networkFee: 'Frais de réseau', offlineSignNote: 'Hors ligne : signez maintenant, puis diffusez la transaction depuis un appareil connecté.',
- signBroadcast: 'Signer et diffuser', signTx: 'Signer la transaction', broadcastFailed: 'Échec de la diffusion : {msg}', signingFailed: 'Échec de la signature : {msg}',
- done: 'Terminé', txSignedNote: '✓ Transaction signée. Diffusez le code ci-dessous depuis un appareil connecté (par ex. mempool.space → Broadcast).',
- transactionId: 'ID de transaction', signedTxRaw: 'Transaction signée (code)', copyHex: 'Copier le code', downloadLabel: 'Télécharger',
- showQrAirgap: 'Afficher le QR (transfert hors ligne)', txBroadcast: '✓ Transaction diffusée !', copyTxid: 'Copier l’ID de transaction', viewOnMempool: 'Voir sur mempool.space ↗',
- noTxYet: 'Aucune transaction.', received: 'Reçu', sent: 'Envoyé', pendingTag: '⏳ en attente', awaitingConfirmation: 'en attente de confirmation',
- feeShort: 'frais {x}', historyOffline: 'L’historique est indisponible hors ligne.',
- status: 'Statut', confirmed: 'Confirmée', confirmedTag: 'confirmée', pendingInMempool: 'En attente (mempool)', block: 'Bloc', date: 'Date',
- copyId: 'Copier l’ID', backToHistory: '← Retour à l’historique',
- recoveryPhrase: 'Phrase de récupération', recoveryWarn: '⚠ Quiconque voit ces mots peut voler vos fonds. Assurez-vous que personne ne regarde avant de les afficher.',
- bip39Passphrase: 'Phrase secrète', copyPassphrase: 'Copier la phrase secrète', revealRecovery: 'Afficher la phrase de récupération',
- offlineTransfer: 'Transfert hors ligne', offlineTransferDesc: 'Exportez vos pièces sur un appareil connecté, puis importez le fichier sur un appareil hors ligne (avec ce portefeuille + phrase) pour signer sans internet.',
- exportSnapshot: '⤓ Exporter l’instantané', importSnapshot: 'Importer l’instantané…', rescan: 'Rescanner',
- rescanDesc: 'Votre adresse actuelle se met à jour automatiquement. Rescannez seulement si un paiement a été envoyé à une ancienne adresse (réutilisée) et n’apparaît pas.',
- rescanWallet: 'Rescanner le portefeuille', scanning: 'Analyse…', language: 'Langue',
- offlineBanner: 'Réseau inaccessible — mode hors ligne. Importez un instantané dans Réglages pour charger les pièces.', retry: 'Réessayer',
- copied: 'Copié dans le presse-papiers', snapshotExported: 'Instantané exporté', importedNCoins: '{n} pièce(s) importée(s)',
- unmatchedSuffix: ' · {n} adresse(s) hors de ce portefeuille', importFailed: 'Échec de l’import : {msg}',
- copy: 'Copier', switchUnit: 'Basculer BTC / sats', footerMadeBy: 'fait par', footerSourceOn: 'code source sur',
-});
-
-def('de', {
- passphrase: "Passphrase",
- howItWorks: "So funktioniert es",
- installApp: "App installieren",
- hiwBasicsTitle: "Die Grundlagen",
- hiwBasics1: "Wenn du eine Wallet erstellst, erzeugt die Seite zwölf zufällige Wörter. Diese Wörter sind der Schlüssel zu deiner Wallet. Wer sie besitzt, kann die Coins ausgeben. Schreibe sie deshalb auf Papier und bewahre sie an einem Ort auf, zu dem nur du Zugang hast.",
- hiwBasics2: "Wenn du die zwölf Wörter verlierst und kein Backup hast, sind die Coins endgültig verloren. Es gibt keinen Zurücksetzen-Link und niemanden, den du anrufen kannst. Sichere sie daher, bevor du Geld einzahlst.",
- hiwBasics3: "Es gibt keinen Server und kein Konto. Die gesamte App ist eine einzige Seite, die in deinem Browser läuft. Niemand verwahrt deine Coins und kein Server bekommt jemals deine Schlüssel zu sehen. Um deinen Kontostand und deinen Verlauf anzuzeigen, liest sie von einem öffentlichen Block-Explorer (standardmäßig mempool.space oder deinem eigenen Node, falls du in den Einstellungen einen festlegst).",
- hiwBasics4: "Du kannst diese Seite sogar speichern und ganz ohne Internet direkt von deinem Computer aus öffnen. Sie funktioniert auch offline weiter.",
- hiwBasics5: "Sie folgt den üblichen Bitcoin-Standards (eine 12-Wörter-Phrase nach BIP39 und native SegWit-Schlüssel nach BIP84). Sollte diese Seite jemals verschwinden, kannst du dieselbe Phrase in Sparrow, Electrum oder einer beliebigen anderen Standard-Wallet wiederherstellen, und deine Coins sind genau dort.",
- hiwTribute: "Der Name Hal Wallet ist eine Hommage an den legendären Cypherpunk und Bitcoin-Pionier Hal Finney (1956–2014).",
- signExport: "Signieren & (anderswo senden)",
- scanQr: "QR scannen",
- scanHint: "Richte die Kamera auf einen QR-Code",
- scanNoCamera: "Zugriff auf die Kamera nicht möglich.",
- scanNoDecoder: "Das QR-Scannen benötigt beim ersten Mal eine Verbindung.",
- scanUnrecognized: "Aus diesem QR konnte keine Bitcoin-Adresse gelesen werden.",
- broadcastScanned: "Transaktion senden?",
- broadcastNow: "Senden",
- scanOffline: "Du bist offline — stelle die Verbindung wieder her, um diese Transaktion zu senden.",
- loadingHistory: "Transaktionen werden geladen…",
- explorer: "Block-Explorer",
- explorerDesc: "Der Server, den diese Wallet für Kontostände und Verlauf abfragt. Richte ihn auf deinen eigenen Node aus, um maximale Privatsphäre zu erreichen.",
- explorerUrl: "Server-URL",
- explorerUrlHint: "Esplora-/electrs-REST-Basis, z. B. https://mempool.space/api",
- deviceSync: "Geräteabgleich",
- deviceSyncDesc: "Halte diese Wallet über deine Geräte hinweg synchron, indem du eine verschlüsselte Kopie auf einem Nostr-Relay speicherst — nur ein Gerät mit deinem Seed kann sie lesen. Schalte ihn aus, um alles auf diesem Gerät zu behalten.",
- syncAcross: "Über Geräte synchronisieren",
- syncOn: "An",
- syncOff: "Aus",
- relaysLabel: "Relays",
- relaysHint: "Eine wss://-URL pro Zeile.",
- home: 'Start', logout: 'Abmelden',
- createNew: 'Neu erstellen', importExisting: 'Importieren',
- genIntro: 'Erzeuge eine neue Seed-Phrase aus 12 Wörtern. Schreibe sie auf. Sie ist die einzige Möglichkeit, dieses Wallet wiederherzustellen.',
- generateSeed: 'Seed-Phrase erzeugen', writeDownWarn: '⚠ Schreibe diese 12 Wörter in der richtigen Reihenfolge auf Papier. Wer sie hat, kann deine Coins ausgeben.',
- copyPhrase: 'Phrase kopieren', regenerate: 'Neu erzeugen', verifyBackup: 'Backup prüfen', skipVerification: 'Prüfung überspringen',
- confirmBackupIntro: 'Bestätige dein Backup, indem du die abgefragten Wörter eingibst.', wordN: 'Wort #{n}',
- reenterPassphrase: 'Passphrase erneut eingeben', back: '← Zurück', openWallet: 'Wallet öffnen',
- wordsMismatch: 'Diese Wörter passen nicht zu deiner Phrase. Prüfe dein Backup.',
- passphraseMismatch: 'Diese Passphrase stimmt nicht mit der eingegebenen überein.',
- seedPhrase: 'Seed-Phrase', seedPlaceholder: 'gib deine Wörter durch Leerzeichen getrennt ein',
- optionalPassphrase: 'Optionale Passphrase', leaveBlank: 'leer lassen, falls nicht genutzt', show: 'Zeigen', hide: 'Verbergen',
- invalidSeed: 'Ungültige Seed-Phrase — prüfe Schreibweise und Reihenfolge.',
- keysNote: 'Schlüssel verlassen nie deinen Browser. Funktioniert offline. Speichere diese Seite und öffne sie lokal.',
- balance: 'Guthaben', pending: 'Ausstehend',
- tabReceive: 'Empfangen', tabSend: 'Senden', tabHistory: 'Verlauf', tabSettings: 'Einstellungen',
- copyAddress: 'Adresse kopieren', paymentReceived: 'Zahlung erhalten!', tapToProceed: 'Tippe irgendwo, um fortzufahren',
- recipient: 'Empfänger', recipients: 'Empfänger', max: 'Max', feeRate: 'Gebühr',
- feeEconomy: 'Sparsam', feeNormal: 'Normal', feePriority: 'Priorität', feeCustom: 'Benutzerdef.',
- selectedRate: 'Gewählte Gebühr: {n} sat/vB', coinSelection: 'Coin-Auswahl', automatic: 'Automatisch', manual: 'Manuell',
- noCoins: 'Keine Coins verfügbar.', nSelected: '{n} ausgewählt', addRecipient: '+ Empfänger hinzufügen',
- reviewTx: 'Transaktion prüfen', remove: 'Entfernen',
- enterRecipientAddr: 'Gib eine Empfängeradresse ein.', enterAddrForN: 'Gib eine Adresse für Empfänger {n} ein.',
- enterValidAmtForN: 'Gib einen gültigen Betrag für Empfänger {n} ein.', selectCoin: 'Wähle mindestens einen Coin zum Ausgeben.',
- networkFee: 'Netzwerkgebühr', offlineSignNote: 'Offline: jetzt signieren und die Transaktion von einem Online-Gerät senden.',
- signBroadcast: 'Signieren & senden', signTx: 'Transaktion signieren', broadcastFailed: 'Senden fehlgeschlagen: {msg}', signingFailed: 'Signieren fehlgeschlagen: {msg}',
- done: 'Fertig', txSignedNote: '✓ Transaktion signiert. Sende den Code unten von einem Online-Gerät (z. B. mempool.space → Broadcast).',
- transactionId: 'Transaktions-ID', signedTxRaw: 'Signierte Transaktion (Code)', copyHex: 'Code kopieren', downloadLabel: 'Herunterladen',
- showQrAirgap: 'QR anzeigen (für Offline-Übertragung)', txBroadcast: '✓ Transaktion gesendet!', copyTxid: 'Transaktions-ID kopieren', viewOnMempool: 'Auf mempool.space ansehen ↗',
- noTxYet: 'Noch keine Transaktionen.', received: 'Empfangen', sent: 'Gesendet', pendingTag: '⏳ ausstehend', awaitingConfirmation: 'wartet auf Bestätigung',
- feeShort: 'Gebühr {x}', historyOffline: 'Verlauf ist offline nicht verfügbar.',
- status: 'Status', confirmed: 'Bestätigt', confirmedTag: 'bestätigt', pendingInMempool: 'Ausstehend (im Mempool)', block: 'Block', date: 'Datum',
- copyId: 'ID kopieren', backToHistory: '← Zurück zum Verlauf',
- recoveryPhrase: 'Wiederherstellungsphrase', recoveryWarn: '⚠ Wer diese Wörter sieht, kann deine Coins stehlen. Achte darauf, dass niemand zusieht, bevor du sie anzeigst.',
- bip39Passphrase: 'Passphrase', copyPassphrase: 'Passphrase kopieren', revealRecovery: 'Wiederherstellungsphrase anzeigen',
- offlineTransfer: 'Offline-Übertragung', offlineTransferDesc: 'Exportiere deine Coins auf einem Online-Gerät und importiere die Datei auf einem Offline-Gerät (mit diesem Wallet + Seed), um ohne Internet zu signieren.',
- exportSnapshot: '⤓ Snapshot exportieren', importSnapshot: 'Snapshot importieren…', rescan: 'Neu scannen',
- rescanDesc: 'Deine aktuelle Adresse aktualisiert sich automatisch. Scanne nur neu, wenn eine Zahlung an eine alte (wiederverwendete) Adresse ging und nicht erscheint.',
- rescanWallet: 'Wallet neu scannen', scanning: 'Scanne…', language: 'Sprache',
- offlineBanner: 'Netzwerk nicht erreichbar — offline. Importiere einen Snapshot unter Einstellungen, um Coins zu laden.', retry: 'Erneut',
- copied: 'In Zwischenablage kopiert', snapshotExported: 'Snapshot exportiert', importedNCoins: '{n} Coin(s) importiert',
- unmatchedSuffix: ' · {n} Adresse(n) nicht in diesem Wallet', importFailed: 'Import fehlgeschlagen: {msg}',
- copy: 'Kopieren', switchUnit: 'BTC / sats wechseln', footerMadeBy: 'gemacht von', footerSourceOn: 'Quellcode auf',
-});
-
-def('pt', {
- passphrase: "Senha",
- howItWorks: "Como funciona",
- installApp: "Instalar aplicativo",
- hiwBasicsTitle: "O básico",
- hiwBasics1: "Quando você cria uma carteira, a página gera doze palavras aleatórias. Essas palavras são a chave da sua carteira. Qualquer pessoa que as tiver pode gastar as moedas, então anote-as no papel e guarde-as em um lugar que só você possa acessar.",
- hiwBasics2: "Se você perder as doze palavras e não tiver um backup, as moedas estarão perdidas para sempre. Não há link de redefinição nem ninguém para ligar, então faça o backup antes de colocar dinheiro.",
- hiwBasics3: "Não há servidor nem conta. O aplicativo inteiro é uma única página que roda no seu navegador, então ninguém guarda suas moedas e nada em um servidor jamais vê suas chaves. Para mostrar seu saldo e histórico, ele consulta um explorador de blocos público (mempool.space por padrão, ou seu próprio nó, se você configurar um nas Configurações).",
- hiwBasics4: "Você pode até salvar esta página e abri-la diretamente do seu computador sem internet alguma. Ela continua funcionando offline.",
- hiwBasics5: "Ela segue os padrões usuais do Bitcoin (uma frase BIP39 de 12 palavras e chaves BIP84 native SegWit), então, se este site algum dia desaparecer, você pode restaurar a mesma frase no Sparrow, Electrum ou qualquer outra carteira padrão e suas moedas estarão lá.",
- hiwTribute: "O nome Hal Wallet é uma homenagem ao lendário cypherpunk e pioneiro do Bitcoin, Hal Finney (1956–2014).",
- signExport: "Assinar e (transmitir em outro lugar)",
- scanQr: "Ler QR",
- scanHint: "Aponte a câmera para um código QR",
- scanNoCamera: "Não foi possível acessar a câmera.",
- scanNoDecoder: "A leitura de QR precisa de conexão na primeira vez que é usada.",
- scanUnrecognized: "Não foi possível ler um endereço Bitcoin desse QR.",
- broadcastScanned: "Transmitir transação?",
- broadcastNow: "Transmitir",
- scanOffline: "Você está offline — reconecte-se para transmitir esta transação.",
- loadingHistory: "Carregando transações…",
- explorer: "Explorador de blocos",
- explorerDesc: "O servidor que esta carteira consulta para saldos e histórico. Aponte-o para seu próprio nó para máxima privacidade.",
- explorerUrl: "URL do servidor",
- explorerUrlHint: "Base REST do Esplora / electrs, por exemplo https://mempool.space/api",
- deviceSync: "Sincronização de dispositivos",
- deviceSyncDesc: "Mantenha esta carteira sincronizada entre seus dispositivos armazenando uma cópia criptografada em um relay Nostr — somente um dispositivo com sua seed pode lê-la. Desative para manter tudo neste dispositivo.",
- syncAcross: "Sincronizar entre dispositivos",
- syncOn: "Ativado",
- syncOff: "Desativado",
- relaysLabel: "Relays",
- relaysHint: "Um URL wss:// por linha.",
- home: 'Início', logout: 'Sair',
- createNew: 'Criar nova', importExisting: 'Importar existente',
- genIntro: 'Gere uma nova frase semente de 12 palavras. Anote-a. É a única forma de recuperar esta carteira.',
- generateSeed: 'Gerar frase semente', writeDownWarn: '⚠ Anote estas 12 palavras no papel, em ordem. Quem as tiver pode gastar suas moedas.',
- copyPhrase: 'Copiar frase', regenerate: 'Gerar novamente', verifyBackup: 'Verificar backup', skipVerification: 'Pular verificação',
- confirmBackupIntro: 'Confirme seu backup digitando as palavras solicitadas.', wordN: 'Palavra nº {n}',
- reenterPassphrase: 'Digite a senha novamente', back: '← Voltar', openWallet: 'Abrir carteira',
- wordsMismatch: 'Essas palavras não correspondem à sua frase. Verifique seu backup.',
- passphraseMismatch: 'Essa senha não corresponde à que você digitou.',
- seedPhrase: 'Frase semente', seedPlaceholder: 'digite suas palavras separadas por espaços',
- optionalPassphrase: 'Senha opcional', leaveBlank: 'deixe em branco se não usar', show: 'Mostrar', hide: 'Ocultar',
- invalidSeed: 'Frase semente inválida — verifique a grafia e a ordem das palavras.',
- keysNote: 'As chaves nunca saem do seu navegador. Funciona offline. Salve esta página e abra-a localmente.',
- balance: 'Saldo', pending: 'Pendente',
- tabReceive: 'Receber', tabSend: 'Enviar', tabHistory: 'Histórico', tabSettings: 'Ajustes',
- copyAddress: 'Copiar endereço', paymentReceived: 'Pagamento recebido!', tapToProceed: 'Toque em qualquer lugar para continuar',
- recipient: 'Destinatário', recipients: 'Destinatários', max: 'Máx', feeRate: 'Taxa',
- feeEconomy: 'Econômica', feeNormal: 'Normal', feePriority: 'Prioridade', feeCustom: 'Personalizada',
- selectedRate: 'Taxa escolhida: {n} sat/vB', coinSelection: 'Seleção de moedas', automatic: 'Automática', manual: 'Manual',
- noCoins: 'Nenhuma moeda disponível.', nSelected: '{n} selecionada(s)', addRecipient: '+ Adicionar destinatário',
- reviewTx: 'Revisar transação', remove: 'Remover',
- enterRecipientAddr: 'Digite um endereço de destino.', enterAddrForN: 'Digite um endereço para o destinatário {n}.',
- enterValidAmtForN: 'Digite um valor válido para o destinatário {n}.', selectCoin: 'Selecione ao menos uma moeda para gastar.',
- networkFee: 'Taxa de rede', offlineSignNote: 'Offline: assine agora e transmita a transação de um dispositivo conectado.',
- signBroadcast: 'Assinar e transmitir', signTx: 'Assinar transação', broadcastFailed: 'Falha ao transmitir: {msg}', signingFailed: 'Falha ao assinar: {msg}',
- done: 'Concluído', txSignedNote: '✓ Transação assinada. Transmita o código abaixo de um dispositivo conectado (ex.: mempool.space → Broadcast).',
- transactionId: 'ID da transação', signedTxRaw: 'Transação assinada (código)', copyHex: 'Copiar código', downloadLabel: 'Baixar',
- showQrAirgap: 'Mostrar QR (transferência offline)', txBroadcast: '✓ Transação transmitida!', copyTxid: 'Copiar ID da transação', viewOnMempool: 'Ver no mempool.space ↗',
- noTxYet: 'Nenhuma transação ainda.', received: 'Recebido', sent: 'Enviado', pendingTag: '⏳ pendente', awaitingConfirmation: 'aguardando confirmação',
- feeShort: 'taxa {x}', historyOffline: 'O histórico não está disponível offline.',
- status: 'Status', confirmed: 'Confirmada', confirmedTag: 'confirmada', pendingInMempool: 'Pendente (no mempool)', block: 'Bloco', date: 'Data',
- copyId: 'Copiar ID', backToHistory: '← Voltar ao histórico',
- recoveryPhrase: 'Frase de recuperação', recoveryWarn: '⚠ Quem vir estas palavras pode roubar seus fundos. Certifique-se de que ninguém esteja olhando antes de revelá-las.',
- bip39Passphrase: 'Senha', copyPassphrase: 'Copiar senha', revealRecovery: 'Revelar frase de recuperação',
- offlineTransfer: 'Transferência offline', offlineTransferDesc: 'Exporte suas moedas em um dispositivo conectado, depois importe o arquivo em um offline (com esta carteira + semente) para assinar sem internet.',
- exportSnapshot: '⤓ Exportar snapshot', importSnapshot: 'Importar snapshot…', rescan: 'Reescanear',
- rescanDesc: 'Seu endereço atual atualiza automaticamente. Reescaneie apenas se um pagamento foi enviado a um endereço antigo (reutilizado) e não aparece.',
- rescanWallet: 'Reescanear carteira', scanning: 'Escaneando…', language: 'Idioma',
- offlineBanner: 'Sem acesso à rede — trabalhando offline. Importe um snapshot em Ajustes para carregar moedas.', retry: 'Tentar de novo',
- copied: 'Copiado', snapshotExported: 'Snapshot exportado', importedNCoins: '{n} moeda(s) importada(s)',
- unmatchedSuffix: ' · {n} endereço(s) fora desta carteira', importFailed: 'Falha ao importar: {msg}',
- copy: 'Copiar', switchUnit: 'Alternar BTC / sats', footerMadeBy: 'feito por', footerSourceOn: 'código disponível no',
-});
-
-def('ru', {
- passphrase: "Парольная фраза",
- howItWorks: "Как это работает",
- installApp: "Установить приложение",
- hiwBasicsTitle: "Основы",
- hiwBasics1: "Когда вы создаёте кошелёк, страница генерирует двенадцать случайных слов. Эти слова — ключ к вашему кошельку. Любой, у кого они есть, может потратить монеты, поэтому запишите их на бумаге и храните там, куда можете добраться только вы.",
- hiwBasics2: "Если вы потеряете двенадцать слов и у вас нет резервной копии, монеты пропадут навсегда. Нет ссылки для сброса и некому позвонить, поэтому сделайте резервную копию, прежде чем класть деньги.",
- hiwBasics3: "Здесь нет сервера и нет учётной записи. Всё приложение — это одна страница, работающая в вашем браузере, поэтому никто не хранит ваши монеты и ничто на сервере никогда не видит ваши ключи. Чтобы показать баланс и историю, оно читает данные из публичного блок-эксплорера (по умолчанию mempool.space или вашего собственного узла, если вы укажете его в Настройках).",
- hiwBasics4: "Вы даже можете сохранить эту страницу и открыть её прямо с компьютера вообще без интернета. Она продолжает работать офлайн.",
- hiwBasics5: "Оно следует обычным стандартам Bitcoin (фраза из 12 слов BIP39 и нативные SegWit-ключи BIP84), поэтому, если этот сайт когда-нибудь исчезнет, вы сможете восстановить ту же фразу в Sparrow, Electrum или любом другом стандартном кошельке, и ваши монеты будут на месте.",
- hiwTribute: "Название Hal Wallet — это дань уважения легендарному шифропанку и пионеру Bitcoin, Hal Finney (1956–2014).",
- signExport: "Подписать и (передать в сеть в другом месте)",
- scanQr: "Сканировать QR",
- scanHint: "Наведите камеру на QR-код",
- scanNoCamera: "Не удалось получить доступ к камере.",
- scanNoDecoder: "Для сканирования QR при первом использовании нужно подключение.",
- scanUnrecognized: "Не удалось распознать адрес Bitcoin в этом QR.",
- broadcastScanned: "Передать транзакцию в сеть?",
- broadcastNow: "Передать в сеть",
- scanOffline: "Вы офлайн — переподключитесь, чтобы передать эту транзакцию в сеть.",
- loadingHistory: "Загрузка транзакций…",
- explorer: "Блок-эксплорер",
- explorerDesc: "Сервер, к которому этот кошелёк обращается за балансами и историей. Укажите свой собственный узел для максимальной приватности.",
- explorerUrl: "URL сервера",
- explorerUrlHint: "Базовый REST-адрес Esplora / electrs, например https://mempool.space/api",
- deviceSync: "Синхронизация устройств",
- deviceSyncDesc: "Держите этот кошелёк синхронизированным между вашими устройствами, храня зашифрованную копию на релее Nostr — прочитать её может только устройство с вашим сидом. Отключите, чтобы хранить всё на этом устройстве.",
- syncAcross: "Синхронизация между устройствами",
- syncOn: "Вкл",
- syncOff: "Выкл",
- relaysLabel: "Релеи",
- relaysHint: "Один URL wss:// на строку.",
- home: 'Главная', logout: 'Выйти',
- createNew: 'Создать', importExisting: 'Импортировать',
- genIntro: 'Сгенерируйте новую сид-фразу из 12 слов. Запишите её. Это единственный способ восстановить кошелёк.',
- generateSeed: 'Сгенерировать фразу', writeDownWarn: '⚠ Запишите эти 12 слов на бумаге, по порядку. Любой, у кого они есть, сможет потратить ваши монеты.',
- copyPhrase: 'Копировать фразу', regenerate: 'Сгенерировать заново', verifyBackup: 'Проверить копию', skipVerification: 'Пропустить проверку',
- confirmBackupIntro: 'Подтвердите копию, введя запрошенные слова.', wordN: 'Слово №{n}',
- reenterPassphrase: 'Повторите пароль-фразу', back: '← Назад', openWallet: 'Открыть кошелёк',
- wordsMismatch: 'Эти слова не совпадают с вашей фразой. Проверьте копию.',
- passphraseMismatch: 'Эта пароль-фраза не совпадает с введённой.',
- seedPhrase: 'Сид-фраза', seedPlaceholder: 'введите слова через пробел',
- optionalPassphrase: 'Пароль-фраза (необязательно)', leaveBlank: 'оставьте пустым, если не используется', show: 'Показать', hide: 'Скрыть',
- invalidSeed: 'Неверная сид-фраза — проверьте написание и порядок слов.',
- keysNote: 'Ключи не покидают браузер. Работает офлайн. Сохраните эту страницу и откройте локально.',
- balance: 'Баланс', pending: 'В ожидании',
- tabReceive: 'Получить', tabSend: 'Отправить', tabHistory: 'История', tabSettings: 'Настройки',
- copyAddress: 'Копировать адрес', paymentReceived: 'Платёж получен!', tapToProceed: 'Нажмите в любом месте, чтобы продолжить',
- recipient: 'Получатель', recipients: 'Получатели', max: 'Макс', feeRate: 'Комиссия',
- feeEconomy: 'Эконом', feeNormal: 'Обычная', feePriority: 'Приоритет', feeCustom: 'Своя',
- selectedRate: 'Выбрано: {n} sat/vB', coinSelection: 'Выбор монет', automatic: 'Авто', manual: 'Вручную',
- noCoins: 'Нет доступных монет.', nSelected: 'выбрано: {n}', addRecipient: '+ Добавить получателя',
- reviewTx: 'Проверить транзакцию', remove: 'Удалить',
- enterRecipientAddr: 'Введите адрес получателя.', enterAddrForN: 'Введите адрес для получателя {n}.',
- enterValidAmtForN: 'Введите корректную сумму для получателя {n}.', selectCoin: 'Выберите хотя бы одну монету.',
- networkFee: 'Комиссия сети', offlineSignNote: 'Офлайн: подпишите сейчас, затем отправьте транзакцию с устройства с интернетом.',
- signBroadcast: 'Подписать и отправить', signTx: 'Подписать транзакцию', broadcastFailed: 'Ошибка отправки: {msg}', signingFailed: 'Ошибка подписи: {msg}',
- done: 'Готово', txSignedNote: '✓ Транзакция подписана. Отправьте код ниже с устройства с интернетом (напр. mempool.space → Broadcast).',
- transactionId: 'ID транзакции', signedTxRaw: 'Подписанная транзакция (код)', copyHex: 'Копировать код', downloadLabel: 'Скачать',
- showQrAirgap: 'Показать QR (для офлайн-передачи)', txBroadcast: '✓ Транзакция отправлена!', copyTxid: 'Копировать ID транзакции', viewOnMempool: 'Открыть на mempool.space ↗',
- noTxYet: 'Транзакций пока нет.', received: 'Получено', sent: 'Отправлено', pendingTag: '⏳ в ожидании', awaitingConfirmation: 'ожидает подтверждения',
- feeShort: 'комиссия {x}', historyOffline: 'История недоступна офлайн.',
- status: 'Статус', confirmed: 'Подтверждена', confirmedTag: 'подтверждена', pendingInMempool: 'В ожидании (в мемпуле)', block: 'Блок', date: 'Дата',
- copyId: 'Копировать ID', backToHistory: '← К истории',
- recoveryPhrase: 'Фраза восстановления', recoveryWarn: '⚠ Любой, кто увидит эти слова, может украсть ваши средства. Убедитесь, что никто не смотрит.',
- bip39Passphrase: 'Пароль-фраза', copyPassphrase: 'Копировать пароль-фразу', revealRecovery: 'Показать фразу восстановления',
- offlineTransfer: 'Офлайн-передача', offlineTransferDesc: 'Экспортируйте монеты на устройстве с интернетом, затем импортируйте файл на офлайн-устройстве (с этим кошельком и сид-фразой), чтобы подписать без интернета.',
- exportSnapshot: '⤓ Экспорт снимка', importSnapshot: 'Импорт снимка…', rescan: 'Пересканировать',
- rescanDesc: 'Текущий адрес обновляется автоматически. Пересканируйте, только если платёж пришёл на старый (повторно использованный) адрес и не отображается.',
- rescanWallet: 'Пересканировать кошелёк', scanning: 'Сканирование…', language: 'Язык',
- offlineBanner: 'Нет сети — работа офлайн. Импортируйте снимок в Настройках, чтобы загрузить монеты.', retry: 'Повторить',
- copied: 'Скопировано', snapshotExported: 'Снимок экспортирован', importedNCoins: 'Импортировано монет: {n}',
- unmatchedSuffix: ' · {n} адрес(ов) не из этого кошелька', importFailed: 'Ошибка импорта: {msg}',
- copy: 'Копировать', switchUnit: 'Переключить BTC / sats', footerMadeBy: 'сделано —', footerSourceOn: 'исходный код на',
-});
-
-def('zh', {
- passphrase: "口令",
- howItWorks: "工作原理",
- installApp: "安装应用",
- hiwBasicsTitle: "基础知识",
- hiwBasics1: "创建钱包时,页面会生成十二个随机单词。这些单词就是你钱包的钥匙。任何拥有它们的人都能花掉你的币,所以请把它们抄写在纸上,妥善保存在只有你能拿到的地方。",
- hiwBasics2: "如果你丢失了这十二个单词且没有备份,币就永远找不回来了。没有重置链接,也没有人可以求助,所以在存入资金前请先备份好它们。",
- hiwBasics3: "这里没有服务器,也没有账户。整个应用就是一个在你浏览器中运行的单一页面,因此没有人保管你的币,服务器上也不会有任何东西看到你的密钥。为了显示你的余额和历史记录,它会从公共区块浏览器读取数据(默认使用 mempool.space,或者你在设置中配置的自己的节点)。",
- hiwBasics4: "你甚至可以保存此页面,在完全没有网络的情况下直接从电脑打开它。它在离线状态下依然有效。",
- hiwBasics5: "它遵循通用的比特币标准(12 个单词的 BIP39 助记词和 BIP84 原生 SegWit 密钥),所以即使本站有一天消失了,你也可以在 Sparrow、Electrum 或任何其他标准钱包中恢复同样的助记词,你的币就在那里。",
- hiwTribute: "Hal Wallet 这个名字是为了致敬传奇密码朋克和比特币先驱 Hal Finney(1956–2014)。",
- signExport: "签名并(在别处广播)",
- scanQr: "扫描二维码",
- scanHint: "将摄像头对准 QR 码",
- scanNoCamera: "无法访问摄像头。",
- scanNoDecoder: "QR 扫描首次使用时需要联网。",
- scanUnrecognized: "无法从该 QR 码中读取比特币地址。",
- broadcastScanned: "广播交易?",
- broadcastNow: "广播",
- scanOffline: "你已离线——请重新连接以广播此交易。",
- loadingHistory: "正在加载交易…",
- explorer: "区块浏览器",
- explorerDesc: "本钱包用于查询余额和历史记录的服务器。将其指向你自己的节点以获得最高的隐私性。",
- explorerUrl: "服务器 URL",
- explorerUrlHint: "Esplora / electrs REST 基础地址,例如 https://mempool.space/api",
- deviceSync: "设备同步",
- deviceSyncDesc: "通过在 Nostr 中继上存储加密副本,让此钱包在你的各设备间保持同步——只有拥有你种子的设备才能读取它。关闭它可将所有内容仅保留在本设备上。",
- syncAcross: "跨设备同步",
- syncOn: "开",
- syncOff: "关",
- relaysLabel: "中继",
- relaysHint: "每行一个 wss:// URL。",
- home: '首页', logout: '退出',
- createNew: '新建', importExisting: '导入已有',
- genIntro: '生成一组新的 12 词助记词。请抄写下来。这是恢复钱包的唯一方式。',
- generateSeed: '生成助记词', writeDownWarn: '⚠ 请按顺序将这 12 个词抄在纸上。任何拿到它们的人都能花掉你的币。',
- copyPhrase: '复制助记词', regenerate: '重新生成', verifyBackup: '验证备份', skipVerification: '跳过验证',
- confirmBackupIntro: '请输入指定的词以确认你的备份。', wordN: '第 {n} 个词',
- reenterPassphrase: '再次输入密码短语', back: '← 返回', openWallet: '打开钱包',
- wordsMismatch: '这些词与你的助记词不符。请检查备份。',
- passphraseMismatch: '该密码短语与你输入的不符。',
- seedPhrase: '助记词', seedPlaceholder: '输入助记词,用空格分隔',
- optionalPassphrase: '可选密码短语', leaveBlank: '不使用请留空', show: '显示', hide: '隐藏',
- invalidSeed: '助记词无效——请检查拼写和顺序。',
- keysNote: '密钥永不离开你的浏览器。可完全离线使用。保存此页面并从本地打开。',
- balance: '余额', pending: '待确认',
- tabReceive: '接收', tabSend: '发送', tabHistory: '历史', tabSettings: '设置',
- copyAddress: '复制地址', paymentReceived: '已收到付款!', tapToProceed: '点击任意处继续',
- recipient: '收款人', recipients: '收款人', max: '全部', feeRate: '费率',
- feeEconomy: '经济', feeNormal: '普通', feePriority: '优先', feeCustom: '自定义',
- selectedRate: '所选费率:{n} sat/vB', coinSelection: '选币', automatic: '自动', manual: '手动',
- noCoins: '没有可用的币。', nSelected: '已选 {n}', addRecipient: '+ 添加收款人',
- reviewTx: '检查交易', remove: '移除',
- enterRecipientAddr: '请输入收款地址。', enterAddrForN: '请输入收款人 {n} 的地址。',
- enterValidAmtForN: '请输入收款人 {n} 的有效金额。', selectCoin: '请至少选择一枚币来花费。',
- networkFee: '网络手续费', offlineSignNote: '离线:现在签名,然后在联网设备上广播该交易。',
- signBroadcast: '签名并广播', signTx: '签名交易', broadcastFailed: '广播失败:{msg}', signingFailed: '签名失败:{msg}',
- done: '完成', txSignedNote: '✓ 交易已签名。请在任意联网设备上广播下方的代码(例如 mempool.space → Broadcast)。',
- transactionId: '交易 ID', signedTxRaw: '已签名交易(代码)', copyHex: '复制代码', downloadLabel: '下载',
- showQrAirgap: '显示二维码(用于离线传输)', txBroadcast: '✓ 交易已广播!', copyTxid: '复制交易 ID', viewOnMempool: '在 mempool.space 查看 ↗',
- noTxYet: '暂无交易。', received: '已收到', sent: '已发送', pendingTag: '⏳ 待确认', awaitingConfirmation: '等待确认',
- feeShort: '手续费 {x}', historyOffline: '离线模式下无法查看历史。',
- status: '状态', confirmed: '已确认', confirmedTag: '已确认', pendingInMempool: '待确认(在内存池)', block: '区块', date: '日期',
- copyId: '复制 ID', backToHistory: '← 返回历史',
- recoveryPhrase: '恢复助记词', recoveryWarn: '⚠ 任何看到这些词的人都能盗走你的资金。显示前请确保无人窥视。',
- bip39Passphrase: '密码短语', copyPassphrase: '复制密码短语', revealRecovery: '显示恢复助记词',
- offlineTransfer: '离线传输', offlineTransferDesc: '在联网设备上导出你的币,然后在离线设备上(使用此钱包和助记词)导入文件,即可离线签名。',
- exportSnapshot: '⤓ 导出快照', importSnapshot: '导入快照…', rescan: '重新扫描',
- rescanDesc: '当前地址会自动更新。仅当付款发到旧(重复使用)地址且未显示时才需重新扫描。',
- rescanWallet: '重新扫描钱包', scanning: '扫描中…', language: '语言',
- offlineBanner: '无法连接网络——离线工作。请在“设置”中导入快照以加载币。', retry: '重试',
- copied: '已复制', snapshotExported: '快照已导出', importedNCoins: '已导入 {n} 枚币',
- unmatchedSuffix: ' · {n} 个地址不属于此钱包', importFailed: '导入失败:{msg}',
- copy: '复制', switchUnit: '切换 BTC / sats', footerMadeBy: '制作者', footerSourceOn: '源代码见',
-});
-
-def('ja', {
- passphrase: "パスフレーズ",
- howItWorks: "仕組み",
- installApp: "アプリをインストール",
- hiwBasicsTitle: "基本",
- hiwBasics1: "ウォレットを作成すると、このページがランダムな12個の単語を生成します。これらの単語があなたのウォレットの鍵です。これを持っている人は誰でもコインを使えてしまうので、紙に書き留めて、あなただけがアクセスできる場所に保管してください。",
- hiwBasics2: "12個の単語を失い、バックアップもない場合、コインは永久に取り戻せません。リセット用のリンクも連絡できる相手もいないので、お金を入れる前にバックアップしておきましょう。",
- hiwBasics3: "サーバーもアカウントもありません。アプリ全体がブラウザで動作する単一のページなので、誰もあなたのコインを預かることはなく、サーバー上の何かがあなたの鍵を見ることもありません。残高と履歴を表示するために、公開ブロックエクスプローラー(既定では mempool.space、設定で指定すればご自身のノード)から読み込みます。",
- hiwBasics4: "このページを保存して、インターネットがまったくない状態でもコンピューターから直接開くこともできます。オフラインでも動作し続けます。",
- hiwBasics5: "通常のBitcoin標準(12語のBIP39フレーズとBIP84ネイティブSegWit鍵)に従っているので、万が一このサイトがなくなっても、同じフレーズをSparrow、Electrum、その他の標準的なウォレットで復元でき、コインはそこにそのまま残っています。",
- hiwTribute: "Hal Wallet という名前は、伝説的なサイファーパンクであり Bitcoin の先駆者である Hal Finney(1956–2014)への敬意を込めたものです。",
- signExport: "署名する(別の場所でブロードキャスト)",
- scanQr: "QRをスキャン",
- scanHint: "カメラをQRコードに向けてください",
- scanNoCamera: "カメラにアクセスできませんでした。",
- scanNoDecoder: "QRスキャンは初回の使用時に接続が必要です。",
- scanUnrecognized: "そのQRからBitcoinアドレスを読み取れませんでした。",
- broadcastScanned: "トランザクションをブロードキャストしますか?",
- broadcastNow: "ブロードキャスト",
- scanOffline: "オフラインです — このトランザクションをブロードキャストするには再接続してください。",
- loadingHistory: "トランザクションを読み込み中…",
- explorer: "ブロックエクスプローラー",
- explorerDesc: "このウォレットが残高と履歴を照会するサーバーです。プライバシーを最大限に高めるには、ご自身のノードを指定してください。",
- explorerUrl: "サーバーURL",
- explorerUrlHint: "Esplora / electrs REST のベース。例: https://mempool.space/api",
- deviceSync: "デバイス同期",
- deviceSyncDesc: "暗号化したコピーを Nostr リレーに保存することで、このウォレットを複数のデバイス間で同期し続けます — シードを持つデバイスだけが読み取れます。すべてをこのデバイス内に留めておくにはオフにしてください。",
- syncAcross: "デバイス間で同期",
- syncOn: "オン",
- syncOff: "オフ",
- relaysLabel: "リレー",
- relaysHint: "1行につき wss:// URL を1つ。",
- home: 'ホーム', logout: 'ログアウト',
- createNew: '新規作成', importExisting: 'インポート',
- genIntro: '新しい12単語のシードフレーズを生成します。書き留めてください。これがこのウォレットを復元する唯一の方法です。',
- generateSeed: 'シードフレーズを生成', writeDownWarn: '⚠ この12単語を順番どおり紙に書き留めてください。これを持つ人は誰でもあなたのコインを使えます。',
- copyPhrase: 'フレーズをコピー', regenerate: '再生成', verifyBackup: 'バックアップを確認', skipVerification: '確認をスキップ',
- confirmBackupIntro: '指定された単語を入力してバックアップを確認してください。', wordN: '{n} 番目の単語',
- reenterPassphrase: 'パスフレーズを再入力', back: '← 戻る', openWallet: 'ウォレットを開く',
- wordsMismatch: '単語がフレーズと一致しません。バックアップを確認してください。',
- passphraseMismatch: 'パスフレーズが入力したものと一致しません。',
- seedPhrase: 'シードフレーズ', seedPlaceholder: '単語をスペース区切りで入力',
- optionalPassphrase: '任意のパスフレーズ', leaveBlank: '使わない場合は空欄', show: '表示', hide: '隠す',
- invalidSeed: '無効なシードフレーズ — つづりと順番を確認してください。',
- keysNote: '鍵はブラウザから出ません。完全にオフラインで動作します。このページを保存してローカルで開けます。',
- balance: '残高', pending: '保留中',
- tabReceive: '受取', tabSend: '送金', tabHistory: '履歴', tabSettings: '設定',
- copyAddress: 'アドレスをコピー', paymentReceived: '入金を受け取りました!', tapToProceed: 'どこでもタップして続行',
- recipient: '受取人', recipients: '受取人', max: '全額', feeRate: '手数料',
- feeEconomy: '節約', feeNormal: '通常', feePriority: '優先', feeCustom: 'カスタム',
- selectedRate: '選択中: {n} sat/vB', coinSelection: 'コイン選択', automatic: '自動', manual: '手動',
- noCoins: '利用可能なコインがありません。', nSelected: '{n} 件選択', addRecipient: '+ 受取人を追加',
- reviewTx: 'トランザクションを確認', remove: '削除',
- enterRecipientAddr: '送金先アドレスを入力してください。', enterAddrForN: '受取人 {n} のアドレスを入力してください。',
- enterValidAmtForN: '受取人 {n} の有効な金額を入力してください。', selectCoin: '使用するコインを1つ以上選択してください。',
- networkFee: 'ネットワーク手数料', offlineSignNote: 'オフライン:今すぐ署名し、オンライン端末からトランザクションを送信してください。',
- signBroadcast: '署名して送信', signTx: 'トランザクションに署名', broadcastFailed: '送信に失敗: {msg}', signingFailed: '署名に失敗: {msg}',
- done: '完了', txSignedNote: '✓ 署名済み。下のコードをオンライン端末から送信してください(例: mempool.space → Broadcast)。',
- transactionId: 'トランザクションID', signedTxRaw: '署名済みトランザクション(コード)', copyHex: 'コードをコピー', downloadLabel: 'ダウンロード',
- showQrAirgap: 'QRを表示(オフライン転送用)', txBroadcast: '✓ トランザクションを送信しました!', copyTxid: 'トランザクションIDをコピー', viewOnMempool: 'mempool.spaceで見る ↗',
- noTxYet: 'まだ取引はありません。', received: '受取', sent: '送金', pendingTag: '⏳ 保留中', awaitingConfirmation: '承認待ち',
- feeShort: '手数料 {x}', historyOffline: 'オフラインでは履歴を表示できません。',
- status: '状態', confirmed: '承認済み', confirmedTag: '承認済み', pendingInMempool: '保留中(mempool)', block: 'ブロック', date: '日時',
- copyId: 'IDをコピー', backToHistory: '← 履歴に戻る',
- recoveryPhrase: '復元フレーズ', recoveryWarn: '⚠ この単語を見た人は資金を盗めます。表示前に誰も見ていないことを確認してください。',
- bip39Passphrase: 'パスフレーズ', copyPassphrase: 'パスフレーズをコピー', revealRecovery: '復元フレーズを表示',
- offlineTransfer: 'オフライン転送', offlineTransferDesc: 'オンライン端末でコインをエクスポートし、オフライン端末(このウォレットとシード)でファイルをインポートすれば、インターネットなしで署名できます。',
- exportSnapshot: '⤓ スナップショットを書出', importSnapshot: 'スナップショットを読込…', rescan: '再スキャン',
- rescanDesc: '現在のアドレスは自動更新されます。古い(再利用した)アドレスへの入金が表示されない場合のみ再スキャンしてください。',
- rescanWallet: 'ウォレットを再スキャン', scanning: 'スキャン中…', language: '言語',
- offlineBanner: 'ネットワークに接続できません — オフライン動作中。設定からスナップショットを読み込んでコインを表示できます。', retry: '再試行',
- copied: 'コピーしました', snapshotExported: 'スナップショットを書き出しました', importedNCoins: '{n} 件のコインを読み込みました',
- unmatchedSuffix: ' · このウォレットにない {n} 件のアドレス', importFailed: '読み込みに失敗: {msg}',
- copy: 'コピー', switchUnit: 'BTC / sats を切替', footerMadeBy: '作成者:', footerSourceOn: 'ソースは',
-});
-
-def('ko', {
- passphrase: "패스프레이즈",
- howItWorks: "작동 방식",
- installApp: "앱 설치",
- hiwBasicsTitle: "기본 사항",
- hiwBasics1: "지갑을 만들면 페이지에서 무작위 단어 12개가 생성됩니다. 이 단어들이 지갑의 열쇠입니다. 이를 가진 사람은 누구나 코인을 사용할 수 있으므로, 종이에 적어 본인만 접근할 수 있는 곳에 보관하세요.",
- hiwBasics2: "12개의 단어를 잃어버리고 백업도 없다면 코인은 영원히 사라집니다. 재설정 링크도 없고 연락할 곳도 없으니, 돈을 넣기 전에 반드시 백업하세요.",
- hiwBasics3: "서버도 계정도 없습니다. 전체 앱은 브라우저에서 실행되는 단일 페이지이므로, 아무도 코인을 보관하지 않고 서버의 어떤 것도 키를 보지 못합니다. 잔액과 내역을 표시하기 위해 공개 블록 탐색기에서 데이터를 읽어옵니다(기본값은 mempool.space, 설정에서 지정하면 본인의 노드 사용).",
- hiwBasics4: "이 페이지를 저장해 인터넷 없이 컴퓨터에서 바로 열 수도 있습니다. 오프라인에서도 계속 작동합니다.",
- hiwBasics5: "일반적인 비트코인 표준(12단어 BIP39 구문과 BIP84 네이티브 SegWit 키)을 따르므로, 이 사이트가 사라지더라도 Sparrow, Electrum 또는 다른 표준 지갑에서 동일한 구문으로 복원하면 코인이 그대로 있습니다.",
- hiwTribute: "Hal Wallet이라는 이름은 전설적인 사이퍼펑크이자 비트코인 선구자인 Hal Finney(1956–2014)에 대한 헌사입니다.",
- signExport: "서명 후 (다른 곳에서 브로드캐스트)",
- scanQr: "QR 스캔",
- scanHint: "카메라를 QR 코드에 맞추세요",
- scanNoCamera: "카메라에 접근할 수 없습니다.",
- scanNoDecoder: "QR 스캔은 처음 사용할 때 연결이 필요합니다.",
- scanUnrecognized: "해당 QR에서 비트코인 주소를 읽을 수 없습니다.",
- broadcastScanned: "트랜잭션을 브로드캐스트할까요?",
- broadcastNow: "브로드캐스트",
- scanOffline: "오프라인 상태입니다 — 이 트랜잭션을 브로드캐스트하려면 다시 연결하세요.",
- loadingHistory: "트랜잭션 불러오는 중…",
- explorer: "블록 탐색기",
- explorerDesc: "이 지갑이 잔액과 내역을 조회하는 서버입니다. 최대한의 프라이버시를 위해 본인의 노드를 지정하세요.",
- explorerUrl: "서버 URL",
- explorerUrlHint: "Esplora / electrs REST 기본 주소, 예: https://mempool.space/api",
- deviceSync: "기기 동기화",
- deviceSyncDesc: "암호화된 사본을 Nostr 릴레이에 저장해 여러 기기에서 이 지갑을 동기화하세요 — 시드를 가진 기기만 읽을 수 있습니다. 모든 것을 이 기기에만 보관하려면 끄세요.",
- syncAcross: "기기 간 동기화",
- syncOn: "켜짐",
- syncOff: "꺼짐",
- relaysLabel: "릴레이",
- relaysHint: "한 줄에 하나의 wss:// URL을 입력하세요.",
- home: '홈', logout: '로그아웃',
- createNew: '새로 만들기', importExisting: '가져오기',
- genIntro: '새 12단어 시드 문구를 생성합니다. 적어 두세요. 이 지갑을 복구하는 유일한 방법입니다.',
- generateSeed: '시드 문구 생성', writeDownWarn: '⚠ 이 12단어를 순서대로 종이에 적으세요. 이를 가진 사람은 누구나 코인을 쓸 수 있습니다.',
- copyPhrase: '문구 복사', regenerate: '다시 생성', verifyBackup: '백업 확인', skipVerification: '확인 건너뛰기',
- confirmBackupIntro: '요청된 단어를 입력해 백업을 확인하세요.', wordN: '{n}번째 단어',
- reenterPassphrase: '암호문구 다시 입력', back: '← 뒤로', openWallet: '지갑 열기',
- wordsMismatch: '단어가 문구와 일치하지 않습니다. 백업을 확인하세요.',
- passphraseMismatch: '암호문구가 입력한 것과 일치하지 않습니다.',
- seedPhrase: '시드 문구', seedPlaceholder: '단어를 공백으로 구분해 입력',
- optionalPassphrase: '선택 암호문구', leaveBlank: '사용 안 하면 비워 두세요', show: '표시', hide: '숨기기',
- invalidSeed: '잘못된 시드 문구 — 철자와 순서를 확인하세요.',
- keysNote: '키는 브라우저를 벗어나지 않습니다. 완전 오프라인 작동. 이 페이지를 저장해 로컬에서 열 수 있습니다.',
- balance: '잔액', pending: '대기 중',
- tabReceive: '받기', tabSend: '보내기', tabHistory: '내역', tabSettings: '설정',
- copyAddress: '주소 복사', paymentReceived: '결제가 도착했습니다!', tapToProceed: '아무 곳이나 눌러 계속',
- recipient: '받는 사람', recipients: '받는 사람', max: '최대', feeRate: '수수료',
- feeEconomy: '절약', feeNormal: '보통', feePriority: '우선', feeCustom: '직접 입력',
- selectedRate: '선택한 수수료: {n} sat/vB', coinSelection: '코인 선택', automatic: '자동', manual: '수동',
- noCoins: '사용 가능한 코인이 없습니다.', nSelected: '{n}개 선택', addRecipient: '+ 받는 사람 추가',
- reviewTx: '거래 검토', remove: '삭제',
- enterRecipientAddr: '받는 주소를 입력하세요.', enterAddrForN: '받는 사람 {n}의 주소를 입력하세요.',
- enterValidAmtForN: '받는 사람 {n}의 올바른 금액을 입력하세요.', selectCoin: '사용할 코인을 하나 이상 선택하세요.',
- networkFee: '네트워크 수수료', offlineSignNote: '오프라인: 지금 서명한 뒤 온라인 기기에서 거래를 전송하세요.',
- signBroadcast: '서명 후 전송', signTx: '거래 서명', broadcastFailed: '전송 실패: {msg}', signingFailed: '서명 실패: {msg}',
- done: '완료', txSignedNote: '✓ 거래가 서명되었습니다. 아래 코드를 온라인 기기에서 전송하세요(예: mempool.space → Broadcast).',
- transactionId: '거래 ID', signedTxRaw: '서명된 거래(코드)', copyHex: '코드 복사', downloadLabel: '다운로드',
- showQrAirgap: 'QR 표시(오프라인 전송용)', txBroadcast: '✓ 거래가 전송되었습니다!', copyTxid: '거래 ID 복사', viewOnMempool: 'mempool.space에서 보기 ↗',
- noTxYet: '아직 거래가 없습니다.', received: '받음', sent: '보냄', pendingTag: '⏳ 대기 중', awaitingConfirmation: '확인 대기 중',
- feeShort: '수수료 {x}', historyOffline: '오프라인에서는 내역을 볼 수 없습니다.',
- status: '상태', confirmed: '확인됨', confirmedTag: '확인됨', pendingInMempool: '대기 중(멤풀)', block: '블록', date: '날짜',
- copyId: 'ID 복사', backToHistory: '← 내역으로',
- recoveryPhrase: '복구 문구', recoveryWarn: '⚠ 이 단어를 보는 사람은 자금을 훔칠 수 있습니다. 표시하기 전에 아무도 보지 않는지 확인하세요.',
- bip39Passphrase: '암호문구', copyPassphrase: '암호문구 복사', revealRecovery: '복구 문구 표시',
- offlineTransfer: '오프라인 전송', offlineTransferDesc: '온라인 기기에서 코인을 내보낸 뒤, 오프라인 기기(이 지갑과 시드)에서 파일을 가져오면 인터넷 없이 서명할 수 있습니다.',
- exportSnapshot: '⤓ 스냅샷 내보내기', importSnapshot: '스냅샷 가져오기…', rescan: '다시 스캔',
- rescanDesc: '현재 주소는 자동으로 갱신됩니다. 결제가 예전(재사용) 주소로 가서 보이지 않을 때만 다시 스캔하세요.',
- rescanWallet: '지갑 다시 스캔', scanning: '스캔 중…', language: '언어',
- offlineBanner: '네트워크에 연결할 수 없음 — 오프라인 작동 중. 설정에서 스냅샷을 가져와 코인을 불러오세요.', retry: '다시 시도',
- copied: '복사됨', snapshotExported: '스냅샷을 내보냈습니다', importedNCoins: '{n}개 코인을 가져왔습니다',
- unmatchedSuffix: ' · 이 지갑에 없는 주소 {n}개', importFailed: '가져오기 실패: {msg}',
- copy: '복사', switchUnit: 'BTC / sats 전환', footerMadeBy: '만든 사람:', footerSourceOn: '소스 공개:',
-});
-
-def('ar', {
- passphrase: "عبارة المرور",
- howItWorks: "كيف يعمل",
- installApp: "تثبيت التطبيق",
- hiwBasicsTitle: "الأساسيات",
- hiwBasics1: "عند إنشاء محفظة، تُولّد الصفحة اثنتي عشرة كلمة عشوائية. هذه الكلمات هي مفتاح محفظتك. أي شخص يمتلكها يمكنه إنفاق العملات، لذا دوّنها على ورقة واحفظها في مكان لا يصل إليه سواك.",
- hiwBasics2: "إذا فقدت الكلمات الاثنتي عشرة ولم يكن لديك نسخة احتياطية، فستضيع العملات إلى الأبد. لا يوجد رابط لإعادة التعيين ولا أحد للاتصال به، لذا احتفظ بنسخة احتياطية قبل إيداع أي أموال.",
- hiwBasics3: "لا يوجد خادم ولا حساب. التطبيق بأكمله صفحة واحدة تعمل في متصفحك، فلا أحد يحتفظ بعملاتك ولا شيء على خادم يرى مفاتيحك أبداً. ولعرض رصيدك وسجلك يقرأ من مستكشف كتل عام (mempool.space افتراضياً، أو عقدتك الخاصة إن أعددت واحدة في الإعدادات).",
- hiwBasics4: "بل يمكنك حفظ هذه الصفحة وفتحها مباشرة من حاسوبك بدون أي اتصال بالإنترنت. تظل تعمل دون اتصال.",
- hiwBasics5: "يتبع معايير بيتكوين المعتادة (عبارة BIP39 من 12 كلمة ومفاتيح BIP84 SegWit الأصلية)، لذا إن اختفى هذا الموقع يوماً يمكنك استعادة العبارة نفسها في Sparrow أو Electrum أو أي محفظة قياسية أخرى وستجد عملاتك هناك.",
- hiwTribute: "الاسم Hal Wallet هو تكريم لرائد بيتكوين والسايفربانك الأسطوري، Hal Finney (1956–2014).",
- signExport: "توقيع و(بثّ في مكان آخر)",
- scanQr: "مسح رمز QR",
- scanHint: "وجّه الكاميرا نحو رمز QR",
- scanNoCamera: "تعذّر الوصول إلى الكاميرا.",
- scanNoDecoder: "يحتاج مسح QR إلى اتصال في المرة الأولى لاستخدامه.",
- scanUnrecognized: "تعذّرت قراءة عنوان بيتكوين من رمز QR هذا.",
- broadcastScanned: "بثّ المعاملة؟",
- broadcastNow: "بثّ",
- scanOffline: "أنت غير متصل — أعد الاتصال لبثّ هذه المعاملة.",
- loadingHistory: "جارٍ تحميل المعاملات…",
- explorer: "مستكشف الكتل",
- explorerDesc: "الخادم الذي تستعلم منه هذه المحفظة عن الأرصدة والسجل. وجّهه إلى عقدتك الخاصة لأقصى قدر من الخصوصية.",
- explorerUrl: "عنوان الخادم",
- explorerUrlHint: "قاعدة REST لـ Esplora / electrs، مثلاً https://mempool.space/api",
- deviceSync: "مزامنة الأجهزة",
- deviceSyncDesc: "حافظ على تزامن هذه المحفظة عبر أجهزتك بتخزين نسخة مشفّرة على مُرحّل Nostr — لا يمكن قراءتها إلا لجهاز يملك بذرتك. أوقفها لإبقاء كل شيء على هذا الجهاز.",
- syncAcross: "المزامنة عبر الأجهزة",
- syncOn: "مفعّل",
- syncOff: "متوقف",
- relaysLabel: "المُرحّلات",
- relaysHint: "عنوان wss:// واحد لكل سطر.",
- home: 'الرئيسية', logout: 'تسجيل الخروج',
- createNew: 'إنشاء جديدة', importExisting: 'استيراد موجودة',
- genIntro: 'أنشئ عبارة استرداد جديدة من 12 كلمة. اكتبها. فهي الطريقة الوحيدة لاستعادة هذه المحفظة.',
- generateSeed: 'إنشاء العبارة', writeDownWarn: '⚠ اكتب هذه الكلمات الـ12 على ورق بالترتيب. أي شخص يملكها يستطيع إنفاق عملاتك.',
- copyPhrase: 'نسخ العبارة', regenerate: 'إعادة الإنشاء', verifyBackup: 'تحقق من النسخة', skipVerification: 'تخطّي التحقق',
- confirmBackupIntro: 'أكّد نسختك بإدخال الكلمات المطلوبة.', wordN: 'الكلمة رقم {n}',
- reenterPassphrase: 'أعد إدخال كلمة المرور', back: '← رجوع', openWallet: 'فتح المحفظة',
- wordsMismatch: 'هذه الكلمات لا تطابق عبارتك. تحقق من نسختك.',
- passphraseMismatch: 'كلمة المرور لا تطابق التي أدخلتها.',
- seedPhrase: 'عبارة الاسترداد', seedPlaceholder: 'أدخل كلماتك مفصولة بمسافات',
- optionalPassphrase: 'كلمة مرور اختيارية', leaveBlank: 'اتركها فارغة إن لم تُستخدم', show: 'إظهار', hide: 'إخفاء',
- invalidSeed: 'عبارة استرداد غير صالحة — تحقق من الإملاء والترتيب.',
- keysNote: 'المفاتيح لا تغادر متصفحك أبداً. تعمل دون اتصال. احفظ هذه الصفحة وافتحها محلياً.',
- balance: 'الرصيد', pending: 'قيد الانتظار',
- tabReceive: 'استلام', tabSend: 'إرسال', tabHistory: 'السجل', tabSettings: 'الإعدادات',
- copyAddress: 'نسخ العنوان', paymentReceived: 'تم استلام الدفعة!', tapToProceed: 'انقر في أي مكان للمتابعة',
- recipient: 'المستلم', recipients: 'المستلمون', max: 'الأقصى', feeRate: 'الرسوم',
- feeEconomy: 'اقتصادي', feeNormal: 'عادي', feePriority: 'أولوية', feeCustom: 'مخصص',
- selectedRate: 'الرسوم المختارة: {n} sat/vB', coinSelection: 'اختيار العملات', automatic: 'تلقائي', manual: 'يدوي',
- noCoins: 'لا توجد عملات متاحة.', nSelected: 'تم اختيار {n}', addRecipient: '+ إضافة مستلم',
- reviewTx: 'مراجعة المعاملة', remove: 'إزالة',
- enterRecipientAddr: 'أدخل عنوان المستلم.', enterAddrForN: 'أدخل عنواناً للمستلم {n}.',
- enterValidAmtForN: 'أدخل مبلغاً صحيحاً للمستلم {n}.', selectCoin: 'اختر عملة واحدة على الأقل للإنفاق.',
- networkFee: 'رسوم الشبكة', offlineSignNote: 'دون اتصال: وقّع الآن ثم أرسل المعاملة من جهاز متصل.',
- signBroadcast: 'التوقيع والإرسال', signTx: 'توقيع المعاملة', broadcastFailed: 'فشل الإرسال: {msg}', signingFailed: 'فشل التوقيع: {msg}',
- done: 'تم', txSignedNote: '✓ تم توقيع المعاملة. أرسل الكود أدناه من جهاز متصل (مثل mempool.space ← Broadcast).',
- transactionId: 'معرّف المعاملة', signedTxRaw: 'المعاملة الموقّعة (الكود)', copyHex: 'نسخ الكود', downloadLabel: 'تنزيل',
- showQrAirgap: 'إظهار رمز QR (للنقل دون اتصال)', txBroadcast: '✓ تم إرسال المعاملة!', copyTxid: 'نسخ معرّف المعاملة', viewOnMempool: 'عرض على mempool.space ↗',
- noTxYet: 'لا توجد معاملات بعد.', received: 'مستلَم', sent: 'مُرسَل', pendingTag: '⏳ قيد الانتظار', awaitingConfirmation: 'بانتظار التأكيد',
- feeShort: 'رسوم {x}', historyOffline: 'السجل غير متاح دون اتصال.',
- status: 'الحالة', confirmed: 'مؤكدة', confirmedTag: 'مؤكدة', pendingInMempool: 'قيد الانتظار (في mempool)', block: 'الكتلة', date: 'التاريخ',
- copyId: 'نسخ المعرّف', backToHistory: '← العودة إلى السجل',
- recoveryPhrase: 'عبارة الاسترداد', recoveryWarn: '⚠ أي شخص يرى هذه الكلمات يمكنه سرقة أموالك. تأكد ألا أحد يراقب قبل إظهارها.',
- bip39Passphrase: 'كلمة مرور', copyPassphrase: 'نسخ كلمة المرور', revealRecovery: 'إظهار عبارة الاسترداد',
- offlineTransfer: 'النقل دون اتصال', offlineTransferDesc: 'صدّر عملاتك على جهاز متصل، ثم استورد الملف على جهاز غير متصل (يحوي هذه المحفظة والعبارة) للتوقيع دون إنترنت.',
- exportSnapshot: '⤓ تصدير نسخة', importSnapshot: 'استيراد نسخة…', rescan: 'إعادة الفحص',
- rescanDesc: 'يتحدّث عنوانك الحالي تلقائياً. أعد الفحص فقط إذا أُرسلت دفعة إلى عنوان قديم (مُعاد استخدامه) ولم تظهر.',
- rescanWallet: 'إعادة فحص المحفظة', scanning: 'جارٍ الفحص…', language: 'اللغة',
- offlineBanner: 'تعذّر الوصول إلى الشبكة — تعمل دون اتصال. استورد نسخة من الإعدادات لتحميل العملات.', retry: 'إعادة المحاولة',
- copied: 'تم النسخ', snapshotExported: 'تم تصدير النسخة', importedNCoins: 'تم استيراد {n} عملة',
- unmatchedSuffix: ' · {n} عنوان ليس في هذه المحفظة', importFailed: 'فشل الاستيراد: {msg}',
- copy: 'نسخ', switchUnit: 'تبديل BTC / sats', footerMadeBy: 'صُنع بواسطة', footerSourceOn: 'الكود المصدري على',
-});
-
-def('ur', {
- passphrase: "پاس فریز",
- howItWorks: "یہ کیسے کام کرتا ہے",
- installApp: "ایپ انسٹال کریں",
- hiwBasicsTitle: "بنیادی باتیں",
- hiwBasics1: "جب آپ والیٹ بناتے ہیں تو یہ صفحہ بارہ بے ترتیب الفاظ تیار کرتا ہے۔ یہی الفاظ آپ کے والیٹ کی کلید ہیں۔ جس کے پاس بھی یہ ہوں وہ سکے خرچ کر سکتا ہے، اس لیے انہیں کاغذ پر لکھ لیں اور کسی ایسی جگہ رکھیں جہاں صرف آپ پہنچ سکیں۔",
- hiwBasics2: "اگر آپ بارہ الفاظ کھو دیں اور آپ کے پاس بیک اپ نہ ہو تو سکے ہمیشہ کے لیے ختم ہو جائیں گے۔ نہ کوئی ری سیٹ لنک ہے اور نہ کسی کو فون کیا جا سکتا ہے، اس لیے رقم ڈالنے سے پہلے انہیں بیک اپ کر لیں۔",
- hiwBasics3: "نہ کوئی سرور ہے اور نہ کوئی اکاؤنٹ۔ پوری ایپ ایک ہی صفحہ ہے جو آپ کے براؤزر میں چلتا ہے، اس لیے نہ کوئی آپ کے سکے رکھتا ہے اور نہ کسی سرور پر کوئی چیز آپ کی کلیدیں دیکھتی ہے۔ آپ کا بیلنس اور تاریخ دکھانے کے لیے یہ ایک عوامی بلاک ایکسپلورر سے پڑھتا ہے (طے شدہ طور پر mempool.space، یا اگر آپ ترتیبات میں اپنا نوڈ مقرر کریں تو وہ)۔",
- hiwBasics4: "آپ اس صفحے کو محفوظ بھی کر سکتے ہیں اور اسے بغیر کسی انٹرنیٹ کے سیدھا اپنے کمپیوٹر سے کھول سکتے ہیں۔ یہ آف لائن کام کرتا رہتا ہے۔",
- hiwBasics5: "یہ معمول کے بٹ کوائن معیارات کی پیروی کرتا ہے (12 الفاظ والا BIP39 فریز اور BIP84 نیٹو SegWit کلیدیں)، اس لیے اگر یہ سائٹ کبھی ختم ہو جائے تو آپ وہی فریز Sparrow، Electrum یا کسی بھی دوسرے معیاری والیٹ میں بحال کر سکتے ہیں اور آپ کے سکے وہیں موجود ہوں گے۔",
- hiwTribute: "نام Hal Wallet مشہور سائفر پنک اور بٹ کوائن کے علمبردار Hal Finney (1956–2014) کو خراج تحسین ہے۔",
- signExport: "دستخط کریں اور (کہیں اور نشر کریں)",
- scanQr: "QR اسکین کریں",
- scanHint: "کیمرے کو QR کوڈ کی طرف کریں",
- scanNoCamera: "کیمرے تک رسائی حاصل نہ ہو سکی۔",
- scanNoDecoder: "QR اسکیننگ کو پہلی بار استعمال کے وقت ایک کنکشن کی ضرورت ہوتی ہے۔",
- scanUnrecognized: "اس QR سے بٹ کوائن ایڈریس نہیں پڑھا جا سکا۔",
- broadcastScanned: "ٹرانزیکشن نشر کریں؟",
- broadcastNow: "نشر کریں",
- scanOffline: "آپ آف لائن ہیں — اس ٹرانزیکشن کو نشر کرنے کے لیے دوبارہ منسلک ہوں۔",
- loadingHistory: "ٹرانزیکشنز لوڈ ہو رہی ہیں…",
- explorer: "بلاک ایکسپلورر",
- explorerDesc: "وہ سرور جس سے یہ والیٹ بیلنس اور تاریخ کے لیے استفسار کرتا ہے۔ زیادہ سے زیادہ پرائیویسی کے لیے اسے اپنے نوڈ کی طرف مقرر کریں۔",
- explorerUrl: "سرور URL",
- explorerUrlHint: "Esplora / electrs REST بنیاد، مثلاً https://mempool.space/api",
- deviceSync: "ڈیوائس سنک",
- deviceSyncDesc: "اس والیٹ کو اپنی ڈیوائسز پر سنک رکھیں، اس کے لیے ایک Nostr ریلے پر ایک خفیہ کردہ نقل محفوظ کریں — صرف آپ کے سیڈ والی ڈیوائس ہی اسے پڑھ سکتی ہے۔ سب کچھ اسی ڈیوائس پر رکھنے کے لیے اسے بند کر دیں۔",
- syncAcross: "ڈیوائسز پر سنک کریں",
- syncOn: "آن",
- syncOff: "آف",
- relaysLabel: "ریلے",
- relaysHint: "ہر سطر پر ایک wss:// URL۔",
- home: 'ہوم', logout: 'لاگ آؤٹ',
- createNew: 'نیا بنائیں', importExisting: 'موجودہ درآمد کریں',
- genIntro: 'نیا 12 الفاظ کا سیڈ فقرہ بنائیں۔ اسے لکھ لیں۔ یہی اس والیٹ کو بحال کرنے کا واحد طریقہ ہے۔',
- generateSeed: 'سیڈ فقرہ بنائیں', writeDownWarn: '⚠ ان 12 الفاظ کو ترتیب سے کاغذ پر لکھیں۔ جس کے پاس یہ ہوں وہ آپ کے سکے خرچ کر سکتا ہے۔',
- copyPhrase: 'فقرہ کاپی کریں', regenerate: 'دوبارہ بنائیں', verifyBackup: 'بیک اپ کی تصدیق', skipVerification: 'تصدیق چھوڑیں',
- confirmBackupIntro: 'مطلوبہ الفاظ درج کر کے اپنے بیک اپ کی تصدیق کریں۔', wordN: 'لفظ #{n}',
- reenterPassphrase: 'پاس فریز دوبارہ درج کریں', back: '← واپس', openWallet: 'والیٹ کھولیں',
- wordsMismatch: 'یہ الفاظ آپ کے فقرے سے میل نہیں کھاتے۔ اپنا بیک اپ دیکھیں۔',
- passphraseMismatch: 'یہ پاس فریز آپ کے درج کردہ سے میل نہیں کھاتا۔',
- seedPhrase: 'سیڈ فقرہ', seedPlaceholder: 'اپنے الفاظ خالی جگہ سے الگ کر کے لکھیں',
- optionalPassphrase: 'اختیاری پاس فریز', leaveBlank: 'استعمال نہ ہو تو خالی چھوڑیں', show: 'دکھائیں', hide: 'چھپائیں',
- invalidSeed: 'غلط سیڈ فقرہ — ہجے اور ترتیب دیکھیں۔',
- keysNote: 'چابیاں کبھی آپ کے براؤزر سے باہر نہیں جاتیں۔ مکمل آف لائن کام کرتا ہے۔ یہ صفحہ محفوظ کر کے مقامی طور پر کھولیں۔',
- balance: 'بیلنس', pending: 'زیرِ التوا',
- tabReceive: 'وصول', tabSend: 'بھیجیں', tabHistory: 'تاریخ', tabSettings: 'ترتیبات',
- copyAddress: 'پتہ کاپی کریں', paymentReceived: 'ادائیگی موصول ہوئی!', tapToProceed: 'جاری رکھنے کے لیے کہیں بھی ٹیپ کریں',
- recipient: 'وصول کنندہ', recipients: 'وصول کنندگان', max: 'زیادہ سے زیادہ', feeRate: 'فیس',
- feeEconomy: 'اکنامی', feeNormal: 'عام', feePriority: 'ترجیحی', feeCustom: 'حسبِ ضرورت',
- selectedRate: 'منتخب فیس: {n} sat/vB', coinSelection: 'سکوں کا انتخاب', automatic: 'خودکار', manual: 'دستی',
- noCoins: 'کوئی سکے دستیاب نہیں۔', nSelected: '{n} منتخب', addRecipient: '+ وصول کنندہ شامل کریں',
- reviewTx: 'لین دین کا جائزہ', remove: 'ہٹائیں',
- enterRecipientAddr: 'وصول کنندہ کا پتہ درج کریں۔', enterAddrForN: 'وصول کنندہ {n} کا پتہ درج کریں۔',
- enterValidAmtForN: 'وصول کنندہ {n} کے لیے درست رقم درج کریں۔', selectCoin: 'خرچ کے لیے کم از کم ایک سکہ منتخب کریں۔',
- networkFee: 'نیٹ ورک فیس', offlineSignNote: 'آف لائن: ابھی دستخط کریں، پھر کسی آن لائن آلے سے لین دین نشر کریں۔',
- signBroadcast: 'دستخط اور نشر', signTx: 'لین دین پر دستخط', broadcastFailed: 'نشر ناکام: {msg}', signingFailed: 'دستخط ناکام: {msg}',
- done: 'مکمل', txSignedNote: '✓ لین دین پر دستخط ہو گئے۔ نیچے دیا کوڈ کسی آن لائن آلے سے نشر کریں (مثلاً mempool.space ← Broadcast)۔',
- transactionId: 'لین دین ID', signedTxRaw: 'دستخط شدہ لین دین (کوڈ)', copyHex: 'کوڈ کاپی کریں', downloadLabel: 'ڈاؤن لوڈ',
- showQrAirgap: 'QR دکھائیں (آف لائن منتقلی کے لیے)', txBroadcast: '✓ لین دین نشر ہو گیا!', copyTxid: 'لین دین ID کاپی کریں', viewOnMempool: 'mempool.space پر دیکھیں ↗',
- noTxYet: 'ابھی کوئی لین دین نہیں۔', received: 'موصول', sent: 'بھیجا گیا', pendingTag: '⏳ زیرِ التوا', awaitingConfirmation: 'تصدیق کے منتظر',
- feeShort: 'فیس {x}', historyOffline: 'آف لائن میں تاریخ دستیاب نہیں۔',
- status: 'حیثیت', confirmed: 'تصدیق شدہ', confirmedTag: 'تصدیق شدہ', pendingInMempool: 'زیرِ التوا (mempool میں)', block: 'بلاک', date: 'تاریخ',
- copyId: 'ID کاپی کریں', backToHistory: '← تاریخ پر واپس',
- recoveryPhrase: 'بحالی فقرہ', recoveryWarn: '⚠ جو بھی یہ الفاظ دیکھے آپ کی رقم چرا سکتا ہے۔ ظاہر کرنے سے پہلے یقینی بنائیں کوئی نہیں دیکھ رہا۔',
- bip39Passphrase: 'پاس فریز', copyPassphrase: 'پاس فریز کاپی کریں', revealRecovery: 'بحالی فقرہ ظاہر کریں',
- offlineTransfer: 'آف لائن منتقلی', offlineTransferDesc: 'کسی آن لائن آلے پر اپنے سکے برآمد کریں، پھر آف لائن آلے (اسی والیٹ اور سیڈ کے ساتھ) پر فائل درآمد کر کے بغیر انٹرنیٹ دستخط کریں۔',
- exportSnapshot: '⤓ سنیپ شاٹ برآمد', importSnapshot: 'سنیپ شاٹ درآمد…', rescan: 'دوبارہ اسکین',
- rescanDesc: 'آپ کا موجودہ پتہ خودکار اپ ڈیٹ ہوتا ہے۔ صرف تب دوبارہ اسکین کریں جب ادائیگی پرانے (دوبارہ استعمال شدہ) پتے پر آئی ہو اور نظر نہ آ رہی ہو۔',
- rescanWallet: 'والیٹ دوبارہ اسکین', scanning: 'اسکین جاری…', language: 'زبان',
- offlineBanner: 'نیٹ ورک تک رسائی نہیں — آف لائن کام جاری۔ سکے لوڈ کرنے کے لیے ترتیبات سے سنیپ شاٹ درآمد کریں۔', retry: 'دوبارہ کوشش',
- copied: 'کاپی ہو گیا', snapshotExported: 'سنیپ شاٹ برآمد ہو گیا', importedNCoins: '{n} سکے درآمد ہوئے',
- unmatchedSuffix: ' · {n} پتے اس والیٹ میں نہیں', importFailed: 'درآمد ناکام: {msg}',
- copy: 'کاپی', switchUnit: 'BTC / sats بدلیں', footerMadeBy: 'بنایا از', footerSourceOn: 'سورس کوڈ یہاں',
-});
-
-def('hi', {
- passphrase: "पासफ़्रेज़",
- howItWorks: "यह कैसे काम करता है",
- installApp: "ऐप इंस्टॉल करें",
- hiwBasicsTitle: "मूल बातें",
- hiwBasics1: "जब आप वॉलेट बनाते हैं, तो पेज बारह यादृच्छिक शब्द उत्पन्न करता है। ये शब्द आपके वॉलेट की कुंजी हैं। जिसके पास ये होंगे वह सिक्के खर्च कर सकता है, इसलिए इन्हें कागज़ पर लिख लें और किसी ऐसी जगह रखें जहाँ केवल आप पहुँच सकें।",
- hiwBasics2: "अगर आप बारह शब्द खो देते हैं और आपके पास बैकअप नहीं है, तो सिक्के हमेशा के लिए चले गए। कोई रीसेट लिंक नहीं है और कॉल करने के लिए कोई नहीं है, इसलिए पैसा डालने से पहले इनका बैकअप ले लें।",
- hiwBasics3: "कोई सर्वर नहीं और कोई खाता नहीं है। पूरा ऐप एक ही पेज है जो आपके ब्राउज़र में चलता है, इसलिए कोई भी आपके सिक्के नहीं रखता और किसी सर्वर पर कुछ भी आपकी कुंजियाँ कभी नहीं देखता। आपका बैलेंस और इतिहास दिखाने के लिए यह एक सार्वजनिक ब्लॉक एक्सप्लोरर से पढ़ता है (डिफ़ॉल्ट रूप से mempool.space, या आपका अपना नोड अगर आप सेटिंग्स में सेट करें)।",
- hiwBasics4: "आप इस पेज को सहेज भी सकते हैं और बिना किसी इंटरनेट के सीधे अपने कंप्यूटर से खोल सकते हैं। यह ऑफ़लाइन भी काम करता रहता है।",
- hiwBasics5: "यह सामान्य Bitcoin मानकों का पालन करता है (12-शब्दों का BIP39 वाक्यांश और BIP84 नेटिव SegWit कुंजियाँ), इसलिए अगर यह साइट कभी गायब हो जाए तो आप उसी वाक्यांश को Sparrow, Electrum, या किसी अन्य मानक वॉलेट में पुनर्स्थापित कर सकते हैं और आपके सिक्के वहीं मौजूद होंगे।",
- hiwTribute: "Hal Wallet नाम पौराणिक साइफरपंक और Bitcoin अग्रदूत, Hal Finney (1956–2014) को एक श्रद्धांजलि है।",
- signExport: "साइन करें और (कहीं और प्रसारित करें)",
- scanQr: "QR स्कैन करें",
- scanHint: "कैमरे को QR कोड की ओर इंगित करें",
- scanNoCamera: "कैमरे तक पहुँच नहीं हो सकी।",
- scanNoDecoder: "QR स्कैनिंग के लिए पहली बार उपयोग करते समय एक कनेक्शन चाहिए।",
- scanUnrecognized: "उस QR से Bitcoin पता नहीं पढ़ा जा सका।",
- broadcastScanned: "लेनदेन प्रसारित करें?",
- broadcastNow: "प्रसारित करें",
- scanOffline: "आप ऑफ़लाइन हैं — इस लेनदेन को प्रसारित करने के लिए फिर से कनेक्ट करें।",
- loadingHistory: "लेनदेन लोड हो रहे हैं…",
- explorer: "ब्लॉक एक्सप्लोरर",
- explorerDesc: "वह सर्वर जिससे यह वॉलेट बैलेंस और इतिहास के लिए पूछताछ करता है। अधिकतम गोपनीयता के लिए इसे अपने अपने नोड पर इंगित करें।",
- explorerUrl: "सर्वर URL",
- explorerUrlHint: "Esplora / electrs REST आधार, उदा. https://mempool.space/api",
- deviceSync: "डिवाइस सिंक",
- deviceSyncDesc: "एक Nostr रिले पर एक एन्क्रिप्टेड प्रति संग्रहीत करके इस वॉलेट को अपने सभी डिवाइस में सिंक रखें — केवल आपके सीड वाला डिवाइस ही इसे पढ़ सकता है। सब कुछ इसी डिवाइस पर रखने के लिए इसे बंद कर दें।",
- syncAcross: "डिवाइस में सिंक करें",
- syncOn: "चालू",
- syncOff: "बंद",
- relaysLabel: "रिले",
- relaysHint: "प्रति पंक्ति एक wss:// URL।",
- home: 'होम', logout: 'लॉग आउट',
- createNew: 'नया बनाएँ', importExisting: 'मौजूदा आयात करें',
- genIntro: 'नया 12-शब्द वाला सीड वाक्यांश बनाएँ। इसे लिख लें। यही इस वॉलेट को पुनः प्राप्त करने का एकमात्र तरीका है।',
- generateSeed: 'सीड वाक्यांश बनाएँ', writeDownWarn: '⚠ इन 12 शब्दों को क्रम से कागज़ पर लिखें। जिसके पास ये होंगे वह आपके सिक्के खर्च कर सकता है।',
- copyPhrase: 'वाक्यांश कॉपी करें', regenerate: 'फिर बनाएँ', verifyBackup: 'बैकअप जाँचें', skipVerification: 'सत्यापन छोड़ें',
- confirmBackupIntro: 'माँगे गए शब्द दर्ज करके अपना बैकअप पुष्टि करें।', wordN: 'शब्द #{n}',
- reenterPassphrase: 'पासफ़्रेज़ फिर दर्ज करें', back: '← वापस', openWallet: 'वॉलेट खोलें',
- wordsMismatch: 'ये शब्द आपके वाक्यांश से मेल नहीं खाते। अपना बैकअप जाँचें।',
- passphraseMismatch: 'यह पासफ़्रेज़ आपके दर्ज किए गए से मेल नहीं खाता।',
- seedPhrase: 'सीड वाक्यांश', seedPlaceholder: 'अपने शब्द स्पेस से अलग करके लिखें',
- optionalPassphrase: 'वैकल्पिक पासफ़्रेज़', leaveBlank: 'उपयोग न हो तो खाली छोड़ें', show: 'दिखाएँ', hide: 'छिपाएँ',
- invalidSeed: 'अमान्य सीड वाक्यांश — वर्तनी और क्रम जाँचें।',
- keysNote: 'कुंजियाँ कभी आपके ब्राउज़र से बाहर नहीं जातीं। पूरी तरह ऑफ़लाइन काम करता है। इस पेज को सहेजें और स्थानीय रूप से खोलें।',
- balance: 'बैलेंस', pending: 'लंबित',
- tabReceive: 'प्राप्त', tabSend: 'भेजें', tabHistory: 'इतिहास', tabSettings: 'सेटिंग्स',
- copyAddress: 'पता कॉपी करें', paymentReceived: 'भुगतान प्राप्त हुआ!', tapToProceed: 'आगे बढ़ने के लिए कहीं भी टैप करें',
- recipient: 'प्राप्तकर्ता', recipients: 'प्राप्तकर्ता', max: 'अधिकतम', feeRate: 'शुल्क',
- feeEconomy: 'किफ़ायती', feeNormal: 'सामान्य', feePriority: 'प्राथमिकता', feeCustom: 'कस्टम',
- selectedRate: 'चयनित शुल्क: {n} sat/vB', coinSelection: 'सिक्का चयन', automatic: 'स्वचालित', manual: 'मैनुअल',
- noCoins: 'कोई सिक्के उपलब्ध नहीं।', nSelected: '{n} चयनित', addRecipient: '+ प्राप्तकर्ता जोड़ें',
- reviewTx: 'लेन-देन की समीक्षा', remove: 'हटाएँ',
- enterRecipientAddr: 'प्राप्तकर्ता का पता दर्ज करें।', enterAddrForN: 'प्राप्तकर्ता {n} का पता दर्ज करें।',
- enterValidAmtForN: 'प्राप्तकर्ता {n} के लिए मान्य राशि दर्ज करें।', selectCoin: 'खर्च के लिए कम से कम एक सिक्का चुनें।',
- networkFee: 'नेटवर्क शुल्क', offlineSignNote: 'ऑफ़लाइन: अभी हस्ताक्षर करें, फिर किसी ऑनलाइन डिवाइस से लेन-देन प्रसारित करें।',
- signBroadcast: 'हस्ताक्षर और प्रसारण', signTx: 'लेन-देन पर हस्ताक्षर', broadcastFailed: 'प्रसारण विफल: {msg}', signingFailed: 'हस्ताक्षर विफल: {msg}',
- done: 'हो गया', txSignedNote: '✓ लेन-देन पर हस्ताक्षर हो गए। नीचे का कोड किसी ऑनलाइन डिवाइस से प्रसारित करें (जैसे mempool.space → Broadcast)।',
- transactionId: 'लेन-देन ID', signedTxRaw: 'हस्ताक्षरित लेन-देन (कोड)', copyHex: 'कोड कॉपी करें', downloadLabel: 'डाउनलोड',
- showQrAirgap: 'QR दिखाएँ (ऑफ़लाइन स्थानांतरण के लिए)', txBroadcast: '✓ लेन-देन प्रसारित हुआ!', copyTxid: 'लेन-देन ID कॉपी करें', viewOnMempool: 'mempool.space पर देखें ↗',
- noTxYet: 'अभी कोई लेन-देन नहीं।', received: 'प्राप्त', sent: 'भेजा गया', pendingTag: '⏳ लंबित', awaitingConfirmation: 'पुष्टि की प्रतीक्षा',
- feeShort: 'शुल्क {x}', historyOffline: 'ऑफ़लाइन में इतिहास उपलब्ध नहीं।',
- status: 'स्थिति', confirmed: 'पुष्ट', confirmedTag: 'पुष्ट', pendingInMempool: 'लंबित (mempool में)', block: 'ब्लॉक', date: 'तारीख़',
- copyId: 'ID कॉपी करें', backToHistory: '← इतिहास पर वापस',
- recoveryPhrase: 'रिकवरी वाक्यांश', recoveryWarn: '⚠ जो भी ये शब्द देखेगा वह आपके फंड चुरा सकता है। दिखाने से पहले सुनिश्चित करें कोई नहीं देख रहा।',
- bip39Passphrase: 'पासफ़्रेज़', copyPassphrase: 'पासफ़्रेज़ कॉपी करें', revealRecovery: 'रिकवरी वाक्यांश दिखाएँ',
- offlineTransfer: 'ऑफ़लाइन स्थानांतरण', offlineTransferDesc: 'किसी ऑनलाइन डिवाइस पर अपने सिक्के निर्यात करें, फिर ऑफ़लाइन डिवाइस (इसी वॉलेट और सीड के साथ) पर फ़ाइल आयात करके बिना इंटरनेट हस्ताक्षर करें।',
- exportSnapshot: '⤓ स्नैपशॉट निर्यात', importSnapshot: 'स्नैपशॉट आयात…', rescan: 'फिर स्कैन करें',
- rescanDesc: 'आपका वर्तमान पता स्वतः अपडेट होता है। केवल तभी फिर स्कैन करें जब भुगतान किसी पुराने (पुनः उपयोग) पते पर आया हो और दिख न रहा हो।',
- rescanWallet: 'वॉलेट फिर स्कैन करें', scanning: 'स्कैन हो रहा है…', language: 'भाषा',
- offlineBanner: 'नेटवर्क उपलब्ध नहीं — ऑफ़लाइन काम जारी। सिक्के लोड करने के लिए सेटिंग्स से स्नैपशॉट आयात करें।', retry: 'पुनः प्रयास',
- copied: 'कॉपी हो गया', snapshotExported: 'स्नैपशॉट निर्यात हुआ', importedNCoins: '{n} सिक्के आयात हुए',
- unmatchedSuffix: ' · {n} पते इस वॉलेट में नहीं', importFailed: 'आयात विफल: {msg}',
- copy: 'कॉपी', switchUnit: 'BTC / sats बदलें', footerMadeBy: 'द्वारा बनाया', footerSourceOn: 'सोर्स यहाँ',
-});
-
-def('bn', {
- passphrase: "পাসফ্রেজ",
- howItWorks: "এটি কীভাবে কাজ করে",
- installApp: "অ্যাপ ইনস্টল করুন",
- hiwBasicsTitle: "মূল বিষয়গুলো",
- hiwBasics1: "আপনি যখন একটি ওয়ালেট তৈরি করেন, পেজটি বারোটি এলোমেলো শব্দ তৈরি করে। সেই শব্দগুলোই আপনার ওয়ালেটের চাবি। যার কাছে এগুলো আছে সে-ই কয়েন খরচ করতে পারে, তাই এগুলো কাগজে লিখে রাখুন এবং এমন জায়গায় রাখুন যেখানে কেবল আপনিই পৌঁছাতে পারেন।",
- hiwBasics2: "আপনি যদি বারোটি শব্দ হারিয়ে ফেলেন এবং কোনো ব্যাকআপ না থাকে, তাহলে কয়েনগুলো চিরতরে হারিয়ে যাবে। কোনো রিসেট লিঙ্ক নেই এবং ফোন করার মতো কেউ নেই, তাই টাকা রাখার আগে এগুলো ব্যাকআপ করে নিন।",
- hiwBasics3: "কোনো সার্ভার নেই এবং কোনো অ্যাকাউন্ট নেই। পুরো অ্যাপটি একটি একক পেজ যা আপনার ব্রাউজারে চলে, তাই কেউ আপনার কয়েন ধরে রাখে না এবং কোনো সার্ভারে আপনার চাবি কখনও দেখা যায় না। আপনার ব্যালেন্স ও ইতিহাস দেখানোর জন্য এটি একটি পাবলিক ব্লক এক্সপ্লোরার থেকে পড়ে (ডিফল্টভাবে mempool.space, অথবা আপনি সেটিংসে নিজের নোড সেট করলে সেটি)।",
- hiwBasics4: "আপনি এই পেজটি সেভ করে কোনো ইন্টারনেট ছাড়াই সরাসরি আপনার কম্পিউটার থেকে খুলতে পারেন। এটি অফলাইনেও কাজ করতে থাকে।",
- hiwBasics5: "এটি প্রচলিত বিটকয়েন মানদণ্ড অনুসরণ করে (একটি ১২-শব্দের BIP39 ফ্রেজ এবং BIP84 নেটিভ SegWit চাবি), তাই এই সাইটটি কখনও হারিয়ে গেলেও আপনি একই ফ্রেজ Sparrow, Electrum, বা অন্য যেকোনো স্ট্যান্ডার্ড ওয়ালেটে পুনরুদ্ধার করতে পারবেন এবং আপনার কয়েন সেখানেই থাকবে।",
- hiwTribute: "Hal Wallet নামটি কিংবদন্তি সাইফারপাঙ্ক এবং বিটকয়েন পথিকৃৎ Hal Finney (১৯৫৬–২০১৪)-এর প্রতি একটি শ্রদ্ধাঞ্জলি।",
- signExport: "সাইন করুন এবং (অন্যত্র ব্রডকাস্ট করুন)",
- scanQr: "QR স্ক্যান করুন",
- scanHint: "ক্যামেরাটি একটি QR কোডের দিকে তাক করুন",
- scanNoCamera: "ক্যামেরা অ্যাক্সেস করা যায়নি।",
- scanNoDecoder: "QR স্ক্যানের জন্য প্রথমবার ব্যবহারের সময় একটি সংযোগ প্রয়োজন।",
- scanUnrecognized: "সেই QR থেকে কোনো বিটকয়েন ঠিকানা পড়া যায়নি।",
- broadcastScanned: "লেনদেন ব্রডকাস্ট করবেন?",
- broadcastNow: "ব্রডকাস্ট করুন",
- scanOffline: "আপনি অফলাইনে আছেন — এই লেনদেন ব্রডকাস্ট করতে পুনরায় সংযোগ করুন।",
- loadingHistory: "লেনদেন লোড হচ্ছে…",
- explorer: "ব্লক এক্সপ্লোরার",
- explorerDesc: "এই ওয়ালেট ব্যালেন্স ও ইতিহাসের জন্য যে সার্ভারে অনুসন্ধান করে। সর্বোচ্চ গোপনীয়তার জন্য এটি আপনার নিজের নোডে নির্দেশ করুন।",
- explorerUrl: "সার্ভার URL",
- explorerUrlHint: "Esplora / electrs REST বেস, যেমন https://mempool.space/api",
- deviceSync: "ডিভাইস সিঙ্ক",
- deviceSyncDesc: "একটি Nostr রিলেতে একটি এনক্রিপ্ট করা কপি সংরক্ষণ করে এই ওয়ালেটটি আপনার সব ডিভাইসে সিঙ্ক রাখুন — কেবল আপনার সিড আছে এমন একটি ডিভাইসই এটি পড়তে পারে। সবকিছু এই ডিভাইসে রাখতে এটি বন্ধ করে দিন।",
- syncAcross: "ডিভাইসজুড়ে সিঙ্ক করুন",
- syncOn: "চালু",
- syncOff: "বন্ধ",
- relaysLabel: "রিলে",
- relaysHint: "প্রতি লাইনে একটি wss:// URL।",
- home: 'হোম', logout: 'লগ আউট',
- createNew: 'নতুন তৈরি', importExisting: 'বিদ্যমান ইম্পোর্ট',
- genIntro: 'নতুন ১২-শব্দের সিড ফ্রেজ তৈরি করুন। লিখে রাখুন। এটিই এই ওয়ালেট পুনরুদ্ধারের একমাত্র উপায়।',
- generateSeed: 'সিড ফ্রেজ তৈরি করুন', writeDownWarn: '⚠ এই ১২টি শব্দ ক্রম অনুযায়ী কাগজে লিখুন। যার কাছে এগুলো থাকবে সে আপনার কয়েন খরচ করতে পারবে।',
- copyPhrase: 'ফ্রেজ কপি করুন', regenerate: 'আবার তৈরি', verifyBackup: 'ব্যাকআপ যাচাই', skipVerification: 'যাচাই এড়িয়ে যান',
- confirmBackupIntro: 'অনুরোধ করা শব্দগুলো লিখে আপনার ব্যাকআপ নিশ্চিত করুন।', wordN: 'শব্দ #{n}',
- reenterPassphrase: 'পাসফ্রেজ আবার লিখুন', back: '← ফিরুন', openWallet: 'ওয়ালেট খুলুন',
- wordsMismatch: 'এই শব্দগুলো আপনার ফ্রেজের সাথে মেলে না। ব্যাকআপ দেখুন।',
- passphraseMismatch: 'এই পাসফ্রেজ আপনার দেওয়াটির সাথে মেলে না।',
- seedPhrase: 'সিড ফ্রেজ', seedPlaceholder: 'শব্দগুলো স্পেস দিয়ে আলাদা করে লিখুন',
- optionalPassphrase: 'ঐচ্ছিক পাসফ্রেজ', leaveBlank: 'ব্যবহার না হলে ফাঁকা রাখুন', show: 'দেখান', hide: 'লুকান',
- invalidSeed: 'ভুল সিড ফ্রেজ — বানান ও ক্রম দেখুন।',
- keysNote: 'কী কখনো আপনার ব্রাউজার ছাড়ে না। সম্পূর্ণ অফলাইনে চলে। এই পেজ সেভ করে স্থানীয়ভাবে খুলুন।',
- balance: 'ব্যালেন্স', pending: 'অপেক্ষমাণ',
- tabReceive: 'গ্রহণ', tabSend: 'পাঠান', tabHistory: 'ইতিহাস', tabSettings: 'সেটিংস',
- copyAddress: 'ঠিকানা কপি', paymentReceived: 'পেমেন্ট পাওয়া গেছে!', tapToProceed: 'এগিয়ে যেতে যেকোনো জায়গায় ট্যাপ করুন',
- recipient: 'প্রাপক', recipients: 'প্রাপকগণ', max: 'সর্বোচ্চ', feeRate: 'ফি',
- feeEconomy: 'সাশ্রয়ী', feeNormal: 'সাধারণ', feePriority: 'অগ্রাধিকার', feeCustom: 'কাস্টম',
- selectedRate: 'নির্বাচিত ফি: {n} sat/vB', coinSelection: 'কয়েন নির্বাচন', automatic: 'স্বয়ংক্রিয়', manual: 'ম্যানুয়াল',
- noCoins: 'কোনো কয়েন নেই।', nSelected: '{n} নির্বাচিত', addRecipient: '+ প্রাপক যোগ করুন',
- reviewTx: 'লেনদেন পর্যালোচনা', remove: 'সরান',
- enterRecipientAddr: 'প্রাপকের ঠিকানা লিখুন।', enterAddrForN: 'প্রাপক {n}-এর ঠিকানা লিখুন।',
- enterValidAmtForN: 'প্রাপক {n}-এর জন্য সঠিক পরিমাণ লিখুন।', selectCoin: 'খরচের জন্য অন্তত একটি কয়েন নির্বাচন করুন।',
- networkFee: 'নেটওয়ার্ক ফি', offlineSignNote: 'অফলাইন: এখন সই করুন, তারপর অনলাইন ডিভাইস থেকে লেনদেন সম্প্রচার করুন।',
- signBroadcast: 'সই ও সম্প্রচার', signTx: 'লেনদেন সই', broadcastFailed: 'সম্প্রচার ব্যর্থ: {msg}', signingFailed: 'সই ব্যর্থ: {msg}',
- done: 'সম্পন্ন', txSignedNote: '✓ লেনদেন সই হয়েছে। নিচের কোড অনলাইন ডিভাইস থেকে সম্প্রচার করুন (যেমন mempool.space → Broadcast)।',
- transactionId: 'লেনদেন ID', signedTxRaw: 'সইকৃত লেনদেন (কোড)', copyHex: 'কোড কপি', downloadLabel: 'ডাউনলোড',
- showQrAirgap: 'QR দেখান (অফলাইন স্থানান্তরের জন্য)', txBroadcast: '✓ লেনদেন সম্প্রচারিত!', copyTxid: 'লেনদেন ID কপি', viewOnMempool: 'mempool.space-এ দেখুন ↗',
- noTxYet: 'এখনো কোনো লেনদেন নেই।', received: 'গৃহীত', sent: 'প্রেরিত', pendingTag: '⏳ অপেক্ষমাণ', awaitingConfirmation: 'নিশ্চিতকরণের অপেক্ষায়',
- feeShort: 'ফি {x}', historyOffline: 'অফলাইনে ইতিহাস পাওয়া যায় না।',
- status: 'অবস্থা', confirmed: 'নিশ্চিত', confirmedTag: 'নিশ্চিত', pendingInMempool: 'অপেক্ষমাণ (mempool-এ)', block: 'ব্লক', date: 'তারিখ',
- copyId: 'ID কপি', backToHistory: '← ইতিহাসে ফিরুন',
- recoveryPhrase: 'রিকভারি ফ্রেজ', recoveryWarn: '⚠ যে কেউ এই শব্দগুলো দেখলে আপনার অর্থ চুরি করতে পারে। দেখানোর আগে নিশ্চিত হোন কেউ দেখছে না।',
- bip39Passphrase: 'পাসফ্রেজ', copyPassphrase: 'পাসফ্রেজ কপি', revealRecovery: 'রিকভারি ফ্রেজ দেখান',
- offlineTransfer: 'অফলাইন স্থানান্তর', offlineTransferDesc: 'অনলাইন ডিভাইসে আপনার কয়েন এক্সপোর্ট করুন, তারপর অফলাইন ডিভাইসে (এই ওয়ালেট ও সিড সহ) ফাইল ইম্পোর্ট করে ইন্টারনেট ছাড়াই সই করুন।',
- exportSnapshot: '⤓ স্ন্যাপশট এক্সপোর্ট', importSnapshot: 'স্ন্যাপশট ইম্পোর্ট…', rescan: 'পুনরায় স্ক্যান',
- rescanDesc: 'আপনার বর্তমান ঠিকানা স্বয়ংক্রিয়ভাবে আপডেট হয়। শুধু তখনই পুনরায় স্ক্যান করুন যখন পেমেন্ট কোনো পুরোনো (পুনঃব্যবহৃত) ঠিকানায় এসেছে এবং দেখা যাচ্ছে না।',
- rescanWallet: 'ওয়ালেট পুনরায় স্ক্যান', scanning: 'স্ক্যান হচ্ছে…', language: 'ভাষা',
- offlineBanner: 'নেটওয়ার্কে পৌঁছানো যাচ্ছে না — অফলাইনে চলছে। কয়েন লোড করতে সেটিংস থেকে স্ন্যাপশট ইম্পোর্ট করুন।', retry: 'আবার চেষ্টা',
- copied: 'কপি হয়েছে', snapshotExported: 'স্ন্যাপশট এক্সপোর্ট হয়েছে', importedNCoins: '{n}টি কয়েন ইম্পোর্ট হয়েছে',
- unmatchedSuffix: ' · {n}টি ঠিকানা এই ওয়ালেটে নেই', importFailed: 'ইম্পোর্ট ব্যর্থ: {msg}',
- copy: 'কপি', switchUnit: 'BTC / sats পাল্টান', footerMadeBy: 'তৈরি করেছেন', footerSourceOn: 'সোর্স কোড',
-});
-
-def('id', {
- passphrase: "Frasa sandi",
- howItWorks: "Cara kerjanya",
- installApp: "Pasang aplikasi",
- hiwBasicsTitle: "Dasar-dasarnya",
- hiwBasics1: "Saat Anda membuat dompet, halaman ini menghasilkan dua belas kata acak. Kata-kata itu adalah kunci dompet Anda. Siapa pun yang memilikinya bisa membelanjakan koin Anda, jadi tuliskan di kertas dan simpan di tempat yang hanya bisa Anda jangkau.",
- hiwBasics2: "Jika Anda kehilangan dua belas kata itu dan tidak punya cadangan, koin Anda hilang selamanya. Tidak ada tautan setel ulang dan tidak ada yang bisa dihubungi, jadi cadangkan dulu sebelum memasukkan uang.",
- hiwBasics3: "Tidak ada server dan tidak ada akun. Seluruh aplikasi adalah satu halaman yang berjalan di browser Anda, jadi tidak ada yang menyimpan koin Anda dan tidak ada server yang pernah melihat kunci Anda. Untuk menampilkan saldo dan riwayat, aplikasi membaca dari penjelajah blok publik (mempool.space secara default, atau node Anda sendiri jika Anda mengaturnya di Pengaturan).",
- hiwBasics4: "Anda bahkan bisa menyimpan halaman ini dan membukanya langsung dari komputer tanpa internet sama sekali. Aplikasi ini tetap berfungsi secara offline.",
- hiwBasics5: "Aplikasi ini mengikuti standar Bitcoin yang umum (frasa BIP39 12 kata dan kunci BIP84 native SegWit), jadi jika situs ini suatu saat hilang, Anda bisa memulihkan frasa yang sama di Sparrow, Electrum, atau dompet standar lainnya dan koin Anda akan tetap ada di sana.",
- hiwTribute: "Nama Hal Wallet adalah penghormatan kepada cypherpunk legendaris dan pelopor Bitcoin, Hal Finney (1956–2014).",
- signExport: "Tanda tangani & (siarkan di tempat lain)",
- scanQr: "Pindai QR",
- scanHint: "Arahkan kamera ke kode QR",
- scanNoCamera: "Tidak dapat mengakses kamera.",
- scanNoDecoder: "Pemindaian QR memerlukan koneksi saat pertama kali digunakan.",
- scanUnrecognized: "Tidak dapat membaca alamat Bitcoin dari QR itu.",
- broadcastScanned: "Siarkan transaksi?",
- broadcastNow: "Siarkan",
- scanOffline: "Anda sedang offline — sambungkan kembali untuk menyiarkan transaksi ini.",
- loadingHistory: "Memuat transaksi…",
- explorer: "Penjelajah blok",
- explorerDesc: "Server yang ditanyai dompet ini untuk saldo dan riwayat. Arahkan ke node Anda sendiri untuk privasi maksimal.",
- explorerUrl: "URL server",
- explorerUrlHint: "Basis REST Esplora / electrs, mis. https://mempool.space/api",
- deviceSync: "Sinkronisasi perangkat",
- deviceSyncDesc: "Jaga dompet ini tetap tersinkron di seluruh perangkat Anda dengan menyimpan salinan terenkripsi di relay Nostr — hanya perangkat dengan seed Anda yang bisa membacanya. Matikan untuk menyimpan semuanya di perangkat ini.",
- syncAcross: "Sinkronkan antar perangkat",
- syncOn: "Aktif",
- syncOff: "Nonaktif",
- relaysLabel: "Relay",
- relaysHint: "Satu URL wss:// per baris.",
- home: 'Beranda', logout: 'Keluar',
- createNew: 'Buat baru', importExisting: 'Impor yang ada',
- genIntro: 'Buat frasa benih baru 12 kata. Catatlah. Ini satu-satunya cara memulihkan dompet ini.',
- generateSeed: 'Buat frasa benih', writeDownWarn: '⚠ Tulis 12 kata ini di kertas, secara berurutan. Siapa pun yang memilikinya dapat menghabiskan koin Anda.',
- copyPhrase: 'Salin frasa', regenerate: 'Buat ulang', verifyBackup: 'Verifikasi cadangan', skipVerification: 'Lewati verifikasi',
- confirmBackupIntro: 'Konfirmasi cadangan dengan memasukkan kata yang diminta.', wordN: 'Kata #{n}',
- reenterPassphrase: 'Masukkan ulang frasa sandi', back: '← Kembali', openWallet: 'Buka dompet',
- wordsMismatch: 'Kata-kata itu tidak cocok dengan frasa Anda. Periksa cadangan Anda.',
- passphraseMismatch: 'Frasa sandi tidak cocok dengan yang Anda masukkan.',
- seedPhrase: 'Frasa benih', seedPlaceholder: 'masukkan kata-kata dipisahkan spasi',
- optionalPassphrase: 'Frasa sandi opsional', leaveBlank: 'kosongkan jika tidak dipakai', show: 'Tampilkan', hide: 'Sembunyikan',
- invalidSeed: 'Frasa benih tidak valid — periksa ejaan dan urutan kata.',
- keysNote: 'Kunci tidak pernah meninggalkan browser Anda. Berfungsi offline. Simpan halaman ini dan buka secara lokal.',
- balance: 'Saldo', pending: 'Tertunda',
- tabReceive: 'Terima', tabSend: 'Kirim', tabHistory: 'Riwayat', tabSettings: 'Pengaturan',
- copyAddress: 'Salin alamat', paymentReceived: 'Pembayaran diterima!', tapToProceed: 'Ketuk di mana saja untuk lanjut',
- recipient: 'Penerima', recipients: 'Penerima', max: 'Maks', feeRate: 'Biaya',
- feeEconomy: 'Hemat', feeNormal: 'Normal', feePriority: 'Prioritas', feeCustom: 'Kustom',
- selectedRate: 'Biaya dipilih: {n} sat/vB', coinSelection: 'Pemilihan koin', automatic: 'Otomatis', manual: 'Manual',
- noCoins: 'Tidak ada koin tersedia.', nSelected: '{n} dipilih', addRecipient: '+ Tambah penerima',
- reviewTx: 'Tinjau transaksi', remove: 'Hapus',
- enterRecipientAddr: 'Masukkan alamat penerima.', enterAddrForN: 'Masukkan alamat untuk penerima {n}.',
- enterValidAmtForN: 'Masukkan jumlah yang valid untuk penerima {n}.', selectCoin: 'Pilih setidaknya satu koin untuk dibelanjakan.',
- networkFee: 'Biaya jaringan', offlineSignNote: 'Offline: tanda tangani sekarang, lalu siarkan transaksi dari perangkat online.',
- signBroadcast: 'Tandatangani & siarkan', signTx: 'Tandatangani transaksi', broadcastFailed: 'Siaran gagal: {msg}', signingFailed: 'Penandatanganan gagal: {msg}',
- done: 'Selesai', txSignedNote: '✓ Transaksi ditandatangani. Siarkan kode di bawah dari perangkat online (mis. mempool.space → Broadcast).',
- transactionId: 'ID transaksi', signedTxRaw: 'Transaksi tertandatangani (kode)', copyHex: 'Salin kode', downloadLabel: 'Unduh',
- showQrAirgap: 'Tampilkan QR (transfer offline)', txBroadcast: '✓ Transaksi disiarkan!', copyTxid: 'Salin ID transaksi', viewOnMempool: 'Lihat di mempool.space ↗',
- noTxYet: 'Belum ada transaksi.', received: 'Diterima', sent: 'Terkirim', pendingTag: '⏳ tertunda', awaitingConfirmation: 'menunggu konfirmasi',
- feeShort: 'biaya {x}', historyOffline: 'Riwayat tidak tersedia saat offline.',
- status: 'Status', confirmed: 'Terkonfirmasi', confirmedTag: 'terkonfirmasi', pendingInMempool: 'Tertunda (di mempool)', block: 'Blok', date: 'Tanggal',
- copyId: 'Salin ID', backToHistory: '← Kembali ke riwayat',
- recoveryPhrase: 'Frasa pemulihan', recoveryWarn: '⚠ Siapa pun yang melihat kata-kata ini bisa mencuri dana Anda. Pastikan tidak ada yang melihat sebelum menampilkannya.',
- bip39Passphrase: 'Frasa sandi', copyPassphrase: 'Salin frasa sandi', revealRecovery: 'Tampilkan frasa pemulihan',
- offlineTransfer: 'Transfer offline', offlineTransferDesc: 'Ekspor koin Anda di perangkat online, lalu impor file di perangkat offline (dengan dompet + benih ini) untuk menandatangani tanpa internet.',
- exportSnapshot: '⤓ Ekspor snapshot', importSnapshot: 'Impor snapshot…', rescan: 'Pindai ulang',
- rescanDesc: 'Alamat Anda saat ini diperbarui otomatis. Pindai ulang hanya jika pembayaran dikirim ke alamat lama (dipakai ulang) dan tidak muncul.',
- rescanWallet: 'Pindai ulang dompet', scanning: 'Memindai…', language: 'Bahasa',
- offlineBanner: 'Tidak dapat menjangkau jaringan — bekerja offline. Impor snapshot di Pengaturan untuk memuat koin.', retry: 'Coba lagi',
- copied: 'Tersalin', snapshotExported: 'Snapshot diekspor', importedNCoins: '{n} koin diimpor',
- unmatchedSuffix: ' · {n} alamat bukan milik dompet ini', importFailed: 'Impor gagal: {msg}',
- copy: 'Salin', switchUnit: 'Ganti BTC / sats', footerMadeBy: 'dibuat oleh', footerSourceOn: 'sumber tersedia di',
-});
-
-def('tr', {
- passphrase: "Parola",
- howItWorks: "Nasıl çalışır",
- installApp: "Uygulamayı yükle",
- hiwBasicsTitle: "Temel bilgiler",
- hiwBasics1: "Bir cüzdan oluşturduğunuzda, sayfa rastgele on iki kelime üretir. Bu kelimeler cüzdanınızın anahtarıdır. Bunlara sahip olan herkes paralarınızı harcayabilir, bu yüzden onları bir kâğıda yazın ve yalnızca sizin ulaşabileceğiniz bir yerde saklayın.",
- hiwBasics2: "On iki kelimeyi kaybeder ve yedeğiniz olmazsa, paralarınız tamamen kaybolur. Sıfırlama bağlantısı yoktur ve arayabileceğiniz kimse yoktur, bu yüzden para yatırmadan önce onları yedekleyin.",
- hiwBasics3: "Sunucu yok, hesap yok. Tüm uygulama tarayıcınızda çalışan tek bir sayfadır, yani paralarınızı kimse tutmaz ve hiçbir sunucu anahtarlarınızı görmez. Bakiyenizi ve geçmişinizi göstermek için herkese açık bir blok gezgininden okur (varsayılan olarak mempool.space, ya da Ayarlar'da belirlerseniz kendi düğümünüz).",
- hiwBasics4: "Bu sayfayı kaydedip bilgisayarınızdan hiç internet olmadan bile açabilirsiniz. Çevrimdışı çalışmaya devam eder.",
- hiwBasics5: "Olağan Bitcoin standartlarını izler (12 kelimelik bir BIP39 ifadesi ve BIP84 yerel SegWit anahtarları), bu yüzden bu site bir gün kaybolursa aynı ifadeyi Sparrow, Electrum veya başka herhangi bir standart cüzdanda geri yükleyebilirsiniz ve paralarınız tam orada olur.",
- hiwTribute: "Hal Wallet adı, efsanevi cypherpunk ve Bitcoin öncüsü Hal Finney (1956–2014) anısına bir saygı duruşudur.",
- signExport: "İmzala ve (başka yerde yayınla)",
- scanQr: "QR tara",
- scanHint: "Kamerayı bir QR koduna doğrultun",
- scanNoCamera: "Kameraya erişilemedi.",
- scanNoDecoder: "QR taraması ilk kez kullanıldığında bir bağlantı gerektirir.",
- scanUnrecognized: "O QR kodundan bir Bitcoin adresi okunamadı.",
- broadcastScanned: "İşlem yayınlansın mı?",
- broadcastNow: "Yayınla",
- scanOffline: "Çevrimdışısınız — bu işlemi yayınlamak için yeniden bağlanın.",
- loadingHistory: "İşlemler yükleniyor…",
- explorer: "Blok gezgini",
- explorerDesc: "Bu cüzdanın bakiyeler ve geçmiş için sorguladığı sunucu. Maksimum gizlilik için kendi düğümünüze yönlendirin.",
- explorerUrl: "Sunucu URL'si",
- explorerUrlHint: "Esplora / electrs REST tabanı, örn. https://mempool.space/api",
- deviceSync: "Cihaz senkronizasyonu",
- deviceSyncDesc: "Bir Nostr aktarıcısında şifrelenmiş bir kopya saklayarak bu cüzdanı cihazlarınız arasında senkronize tutun — yalnızca tohumunuza sahip bir cihaz onu okuyabilir. Her şeyi bu cihazda tutmak için kapatın.",
- syncAcross: "Cihazlar arasında senkronize et",
- syncOn: "Açık",
- syncOff: "Kapalı",
- relaysLabel: "Aktarıcılar",
- relaysHint: "Satır başına bir wss:// URL'si.",
- home: 'Ana sayfa', logout: 'Çıkış',
- createNew: 'Yeni oluştur', importExisting: 'Mevcudu içe aktar',
- genIntro: 'Yeni 12 kelimelik tohum ifadesi oluşturun. Yazın. Bu cüzdanı kurtarmanın tek yolu budur.',
- generateSeed: 'Tohum ifadesi oluştur', writeDownWarn: '⚠ Bu 12 kelimeyi sırayla kâğıda yazın. Bunlara sahip olan herkes paranızı harcayabilir.',
- copyPhrase: 'İfadeyi kopyala', regenerate: 'Yeniden oluştur', verifyBackup: 'Yedeği doğrula', skipVerification: 'Doğrulamayı atla',
- confirmBackupIntro: 'İstenen kelimeleri girerek yedeğinizi onaylayın.', wordN: '{n}. kelime',
- reenterPassphrase: 'Parolayı tekrar girin', back: '← Geri', openWallet: 'Cüzdanı aç',
- wordsMismatch: 'Bu kelimeler ifadenizle eşleşmiyor. Yedeğinizi kontrol edin.',
- passphraseMismatch: 'Bu parola girdiğinizle eşleşmiyor.',
- seedPhrase: 'Tohum ifadesi', seedPlaceholder: 'kelimelerinizi boşlukla ayırarak girin',
- optionalPassphrase: 'İsteğe bağlı parola', leaveBlank: 'kullanılmıyorsa boş bırakın', show: 'Göster', hide: 'Gizle',
- invalidSeed: 'Geçersiz tohum ifadesi — yazımı ve sırayı kontrol edin.',
- keysNote: 'Anahtarlar tarayıcınızdan asla çıkmaz. Tamamen çevrimdışı çalışır. Bu sayfayı kaydedip yerel olarak açın.',
- balance: 'Bakiye', pending: 'Beklemede',
- tabReceive: 'Al', tabSend: 'Gönder', tabHistory: 'Geçmiş', tabSettings: 'Ayarlar',
- copyAddress: 'Adresi kopyala', paymentReceived: 'Ödeme alındı!', tapToProceed: 'Devam etmek için herhangi bir yere dokunun',
- recipient: 'Alıcı', recipients: 'Alıcılar', max: 'Maks', feeRate: 'Ücret',
- feeEconomy: 'Ekonomik', feeNormal: 'Normal', feePriority: 'Öncelikli', feeCustom: 'Özel',
- selectedRate: 'Seçilen ücret: {n} sat/vB', coinSelection: 'Coin seçimi', automatic: 'Otomatik', manual: 'Manuel',
- noCoins: 'Kullanılabilir coin yok.', nSelected: '{n} seçili', addRecipient: '+ Alıcı ekle',
- reviewTx: 'İşlemi gözden geçir', remove: 'Kaldır',
- enterRecipientAddr: 'Bir alıcı adresi girin.', enterAddrForN: 'Alıcı {n} için bir adres girin.',
- enterValidAmtForN: 'Alıcı {n} için geçerli bir tutar girin.', selectCoin: 'Harcamak için en az bir coin seçin.',
- networkFee: 'Ağ ücreti', offlineSignNote: 'Çevrimdışı: şimdi imzalayın, sonra işlemi çevrimiçi bir cihazdan yayınlayın.',
- signBroadcast: 'İmzala ve yayınla', signTx: 'İşlemi imzala', broadcastFailed: 'Yayın başarısız: {msg}', signingFailed: 'İmzalama başarısız: {msg}',
- done: 'Tamam', txSignedNote: '✓ İşlem imzalandı. Aşağıdaki kodu çevrimiçi bir cihazdan yayınlayın (örn. mempool.space → Broadcast).',
- transactionId: 'İşlem kimliği', signedTxRaw: 'İmzalı işlem (kod)', copyHex: 'kod kopyala', downloadLabel: 'İndir',
- showQrAirgap: 'QR göster (çevrimdışı aktarım için)', txBroadcast: '✓ İşlem yayınlandı!', copyTxid: 'İşlem kimliği kopyala', viewOnMempool: 'mempool.space’te gör ↗',
- noTxYet: 'Henüz işlem yok.', received: 'Alındı', sent: 'Gönderildi', pendingTag: '⏳ beklemede', awaitingConfirmation: 'onay bekleniyor',
- feeShort: 'ücret {x}', historyOffline: 'Çevrimdışıyken geçmiş kullanılamaz.',
- status: 'Durum', confirmed: 'Onaylandı', confirmedTag: 'onaylandı', pendingInMempool: 'Beklemede (mempool’da)', block: 'Blok', date: 'Tarih',
- copyId: 'Kimliği kopyala', backToHistory: '← Geçmişe dön',
- recoveryPhrase: 'Kurtarma ifadesi', recoveryWarn: '⚠ Bu kelimeleri gören herkes paranızı çalabilir. Göstermeden önce kimsenin bakmadığından emin olun.',
- bip39Passphrase: 'Parola', copyPassphrase: 'Parolayı kopyala', revealRecovery: 'Kurtarma ifadesini göster',
- offlineTransfer: 'Çevrimdışı aktarım', offlineTransferDesc: 'Coinlerinizi çevrimiçi bir cihazda dışa aktarın, sonra çevrimdışı cihazda (bu cüzdan + tohum ile) dosyayı içe aktarıp internetsiz imzalayın.',
- exportSnapshot: '⤓ Anlık görüntü dışa aktar', importSnapshot: 'Anlık görüntü içe aktar…', rescan: 'Yeniden tara',
- rescanDesc: 'Mevcut adresiniz otomatik güncellenir. Yalnızca bir ödeme eski (yeniden kullanılmış) bir adrese geldiyse ve görünmüyorsa yeniden tarayın.',
- rescanWallet: 'Cüzdanı yeniden tara', scanning: 'Taranıyor…', language: 'Dil',
- offlineBanner: 'Ağa ulaşılamıyor — çevrimdışı çalışılıyor. Coinleri yüklemek için Ayarlar’dan anlık görüntü içe aktarın.', retry: 'Yeniden dene',
- copied: 'Kopyalandı', snapshotExported: 'Anlık görüntü dışa aktarıldı', importedNCoins: '{n} coin içe aktarıldı',
- unmatchedSuffix: ' · {n} adres bu cüzdanda değil', importFailed: 'İçe aktarma başarısız: {msg}',
- copy: 'Kopyala', switchUnit: 'BTC / sats değiştir', footerMadeBy: 'yapan:', footerSourceOn: 'kaynak kodu',
-});
-
-def('vi', {
- passphrase: "Cụm mật khẩu",
- howItWorks: "Cách hoạt động",
- installApp: "Cài đặt ứng dụng",
- hiwBasicsTitle: "Những điều cơ bản",
- hiwBasics1: "Khi bạn tạo ví, trang web sẽ tạo ra mười hai từ ngẫu nhiên. Những từ đó là chìa khóa cho ví của bạn. Bất kỳ ai có chúng đều có thể tiêu số coin, vì vậy hãy ghi chúng ra giấy và cất ở nơi chỉ mình bạn có thể lấy được.",
- hiwBasics2: "Nếu bạn làm mất mười hai từ này và không có bản sao lưu, số coin sẽ mất vĩnh viễn. Không có liên kết đặt lại và không có ai để gọi, vì vậy hãy sao lưu chúng trước khi nạp tiền vào.",
- hiwBasics3: "Không có máy chủ và không có tài khoản. Toàn bộ ứng dụng là một trang duy nhất chạy trong trình duyệt của bạn, nên không ai giữ coin của bạn và không có thứ gì trên máy chủ từng thấy được khóa của bạn. Để hiển thị số dư và lịch sử, nó đọc dữ liệu từ một trình duyệt khối công khai (mặc định là mempool.space, hoặc node của riêng bạn nếu bạn thiết lập trong phần Cài đặt).",
- hiwBasics4: "Bạn thậm chí có thể lưu trang này và mở trực tiếp từ máy tính mà không cần internet. Nó vẫn hoạt động ngoại tuyến.",
- hiwBasics5: "Nó tuân theo các tiêu chuẩn Bitcoin thông thường (cụm 12 từ BIP39 và khóa SegWit gốc BIP84), nên nếu trang web này biến mất, bạn có thể khôi phục cùng cụm từ đó trong Sparrow, Electrum, hoặc bất kỳ ví tiêu chuẩn nào khác và số coin của bạn sẽ vẫn ở đó.",
- hiwTribute: "Cái tên Hal Wallet là sự tri ân dành cho nhà cypherpunk huyền thoại và người tiên phong của Bitcoin, Hal Finney (1956–2014).",
- signExport: "Ký & (phát đi nơi khác)",
- scanQr: "Quét QR",
- scanHint: "Hướng camera vào mã QR",
- scanNoCamera: "Không thể truy cập camera.",
- scanNoDecoder: "Quét QR cần kết nối trong lần sử dụng đầu tiên.",
- scanUnrecognized: "Không thể đọc địa chỉ Bitcoin từ mã QR đó.",
- broadcastScanned: "Phát giao dịch?",
- broadcastNow: "Phát đi",
- scanOffline: "Bạn đang ngoại tuyến — hãy kết nối lại để phát giao dịch này.",
- loadingHistory: "Đang tải giao dịch…",
- explorer: "Trình duyệt khối",
- explorerDesc: "Máy chủ mà ví này truy vấn để lấy số dư và lịch sử. Hãy trỏ nó tới node của riêng bạn để có quyền riêng tư tối đa.",
- explorerUrl: "URL máy chủ",
- explorerUrlHint: "Cơ sở REST của Esplora / electrs, ví dụ https://mempool.space/api",
- deviceSync: "Đồng bộ thiết bị",
- deviceSyncDesc: "Giữ ví này đồng bộ trên các thiết bị của bạn bằng cách lưu một bản sao đã mã hóa trên relay Nostr — chỉ thiết bị có seed của bạn mới đọc được. Hãy tắt nó để giữ mọi thứ trên thiết bị này.",
- syncAcross: "Đồng bộ trên các thiết bị",
- syncOn: "Bật",
- syncOff: "Tắt",
- relaysLabel: "Relay",
- relaysHint: "Mỗi URL wss:// trên một dòng.",
- home: 'Trang chủ', logout: 'Đăng xuất',
- createNew: 'Tạo mới', importExisting: 'Nhập ví có sẵn',
- genIntro: 'Tạo cụm từ hạt giống 12 từ mới. Hãy ghi lại. Đây là cách duy nhất để khôi phục ví này.',
- generateSeed: 'Tạo cụm từ hạt giống', writeDownWarn: '⚠ Ghi 12 từ này ra giấy, theo đúng thứ tự. Bất kỳ ai có chúng đều có thể tiêu coin của bạn.',
- copyPhrase: 'Sao chép cụm từ', regenerate: 'Tạo lại', verifyBackup: 'Xác minh sao lưu', skipVerification: 'Bỏ qua xác minh',
- confirmBackupIntro: 'Xác nhận bản sao lưu bằng cách nhập các từ được yêu cầu.', wordN: 'Từ #{n}',
- reenterPassphrase: 'Nhập lại mật khẩu', back: '← Quay lại', openWallet: 'Mở ví',
- wordsMismatch: 'Các từ này không khớp với cụm từ của bạn. Hãy kiểm tra bản sao lưu.',
- passphraseMismatch: 'Mật khẩu không khớp với mật khẩu bạn đã nhập.',
- seedPhrase: 'Cụm từ hạt giống', seedPlaceholder: 'nhập các từ cách nhau bằng dấu cách',
- optionalPassphrase: 'Mật khẩu tùy chọn', leaveBlank: 'để trống nếu không dùng', show: 'Hiện', hide: 'Ẩn',
- invalidSeed: 'Cụm từ hạt giống không hợp lệ — kiểm tra chính tả và thứ tự.',
- keysNote: 'Khóa không bao giờ rời khỏi trình duyệt của bạn. Hoạt động hoàn toàn ngoại tuyến. Lưu trang này và mở cục bộ.',
- balance: 'Số dư', pending: 'Đang chờ',
- tabReceive: 'Nhận', tabSend: 'Gửi', tabHistory: 'Lịch sử', tabSettings: 'Cài đặt',
- copyAddress: 'Sao chép địa chỉ', paymentReceived: 'Đã nhận thanh toán!', tapToProceed: 'Chạm vào bất kỳ đâu để tiếp tục',
- recipient: 'Người nhận', recipients: 'Người nhận', max: 'Tối đa', feeRate: 'Phí',
- feeEconomy: 'Tiết kiệm', feeNormal: 'Thường', feePriority: 'Ưu tiên', feeCustom: 'Tùy chỉnh',
- selectedRate: 'Phí đã chọn: {n} sat/vB', coinSelection: 'Chọn coin', automatic: 'Tự động', manual: 'Thủ công',
- noCoins: 'Không có coin khả dụng.', nSelected: 'Đã chọn {n}', addRecipient: '+ Thêm người nhận',
- reviewTx: 'Xem lại giao dịch', remove: 'Xóa',
- enterRecipientAddr: 'Nhập địa chỉ người nhận.', enterAddrForN: 'Nhập địa chỉ cho người nhận {n}.',
- enterValidAmtForN: 'Nhập số tiền hợp lệ cho người nhận {n}.', selectCoin: 'Chọn ít nhất một coin để chi.',
- networkFee: 'Phí mạng', offlineSignNote: 'Ngoại tuyến: ký ngay, sau đó phát giao dịch từ thiết bị có mạng.',
- signBroadcast: 'Ký & phát', signTx: 'Ký giao dịch', broadcastFailed: 'Phát thất bại: {msg}', signingFailed: 'Ký thất bại: {msg}',
- done: 'Xong', txSignedNote: '✓ Đã ký giao dịch. Phát mã bên dưới từ thiết bị có mạng (vd. mempool.space → Broadcast).',
- transactionId: 'ID giao dịch', signedTxRaw: 'Giao dịch đã ký (mã)', copyHex: 'Sao chép mã', downloadLabel: 'Tải xuống',
- showQrAirgap: 'Hiện QR (chuyển ngoại tuyến)', txBroadcast: '✓ Đã phát giao dịch!', copyTxid: 'Sao chép ID giao dịch', viewOnMempool: 'Xem trên mempool.space ↗',
- noTxYet: 'Chưa có giao dịch.', received: 'Đã nhận', sent: 'Đã gửi', pendingTag: '⏳ đang chờ', awaitingConfirmation: 'đang chờ xác nhận',
- feeShort: 'phí {x}', historyOffline: 'Không xem được lịch sử khi ngoại tuyến.',
- status: 'Trạng thái', confirmed: 'Đã xác nhận', confirmedTag: 'đã xác nhận', pendingInMempool: 'Đang chờ (trong mempool)', block: 'Khối', date: 'Ngày',
- copyId: 'Sao chép ID', backToHistory: '← Về lịch sử',
- recoveryPhrase: 'Cụm từ khôi phục', recoveryWarn: '⚠ Bất kỳ ai thấy các từ này đều có thể đánh cắp tiền của bạn. Hãy chắc chắn không ai nhìn trước khi hiển thị.',
- bip39Passphrase: 'Mật khẩu', copyPassphrase: 'Sao chép mật khẩu', revealRecovery: 'Hiện cụm từ khôi phục',
- offlineTransfer: 'Chuyển ngoại tuyến', offlineTransferDesc: 'Xuất coin trên thiết bị có mạng, rồi nhập tệp trên thiết bị ngoại tuyến (có ví và hạt giống này) để ký không cần internet.',
- exportSnapshot: '⤓ Xuất snapshot', importSnapshot: 'Nhập snapshot…', rescan: 'Quét lại',
- rescanDesc: 'Địa chỉ hiện tại tự cập nhật. Chỉ quét lại nếu thanh toán được gửi đến địa chỉ cũ (dùng lại) và không hiển thị.',
- rescanWallet: 'Quét lại ví', scanning: 'Đang quét…', language: 'Ngôn ngữ',
- offlineBanner: 'Không kết nối được mạng — đang ngoại tuyến. Nhập snapshot trong Cài đặt để tải coin.', retry: 'Thử lại',
- copied: 'Đã sao chép', snapshotExported: 'Đã xuất snapshot', importedNCoins: 'Đã nhập {n} coin',
- unmatchedSuffix: ' · {n} địa chỉ không thuộc ví này', importFailed: 'Nhập thất bại: {msg}',
- copy: 'Sao chép', switchUnit: 'Đổi BTC / sats', footerMadeBy: 'làm bởi', footerSourceOn: 'mã nguồn tại',
-});
-
-def('sw', {
- passphrase: "Nenosiri",
- howItWorks: "Jinsi inavyofanya kazi",
- installApp: "Sakinisha programu",
- hiwBasicsTitle: "Misingi",
- hiwBasics1: "Unapotengeneza pochi, ukurasa hutengeneza maneno kumi na mawili ya nasibu. Maneno hayo ndiyo ufunguo wa pochi yako. Yeyote aliye nayo anaweza kutumia sarafu, kwa hivyo yaandike kwenye karatasi na yahifadhi mahali ambapo ni wewe tu unaweza kufikia.",
- hiwBasics2: "Ukipoteza maneno kumi na mawili na hauna nakala ya akiba, sarafu zimepotea kabisa. Hakuna kiungo cha kuweka upya wala mtu wa kupigia simu, kwa hivyo yahifadhi kabla ya kuweka pesa.",
- hiwBasics3: "Hakuna seva wala akaunti. Programu nzima ni ukurasa mmoja unaoendeshwa kwenye kivinjari chako, kwa hivyo hakuna anayeshikilia sarafu zako na hakuna kitu kwenye seva kinachoona funguo zako. Ili kuonyesha salio na historia yako, husoma kutoka kwa kichunguzi cha umma cha vitalu (mempool.space kwa chaguo-msingi, au nodi yako mwenyewe ukiweka moja katika Mipangilio).",
- hiwBasics4: "Unaweza hata kuhifadhi ukurasa huu na kuufungua moja kwa moja kutoka kwa kompyuta yako bila intaneti kabisa. Unaendelea kufanya kazi nje ya mtandao.",
- hiwBasics5: "Hufuata viwango vya kawaida vya Bitcoin (kifungu cha maneno 12 cha BIP39 na funguo asili za BIP84 SegWit), kwa hivyo ikiwa tovuti hii itatoweka, unaweza kurejesha kifungu hicho cha maneno katika Sparrow, Electrum, au pochi nyingine yoyote ya kawaida na sarafu zako zitakuwa pale pale.",
- hiwTribute: "Jina Hal Wallet ni heshima kwa mwanaharakati maarufu wa cypherpunk na mwanzilishi wa Bitcoin, Hal Finney (1956–2014).",
- signExport: "Saini na (sambaza mahali pengine)",
- scanQr: "Changanua QR",
- scanHint: "Elekeza kamera kwenye msimbo wa QR",
- scanNoCamera: "Imeshindwa kufikia kamera.",
- scanNoDecoder: "Kuchanganua QR kunahitaji muunganisho mara ya kwanza kunapotumika.",
- scanUnrecognized: "Imeshindwa kusoma anwani ya Bitcoin kutoka kwa QR hiyo.",
- broadcastScanned: "Sambaza muamala?",
- broadcastNow: "Sambaza",
- scanOffline: "Uko nje ya mtandao — unganisha tena ili kusambaza muamala huu.",
- loadingHistory: "Inapakia miamala…",
- explorer: "Kichunguzi cha vitalu",
- explorerDesc: "Seva ambayo pochi hii huuliza kuhusu salio na historia. Ielekeze kwenye nodi yako mwenyewe kwa faragha ya juu zaidi.",
- explorerUrl: "URL ya seva",
- explorerUrlHint: "Msingi wa REST wa Esplora / electrs, k.m. https://mempool.space/api",
- deviceSync: "Usawazishaji wa vifaa",
- deviceSyncDesc: "Weka pochi hii ikiwa imesawazishwa katika vifaa vyako kwa kuhifadhi nakala iliyosimbwa kwa njia fiche kwenye relay ya Nostr — kifaa chenye mbegu yako pekee ndicho kinaweza kuisoma. Izime ili kuweka kila kitu kwenye kifaa hiki.",
- syncAcross: "Sawazisha katika vifaa",
- syncOn: "Imewashwa",
- syncOff: "Imezimwa",
- relaysLabel: "Relay",
- relaysHint: "URL moja ya wss:// kwa kila mstari.",
- home: 'Mwanzo', logout: 'Toka',
- createNew: 'Tengeneza mpya', importExisting: 'Leta iliyopo',
- genIntro: 'Tengeneza kifungu kipya cha mbegu chenye maneno 12. Kiandike. Ndiyo njia pekee ya kurejesha pochi hii.',
- generateSeed: 'Tengeneza kifungu cha mbegu', writeDownWarn: '⚠ Andika maneno haya 12 kwenye karatasi, kwa mpangilio. Yeyote mwenye nayo anaweza kutumia sarafu zako.',
- copyPhrase: 'Nakili kifungu', regenerate: 'Tengeneza tena', verifyBackup: 'Thibitisha nakala', skipVerification: 'Ruka uthibitisho',
- confirmBackupIntro: 'Thibitisha nakala yako kwa kuingiza maneno yaliyoombwa.', wordN: 'Neno #{n}',
- reenterPassphrase: 'Ingiza tena nenosiri', back: '← Rudi', openWallet: 'Fungua pochi',
- wordsMismatch: 'Maneno hayo hayalingani na kifungu chako. Angalia nakala yako.',
- passphraseMismatch: 'Nenosiri hilo halilingani na ulilolitumia.',
- seedPhrase: 'Kifungu cha mbegu', seedPlaceholder: 'andika maneno yako yakitenganishwa kwa nafasi',
- optionalPassphrase: 'Nenosiri la hiari', leaveBlank: 'acha tupu kama halitumiki', show: 'Onyesha', hide: 'Ficha',
- invalidSeed: 'Kifungu cha mbegu si sahihi — angalia tahajia na mpangilio.',
- keysNote: 'Funguo hazitoki kamwe kwenye kivinjari chako. Hufanya kazi nje ya mtandao. Hifadhi ukurasa huu uufungue ndani.',
- balance: 'Salio', pending: 'Inasubiri',
- tabReceive: 'Pokea', tabSend: 'Tuma', tabHistory: 'Historia', tabSettings: 'Mipangilio',
- copyAddress: 'Nakili anwani', paymentReceived: 'Malipo yamepokelewa!', tapToProceed: 'Gusa popote ili kuendelea',
- recipient: 'Mpokeaji', recipients: 'Wapokeaji', max: 'Kiwango cha juu', feeRate: 'Ada',
- feeEconomy: 'Nafuu', feeNormal: 'Kawaida', feePriority: 'Kipaumbele', feeCustom: 'Maalum',
- selectedRate: 'Ada iliyochaguliwa: {n} sat/vB', coinSelection: 'Uchaguzi wa sarafu', automatic: 'Otomatiki', manual: 'Mwenyewe',
- noCoins: 'Hakuna sarafu zinazopatikana.', nSelected: '{n} zimechaguliwa', addRecipient: '+ Ongeza mpokeaji',
- reviewTx: 'Kagua muamala', remove: 'Ondoa',
- enterRecipientAddr: 'Ingiza anwani ya mpokeaji.', enterAddrForN: 'Ingiza anwani ya mpokeaji {n}.',
- enterValidAmtForN: 'Ingiza kiasi sahihi kwa mpokeaji {n}.', selectCoin: 'Chagua angalau sarafu moja ya kutumia.',
- networkFee: 'Ada ya mtandao', offlineSignNote: 'Nje ya mtandao: tia saini sasa, kisha tangaza muamala kutoka kifaa chenye mtandao.',
- signBroadcast: 'Tia saini & tangaza', signTx: 'Tia saini muamala', broadcastFailed: 'Kutangaza kumeshindwa: {msg}', signingFailed: 'Kutia saini kumeshindwa: {msg}',
- done: 'Imekamilika', txSignedNote: '✓ Muamala umetiwa saini. Tangaza msimbo ulio hapa chini kutoka kifaa chenye mtandao (mf. mempool.space → Broadcast).',
- transactionId: 'Kitambulisho cha muamala', signedTxRaw: 'Muamala uliotiwa saini (msimbo)', copyHex: 'Nakili msimbo', downloadLabel: 'Pakua',
- showQrAirgap: 'Onyesha QR (kuhamisha nje ya mtandao)', txBroadcast: '✓ Muamala umetangazwa!', copyTxid: 'Nakili kitambulisho cha muamala', viewOnMempool: 'Tazama kwenye mempool.space ↗',
- noTxYet: 'Bado hakuna miamala.', received: 'Imepokelewa', sent: 'Imetumwa', pendingTag: '⏳ inasubiri', awaitingConfirmation: 'inasubiri uthibitisho',
- feeShort: 'ada {x}', historyOffline: 'Historia haipatikani ukiwa nje ya mtandao.',
- status: 'Hali', confirmed: 'Imethibitishwa', confirmedTag: 'imethibitishwa', pendingInMempool: 'Inasubiri (kwenye mempool)', block: 'Block', date: 'Tarehe',
- copyId: 'Nakili kitambulisho', backToHistory: '← Rudi kwenye historia',
- recoveryPhrase: 'Kifungu cha kurejesha', recoveryWarn: '⚠ Yeyote anayeona maneno haya anaweza kuiba fedha zako. Hakikisha hakuna anayetazama kabla ya kuyaonyesha.',
- bip39Passphrase: 'Nenosiri', copyPassphrase: 'Nakili nenosiri', revealRecovery: 'Onyesha kifungu cha kurejesha',
- offlineTransfer: 'Uhamisho nje ya mtandao', offlineTransferDesc: 'Hamisha sarafu zako kwenye kifaa chenye mtandao, kisha leta faili kwenye kifaa kisicho na mtandao (chenye pochi hii na mbegu) ili kutia saini bila intaneti.',
- exportSnapshot: '⤓ Hamisha snapshot', importSnapshot: 'Leta snapshot…', rescan: 'Changanua tena',
- rescanDesc: 'Anwani yako ya sasa husasishwa kiotomatiki. Changanua tena tu ikiwa malipo yalitumwa kwa anwani ya zamani (iliyotumika tena) na hayaonekani.',
- rescanWallet: 'Changanua pochi tena', scanning: 'Inachanganua…', language: 'Lugha',
- offlineBanner: 'Imeshindwa kufikia mtandao — inafanya kazi nje ya mtandao. Leta snapshot katika Mipangilio kupakia sarafu.', retry: 'Jaribu tena',
- copied: 'Imenakiliwa', snapshotExported: 'Snapshot imehamishwa', importedNCoins: 'Sarafu {n} zimeletwa',
- unmatchedSuffix: ' · anwani {n} si za pochi hii', importFailed: 'Kuleta kumeshindwa: {msg}',
- copy: 'Nakili', switchUnit: 'Badilisha BTC / sats', footerMadeBy: 'imetengenezwa na', footerSourceOn: 'msimbo unapatikana',
-});
-
-def('mr', {
- passphrase: "पासफ्रेज",
- howItWorks: "हे कसे चालते",
- installApp: "अॅप इन्स्टॉल करा",
- hiwBasicsTitle: "मूलभूत गोष्टी",
- hiwBasics1: "तुम्ही वॉलेट तयार करता तेव्हा हे पान बारा यादृच्छिक शब्द तयार करते. तेच शब्द तुमच्या वॉलेटची किल्ली आहेत. ज्याच्याकडे ते आहेत तो कॉइन्स खर्च करू शकतो, म्हणून ते कागदावर लिहून ठेवा आणि फक्त तुम्हालाच पोहोचता येईल अशा ठिकाणी ठेवा.",
- hiwBasics2: "जर तुम्ही हे बारा शब्द हरवले आणि तुमच्याकडे बॅकअप नसेल, तर कॉइन्स कायमचे गेले. रीसेट लिंक नाही आणि कुणाला फोन करायचाही पर्याय नाही, म्हणून पैसे टाकण्यापूर्वी त्यांचा बॅकअप घ्या.",
- hiwBasics3: "येथे कोणताही सर्व्हर नाही आणि कोणतेही खाते नाही. संपूर्ण अॅप एकच पान आहे जे तुमच्या ब्राउझरमध्ये चालते, त्यामुळे तुमचे कॉइन्स कुणाकडेही नसतात आणि कोणत्याही सर्व्हरवर तुमच्या किल्ल्या कधीच दिसत नाहीत. तुमची शिल्लक आणि इतिहास दाखवण्यासाठी ते सार्वजनिक ब्लॉक एक्सप्लोररमधून वाचते (मूलनुसार mempool.space, किंवा तुम्ही सेटिंग्जमध्ये सेट केल्यास तुमचा स्वतःचा नोड).",
- hiwBasics4: "तुम्ही हे पान सेव्ह करून इंटरनेटशिवायही थेट तुमच्या संगणकावरून उघडू शकता. ते ऑफलाइनही चालत राहते.",
- hiwBasics5: "ते नेहमीच्या बिटकॉइन मानकांचे पालन करते (१२-शब्दांचा BIP39 फ्रेज आणि BIP84 नेटिव्ह SegWit किल्ल्या), त्यामुळे ही साइट कधी नाहीशी झाली तरी तुम्ही तोच फ्रेज Sparrow, Electrum, किंवा इतर कोणत्याही मानक वॉलेटमध्ये पुनर्संचयित करू शकता आणि तुमचे कॉइन्स तिथेच असतील.",
- hiwTribute: "Hal Wallet हे नाव पौराणिक सायफरपंक आणि बिटकॉइन अग्रदूत Hal Finney (१९५६–२०१४) यांना श्रद्धांजली आहे.",
- signExport: "साइन करा आणि (इतरत्र ब्रॉडकास्ट करा)",
- scanQr: "QR स्कॅन करा",
- scanHint: "कॅमेरा QR कोडकडे रोखा",
- scanNoCamera: "कॅमेरा वापरता आला नाही.",
- scanNoDecoder: "QR स्कॅनिंगसाठी पहिल्यांदा वापरताना कनेक्शन आवश्यक आहे.",
- scanUnrecognized: "त्या QR मधून बिटकॉइन पत्ता वाचता आला नाही.",
- broadcastScanned: "व्यवहार ब्रॉडकास्ट करायचा?",
- broadcastNow: "ब्रॉडकास्ट करा",
- scanOffline: "तुम्ही ऑफलाइन आहात — हा व्यवहार ब्रॉडकास्ट करण्यासाठी पुन्हा कनेक्ट व्हा.",
- loadingHistory: "व्यवहार लोड होत आहेत…",
- explorer: "ब्लॉक एक्सप्लोरर",
- explorerDesc: "हे वॉलेट शिल्लक आणि इतिहासासाठी ज्या सर्व्हरला विचारणा करते. कमाल गोपनीयतेसाठी ते तुमच्या स्वतःच्या नोडकडे रोखा.",
- explorerUrl: "सर्व्हर URL",
- explorerUrlHint: "Esplora / electrs REST बेस, उदा. https://mempool.space/api",
- deviceSync: "डिव्हाइस सिंक",
- deviceSyncDesc: "Nostr रिलेवर एन्क्रिप्टेड प्रत साठवून हे वॉलेट तुमच्या सर्व डिव्हाइसवर सिंक ठेवा — फक्त तुमचा सीड असलेले डिव्हाइसच ते वाचू शकते. सर्व काही या डिव्हाइसवरच ठेवण्यासाठी ते बंद करा.",
- syncAcross: "डिव्हाइसदरम्यान सिंक करा",
- syncOn: "चालू",
- syncOff: "बंद",
- relaysLabel: "रिले",
- relaysHint: "प्रति ओळ एक wss:// URL.",
- home: 'मुख्यपृष्ठ', logout: 'बाहेर पडा',
- createNew: 'नवीन तयार करा', importExisting: 'अस्तित्वातील आयात करा',
- genIntro: 'नवीन १२-शब्दांचा सीड वाक्यांश तयार करा. तो लिहून ठेवा. हे वॉलेट परत मिळवण्याचा हाच एकमेव मार्ग आहे.',
- generateSeed: 'सीड वाक्यांश तयार करा', writeDownWarn: '⚠ हे १२ शब्द क्रमाने कागदावर लिहा. ज्याच्याकडे हे असतील तो तुमची नाणी खर्च करू शकतो.',
- copyPhrase: 'वाक्यांश कॉपी करा', regenerate: 'पुन्हा तयार करा', verifyBackup: 'बॅकअप तपासा', skipVerification: 'पडताळणी वगळा',
- confirmBackupIntro: 'मागितलेले शब्द टाकून तुमचा बॅकअप निश्चित करा.', wordN: 'शब्द #{n}',
- reenterPassphrase: 'पासफ्रेज पुन्हा टाका', back: '← मागे', openWallet: 'वॉलेट उघडा',
- wordsMismatch: 'हे शब्द तुमच्या वाक्यांशाशी जुळत नाहीत. तुमचा बॅकअप तपासा.',
- passphraseMismatch: 'हा पासफ्रेज तुम्ही टाकलेल्याशी जुळत नाही.',
- seedPhrase: 'सीड वाक्यांश', seedPlaceholder: 'तुमचे शब्द स्पेसने वेगळे करून टाका',
- optionalPassphrase: 'ऐच्छिक पासफ्रेज', leaveBlank: 'वापर नसल्यास रिकामे ठेवा', show: 'दाखवा', hide: 'लपवा',
- invalidSeed: 'अवैध सीड वाक्यांश — स्पेलिंग व क्रम तपासा.',
- keysNote: 'की कधीही तुमचा ब्राउझर सोडत नाहीत. पूर्णपणे ऑफलाइन चालते. हे पान जतन करून स्थानिकरीत्या उघडा.',
- balance: 'शिल्लक', pending: 'प्रलंबित',
- tabReceive: 'मिळवा', tabSend: 'पाठवा', tabHistory: 'इतिहास', tabSettings: 'सेटिंग्ज',
- copyAddress: 'पत्ता कॉपी करा', paymentReceived: 'पेमेंट मिळाले!', tapToProceed: 'पुढे जाण्यासाठी कुठेही टॅप करा',
- recipient: 'प्राप्तकर्ता', recipients: 'प्राप्तकर्ते', max: 'कमाल', feeRate: 'शुल्क',
- feeEconomy: 'किफायतशीर', feeNormal: 'सामान्य', feePriority: 'प्राधान्य', feeCustom: 'सानुकूल',
- selectedRate: 'निवडलेले शुल्क: {n} sat/vB', coinSelection: 'नाणे निवड', automatic: 'स्वयंचलित', manual: 'स्वहस्ते',
- noCoins: 'कोणतीही नाणी उपलब्ध नाहीत.', nSelected: '{n} निवडली', addRecipient: '+ प्राप्तकर्ता जोडा',
- reviewTx: 'व्यवहार पुनरावलोकन', remove: 'काढा',
- enterRecipientAddr: 'प्राप्तकर्त्याचा पत्ता टाका.', enterAddrForN: 'प्राप्तकर्ता {n} चा पत्ता टाका.',
- enterValidAmtForN: 'प्राप्तकर्ता {n} साठी वैध रक्कम टाका.', selectCoin: 'खर्चासाठी किमान एक नाणे निवडा.',
- networkFee: 'नेटवर्क शुल्क', offlineSignNote: 'ऑफलाइन: आता स्वाक्षरी करा, मग ऑनलाइन उपकरणावरून व्यवहार प्रसारित करा.',
- signBroadcast: 'स्वाक्षरी व प्रसारण', signTx: 'व्यवहार स्वाक्षरी', broadcastFailed: 'प्रसारण अयशस्वी: {msg}', signingFailed: 'स्वाक्षरी अयशस्वी: {msg}',
- done: 'झाले', txSignedNote: '✓ व्यवहार स्वाक्षरीत झाला. खालील कोड ऑनलाइन उपकरणावरून प्रसारित करा (उदा. mempool.space → Broadcast).',
- transactionId: 'व्यवहार ID', signedTxRaw: 'स्वाक्षरीत व्यवहार (कोड)', copyHex: 'कोड कॉपी करा', downloadLabel: 'डाउनलोड',
- showQrAirgap: 'QR दाखवा (ऑफलाइन हस्तांतरणासाठी)', txBroadcast: '✓ व्यवहार प्रसारित झाला!', copyTxid: 'व्यवहार ID कॉपी करा', viewOnMempool: 'mempool.space वर पहा ↗',
- noTxYet: 'अजून व्यवहार नाहीत.', received: 'मिळाले', sent: 'पाठवले', pendingTag: '⏳ प्रलंबित', awaitingConfirmation: 'पुष्टीची प्रतीक्षा',
- feeShort: 'शुल्क {x}', historyOffline: 'ऑफलाइनमध्ये इतिहास उपलब्ध नाही.',
- status: 'स्थिती', confirmed: 'पुष्ट', confirmedTag: 'पुष्ट', pendingInMempool: 'प्रलंबित (mempool मध्ये)', block: 'ब्लॉक', date: 'दिनांक',
- copyId: 'ID कॉपी करा', backToHistory: '← इतिहासाकडे परत',
- recoveryPhrase: 'रिकव्हरी वाक्यांश', recoveryWarn: '⚠ हे शब्द पाहणारा कोणीही तुमचे पैसे चोरू शकतो. दाखवण्यापूर्वी कोणी पाहत नाही याची खात्री करा.',
- bip39Passphrase: 'पासफ्रेज', copyPassphrase: 'पासफ्रेज कॉपी करा', revealRecovery: 'रिकव्हरी वाक्यांश दाखवा',
- offlineTransfer: 'ऑफलाइन हस्तांतरण', offlineTransferDesc: 'ऑनलाइन उपकरणावर तुमची नाणी निर्यात करा, मग ऑफलाइन उपकरणावर (याच वॉलेट व सीडसह) फाइल आयात करून इंटरनेटशिवाय स्वाक्षरी करा.',
- exportSnapshot: '⤓ स्नॅपशॉट निर्यात', importSnapshot: 'स्नॅपशॉट आयात…', rescan: 'पुन्हा स्कॅन',
- rescanDesc: 'तुमचा सध्याचा पत्ता आपोआप अद्ययावत होतो. पेमेंट जुन्या (पुन्हा वापरलेल्या) पत्त्यावर आले व दिसत नसेल तरच पुन्हा स्कॅन करा.',
- rescanWallet: 'वॉलेट पुन्हा स्कॅन', scanning: 'स्कॅन होत आहे…', language: 'भाषा',
- offlineBanner: 'नेटवर्कशी संपर्क नाही — ऑफलाइन काम सुरू. नाणी लोड करण्यासाठी सेटिंग्जमधून स्नॅपशॉट आयात करा.', retry: 'पुन्हा प्रयत्न',
- copied: 'कॉपी झाले', snapshotExported: 'स्नॅपशॉट निर्यात झाला', importedNCoins: '{n} नाणी आयात झाली',
- unmatchedSuffix: ' · {n} पत्ते या वॉलेटमध्ये नाहीत', importFailed: 'आयात अयशस्वी: {msg}',
- copy: 'कॉपी', switchUnit: 'BTC / sats बदला', footerMadeBy: 'द्वारे बनवले', footerSourceOn: 'सोर्स येथे',
-});
-
-def('te', {
- passphrase: "పాస్‌ఫ్రేజ్",
- howItWorks: "ఇది ఎలా పనిచేస్తుంది",
- installApp: "యాప్‌ను ఇన్‌స్టాల్ చేయండి",
- hiwBasicsTitle: "ప్రాథమిక అంశాలు",
- hiwBasics1: "మీరు వాలెట్ సృష్టించినప్పుడు, ఈ పేజీ పన్నెండు యాదృచ్ఛిక పదాలను రూపొందిస్తుంది. ఆ పదాలే మీ వాలెట్‌కు తాళంచెవి. వాటిని కలిగి ఉన్న ఎవరైనా కాయిన్‌లను ఖర్చు చేయగలరు, కాబట్టి వాటిని కాగితంపై రాసి, మీకు మాత్రమే అందుబాటులో ఉండే చోట భద్రపరచండి.",
- hiwBasics2: "ఆ పన్నెండు పదాలను కోల్పోయి, బ్యాకప్ లేకపోతే, కాయిన్‌లు శాశ్వతంగా పోతాయి. రీసెట్ లింక్ ఉండదు, ఫోన్ చేయడానికి ఎవరూ ఉండరు, కాబట్టి డబ్బు వేయడానికి ముందే వాటిని బ్యాకప్ చేయండి.",
- hiwBasics3: "సర్వర్ ఉండదు, ఖాతా ఉండదు. మొత్తం యాప్ మీ బ్రౌజర్‌లో నడిచే ఒకే పేజీ, కాబట్టి మీ కాయిన్‌లను ఎవరూ కలిగి ఉండరు, మీ తాళంచెవులను సర్వర్‌లో ఏదీ చూడదు. మీ నిల్వ, చరిత్రను చూపడానికి అది ఒక పబ్లిక్ బ్లాక్ ఎక్స్‌ప్లోరర్ నుండి చదువుతుంది (డిఫాల్ట్‌గా mempool.space, లేదా సెట్టింగ్‌లలో మీరు సెట్ చేస్తే మీ స్వంత నోడ్).",
- hiwBasics4: "మీరు ఈ పేజీని సేవ్ చేసి, అస్సలు ఇంటర్నెట్ లేకుండానే మీ కంప్యూటర్ నుండి నేరుగా తెరవవచ్చు. ఇది ఆఫ్‌లైన్‌లో పనిచేస్తూనే ఉంటుంది.",
- hiwBasics5: "ఇది సాధారణ బిట్‌కాయిన్ ప్రమాణాలను అనుసరిస్తుంది (12-పదాల BIP39 ఫ్రేజ్, BIP84 నేటివ్ SegWit కీలు), కాబట్టి ఈ సైట్ ఎప్పుడైనా అదృశ్యమైతే, మీరు అదే ఫ్రేజ్‌ను Sparrow, Electrum, లేదా ఏదైనా ఇతర ప్రామాణిక వాలెట్‌లో పునరుద్ధరించవచ్చు, మీ కాయిన్‌లు అక్కడే ఉంటాయి.",
- hiwTribute: "Hal Wallet అనే పేరు ప్రఖ్యాత సైఫర్‌పంక్, బిట్‌కాయిన్ మార్గదర్శి Hal Finney (1956–2014)కి నివాళి.",
- signExport: "సంతకం చేసి (వేరే చోట ప్రసారం చేయండి)",
- scanQr: "QR స్కాన్ చేయండి",
- scanHint: "కెమెరాను QR కోడ్‌పై గురిపెట్టండి",
- scanNoCamera: "కెమెరాను యాక్సెస్ చేయలేకపోయాం.",
- scanNoDecoder: "QR స్కానింగ్‌కు మొదటిసారి వాడేటప్పుడు కనెక్షన్ అవసరం.",
- scanUnrecognized: "ఆ QR నుండి బిట్‌కాయిన్ చిరునామాను చదవలేకపోయాం.",
- broadcastScanned: "లావాదేవీని ప్రసారం చేయాలా?",
- broadcastNow: "ప్రసారం చేయండి",
- scanOffline: "మీరు ఆఫ్‌లైన్‌లో ఉన్నారు — ఈ లావాదేవీని ప్రసారం చేయడానికి తిరిగి కనెక్ట్ అవ్వండి.",
- loadingHistory: "లావాదేవీలు లోడ్ అవుతున్నాయి…",
- explorer: "బ్లాక్ ఎక్స్‌ప్లోరర్",
- explorerDesc: "నిల్వలు, చరిత్ర కోసం ఈ వాలెట్ ప్రశ్నించే సర్వర్. గరిష్ట గోప్యత కోసం దీన్ని మీ స్వంత నోడ్‌కు గురిపెట్టండి.",
- explorerUrl: "సర్వర్ URL",
- explorerUrlHint: "Esplora / electrs REST బేస్, ఉదా. https://mempool.space/api",
- deviceSync: "పరికర సమకాలీకరణ",
- deviceSyncDesc: "ఎన్‌క్రిప్ట్ చేసిన కాపీని Nostr రిలేపై నిల్వ చేయడం ద్వారా ఈ వాలెట్‌ను మీ పరికరాల అంతటా సమకాలీకరించండి — మీ సీడ్ ఉన్న పరికరం మాత్రమే దాన్ని చదవగలదు. ప్రతిదీ ఈ పరికరంలోనే ఉంచడానికి దీన్ని ఆఫ్ చేయండి.",
- syncAcross: "పరికరాల అంతటా సమకాలీకరించండి",
- syncOn: "ఆన్",
- syncOff: "ఆఫ్",
- relaysLabel: "రిలేలు",
- relaysHint: "ఒక్కో లైన్‌కు ఒక wss:// URL.",
- home: 'హోమ్', logout: 'లాగౌట్',
- createNew: 'కొత్తది సృష్టించు', importExisting: 'ఉన్నదాన్ని దిగుమతి',
- genIntro: 'కొత్త 12-పదాల సీడ్ ఫ్రేజ్ సృష్టించండి. దాన్ని రాసుకోండి. ఈ వాలెట్‌ను తిరిగి పొందడానికి ఇదే ఏకైక మార్గం.',
- generateSeed: 'సీడ్ ఫ్రేజ్ సృష్టించు', writeDownWarn: '⚠ ఈ 12 పదాలను వరుసగా కాగితంపై రాయండి. ఇవి ఉన్నవారు మీ నాణేలను ఖర్చు చేయగలరు.',
- copyPhrase: 'ఫ్రేజ్ కాపీ', regenerate: 'మళ్లీ సృష్టించు', verifyBackup: 'బ్యాకప్ ధృవీకరించు', skipVerification: 'ధృవీకరణ దాటవేయి',
- confirmBackupIntro: 'అడిగిన పదాలను నమోదు చేసి మీ బ్యాకప్‌ను ధృవీకరించండి.', wordN: 'పదం #{n}',
- reenterPassphrase: 'పాస్‌ఫ్రేజ్ మళ్లీ నమోదు చేయి', back: '← వెనక్కి', openWallet: 'వాలెట్ తెరువు',
- wordsMismatch: 'ఈ పదాలు మీ ఫ్రేజ్‌తో సరిపోలడం లేదు. మీ బ్యాకప్ చూడండి.',
- passphraseMismatch: 'ఈ పాస్‌ఫ్రేజ్ మీరు నమోదు చేసినదానితో సరిపోలడం లేదు.',
- seedPhrase: 'సీడ్ ఫ్రేజ్', seedPlaceholder: 'మీ పదాలను ఖాళీలతో వేరు చేసి నమోదు చేయండి',
- optionalPassphrase: 'ఐచ్ఛిక పాస్‌ఫ్రేజ్', leaveBlank: 'వాడకపోతే ఖాళీగా ఉంచండి', show: 'చూపు', hide: 'దాచు',
- invalidSeed: 'చెల్లని సీడ్ ఫ్రేజ్ — స్పెల్లింగ్, వరుస చూడండి.',
- keysNote: 'కీలు మీ బ్రౌజర్‌ను ఎప్పుడూ వదలవు. పూర్తిగా ఆఫ్‌లైన్‌లో పనిచేస్తుంది. ఈ పేజీని సేవ్ చేసి స్థానికంగా తెరవండి.',
- balance: 'బ్యాలెన్స్', pending: 'పెండింగ్',
- tabReceive: 'స్వీకరించు', tabSend: 'పంపు', tabHistory: 'చరిత్ర', tabSettings: 'సెట్టింగ్‌లు',
- copyAddress: 'చిరునామా కాపీ', paymentReceived: 'చెల్లింపు అందింది!', tapToProceed: 'కొనసాగడానికి ఎక్కడైనా నొక్కండి',
- recipient: 'గ్రహీత', recipients: 'గ్రహీతలు', max: 'గరిష్ఠం', feeRate: 'ఫీజు',
- feeEconomy: 'ఆర్థిక', feeNormal: 'సాధారణ', feePriority: 'ప్రాధాన్యం', feeCustom: 'అనుకూల',
- selectedRate: 'ఎంచుకున్న ఫీజు: {n} sat/vB', coinSelection: 'నాణెం ఎంపిక', automatic: 'స్వయంచాలక', manual: 'మాన్యువల్',
- noCoins: 'నాణేలు అందుబాటులో లేవు.', nSelected: '{n} ఎంచుకోబడ్డాయి', addRecipient: '+ గ్రహీతను జోడించు',
- reviewTx: 'లావాదేవీ సమీక్ష', remove: 'తొలగించు',
- enterRecipientAddr: 'గ్రహీత చిరునామా నమోదు చేయండి.', enterAddrForN: 'గ్రహీత {n} చిరునామా నమోదు చేయండి.',
- enterValidAmtForN: 'గ్రహీత {n} కోసం సరైన మొత్తాన్ని నమోదు చేయండి.', selectCoin: 'ఖర్చు చేయడానికి కనీసం ఒక నాణెం ఎంచుకోండి.',
- networkFee: 'నెట్‌వర్క్ ఫీజు', offlineSignNote: 'ఆఫ్‌లైన్: ఇప్పుడే సంతకం చేయండి, తర్వాత ఆన్‌లైన్ పరికరం నుండి లావాదేవీని ప్రసారం చేయండి.',
- signBroadcast: 'సంతకం & ప్రసారం', signTx: 'లావాదేవీపై సంతకం', broadcastFailed: 'ప్రసారం విఫలం: {msg}', signingFailed: 'సంతకం విఫలం: {msg}',
- done: 'పూర్తయింది', txSignedNote: '✓ లావాదేవీపై సంతకం అయింది. కింది కోడ్‌ను ఆన్‌లైన్ పరికరం నుండి ప్రసారం చేయండి (ఉదా. mempool.space → Broadcast).',
- transactionId: 'లావాదేవీ ID', signedTxRaw: 'సంతకం చేసిన లావాదేవీ (కోడ్)', copyHex: 'కోడ్ కాపీ', downloadLabel: 'డౌన్‌లోడ్',
- showQrAirgap: 'QR చూపు (ఆఫ్‌లైన్ బదిలీ కోసం)', txBroadcast: '✓ లావాదేవీ ప్రసారమైంది!', copyTxid: 'లావాదేవీ ID కాపీ', viewOnMempool: 'mempool.space లో చూడండి ↗',
- noTxYet: 'ఇంకా లావాదేవీలు లేవు.', received: 'అందింది', sent: 'పంపబడింది', pendingTag: '⏳ పెండింగ్', awaitingConfirmation: 'ధృవీకరణ కోసం వేచి',
- feeShort: 'ఫీజు {x}', historyOffline: 'ఆఫ్‌లైన్‌లో చరిత్ర అందుబాటులో లేదు.',
- status: 'స్థితి', confirmed: 'ధృవీకరించబడింది', confirmedTag: 'ధృవీకరించబడింది', pendingInMempool: 'పెండింగ్ (mempool లో)', block: 'బ్లాక్', date: 'తేదీ',
- copyId: 'ID కాపీ', backToHistory: '← చరిత్రకు తిరిగి',
- recoveryPhrase: 'రికవరీ ఫ్రేజ్', recoveryWarn: '⚠ ఈ పదాలు చూసిన ఎవరైనా మీ నిధులను దొంగిలించగలరు. చూపే ముందు ఎవరూ చూడటం లేదని నిర్ధారించుకోండి.',
- bip39Passphrase: 'పాస్‌ఫ్రేజ్', copyPassphrase: 'పాస్‌ఫ్రేజ్ కాపీ', revealRecovery: 'రికవరీ ఫ్రేజ్ చూపు',
- offlineTransfer: 'ఆఫ్‌లైన్ బదిలీ', offlineTransferDesc: 'ఆన్‌లైన్ పరికరంలో మీ నాణేలను ఎగుమతి చేసి, ఆఫ్‌లైన్ పరికరంలో (ఈ వాలెట్, సీడ్‌తో) ఫైల్‌ను దిగుమతి చేసి ఇంటర్నెట్ లేకుండా సంతకం చేయండి.',
- exportSnapshot: '⤓ స్నాప్‌షాట్ ఎగుమతి', importSnapshot: 'స్నాప్‌షాట్ దిగుమతి…', rescan: 'మళ్లీ స్కాన్',
- rescanDesc: 'మీ ప్రస్తుత చిరునామా స్వయంచాలకంగా అప్‌డేట్ అవుతుంది. చెల్లింపు పాత (మళ్లీ వాడిన) చిరునామాకు వచ్చి కనిపించకపోతేనే మళ్లీ స్కాన్ చేయండి.',
- rescanWallet: 'వాలెట్ మళ్లీ స్కాన్', scanning: 'స్కాన్ అవుతోంది…', language: 'భాష',
- offlineBanner: 'నెట్‌వర్క్ చేరలేకపోయింది — ఆఫ్‌లైన్‌లో పని. నాణేలు లోడ్ చేయడానికి సెట్టింగ్‌లలో స్నాప్‌షాట్ దిగుమతి చేయండి.', retry: 'మళ్లీ ప్రయత్నించు',
- copied: 'కాపీ అయింది', snapshotExported: 'స్నాప్‌షాట్ ఎగుమతి అయింది', importedNCoins: '{n} నాణేలు దిగుమతి అయ్యాయి',
- unmatchedSuffix: ' · {n} చిరునామాలు ఈ వాలెట్‌లో లేవు', importFailed: 'దిగుమతి విఫలం: {msg}',
- copy: 'కాపీ', switchUnit: 'BTC / sats మార్చు', footerMadeBy: 'తయారు చేసినవారు', footerSourceOn: 'సోర్స్ ఇక్కడ',
-});
-
-def('ta', {
- passphrase: "கடவுச்சொற்றொடர்",
- howItWorks: "இது எப்படி வேலை செய்கிறது",
- installApp: "செயலியை நிறுவு",
- hiwBasicsTitle: "அடிப்படைகள்",
- hiwBasics1: "நீங்கள் ஒரு வாலெட்டை உருவாக்கும்போது, பக்கம் பன்னிரண்டு சீரற்ற சொற்களை உருவாக்குகிறது. அந்தச் சொற்களே உங்கள் வாலெட்டின் சாவி. அவற்றை வைத்திருக்கும் எவரும் நாணயங்களைச் செலவழிக்க முடியும், எனவே அவற்றை காகிதத்தில் எழுதி உங்களால் மட்டுமே அணுக முடிந்த இடத்தில் வைத்துக்கொள்ளுங்கள்.",
- hiwBasics2: "பன்னிரண்டு சொற்களை இழந்து காப்புப்பிரதி இல்லையென்றால், நாணயங்கள் நிரந்தரமாக போய்விடும். மீட்டமைப்பு இணைப்பு எதுவும் இல்லை, அழைக்க யாரும் இல்லை, எனவே பணம் போடுவதற்கு முன் அவற்றை காப்புப்பிரதி எடுங்கள்.",
- hiwBasics3: "சேவையகம் இல்லை, கணக்கு இல்லை. முழு செயலியும் உங்கள் உலாவியில் இயங்கும் ஒரே ஒரு பக்கம், எனவே உங்கள் நாணயங்களை யாரும் வைத்திருப்பதில்லை, சேவையகத்தில் உள்ள எதுவும் உங்கள் சாவிகளைப் பார்ப்பதில்லை. உங்கள் இருப்பையும் வரலாற்றையும் காட்ட இது ஒரு பொது பிளாக் எக்ஸ்புளோரரிலிருந்து படிக்கிறது (இயல்பாக mempool.space, அல்லது அமைப்புகளில் அமைத்தால் உங்கள் சொந்த நோடு).",
- hiwBasics4: "இந்தப் பக்கத்தைச் சேமித்து, இணையம் இல்லாமலேயே உங்கள் கணினியிலிருந்து நேரடியாகத் திறக்கலாம். இது ஆஃப்லைனிலும் தொடர்ந்து வேலை செய்கிறது.",
- hiwBasics5: "இது வழக்கமான பிட்காயின் தரநிலைகளைப் பின்பற்றுகிறது (12-சொல் BIP39 சொற்றொடர் மற்றும் BIP84 நேட்டிவ் SegWit சாவிகள்), எனவே இந்த தளம் எப்போதாவது மறைந்தாலும் அதே சொற்றொடரை Sparrow, Electrum, அல்லது வேறு எந்த தரநிலை வாலெட்டிலும் மீட்டெடுக்கலாம், உங்கள் நாணயங்கள் அங்கேயே இருக்கும்.",
- hiwTribute: "Hal Wallet என்ற பெயர், புகழ்பெற்ற சைஃபர்பங்க் மற்றும் பிட்காயின் முன்னோடி Hal Finney (1956–2014) அவர்களுக்கான அஞ்சலி.",
- signExport: "கையொப்பமிட்டு (வேறு இடத்தில் ஒளிபரப்பு)",
- scanQr: "QR ஐ ஸ்கேன் செய்",
- scanHint: "கேமராவை ஒரு QR குறியீட்டை நோக்கிக் காட்டுங்கள்",
- scanNoCamera: "கேமராவை அணுக முடியவில்லை.",
- scanNoDecoder: "QR ஸ்கேனிங்கிற்கு முதல் முறை பயன்படுத்தும்போது இணைப்பு தேவை.",
- scanUnrecognized: "அந்த QR இலிருந்து பிட்காயின் முகவரியைப் படிக்க முடியவில்லை.",
- broadcastScanned: "பரிவர்த்தனையை ஒளிபரப்பவா?",
- broadcastNow: "ஒளிபரப்பு",
- scanOffline: "நீங்கள் ஆஃப்லைனில் உள்ளீர்கள் — இந்தப் பரிவர்த்தனையை ஒளிபரப்ப மீண்டும் இணையுங்கள்.",
- loadingHistory: "பரிவர்த்தனைகள் ஏற்றப்படுகின்றன…",
- explorer: "பிளாக் எக்ஸ்புளோரர்",
- explorerDesc: "இருப்புகளுக்கும் வரலாற்றுக்கும் இந்த வாலெட் வினவும் சேவையகம். அதிகபட்ச தனியுரிமைக்கு உங்கள் சொந்த நோடை நோக்கி அமைக்கவும்.",
- explorerUrl: "சேவையக URL",
- explorerUrlHint: "Esplora / electrs REST அடிப்படை, எ.கா. https://mempool.space/api",
- deviceSync: "சாதன ஒத்திசைவு",
- deviceSyncDesc: "Nostr ரிலேயில் மறையாக்கப்பட்ட நகலைச் சேமிப்பதன் மூலம் உங்கள் சாதனங்களில் இந்த வாலெட்டை ஒத்திசைவாக வைத்திருங்கள் — உங்கள் சீட் உள்ள சாதனம் மட்டுமே அதைப் படிக்க முடியும். எல்லாவற்றையும் இந்தச் சாதனத்தில் மட்டும் வைக்க அதை அணைக்கவும்.",
- syncAcross: "சாதனங்களில் ஒத்திசை",
- syncOn: "இயக்கு",
- syncOff: "அணை",
- relaysLabel: "ரிலேக்கள்",
- relaysHint: "ஒரு வரிக்கு ஒரு wss:// URL.",
- home: 'முகப்பு', logout: 'வெளியேறு',
- createNew: 'புதிது உருவாக்கு', importExisting: 'உள்ளதை இறக்கு',
- genIntro: 'புதிய 12-சொல் சீட் சொற்றொடரை உருவாக்கவும். எழுதி வைக்கவும். இந்த வாலட்டை மீட்க இதுவே ஒரே வழி.',
- generateSeed: 'சீட் சொற்றொடரை உருவாக்கு', writeDownWarn: '⚠ இந்த 12 சொற்களை வரிசையாக காகிதத்தில் எழுதவும். இவை உள்ளவர் உங்கள் நாணயங்களைச் செலவழிக்கலாம்.',
- copyPhrase: 'சொற்றொடரை நகலெடு', regenerate: 'மீண்டும் உருவாக்கு', verifyBackup: 'காப்பை சரிபார்', skipVerification: 'சரிபார்ப்பைத் தவிர்',
- confirmBackupIntro: 'கேட்கப்பட்ட சொற்களை உள்ளிட்டு உங்கள் காப்பை உறுதிப்படுத்துங்கள்.', wordN: 'சொல் #{n}',
- reenterPassphrase: 'கடவுச்சொற்றொடரை மீண்டும் உள்ளிடு', back: '← பின்', openWallet: 'வாலட்டைத் திற',
- wordsMismatch: 'இந்த சொற்கள் உங்கள் சொற்றொடருடன் பொருந்தவில்லை. உங்கள் காப்பை சரிபார்க்கவும்.',
- passphraseMismatch: 'இந்த கடவுச்சொற்றொடர் நீங்கள் உள்ளிட்டதுடன் பொருந்தவில்லை.',
- seedPhrase: 'சீட் சொற்றொடர்', seedPlaceholder: 'உங்கள் சொற்களை இடைவெளியால் பிரித்து உள்ளிடவும்',
- optionalPassphrase: 'விருப்பக் கடவுச்சொற்றொடர்', leaveBlank: 'பயன்படுத்தாவிட்டால் காலியாக விடவும்', show: 'காட்டு', hide: 'மறை',
- invalidSeed: 'தவறான சீட் சொற்றொடர் — எழுத்துப்பிழை, வரிசையைச் சரிபார்க்கவும்.',
- keysNote: 'விசைகள் உங்கள் உலாவியை விட்டு வெளியேறாது. முழுவதும் ஆஃப்லைனில் இயங்கும். இந்தப் பக்கத்தைச் சேமித்து உள்ளூரில் திறக்கவும்.',
- balance: 'இருப்பு', pending: 'நிலுவையில்',
- tabReceive: 'பெறு', tabSend: 'அனுப்பு', tabHistory: 'வரலாறு', tabSettings: 'அமைப்புகள்',
- copyAddress: 'முகவரியை நகலெடு', paymentReceived: 'பணம் பெறப்பட்டது!', tapToProceed: 'தொடர எங்கேனும் தட்டவும்',
- recipient: 'பெறுநர்', recipients: 'பெறுநர்கள்', max: 'அதிகபட்சம்', feeRate: 'கட்டணம்',
- feeEconomy: 'சிக்கனம்', feeNormal: 'சாதாரண', feePriority: 'முன்னுரிமை', feeCustom: 'தனிப்பயன்',
- selectedRate: 'தேர்ந்த கட்டணம்: {n} sat/vB', coinSelection: 'நாணயத் தேர்வு', automatic: 'தானியங்கி', manual: 'கைமுறை',
- noCoins: 'நாணயங்கள் எதுவும் இல்லை.', nSelected: '{n} தேர்ந்தது', addRecipient: '+ பெறுநரைச் சேர்',
- reviewTx: 'பரிவர்த்தனையை மதிப்பாய்வு', remove: 'அகற்று',
- enterRecipientAddr: 'பெறுநர் முகவரியை உள்ளிடவும்.', enterAddrForN: 'பெறுநர் {n}-இன் முகவரியை உள்ளிடவும்.',
- enterValidAmtForN: 'பெறுநர் {n}-க்கு சரியான தொகையை உள்ளிடவும்.', selectCoin: 'செலவழிக்க குறைந்தது ஒரு நாணயத்தைத் தேர்ந்தெடுக்கவும்.',
- networkFee: 'நெட்வொர்க் கட்டணம்', offlineSignNote: 'ஆஃப்லைன்: இப்போது கையொப்பமிடவும், பிறகு ஆன்லைன் சாதனத்திலிருந்து பரிவர்த்தனையை ஒளிபரப்பவும்.',
- signBroadcast: 'கையொப்பம் & ஒளிபரப்பு', signTx: 'பரிவர்த்தனையில் கையொப்பம்', broadcastFailed: 'ஒளிபரப்பு தோல்வி: {msg}', signingFailed: 'கையொப்பம் தோல்வி: {msg}',
- done: 'முடிந்தது', txSignedNote: '✓ பரிவர்த்தனை கையொப்பமிடப்பட்டது. கீழுள்ள குறியீட்டை ஆன்லைன் சாதனத்திலிருந்து ஒளிபரப்பவும் (எ.கா. mempool.space → Broadcast).',
- transactionId: 'பரிவர்த்தனை ID', signedTxRaw: 'கையொப்பமிட்ட பரிவர்த்தனை (குறியீடு)', copyHex: 'குறியீடு நகலெடு', downloadLabel: 'பதிவிறக்கு',
- showQrAirgap: 'QR காட்டு (ஆஃப்லைன் பரிமாற்றத்திற்கு)', txBroadcast: '✓ பரிவர்த்தனை ஒளிபரப்பப்பட்டது!', copyTxid: 'பரிவர்த்தனை ID நகலெடு', viewOnMempool: 'mempool.space இல் பார் ↗',
- noTxYet: 'இன்னும் பரிவர்த்தனைகள் இல்லை.', received: 'பெறப்பட்டது', sent: 'அனுப்பப்பட்டது', pendingTag: '⏳ நிலுவையில்', awaitingConfirmation: 'உறுதிப்படுத்தலுக்காகக் காத்திருக்கிறது',
- feeShort: 'கட்டணம் {x}', historyOffline: 'ஆஃப்லைனில் வரலாறு கிடைக்காது.',
- status: 'நிலை', confirmed: 'உறுதியானது', confirmedTag: 'உறுதியானது', pendingInMempool: 'நிலுவையில் (mempool இல்)', block: 'பிளாக்', date: 'தேதி',
- copyId: 'ID நகலெடு', backToHistory: '← வரலாற்றுக்கு',
- recoveryPhrase: 'மீட்பு சொற்றொடர்', recoveryWarn: '⚠ இந்த சொற்களைப் பார்க்கும் எவரும் உங்கள் பணத்தைத் திருடலாம். காட்டும் முன் யாரும் பார்க்கவில்லை என உறுதி செய்யவும்.',
- bip39Passphrase: 'கடவுச்சொற்றொடர்', copyPassphrase: 'கடவுச்சொற்றொடரை நகலெடு', revealRecovery: 'மீட்பு சொற்றொடரைக் காட்டு',
- offlineTransfer: 'ஆஃப்லைன் பரிமாற்றம்', offlineTransferDesc: 'ஆன்லைன் சாதனத்தில் நாணயங்களை ஏற்றுமதி செய்து, ஆஃப்லைன் சாதனத்தில் (இந்த வாலட் மற்றும் சீடுடன்) கோப்பை இறக்கி இணையம் இல்லாமல் கையொப்பமிடவும்.',
- exportSnapshot: '⤓ ஸ்னாப்ஷாட் ஏற்று', importSnapshot: 'ஸ்னாப்ஷாட் இறக்கு…', rescan: 'மீண்டும் ஸ்கேன்',
- rescanDesc: 'உங்கள் தற்போதைய முகவரி தானாகப் புதுப்பிக்கப்படும். பணம் பழைய (மறுபயன்பாட்டு) முகவரிக்கு வந்து தெரியவில்லை எனில் மட்டுமே மீண்டும் ஸ்கேன் செய்யவும்.',
- rescanWallet: 'வாலட்டை மீண்டும் ஸ்கேன்', scanning: 'ஸ்கேன் செய்கிறது…', language: 'மொழி',
- offlineBanner: 'நெட்வொர்க்கை அடைய முடியவில்லை — ஆஃப்லைனில் இயங்குகிறது. நாணயங்களை ஏற்ற அமைப்புகளில் ஸ்னாப்ஷாட்டை இறக்கவும்.', retry: 'மீண்டும் முயல்',
- copied: 'நகலெடுக்கப்பட்டது', snapshotExported: 'ஸ்னாப்ஷாட் ஏற்றப்பட்டது', importedNCoins: '{n} நாணயங்கள் இறக்கப்பட்டன',
- unmatchedSuffix: ' · {n} முகவரிகள் இந்த வாலட்டில் இல்லை', importFailed: 'இறக்குமதி தோல்வி: {msg}',
- copy: 'நகலெடு', switchUnit: 'BTC / sats மாற்று', footerMadeBy: 'உருவாக்கியவர்', footerSourceOn: 'மூலம்',
-});
-
// --- runtime --------------------------------------------------------------
const SUPPORTED = new Set(LANGS.map(([c]) => c));
const LANG_KEY = 'btc-wallet-lang';
function detect() {
try {
+ const q = new URLSearchParams(location.search).get('lang');
+ if (q && SUPPORTED.has(q)) return q;
+ } catch {}
+ try {
const saved = localStorage.getItem(LANG_KEY);
if (saved && SUPPORTED.has(saved)) return saved;
} catch {}
diff --git a/src/locales/ar.json b/src/locales/ar.json
new file mode 100644
index 0000000..aecf68e
--- /dev/null
+++ b/src/locales/ar.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "عبارة المرور",
+ "howItWorks": "كيف يعمل",
+ "installApp": "تثبيت التطبيق",
+ "hiwBasicsTitle": "الأساسيات",
+ "hiwBasics1": "عند إنشاء محفظة، تُولّد الصفحة اثنتي عشرة كلمة عشوائية. هذه الكلمات هي مفتاح محفظتك. أي شخص يمتلكها يمكنه إنفاق العملات، لذا دوّنها على ورقة واحفظها في مكان لا يصل إليه سواك.",
+ "hiwBasics2": "إذا فقدت الكلمات الاثنتي عشرة ولم يكن لديك نسخة احتياطية، فستضيع العملات إلى الأبد. لا يوجد رابط لإعادة التعيين ولا أحد للاتصال به، لذا احتفظ بنسخة احتياطية قبل إيداع أي أموال.",
+ "hiwBasics3": "لا يوجد خادم ولا حساب. التطبيق بأكمله صفحة واحدة تعمل في متصفحك، فلا أحد يحتفظ بعملاتك ولا شيء على خادم يرى مفاتيحك أبداً. ولعرض رصيدك وسجلك يقرأ من مستكشف كتل عام (mempool.space افتراضياً، أو عقدتك الخاصة إن أعددت واحدة في الإعدادات).",
+ "hiwBasics4": "بل يمكنك حفظ هذه الصفحة وفتحها مباشرة من حاسوبك بدون أي اتصال بالإنترنت. تظل تعمل دون اتصال.",
+ "hiwBasics5": "يتبع معايير بيتكوين المعتادة (عبارة BIP39 من 12 كلمة ومفاتيح BIP84 SegWit الأصلية)، لذا إن اختفى هذا الموقع يوماً يمكنك استعادة العبارة نفسها في Sparrow أو Electrum أو أي محفظة قياسية أخرى وستجد عملاتك هناك.",
+ "hiwTribute": "الاسم Hal Wallet هو تكريم لرائد بيتكوين والسايفربانك الأسطوري، Hal Finney (1956–2014).",
+ "signExport": "توقيع و(بثّ في مكان آخر)",
+ "scanQr": "مسح رمز QR",
+ "scanHint": "وجّه الكاميرا نحو رمز QR",
+ "scanNoCamera": "تعذّر الوصول إلى الكاميرا.",
+ "scanNoDecoder": "يحتاج مسح QR إلى اتصال في المرة الأولى لاستخدامه.",
+ "scanUnrecognized": "تعذّرت قراءة عنوان بيتكوين من رمز QR هذا.",
+ "broadcastScanned": "بثّ المعاملة؟",
+ "broadcastNow": "بثّ",
+ "scanOffline": "أنت غير متصل — أعد الاتصال لبثّ هذه المعاملة.",
+ "loadingHistory": "جارٍ تحميل المعاملات…",
+ "explorer": "مستكشف الكتل",
+ "explorerDesc": "الخادم الذي تستعلم منه هذه المحفظة عن الأرصدة والسجل. وجّهه إلى عقدتك الخاصة لأقصى قدر من الخصوصية.",
+ "explorerUrl": "عنوان الخادم",
+ "explorerUrlHint": "قاعدة REST لـ Esplora / electrs، مثلاً https://mempool.space/api",
+ "deviceSync": "مزامنة الأجهزة",
+ "deviceSyncDesc": "حافظ على تزامن هذه المحفظة عبر أجهزتك بتخزين نسخة مشفّرة على مُرحّل Nostr — لا يمكن قراءتها إلا لجهاز يملك بذرتك. أوقفها لإبقاء كل شيء على هذا الجهاز.",
+ "syncAcross": "المزامنة عبر الأجهزة",
+ "syncOn": "مفعّل",
+ "syncOff": "متوقف",
+ "relaysLabel": "المُرحّلات",
+ "relaysHint": "عنوان wss:// واحد لكل سطر.",
+ "home": "الرئيسية",
+ "logout": "تسجيل الخروج",
+ "createNew": "إنشاء جديدة",
+ "importExisting": "استيراد موجودة",
+ "genIntro": "أنشئ عبارة استرداد جديدة من 12 كلمة. اكتبها. فهي الطريقة الوحيدة لاستعادة هذه المحفظة.",
+ "generateSeed": "إنشاء العبارة",
+ "writeDownWarn": "⚠ اكتب هذه الكلمات الـ12 على ورق بالترتيب. أي شخص يملكها يستطيع إنفاق عملاتك.",
+ "copyPhrase": "نسخ العبارة",
+ "regenerate": "إعادة الإنشاء",
+ "verifyBackup": "تحقق من النسخة",
+ "skipVerification": "تخطّي التحقق",
+ "confirmBackupIntro": "أكّد نسختك بإدخال الكلمات المطلوبة.",
+ "wordN": "الكلمة رقم {n}",
+ "reenterPassphrase": "أعد إدخال كلمة المرور",
+ "back": "← رجوع",
+ "openWallet": "فتح المحفظة",
+ "wordsMismatch": "هذه الكلمات لا تطابق عبارتك. تحقق من نسختك.",
+ "passphraseMismatch": "كلمة المرور لا تطابق التي أدخلتها.",
+ "seedPhrase": "عبارة الاسترداد",
+ "seedPlaceholder": "أدخل كلماتك مفصولة بمسافات",
+ "optionalPassphrase": "كلمة مرور اختيارية",
+ "leaveBlank": "اتركها فارغة إن لم تُستخدم",
+ "show": "إظهار",
+ "hide": "إخفاء",
+ "invalidSeed": "عبارة استرداد غير صالحة — تحقق من الإملاء والترتيب.",
+ "keysNote": "المفاتيح لا تغادر متصفحك أبداً. تعمل دون اتصال. احفظ هذه الصفحة وافتحها محلياً.",
+ "balance": "الرصيد",
+ "pending": "قيد الانتظار",
+ "tabReceive": "استلام",
+ "tabSend": "إرسال",
+ "tabHistory": "السجل",
+ "tabSettings": "الإعدادات",
+ "copyAddress": "نسخ العنوان",
+ "paymentReceived": "تم استلام الدفعة!",
+ "tapToProceed": "انقر في أي مكان للمتابعة",
+ "recipient": "المستلم",
+ "recipients": "المستلمون",
+ "max": "الأقصى",
+ "feeRate": "الرسوم",
+ "feeEconomy": "اقتصادي",
+ "feeNormal": "عادي",
+ "feePriority": "أولوية",
+ "feeCustom": "مخصص",
+ "selectedRate": "الرسوم المختارة: {n} sat/vB",
+ "coinSelection": "اختيار العملات",
+ "automatic": "تلقائي",
+ "manual": "يدوي",
+ "noCoins": "لا توجد عملات متاحة.",
+ "nSelected": "تم اختيار {n}",
+ "addRecipient": "+ إضافة مستلم",
+ "reviewTx": "مراجعة المعاملة",
+ "remove": "إزالة",
+ "enterRecipientAddr": "أدخل عنوان المستلم.",
+ "enterAddrForN": "أدخل عنواناً للمستلم {n}.",
+ "enterValidAmtForN": "أدخل مبلغاً صحيحاً للمستلم {n}.",
+ "selectCoin": "اختر عملة واحدة على الأقل للإنفاق.",
+ "networkFee": "رسوم الشبكة",
+ "offlineSignNote": "دون اتصال: وقّع الآن ثم أرسل المعاملة من جهاز متصل.",
+ "signBroadcast": "التوقيع والإرسال",
+ "signTx": "توقيع المعاملة",
+ "broadcastFailed": "فشل الإرسال: {msg}",
+ "signingFailed": "فشل التوقيع: {msg}",
+ "done": "تم",
+ "txSignedNote": "✓ تم توقيع المعاملة. أرسل الكود أدناه من جهاز متصل (مثل mempool.space ← Broadcast).",
+ "transactionId": "معرّف المعاملة",
+ "signedTxRaw": "المعاملة الموقّعة (الكود)",
+ "copyHex": "نسخ الكود",
+ "downloadLabel": "تنزيل",
+ "showQrAirgap": "إظهار رمز QR (للنقل دون اتصال)",
+ "txBroadcast": "✓ تم إرسال المعاملة!",
+ "copyTxid": "نسخ معرّف المعاملة",
+ "viewOnMempool": "عرض على mempool.space ↗",
+ "noTxYet": "لا توجد معاملات بعد.",
+ "received": "مستلَم",
+ "sent": "مُرسَل",
+ "pendingTag": "⏳ قيد الانتظار",
+ "awaitingConfirmation": "بانتظار التأكيد",
+ "feeShort": "رسوم {x}",
+ "historyOffline": "السجل غير متاح دون اتصال.",
+ "status": "الحالة",
+ "confirmed": "مؤكدة",
+ "confirmedTag": "مؤكدة",
+ "pendingInMempool": "قيد الانتظار (في mempool)",
+ "block": "الكتلة",
+ "date": "التاريخ",
+ "copyId": "نسخ المعرّف",
+ "backToHistory": "← العودة إلى السجل",
+ "recoveryPhrase": "عبارة الاسترداد",
+ "recoveryWarn": "⚠ أي شخص يرى هذه الكلمات يمكنه سرقة أموالك. تأكد ألا أحد يراقب قبل إظهارها.",
+ "bip39Passphrase": "كلمة مرور",
+ "copyPassphrase": "نسخ كلمة المرور",
+ "revealRecovery": "إظهار عبارة الاسترداد",
+ "offlineTransfer": "النقل دون اتصال",
+ "offlineTransferDesc": "صدّر عملاتك على جهاز متصل، ثم استورد الملف على جهاز غير متصل (يحوي هذه المحفظة والعبارة) للتوقيع دون إنترنت.",
+ "exportSnapshot": "⤓ تصدير نسخة",
+ "importSnapshot": "استيراد نسخة…",
+ "rescan": "إعادة الفحص",
+ "rescanDesc": "يتحدّث عنوانك الحالي تلقائياً. أعد الفحص فقط إذا أُرسلت دفعة إلى عنوان قديم (مُعاد استخدامه) ولم تظهر.",
+ "rescanWallet": "إعادة فحص المحفظة",
+ "scanning": "جارٍ الفحص…",
+ "language": "اللغة",
+ "offlineBanner": "تعذّر الوصول إلى الشبكة — تعمل دون اتصال. استورد نسخة من الإعدادات لتحميل العملات.",
+ "retry": "إعادة المحاولة",
+ "copied": "تم النسخ",
+ "snapshotExported": "تم تصدير النسخة",
+ "importedNCoins": "تم استيراد {n} عملة",
+ "unmatchedSuffix": " · {n} عنوان ليس في هذه المحفظة",
+ "importFailed": "فشل الاستيراد: {msg}",
+ "copy": "نسخ",
+ "switchUnit": "تبديل BTC / sats",
+ "footerMadeBy": "صُنع بواسطة",
+ "footerSourceOn": "الكود المصدري على"
+} \ No newline at end of file
diff --git a/src/locales/bn.json b/src/locales/bn.json
new file mode 100644
index 0000000..55c3a3a
--- /dev/null
+++ b/src/locales/bn.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "পাসফ্রেজ",
+ "howItWorks": "এটি কীভাবে কাজ করে",
+ "installApp": "অ্যাপ ইনস্টল করুন",
+ "hiwBasicsTitle": "মূল বিষয়গুলো",
+ "hiwBasics1": "আপনি যখন একটি ওয়ালেট তৈরি করেন, পেজটি বারোটি এলোমেলো শব্দ তৈরি করে। সেই শব্দগুলোই আপনার ওয়ালেটের চাবি। যার কাছে এগুলো আছে সে-ই কয়েন খরচ করতে পারে, তাই এগুলো কাগজে লিখে রাখুন এবং এমন জায়গায় রাখুন যেখানে কেবল আপনিই পৌঁছাতে পারেন।",
+ "hiwBasics2": "আপনি যদি বারোটি শব্দ হারিয়ে ফেলেন এবং কোনো ব্যাকআপ না থাকে, তাহলে কয়েনগুলো চিরতরে হারিয়ে যাবে। কোনো রিসেট লিঙ্ক নেই এবং ফোন করার মতো কেউ নেই, তাই টাকা রাখার আগে এগুলো ব্যাকআপ করে নিন।",
+ "hiwBasics3": "কোনো সার্ভার নেই এবং কোনো অ্যাকাউন্ট নেই। পুরো অ্যাপটি একটি একক পেজ যা আপনার ব্রাউজারে চলে, তাই কেউ আপনার কয়েন ধরে রাখে না এবং কোনো সার্ভারে আপনার চাবি কখনও দেখা যায় না। আপনার ব্যালেন্স ও ইতিহাস দেখানোর জন্য এটি একটি পাবলিক ব্লক এক্সপ্লোরার থেকে পড়ে (ডিফল্টভাবে mempool.space, অথবা আপনি সেটিংসে নিজের নোড সেট করলে সেটি)।",
+ "hiwBasics4": "আপনি এই পেজটি সেভ করে কোনো ইন্টারনেট ছাড়াই সরাসরি আপনার কম্পিউটার থেকে খুলতে পারেন। এটি অফলাইনেও কাজ করতে থাকে।",
+ "hiwBasics5": "এটি প্রচলিত বিটকয়েন মানদণ্ড অনুসরণ করে (একটি ১২-শব্দের BIP39 ফ্রেজ এবং BIP84 নেটিভ SegWit চাবি), তাই এই সাইটটি কখনও হারিয়ে গেলেও আপনি একই ফ্রেজ Sparrow, Electrum, বা অন্য যেকোনো স্ট্যান্ডার্ড ওয়ালেটে পুনরুদ্ধার করতে পারবেন এবং আপনার কয়েন সেখানেই থাকবে।",
+ "hiwTribute": "Hal Wallet নামটি কিংবদন্তি সাইফারপাঙ্ক এবং বিটকয়েন পথিকৃৎ Hal Finney (১৯৫৬–২০১৪)-এর প্রতি একটি শ্রদ্ধাঞ্জলি।",
+ "signExport": "সাইন করুন এবং (অন্যত্র ব্রডকাস্ট করুন)",
+ "scanQr": "QR স্ক্যান করুন",
+ "scanHint": "ক্যামেরাটি একটি QR কোডের দিকে তাক করুন",
+ "scanNoCamera": "ক্যামেরা অ্যাক্সেস করা যায়নি।",
+ "scanNoDecoder": "QR স্ক্যানের জন্য প্রথমবার ব্যবহারের সময় একটি সংযোগ প্রয়োজন।",
+ "scanUnrecognized": "সেই QR থেকে কোনো বিটকয়েন ঠিকানা পড়া যায়নি।",
+ "broadcastScanned": "লেনদেন ব্রডকাস্ট করবেন?",
+ "broadcastNow": "ব্রডকাস্ট করুন",
+ "scanOffline": "আপনি অফলাইনে আছেন — এই লেনদেন ব্রডকাস্ট করতে পুনরায় সংযোগ করুন।",
+ "loadingHistory": "লেনদেন লোড হচ্ছে…",
+ "explorer": "ব্লক এক্সপ্লোরার",
+ "explorerDesc": "এই ওয়ালেট ব্যালেন্স ও ইতিহাসের জন্য যে সার্ভারে অনুসন্ধান করে। সর্বোচ্চ গোপনীয়তার জন্য এটি আপনার নিজের নোডে নির্দেশ করুন।",
+ "explorerUrl": "সার্ভার URL",
+ "explorerUrlHint": "Esplora / electrs REST বেস, যেমন https://mempool.space/api",
+ "deviceSync": "ডিভাইস সিঙ্ক",
+ "deviceSyncDesc": "একটি Nostr রিলেতে একটি এনক্রিপ্ট করা কপি সংরক্ষণ করে এই ওয়ালেটটি আপনার সব ডিভাইসে সিঙ্ক রাখুন — কেবল আপনার সিড আছে এমন একটি ডিভাইসই এটি পড়তে পারে। সবকিছু এই ডিভাইসে রাখতে এটি বন্ধ করে দিন।",
+ "syncAcross": "ডিভাইসজুড়ে সিঙ্ক করুন",
+ "syncOn": "চালু",
+ "syncOff": "বন্ধ",
+ "relaysLabel": "রিলে",
+ "relaysHint": "প্রতি লাইনে একটি wss:// URL।",
+ "home": "হোম",
+ "logout": "লগ আউট",
+ "createNew": "নতুন তৈরি",
+ "importExisting": "বিদ্যমান ইম্পোর্ট",
+ "genIntro": "নতুন ১২-শব্দের সিড ফ্রেজ তৈরি করুন। লিখে রাখুন। এটিই এই ওয়ালেট পুনরুদ্ধারের একমাত্র উপায়।",
+ "generateSeed": "সিড ফ্রেজ তৈরি করুন",
+ "writeDownWarn": "⚠ এই ১২টি শব্দ ক্রম অনুযায়ী কাগজে লিখুন। যার কাছে এগুলো থাকবে সে আপনার কয়েন খরচ করতে পারবে।",
+ "copyPhrase": "ফ্রেজ কপি করুন",
+ "regenerate": "আবার তৈরি",
+ "verifyBackup": "ব্যাকআপ যাচাই",
+ "skipVerification": "যাচাই এড়িয়ে যান",
+ "confirmBackupIntro": "অনুরোধ করা শব্দগুলো লিখে আপনার ব্যাকআপ নিশ্চিত করুন।",
+ "wordN": "শব্দ #{n}",
+ "reenterPassphrase": "পাসফ্রেজ আবার লিখুন",
+ "back": "← ফিরুন",
+ "openWallet": "ওয়ালেট খুলুন",
+ "wordsMismatch": "এই শব্দগুলো আপনার ফ্রেজের সাথে মেলে না। ব্যাকআপ দেখুন।",
+ "passphraseMismatch": "এই পাসফ্রেজ আপনার দেওয়াটির সাথে মেলে না।",
+ "seedPhrase": "সিড ফ্রেজ",
+ "seedPlaceholder": "শব্দগুলো স্পেস দিয়ে আলাদা করে লিখুন",
+ "optionalPassphrase": "ঐচ্ছিক পাসফ্রেজ",
+ "leaveBlank": "ব্যবহার না হলে ফাঁকা রাখুন",
+ "show": "দেখান",
+ "hide": "লুকান",
+ "invalidSeed": "ভুল সিড ফ্রেজ — বানান ও ক্রম দেখুন।",
+ "keysNote": "কী কখনো আপনার ব্রাউজার ছাড়ে না। সম্পূর্ণ অফলাইনে চলে। এই পেজ সেভ করে স্থানীয়ভাবে খুলুন।",
+ "balance": "ব্যালেন্স",
+ "pending": "অপেক্ষমাণ",
+ "tabReceive": "গ্রহণ",
+ "tabSend": "পাঠান",
+ "tabHistory": "ইতিহাস",
+ "tabSettings": "সেটিংস",
+ "copyAddress": "ঠিকানা কপি",
+ "paymentReceived": "পেমেন্ট পাওয়া গেছে!",
+ "tapToProceed": "এগিয়ে যেতে যেকোনো জায়গায় ট্যাপ করুন",
+ "recipient": "প্রাপক",
+ "recipients": "প্রাপকগণ",
+ "max": "সর্বোচ্চ",
+ "feeRate": "ফি",
+ "feeEconomy": "সাশ্রয়ী",
+ "feeNormal": "সাধারণ",
+ "feePriority": "অগ্রাধিকার",
+ "feeCustom": "কাস্টম",
+ "selectedRate": "নির্বাচিত ফি: {n} sat/vB",
+ "coinSelection": "কয়েন নির্বাচন",
+ "automatic": "স্বয়ংক্রিয়",
+ "manual": "ম্যানুয়াল",
+ "noCoins": "কোনো কয়েন নেই।",
+ "nSelected": "{n} নির্বাচিত",
+ "addRecipient": "+ প্রাপক যোগ করুন",
+ "reviewTx": "লেনদেন পর্যালোচনা",
+ "remove": "সরান",
+ "enterRecipientAddr": "প্রাপকের ঠিকানা লিখুন।",
+ "enterAddrForN": "প্রাপক {n}-এর ঠিকানা লিখুন।",
+ "enterValidAmtForN": "প্রাপক {n}-এর জন্য সঠিক পরিমাণ লিখুন।",
+ "selectCoin": "খরচের জন্য অন্তত একটি কয়েন নির্বাচন করুন।",
+ "networkFee": "নেটওয়ার্ক ফি",
+ "offlineSignNote": "অফলাইন: এখন সই করুন, তারপর অনলাইন ডিভাইস থেকে লেনদেন সম্প্রচার করুন।",
+ "signBroadcast": "সই ও সম্প্রচার",
+ "signTx": "লেনদেন সই",
+ "broadcastFailed": "সম্প্রচার ব্যর্থ: {msg}",
+ "signingFailed": "সই ব্যর্থ: {msg}",
+ "done": "সম্পন্ন",
+ "txSignedNote": "✓ লেনদেন সই হয়েছে। নিচের কোড অনলাইন ডিভাইস থেকে সম্প্রচার করুন (যেমন mempool.space → Broadcast)।",
+ "transactionId": "লেনদেন ID",
+ "signedTxRaw": "সইকৃত লেনদেন (কোড)",
+ "copyHex": "কোড কপি",
+ "downloadLabel": "ডাউনলোড",
+ "showQrAirgap": "QR দেখান (অফলাইন স্থানান্তরের জন্য)",
+ "txBroadcast": "✓ লেনদেন সম্প্রচারিত!",
+ "copyTxid": "লেনদেন ID কপি",
+ "viewOnMempool": "mempool.space-এ দেখুন ↗",
+ "noTxYet": "এখনো কোনো লেনদেন নেই।",
+ "received": "গৃহীত",
+ "sent": "প্রেরিত",
+ "pendingTag": "⏳ অপেক্ষমাণ",
+ "awaitingConfirmation": "নিশ্চিতকরণের অপেক্ষায়",
+ "feeShort": "ফি {x}",
+ "historyOffline": "অফলাইনে ইতিহাস পাওয়া যায় না।",
+ "status": "অবস্থা",
+ "confirmed": "নিশ্চিত",
+ "confirmedTag": "নিশ্চিত",
+ "pendingInMempool": "অপেক্ষমাণ (mempool-এ)",
+ "block": "ব্লক",
+ "date": "তারিখ",
+ "copyId": "ID কপি",
+ "backToHistory": "← ইতিহাসে ফিরুন",
+ "recoveryPhrase": "রিকভারি ফ্রেজ",
+ "recoveryWarn": "⚠ যে কেউ এই শব্দগুলো দেখলে আপনার অর্থ চুরি করতে পারে। দেখানোর আগে নিশ্চিত হোন কেউ দেখছে না।",
+ "bip39Passphrase": "পাসফ্রেজ",
+ "copyPassphrase": "পাসফ্রেজ কপি",
+ "revealRecovery": "রিকভারি ফ্রেজ দেখান",
+ "offlineTransfer": "অফলাইন স্থানান্তর",
+ "offlineTransferDesc": "অনলাইন ডিভাইসে আপনার কয়েন এক্সপোর্ট করুন, তারপর অফলাইন ডিভাইসে (এই ওয়ালেট ও সিড সহ) ফাইল ইম্পোর্ট করে ইন্টারনেট ছাড়াই সই করুন।",
+ "exportSnapshot": "⤓ স্ন্যাপশট এক্সপোর্ট",
+ "importSnapshot": "স্ন্যাপশট ইম্পোর্ট…",
+ "rescan": "পুনরায় স্ক্যান",
+ "rescanDesc": "আপনার বর্তমান ঠিকানা স্বয়ংক্রিয়ভাবে আপডেট হয়। শুধু তখনই পুনরায় স্ক্যান করুন যখন পেমেন্ট কোনো পুরোনো (পুনঃব্যবহৃত) ঠিকানায় এসেছে এবং দেখা যাচ্ছে না।",
+ "rescanWallet": "ওয়ালেট পুনরায় স্ক্যান",
+ "scanning": "স্ক্যান হচ্ছে…",
+ "language": "ভাষা",
+ "offlineBanner": "নেটওয়ার্কে পৌঁছানো যাচ্ছে না — অফলাইনে চলছে। কয়েন লোড করতে সেটিংস থেকে স্ন্যাপশট ইম্পোর্ট করুন।",
+ "retry": "আবার চেষ্টা",
+ "copied": "কপি হয়েছে",
+ "snapshotExported": "স্ন্যাপশট এক্সপোর্ট হয়েছে",
+ "importedNCoins": "{n}টি কয়েন ইম্পোর্ট হয়েছে",
+ "unmatchedSuffix": " · {n}টি ঠিকানা এই ওয়ালেটে নেই",
+ "importFailed": "ইম্পোর্ট ব্যর্থ: {msg}",
+ "copy": "কপি",
+ "switchUnit": "BTC / sats পাল্টান",
+ "footerMadeBy": "তৈরি করেছেন",
+ "footerSourceOn": "সোর্স কোড"
+} \ No newline at end of file
diff --git a/src/locales/de.json b/src/locales/de.json
new file mode 100644
index 0000000..9e44612
--- /dev/null
+++ b/src/locales/de.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Passphrase",
+ "howItWorks": "So funktioniert es",
+ "installApp": "App installieren",
+ "hiwBasicsTitle": "Die Grundlagen",
+ "hiwBasics1": "Wenn du eine Wallet erstellst, erzeugt die Seite zwölf zufällige Wörter. Diese Wörter sind der Schlüssel zu deiner Wallet. Wer sie besitzt, kann die Coins ausgeben. Schreibe sie deshalb auf Papier und bewahre sie an einem Ort auf, zu dem nur du Zugang hast.",
+ "hiwBasics2": "Wenn du die zwölf Wörter verlierst und kein Backup hast, sind die Coins endgültig verloren. Es gibt keinen Zurücksetzen-Link und niemanden, den du anrufen kannst. Sichere sie daher, bevor du Geld einzahlst.",
+ "hiwBasics3": "Es gibt keinen Server und kein Konto. Die gesamte App ist eine einzige Seite, die in deinem Browser läuft. Niemand verwahrt deine Coins und kein Server bekommt jemals deine Schlüssel zu sehen. Um deinen Kontostand und deinen Verlauf anzuzeigen, liest sie von einem öffentlichen Block-Explorer (standardmäßig mempool.space oder deinem eigenen Node, falls du in den Einstellungen einen festlegst).",
+ "hiwBasics4": "Du kannst diese Seite sogar speichern und ganz ohne Internet direkt von deinem Computer aus öffnen. Sie funktioniert auch offline weiter.",
+ "hiwBasics5": "Sie folgt den üblichen Bitcoin-Standards (eine 12-Wörter-Phrase nach BIP39 und native SegWit-Schlüssel nach BIP84). Sollte diese Seite jemals verschwinden, kannst du dieselbe Phrase in Sparrow, Electrum oder einer beliebigen anderen Standard-Wallet wiederherstellen, und deine Coins sind genau dort.",
+ "hiwTribute": "Der Name Hal Wallet ist eine Hommage an den legendären Cypherpunk und Bitcoin-Pionier Hal Finney (1956–2014).",
+ "signExport": "Signieren & (anderswo senden)",
+ "scanQr": "QR scannen",
+ "scanHint": "Richte die Kamera auf einen QR-Code",
+ "scanNoCamera": "Zugriff auf die Kamera nicht möglich.",
+ "scanNoDecoder": "Das QR-Scannen benötigt beim ersten Mal eine Verbindung.",
+ "scanUnrecognized": "Aus diesem QR konnte keine Bitcoin-Adresse gelesen werden.",
+ "broadcastScanned": "Transaktion senden?",
+ "broadcastNow": "Senden",
+ "scanOffline": "Du bist offline — stelle die Verbindung wieder her, um diese Transaktion zu senden.",
+ "loadingHistory": "Transaktionen werden geladen…",
+ "explorer": "Block-Explorer",
+ "explorerDesc": "Der Server, den diese Wallet für Kontostände und Verlauf abfragt. Richte ihn auf deinen eigenen Node aus, um maximale Privatsphäre zu erreichen.",
+ "explorerUrl": "Server-URL",
+ "explorerUrlHint": "Esplora-/electrs-REST-Basis, z. B. https://mempool.space/api",
+ "deviceSync": "Geräteabgleich",
+ "deviceSyncDesc": "Halte diese Wallet über deine Geräte hinweg synchron, indem du eine verschlüsselte Kopie auf einem Nostr-Relay speicherst — nur ein Gerät mit deinem Seed kann sie lesen. Schalte ihn aus, um alles auf diesem Gerät zu behalten.",
+ "syncAcross": "Über Geräte synchronisieren",
+ "syncOn": "An",
+ "syncOff": "Aus",
+ "relaysLabel": "Relays",
+ "relaysHint": "Eine wss://-URL pro Zeile.",
+ "home": "Start",
+ "logout": "Abmelden",
+ "createNew": "Neu erstellen",
+ "importExisting": "Importieren",
+ "genIntro": "Erzeuge eine neue Seed-Phrase aus 12 Wörtern. Schreibe sie auf. Sie ist die einzige Möglichkeit, dieses Wallet wiederherzustellen.",
+ "generateSeed": "Seed-Phrase erzeugen",
+ "writeDownWarn": "⚠ Schreibe diese 12 Wörter in der richtigen Reihenfolge auf Papier. Wer sie hat, kann deine Coins ausgeben.",
+ "copyPhrase": "Phrase kopieren",
+ "regenerate": "Neu erzeugen",
+ "verifyBackup": "Backup prüfen",
+ "skipVerification": "Prüfung überspringen",
+ "confirmBackupIntro": "Bestätige dein Backup, indem du die abgefragten Wörter eingibst.",
+ "wordN": "Wort #{n}",
+ "reenterPassphrase": "Passphrase erneut eingeben",
+ "back": "← Zurück",
+ "openWallet": "Wallet öffnen",
+ "wordsMismatch": "Diese Wörter passen nicht zu deiner Phrase. Prüfe dein Backup.",
+ "passphraseMismatch": "Diese Passphrase stimmt nicht mit der eingegebenen überein.",
+ "seedPhrase": "Seed-Phrase",
+ "seedPlaceholder": "gib deine Wörter durch Leerzeichen getrennt ein",
+ "optionalPassphrase": "Optionale Passphrase",
+ "leaveBlank": "leer lassen, falls nicht genutzt",
+ "show": "Zeigen",
+ "hide": "Verbergen",
+ "invalidSeed": "Ungültige Seed-Phrase — prüfe Schreibweise und Reihenfolge.",
+ "keysNote": "Schlüssel verlassen nie deinen Browser. Funktioniert offline. Speichere diese Seite und öffne sie lokal.",
+ "balance": "Guthaben",
+ "pending": "Ausstehend",
+ "tabReceive": "Empfangen",
+ "tabSend": "Senden",
+ "tabHistory": "Verlauf",
+ "tabSettings": "Einstellungen",
+ "copyAddress": "Adresse kopieren",
+ "paymentReceived": "Zahlung erhalten!",
+ "tapToProceed": "Tippe irgendwo, um fortzufahren",
+ "recipient": "Empfänger",
+ "recipients": "Empfänger",
+ "max": "Max",
+ "feeRate": "Gebühr",
+ "feeEconomy": "Sparsam",
+ "feeNormal": "Normal",
+ "feePriority": "Priorität",
+ "feeCustom": "Benutzerdef.",
+ "selectedRate": "Gewählte Gebühr: {n} sat/vB",
+ "coinSelection": "Coin-Auswahl",
+ "automatic": "Automatisch",
+ "manual": "Manuell",
+ "noCoins": "Keine Coins verfügbar.",
+ "nSelected": "{n} ausgewählt",
+ "addRecipient": "+ Empfänger hinzufügen",
+ "reviewTx": "Transaktion prüfen",
+ "remove": "Entfernen",
+ "enterRecipientAddr": "Gib eine Empfängeradresse ein.",
+ "enterAddrForN": "Gib eine Adresse für Empfänger {n} ein.",
+ "enterValidAmtForN": "Gib einen gültigen Betrag für Empfänger {n} ein.",
+ "selectCoin": "Wähle mindestens einen Coin zum Ausgeben.",
+ "networkFee": "Netzwerkgebühr",
+ "offlineSignNote": "Offline: jetzt signieren und die Transaktion von einem Online-Gerät senden.",
+ "signBroadcast": "Signieren & senden",
+ "signTx": "Transaktion signieren",
+ "broadcastFailed": "Senden fehlgeschlagen: {msg}",
+ "signingFailed": "Signieren fehlgeschlagen: {msg}",
+ "done": "Fertig",
+ "txSignedNote": "✓ Transaktion signiert. Sende den Code unten von einem Online-Gerät (z. B. mempool.space → Broadcast).",
+ "transactionId": "Transaktions-ID",
+ "signedTxRaw": "Signierte Transaktion (Code)",
+ "copyHex": "Code kopieren",
+ "downloadLabel": "Herunterladen",
+ "showQrAirgap": "QR anzeigen (für Offline-Übertragung)",
+ "txBroadcast": "✓ Transaktion gesendet!",
+ "copyTxid": "Transaktions-ID kopieren",
+ "viewOnMempool": "Auf mempool.space ansehen ↗",
+ "noTxYet": "Noch keine Transaktionen.",
+ "received": "Empfangen",
+ "sent": "Gesendet",
+ "pendingTag": "⏳ ausstehend",
+ "awaitingConfirmation": "wartet auf Bestätigung",
+ "feeShort": "Gebühr {x}",
+ "historyOffline": "Verlauf ist offline nicht verfügbar.",
+ "status": "Status",
+ "confirmed": "Bestätigt",
+ "confirmedTag": "bestätigt",
+ "pendingInMempool": "Ausstehend (im Mempool)",
+ "block": "Block",
+ "date": "Datum",
+ "copyId": "ID kopieren",
+ "backToHistory": "← Zurück zum Verlauf",
+ "recoveryPhrase": "Wiederherstellungsphrase",
+ "recoveryWarn": "⚠ Wer diese Wörter sieht, kann deine Coins stehlen. Achte darauf, dass niemand zusieht, bevor du sie anzeigst.",
+ "bip39Passphrase": "Passphrase",
+ "copyPassphrase": "Passphrase kopieren",
+ "revealRecovery": "Wiederherstellungsphrase anzeigen",
+ "offlineTransfer": "Offline-Übertragung",
+ "offlineTransferDesc": "Exportiere deine Coins auf einem Online-Gerät und importiere die Datei auf einem Offline-Gerät (mit diesem Wallet + Seed), um ohne Internet zu signieren.",
+ "exportSnapshot": "⤓ Snapshot exportieren",
+ "importSnapshot": "Snapshot importieren…",
+ "rescan": "Neu scannen",
+ "rescanDesc": "Deine aktuelle Adresse aktualisiert sich automatisch. Scanne nur neu, wenn eine Zahlung an eine alte (wiederverwendete) Adresse ging und nicht erscheint.",
+ "rescanWallet": "Wallet neu scannen",
+ "scanning": "Scanne…",
+ "language": "Sprache",
+ "offlineBanner": "Netzwerk nicht erreichbar — offline. Importiere einen Snapshot unter Einstellungen, um Coins zu laden.",
+ "retry": "Erneut",
+ "copied": "In Zwischenablage kopiert",
+ "snapshotExported": "Snapshot exportiert",
+ "importedNCoins": "{n} Coin(s) importiert",
+ "unmatchedSuffix": " · {n} Adresse(n) nicht in diesem Wallet",
+ "importFailed": "Import fehlgeschlagen: {msg}",
+ "copy": "Kopieren",
+ "switchUnit": "BTC / sats wechseln",
+ "footerMadeBy": "gemacht von",
+ "footerSourceOn": "Quellcode auf"
+} \ No newline at end of file
diff --git a/src/locales/es.json b/src/locales/es.json
new file mode 100644
index 0000000..fbdf21d
--- /dev/null
+++ b/src/locales/es.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Frase de contraseña",
+ "howItWorks": "Cómo funciona",
+ "installApp": "Instalar app",
+ "hiwBasicsTitle": "Lo básico",
+ "hiwBasics1": "Cuando creas una billetera, la página genera doce palabras al azar. Esas palabras son la clave de tu billetera. Cualquiera que las tenga puede gastar las monedas, así que anótalas en papel y guárdalas en un lugar al que solo tú puedas acceder.",
+ "hiwBasics2": "Si pierdes las doce palabras y no tienes una copia de seguridad, las monedas se pierden para siempre. No hay enlace para restablecer ni nadie a quien llamar, así que respáldalas antes de poner dinero.",
+ "hiwBasics3": "No hay servidor ni cuenta. Toda la app es una única página que se ejecuta en tu navegador, así que nadie custodia tus monedas y ningún servidor ve jamás tus claves. Para mostrar tu saldo e historial, lee desde un explorador de bloques público (mempool.space por defecto, o tu propio nodo si configuras uno en Ajustes).",
+ "hiwBasics4": "Incluso puedes guardar esta página y abrirla directamente desde tu computadora sin conexión a internet. Sigue funcionando sin conexión.",
+ "hiwBasics5": "Sigue los estándares habituales de Bitcoin (una frase BIP39 de 12 palabras y claves SegWit nativas BIP84), así que si este sitio desapareciera algún día, puedes restaurar la misma frase en Sparrow, Electrum o cualquier otra billetera estándar y tus monedas estarán justo ahí.",
+ "hiwTribute": "El nombre Hal Wallet es un homenaje al legendario cypherpunk y pionero de Bitcoin, Hal Finney (1956–2014).",
+ "signExport": "Firmar y (transmitir en otro lugar)",
+ "scanQr": "Escanear QR",
+ "scanHint": "Apunta la cámara a un código QR",
+ "scanNoCamera": "No se pudo acceder a la cámara.",
+ "scanNoDecoder": "El escaneo de QR necesita conexión la primera vez que se usa.",
+ "scanUnrecognized": "No se pudo leer una dirección de Bitcoin de ese QR.",
+ "broadcastScanned": "¿Transmitir la transacción?",
+ "broadcastNow": "Transmitir",
+ "scanOffline": "Estás sin conexión — vuelve a conectarte para transmitir esta transacción.",
+ "loadingHistory": "Cargando transacciones…",
+ "explorer": "Explorador de bloques",
+ "explorerDesc": "El servidor que esta billetera consulta para saldos e historial. Apúntalo a tu propio nodo para máxima privacidad.",
+ "explorerUrl": "URL del servidor",
+ "explorerUrlHint": "Base REST de Esplora / electrs, p. ej. https://mempool.space/api",
+ "deviceSync": "Sincronización de dispositivos",
+ "deviceSyncDesc": "Mantén esta billetera sincronizada entre tus dispositivos guardando una copia cifrada en un relay de Nostr — solo un dispositivo con tu semilla puede leerla. Desactívala para mantener todo en este dispositivo.",
+ "syncAcross": "Sincronizar entre dispositivos",
+ "syncOn": "Activado",
+ "syncOff": "Desactivado",
+ "relaysLabel": "Relays",
+ "relaysHint": "Una URL wss:// por línea.",
+ "home": "Inicio",
+ "logout": "Cerrar sesión",
+ "createNew": "Crear nuevo",
+ "importExisting": "Importar existente",
+ "genIntro": "Genera una nueva frase semilla de 12 palabras. Anótala. Es la única forma de recuperar este monedero.",
+ "generateSeed": "Generar frase semilla",
+ "writeDownWarn": "⚠ Anota estas 12 palabras en papel, en orden. Cualquiera que las tenga puede gastar tus fondos.",
+ "copyPhrase": "Copiar frase",
+ "regenerate": "Regenerar",
+ "verifyBackup": "Verificar copia",
+ "skipVerification": "Omitir verificación",
+ "confirmBackupIntro": "Confirma tu copia introduciendo las palabras solicitadas.",
+ "wordN": "Palabra n.º {n}",
+ "reenterPassphrase": "Reintroduce la contraseña",
+ "back": "← Atrás",
+ "openWallet": "Abrir monedero",
+ "wordsMismatch": "Esas palabras no coinciden con tu frase. Revisa tu copia.",
+ "passphraseMismatch": "Esa contraseña no coincide con la que introdujiste.",
+ "seedPhrase": "Frase semilla",
+ "seedPlaceholder": "escribe tus palabras separadas por espacios",
+ "optionalPassphrase": "Contraseña opcional",
+ "leaveBlank": "déjalo en blanco si no se usa",
+ "show": "Mostrar",
+ "hide": "Ocultar",
+ "invalidSeed": "Frase semilla no válida — revisa la ortografía y el orden.",
+ "keysNote": "Las claves nunca salen de tu navegador. Funciona sin conexión. Guarda esta página y ábrela desde tu equipo.",
+ "balance": "Saldo",
+ "pending": "Pendiente",
+ "tabReceive": "Recibir",
+ "tabSend": "Enviar",
+ "tabHistory": "Historial",
+ "tabSettings": "Ajustes",
+ "copyAddress": "Copiar dirección",
+ "paymentReceived": "¡Pago recibido!",
+ "tapToProceed": "Toca en cualquier lugar para continuar",
+ "recipient": "Destinatario",
+ "recipients": "Destinatarios",
+ "max": "Máx",
+ "feeRate": "Tarifa",
+ "feeEconomy": "Económica",
+ "feeNormal": "Normal",
+ "feePriority": "Prioritaria",
+ "feeCustom": "Personalizada",
+ "selectedRate": "Tarifa elegida: {n} sat/vB",
+ "coinSelection": "Selección de monedas",
+ "automatic": "Automática",
+ "manual": "Manual",
+ "noCoins": "No hay monedas disponibles.",
+ "nSelected": "{n} seleccionadas",
+ "addRecipient": "+ Añadir destinatario",
+ "reviewTx": "Revisar transacción",
+ "remove": "Quitar",
+ "enterRecipientAddr": "Introduce una dirección de destino.",
+ "enterAddrForN": "Introduce una dirección para el destinatario {n}.",
+ "enterValidAmtForN": "Introduce un importe válido para el destinatario {n}.",
+ "selectCoin": "Selecciona al menos una moneda para gastar.",
+ "networkFee": "Comisión de red",
+ "offlineSignNote": "Sin conexión: firma ahora y difunde la transacción desde un dispositivo conectado.",
+ "signBroadcast": "Firmar y difundir",
+ "signTx": "Firmar transacción",
+ "broadcastFailed": "Falló la difusión: {msg}",
+ "signingFailed": "Falló la firma: {msg}",
+ "done": "Listo",
+ "txSignedNote": "✓ Transacción firmada. Difunde el código de abajo desde un dispositivo conectado (p. ej. mempool.space → Broadcast).",
+ "transactionId": "ID de transacción",
+ "signedTxRaw": "Transacción firmada (código)",
+ "copyHex": "Copiar código",
+ "downloadLabel": "Descargar",
+ "showQrAirgap": "Mostrar QR (para transferencia sin conexión)",
+ "txBroadcast": "✓ ¡Transacción difundida!",
+ "copyTxid": "Copiar ID de transacción",
+ "viewOnMempool": "Ver en mempool.space ↗",
+ "noTxYet": "Aún no hay transacciones.",
+ "received": "Recibido",
+ "sent": "Enviado",
+ "pendingTag": "⏳ pendiente",
+ "awaitingConfirmation": "esperando confirmación",
+ "feeShort": "comisión {x}",
+ "historyOffline": "El historial no está disponible sin conexión.",
+ "status": "Estado",
+ "confirmed": "Confirmada",
+ "confirmedTag": "confirmada",
+ "pendingInMempool": "Pendiente (en mempool)",
+ "block": "Bloque",
+ "date": "Fecha",
+ "copyId": "Copiar ID",
+ "backToHistory": "← Volver al historial",
+ "recoveryPhrase": "Frase de recuperación",
+ "recoveryWarn": "⚠ Cualquiera que vea estas palabras puede robar tus fondos. Asegúrate de que nadie mire antes de mostrarlas.",
+ "bip39Passphrase": "Contraseña",
+ "copyPassphrase": "Copiar contraseña",
+ "revealRecovery": "Mostrar frase de recuperación",
+ "offlineTransfer": "Transferencia sin conexión",
+ "offlineTransferDesc": "Exporta tus monedas en un dispositivo conectado, luego importa el archivo en uno sin conexión (con este monedero + semilla) para firmar sin internet.",
+ "exportSnapshot": "⤓ Exportar copia",
+ "importSnapshot": "Importar copia…",
+ "rescan": "Reescanear",
+ "rescanDesc": "Tu dirección actual se actualiza automáticamente. Reescanea solo si enviaste un pago a una dirección antigua (reutilizada) y no aparece.",
+ "rescanWallet": "Reescanear monedero",
+ "scanning": "Escaneando…",
+ "language": "Idioma",
+ "offlineBanner": "Sin conexión a la red — trabajando sin conexión. Importa una copia en Ajustes para cargar monedas.",
+ "retry": "Reintentar",
+ "copied": "Copiado al portapapeles",
+ "snapshotExported": "Copia exportada",
+ "importedNCoins": "{n} moneda(s) importada(s)",
+ "unmatchedSuffix": " · {n} dirección(es) no pertenecen a este monedero",
+ "importFailed": "Falló la importación: {msg}",
+ "copy": "Copiar",
+ "switchUnit": "Cambiar BTC / sats",
+ "footerMadeBy": "hecho por",
+ "footerSourceOn": "código disponible en"
+} \ No newline at end of file
diff --git a/src/locales/fr.json b/src/locales/fr.json
new file mode 100644
index 0000000..a629174
--- /dev/null
+++ b/src/locales/fr.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Phrase secrète",
+ "howItWorks": "Comment ça marche",
+ "installApp": "Installer l’application",
+ "hiwBasicsTitle": "Les bases",
+ "hiwBasics1": "Quand vous créez un portefeuille, la page génère douze mots aléatoires. Ces mots sont la clé de votre portefeuille. Quiconque les possède peut dépenser les fonds, alors notez-les sur papier et gardez-les dans un endroit auquel vous seul avez accès.",
+ "hiwBasics2": "Si vous perdez les douze mots et n’avez pas de sauvegarde, les fonds sont perdus à jamais. Il n’y a aucun lien de réinitialisation ni personne à appeler, alors sauvegardez-les avant d’y déposer de l’argent.",
+ "hiwBasics3": "Il n’y a ni serveur ni compte. Toute l’application tient sur une seule page qui s’exécute dans votre navigateur : personne ne détient vos fonds et aucun serveur ne voit jamais vos clés. Pour afficher votre solde et votre historique, elle interroge un explorateur de blocs public (mempool.space par défaut, ou votre propre nœud si vous en configurez un dans les Réglages).",
+ "hiwBasics4": "Vous pouvez même enregistrer cette page et l’ouvrir directement depuis votre ordinateur sans aucune connexion Internet. Elle continue de fonctionner hors ligne.",
+ "hiwBasics5": "Elle respecte les standards habituels de Bitcoin (une phrase BIP39 de 12 mots et des clés SegWit natives BIP84), donc si ce site venait à disparaître, vous pourriez restaurer la même phrase dans Sparrow, Electrum ou tout autre portefeuille standard, et vos fonds y seraient.",
+ "hiwTribute": "Le nom Hal Wallet est un hommage au légendaire cypherpunk et pionnier de Bitcoin, Hal Finney (1956–2014).",
+ "signExport": "Signer et (diffuser ailleurs)",
+ "scanQr": "Scanner un QR",
+ "scanHint": "Pointez la caméra vers un code QR",
+ "scanNoCamera": "Impossible d’accéder à la caméra.",
+ "scanNoDecoder": "Le scan de QR nécessite une connexion lors de sa première utilisation.",
+ "scanUnrecognized": "Impossible de lire une adresse Bitcoin dans ce QR.",
+ "broadcastScanned": "Diffuser la transaction ?",
+ "broadcastNow": "Diffuser",
+ "scanOffline": "Vous êtes hors ligne — reconnectez-vous pour diffuser cette transaction.",
+ "loadingHistory": "Chargement des transactions…",
+ "explorer": "Explorateur de blocs",
+ "explorerDesc": "Le serveur que ce portefeuille interroge pour les soldes et l’historique. Pointez-le vers votre propre nœud pour une confidentialité maximale.",
+ "explorerUrl": "URL du serveur",
+ "explorerUrlHint": "Base REST Esplora / electrs, par ex. https://mempool.space/api",
+ "deviceSync": "Synchronisation des appareils",
+ "deviceSyncDesc": "Gardez ce portefeuille synchronisé entre vos appareils en stockant une copie chiffrée sur un relais Nostr — seul un appareil possédant votre seed peut la lire. Désactivez l’option pour tout conserver sur cet appareil.",
+ "syncAcross": "Synchroniser entre les appareils",
+ "syncOn": "Activé",
+ "syncOff": "Désactivé",
+ "relaysLabel": "Relais",
+ "relaysHint": "Une URL wss:// par ligne.",
+ "home": "Accueil",
+ "logout": "Déconnexion",
+ "createNew": "Créer",
+ "importExisting": "Importer",
+ "genIntro": "Générez une nouvelle phrase de 12 mots. Notez-la. C’est le seul moyen de récupérer ce portefeuille.",
+ "generateSeed": "Générer la phrase",
+ "writeDownWarn": "⚠ Notez ces 12 mots sur papier, dans l’ordre. Quiconque les a peut dépenser vos fonds.",
+ "copyPhrase": "Copier la phrase",
+ "regenerate": "Régénérer",
+ "verifyBackup": "Vérifier la sauvegarde",
+ "skipVerification": "Ignorer la vérification",
+ "confirmBackupIntro": "Confirmez votre sauvegarde en saisissant les mots demandés.",
+ "wordN": "Mot n° {n}",
+ "reenterPassphrase": "Ressaisir la phrase secrète",
+ "back": "← Retour",
+ "openWallet": "Ouvrir le portefeuille",
+ "wordsMismatch": "Ces mots ne correspondent pas à votre phrase. Vérifiez votre sauvegarde.",
+ "passphraseMismatch": "Cette phrase secrète ne correspond pas à celle saisie.",
+ "seedPhrase": "Phrase de récupération",
+ "seedPlaceholder": "saisissez vos mots séparés par des espaces",
+ "optionalPassphrase": "Phrase secrète (facultative)",
+ "leaveBlank": "laisser vide si non utilisée",
+ "show": "Afficher",
+ "hide": "Masquer",
+ "invalidSeed": "Phrase invalide — vérifiez l’orthographe et l’ordre des mots.",
+ "keysNote": "Les clés ne quittent jamais votre navigateur. Fonctionne hors ligne. Enregistrez cette page et ouvrez-la localement.",
+ "balance": "Solde",
+ "pending": "En attente",
+ "tabReceive": "Recevoir",
+ "tabSend": "Envoyer",
+ "tabHistory": "Historique",
+ "tabSettings": "Réglages",
+ "copyAddress": "Copier l’adresse",
+ "paymentReceived": "Paiement reçu !",
+ "tapToProceed": "Touchez n’importe où pour continuer",
+ "recipient": "Destinataire",
+ "recipients": "Destinataires",
+ "max": "Max",
+ "feeRate": "Frais",
+ "feeEconomy": "Économique",
+ "feeNormal": "Normal",
+ "feePriority": "Prioritaire",
+ "feeCustom": "Personnalisé",
+ "selectedRate": "Frais choisis : {n} sat/vB",
+ "coinSelection": "Sélection des pièces",
+ "automatic": "Automatique",
+ "manual": "Manuel",
+ "noCoins": "Aucune pièce disponible.",
+ "nSelected": "{n} sélectionnée(s)",
+ "addRecipient": "+ Ajouter un destinataire",
+ "reviewTx": "Vérifier la transaction",
+ "remove": "Retirer",
+ "enterRecipientAddr": "Saisissez une adresse de destination.",
+ "enterAddrForN": "Saisissez une adresse pour le destinataire {n}.",
+ "enterValidAmtForN": "Saisissez un montant valide pour le destinataire {n}.",
+ "selectCoin": "Sélectionnez au moins une pièce à dépenser.",
+ "networkFee": "Frais de réseau",
+ "offlineSignNote": "Hors ligne : signez maintenant, puis diffusez la transaction depuis un appareil connecté.",
+ "signBroadcast": "Signer et diffuser",
+ "signTx": "Signer la transaction",
+ "broadcastFailed": "Échec de la diffusion : {msg}",
+ "signingFailed": "Échec de la signature : {msg}",
+ "done": "Terminé",
+ "txSignedNote": "✓ Transaction signée. Diffusez le code ci-dessous depuis un appareil connecté (par ex. mempool.space → Broadcast).",
+ "transactionId": "ID de transaction",
+ "signedTxRaw": "Transaction signée (code)",
+ "copyHex": "Copier le code",
+ "downloadLabel": "Télécharger",
+ "showQrAirgap": "Afficher le QR (transfert hors ligne)",
+ "txBroadcast": "✓ Transaction diffusée !",
+ "copyTxid": "Copier l’ID de transaction",
+ "viewOnMempool": "Voir sur mempool.space ↗",
+ "noTxYet": "Aucune transaction.",
+ "received": "Reçu",
+ "sent": "Envoyé",
+ "pendingTag": "⏳ en attente",
+ "awaitingConfirmation": "en attente de confirmation",
+ "feeShort": "frais {x}",
+ "historyOffline": "L’historique est indisponible hors ligne.",
+ "status": "Statut",
+ "confirmed": "Confirmée",
+ "confirmedTag": "confirmée",
+ "pendingInMempool": "En attente (mempool)",
+ "block": "Bloc",
+ "date": "Date",
+ "copyId": "Copier l’ID",
+ "backToHistory": "← Retour à l’historique",
+ "recoveryPhrase": "Phrase de récupération",
+ "recoveryWarn": "⚠ Quiconque voit ces mots peut voler vos fonds. Assurez-vous que personne ne regarde avant de les afficher.",
+ "bip39Passphrase": "Phrase secrète",
+ "copyPassphrase": "Copier la phrase secrète",
+ "revealRecovery": "Afficher la phrase de récupération",
+ "offlineTransfer": "Transfert hors ligne",
+ "offlineTransferDesc": "Exportez vos pièces sur un appareil connecté, puis importez le fichier sur un appareil hors ligne (avec ce portefeuille + phrase) pour signer sans internet.",
+ "exportSnapshot": "⤓ Exporter l’instantané",
+ "importSnapshot": "Importer l’instantané…",
+ "rescan": "Rescanner",
+ "rescanDesc": "Votre adresse actuelle se met à jour automatiquement. Rescannez seulement si un paiement a été envoyé à une ancienne adresse (réutilisée) et n’apparaît pas.",
+ "rescanWallet": "Rescanner le portefeuille",
+ "scanning": "Analyse…",
+ "language": "Langue",
+ "offlineBanner": "Réseau inaccessible — mode hors ligne. Importez un instantané dans Réglages pour charger les pièces.",
+ "retry": "Réessayer",
+ "copied": "Copié dans le presse-papiers",
+ "snapshotExported": "Instantané exporté",
+ "importedNCoins": "{n} pièce(s) importée(s)",
+ "unmatchedSuffix": " · {n} adresse(s) hors de ce portefeuille",
+ "importFailed": "Échec de l’import : {msg}",
+ "copy": "Copier",
+ "switchUnit": "Basculer BTC / sats",
+ "footerMadeBy": "fait par",
+ "footerSourceOn": "code source sur"
+} \ No newline at end of file
diff --git a/src/locales/hi.json b/src/locales/hi.json
new file mode 100644
index 0000000..b40b0ca
--- /dev/null
+++ b/src/locales/hi.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "पासफ़्रेज़",
+ "howItWorks": "यह कैसे काम करता है",
+ "installApp": "ऐप इंस्टॉल करें",
+ "hiwBasicsTitle": "मूल बातें",
+ "hiwBasics1": "जब आप वॉलेट बनाते हैं, तो पेज बारह यादृच्छिक शब्द उत्पन्न करता है। ये शब्द आपके वॉलेट की कुंजी हैं। जिसके पास ये होंगे वह सिक्के खर्च कर सकता है, इसलिए इन्हें कागज़ पर लिख लें और किसी ऐसी जगह रखें जहाँ केवल आप पहुँच सकें।",
+ "hiwBasics2": "अगर आप बारह शब्द खो देते हैं और आपके पास बैकअप नहीं है, तो सिक्के हमेशा के लिए चले गए। कोई रीसेट लिंक नहीं है और कॉल करने के लिए कोई नहीं है, इसलिए पैसा डालने से पहले इनका बैकअप ले लें।",
+ "hiwBasics3": "कोई सर्वर नहीं और कोई खाता नहीं है। पूरा ऐप एक ही पेज है जो आपके ब्राउज़र में चलता है, इसलिए कोई भी आपके सिक्के नहीं रखता और किसी सर्वर पर कुछ भी आपकी कुंजियाँ कभी नहीं देखता। आपका बैलेंस और इतिहास दिखाने के लिए यह एक सार्वजनिक ब्लॉक एक्सप्लोरर से पढ़ता है (डिफ़ॉल्ट रूप से mempool.space, या आपका अपना नोड अगर आप सेटिंग्स में सेट करें)।",
+ "hiwBasics4": "आप इस पेज को सहेज भी सकते हैं और बिना किसी इंटरनेट के सीधे अपने कंप्यूटर से खोल सकते हैं। यह ऑफ़लाइन भी काम करता रहता है।",
+ "hiwBasics5": "यह सामान्य Bitcoin मानकों का पालन करता है (12-शब्दों का BIP39 वाक्यांश और BIP84 नेटिव SegWit कुंजियाँ), इसलिए अगर यह साइट कभी गायब हो जाए तो आप उसी वाक्यांश को Sparrow, Electrum, या किसी अन्य मानक वॉलेट में पुनर्स्थापित कर सकते हैं और आपके सिक्के वहीं मौजूद होंगे।",
+ "hiwTribute": "Hal Wallet नाम पौराणिक साइफरपंक और Bitcoin अग्रदूत, Hal Finney (1956–2014) को एक श्रद्धांजलि है।",
+ "signExport": "साइन करें और (कहीं और प्रसारित करें)",
+ "scanQr": "QR स्कैन करें",
+ "scanHint": "कैमरे को QR कोड की ओर इंगित करें",
+ "scanNoCamera": "कैमरे तक पहुँच नहीं हो सकी।",
+ "scanNoDecoder": "QR स्कैनिंग के लिए पहली बार उपयोग करते समय एक कनेक्शन चाहिए।",
+ "scanUnrecognized": "उस QR से Bitcoin पता नहीं पढ़ा जा सका।",
+ "broadcastScanned": "लेनदेन प्रसारित करें?",
+ "broadcastNow": "प्रसारित करें",
+ "scanOffline": "आप ऑफ़लाइन हैं — इस लेनदेन को प्रसारित करने के लिए फिर से कनेक्ट करें।",
+ "loadingHistory": "लेनदेन लोड हो रहे हैं…",
+ "explorer": "ब्लॉक एक्सप्लोरर",
+ "explorerDesc": "वह सर्वर जिससे यह वॉलेट बैलेंस और इतिहास के लिए पूछताछ करता है। अधिकतम गोपनीयता के लिए इसे अपने अपने नोड पर इंगित करें।",
+ "explorerUrl": "सर्वर URL",
+ "explorerUrlHint": "Esplora / electrs REST आधार, उदा. https://mempool.space/api",
+ "deviceSync": "डिवाइस सिंक",
+ "deviceSyncDesc": "एक Nostr रिले पर एक एन्क्रिप्टेड प्रति संग्रहीत करके इस वॉलेट को अपने सभी डिवाइस में सिंक रखें — केवल आपके सीड वाला डिवाइस ही इसे पढ़ सकता है। सब कुछ इसी डिवाइस पर रखने के लिए इसे बंद कर दें।",
+ "syncAcross": "डिवाइस में सिंक करें",
+ "syncOn": "चालू",
+ "syncOff": "बंद",
+ "relaysLabel": "रिले",
+ "relaysHint": "प्रति पंक्ति एक wss:// URL।",
+ "home": "होम",
+ "logout": "लॉग आउट",
+ "createNew": "नया बनाएँ",
+ "importExisting": "मौजूदा आयात करें",
+ "genIntro": "नया 12-शब्द वाला सीड वाक्यांश बनाएँ। इसे लिख लें। यही इस वॉलेट को पुनः प्राप्त करने का एकमात्र तरीका है।",
+ "generateSeed": "सीड वाक्यांश बनाएँ",
+ "writeDownWarn": "⚠ इन 12 शब्दों को क्रम से कागज़ पर लिखें। जिसके पास ये होंगे वह आपके सिक्के खर्च कर सकता है।",
+ "copyPhrase": "वाक्यांश कॉपी करें",
+ "regenerate": "फिर बनाएँ",
+ "verifyBackup": "बैकअप जाँचें",
+ "skipVerification": "सत्यापन छोड़ें",
+ "confirmBackupIntro": "माँगे गए शब्द दर्ज करके अपना बैकअप पुष्टि करें।",
+ "wordN": "शब्द #{n}",
+ "reenterPassphrase": "पासफ़्रेज़ फिर दर्ज करें",
+ "back": "← वापस",
+ "openWallet": "वॉलेट खोलें",
+ "wordsMismatch": "ये शब्द आपके वाक्यांश से मेल नहीं खाते। अपना बैकअप जाँचें।",
+ "passphraseMismatch": "यह पासफ़्रेज़ आपके दर्ज किए गए से मेल नहीं खाता।",
+ "seedPhrase": "सीड वाक्यांश",
+ "seedPlaceholder": "अपने शब्द स्पेस से अलग करके लिखें",
+ "optionalPassphrase": "वैकल्पिक पासफ़्रेज़",
+ "leaveBlank": "उपयोग न हो तो खाली छोड़ें",
+ "show": "दिखाएँ",
+ "hide": "छिपाएँ",
+ "invalidSeed": "अमान्य सीड वाक्यांश — वर्तनी और क्रम जाँचें।",
+ "keysNote": "कुंजियाँ कभी आपके ब्राउज़र से बाहर नहीं जातीं। पूरी तरह ऑफ़लाइन काम करता है। इस पेज को सहेजें और स्थानीय रूप से खोलें।",
+ "balance": "बैलेंस",
+ "pending": "लंबित",
+ "tabReceive": "प्राप्त",
+ "tabSend": "भेजें",
+ "tabHistory": "इतिहास",
+ "tabSettings": "सेटिंग्स",
+ "copyAddress": "पता कॉपी करें",
+ "paymentReceived": "भुगतान प्राप्त हुआ!",
+ "tapToProceed": "आगे बढ़ने के लिए कहीं भी टैप करें",
+ "recipient": "प्राप्तकर्ता",
+ "recipients": "प्राप्तकर्ता",
+ "max": "अधिकतम",
+ "feeRate": "शुल्क",
+ "feeEconomy": "किफ़ायती",
+ "feeNormal": "सामान्य",
+ "feePriority": "प्राथमिकता",
+ "feeCustom": "कस्टम",
+ "selectedRate": "चयनित शुल्क: {n} sat/vB",
+ "coinSelection": "सिक्का चयन",
+ "automatic": "स्वचालित",
+ "manual": "मैनुअल",
+ "noCoins": "कोई सिक्के उपलब्ध नहीं।",
+ "nSelected": "{n} चयनित",
+ "addRecipient": "+ प्राप्तकर्ता जोड़ें",
+ "reviewTx": "लेन-देन की समीक्षा",
+ "remove": "हटाएँ",
+ "enterRecipientAddr": "प्राप्तकर्ता का पता दर्ज करें।",
+ "enterAddrForN": "प्राप्तकर्ता {n} का पता दर्ज करें।",
+ "enterValidAmtForN": "प्राप्तकर्ता {n} के लिए मान्य राशि दर्ज करें।",
+ "selectCoin": "खर्च के लिए कम से कम एक सिक्का चुनें।",
+ "networkFee": "नेटवर्क शुल्क",
+ "offlineSignNote": "ऑफ़लाइन: अभी हस्ताक्षर करें, फिर किसी ऑनलाइन डिवाइस से लेन-देन प्रसारित करें।",
+ "signBroadcast": "हस्ताक्षर और प्रसारण",
+ "signTx": "लेन-देन पर हस्ताक्षर",
+ "broadcastFailed": "प्रसारण विफल: {msg}",
+ "signingFailed": "हस्ताक्षर विफल: {msg}",
+ "done": "हो गया",
+ "txSignedNote": "✓ लेन-देन पर हस्ताक्षर हो गए। नीचे का कोड किसी ऑनलाइन डिवाइस से प्रसारित करें (जैसे mempool.space → Broadcast)।",
+ "transactionId": "लेन-देन ID",
+ "signedTxRaw": "हस्ताक्षरित लेन-देन (कोड)",
+ "copyHex": "कोड कॉपी करें",
+ "downloadLabel": "डाउनलोड",
+ "showQrAirgap": "QR दिखाएँ (ऑफ़लाइन स्थानांतरण के लिए)",
+ "txBroadcast": "✓ लेन-देन प्रसारित हुआ!",
+ "copyTxid": "लेन-देन ID कॉपी करें",
+ "viewOnMempool": "mempool.space पर देखें ↗",
+ "noTxYet": "अभी कोई लेन-देन नहीं।",
+ "received": "प्राप्त",
+ "sent": "भेजा गया",
+ "pendingTag": "⏳ लंबित",
+ "awaitingConfirmation": "पुष्टि की प्रतीक्षा",
+ "feeShort": "शुल्क {x}",
+ "historyOffline": "ऑफ़लाइन में इतिहास उपलब्ध नहीं।",
+ "status": "स्थिति",
+ "confirmed": "पुष्ट",
+ "confirmedTag": "पुष्ट",
+ "pendingInMempool": "लंबित (mempool में)",
+ "block": "ब्लॉक",
+ "date": "तारीख़",
+ "copyId": "ID कॉपी करें",
+ "backToHistory": "← इतिहास पर वापस",
+ "recoveryPhrase": "रिकवरी वाक्यांश",
+ "recoveryWarn": "⚠ जो भी ये शब्द देखेगा वह आपके फंड चुरा सकता है। दिखाने से पहले सुनिश्चित करें कोई नहीं देख रहा।",
+ "bip39Passphrase": "पासफ़्रेज़",
+ "copyPassphrase": "पासफ़्रेज़ कॉपी करें",
+ "revealRecovery": "रिकवरी वाक्यांश दिखाएँ",
+ "offlineTransfer": "ऑफ़लाइन स्थानांतरण",
+ "offlineTransferDesc": "किसी ऑनलाइन डिवाइस पर अपने सिक्के निर्यात करें, फिर ऑफ़लाइन डिवाइस (इसी वॉलेट और सीड के साथ) पर फ़ाइल आयात करके बिना इंटरनेट हस्ताक्षर करें।",
+ "exportSnapshot": "⤓ स्नैपशॉट निर्यात",
+ "importSnapshot": "स्नैपशॉट आयात…",
+ "rescan": "फिर स्कैन करें",
+ "rescanDesc": "आपका वर्तमान पता स्वतः अपडेट होता है। केवल तभी फिर स्कैन करें जब भुगतान किसी पुराने (पुनः उपयोग) पते पर आया हो और दिख न रहा हो।",
+ "rescanWallet": "वॉलेट फिर स्कैन करें",
+ "scanning": "स्कैन हो रहा है…",
+ "language": "भाषा",
+ "offlineBanner": "नेटवर्क उपलब्ध नहीं — ऑफ़लाइन काम जारी। सिक्के लोड करने के लिए सेटिंग्स से स्नैपशॉट आयात करें।",
+ "retry": "पुनः प्रयास",
+ "copied": "कॉपी हो गया",
+ "snapshotExported": "स्नैपशॉट निर्यात हुआ",
+ "importedNCoins": "{n} सिक्के आयात हुए",
+ "unmatchedSuffix": " · {n} पते इस वॉलेट में नहीं",
+ "importFailed": "आयात विफल: {msg}",
+ "copy": "कॉपी",
+ "switchUnit": "BTC / sats बदलें",
+ "footerMadeBy": "द्वारा बनाया",
+ "footerSourceOn": "सोर्स यहाँ"
+} \ No newline at end of file
diff --git a/src/locales/id.json b/src/locales/id.json
new file mode 100644
index 0000000..57e87ee
--- /dev/null
+++ b/src/locales/id.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Frasa sandi",
+ "howItWorks": "Cara kerjanya",
+ "installApp": "Pasang aplikasi",
+ "hiwBasicsTitle": "Dasar-dasarnya",
+ "hiwBasics1": "Saat Anda membuat dompet, halaman ini menghasilkan dua belas kata acak. Kata-kata itu adalah kunci dompet Anda. Siapa pun yang memilikinya bisa membelanjakan koin Anda, jadi tuliskan di kertas dan simpan di tempat yang hanya bisa Anda jangkau.",
+ "hiwBasics2": "Jika Anda kehilangan dua belas kata itu dan tidak punya cadangan, koin Anda hilang selamanya. Tidak ada tautan setel ulang dan tidak ada yang bisa dihubungi, jadi cadangkan dulu sebelum memasukkan uang.",
+ "hiwBasics3": "Tidak ada server dan tidak ada akun. Seluruh aplikasi adalah satu halaman yang berjalan di browser Anda, jadi tidak ada yang menyimpan koin Anda dan tidak ada server yang pernah melihat kunci Anda. Untuk menampilkan saldo dan riwayat, aplikasi membaca dari penjelajah blok publik (mempool.space secara default, atau node Anda sendiri jika Anda mengaturnya di Pengaturan).",
+ "hiwBasics4": "Anda bahkan bisa menyimpan halaman ini dan membukanya langsung dari komputer tanpa internet sama sekali. Aplikasi ini tetap berfungsi secara offline.",
+ "hiwBasics5": "Aplikasi ini mengikuti standar Bitcoin yang umum (frasa BIP39 12 kata dan kunci BIP84 native SegWit), jadi jika situs ini suatu saat hilang, Anda bisa memulihkan frasa yang sama di Sparrow, Electrum, atau dompet standar lainnya dan koin Anda akan tetap ada di sana.",
+ "hiwTribute": "Nama Hal Wallet adalah penghormatan kepada cypherpunk legendaris dan pelopor Bitcoin, Hal Finney (1956–2014).",
+ "signExport": "Tanda tangani & (siarkan di tempat lain)",
+ "scanQr": "Pindai QR",
+ "scanHint": "Arahkan kamera ke kode QR",
+ "scanNoCamera": "Tidak dapat mengakses kamera.",
+ "scanNoDecoder": "Pemindaian QR memerlukan koneksi saat pertama kali digunakan.",
+ "scanUnrecognized": "Tidak dapat membaca alamat Bitcoin dari QR itu.",
+ "broadcastScanned": "Siarkan transaksi?",
+ "broadcastNow": "Siarkan",
+ "scanOffline": "Anda sedang offline — sambungkan kembali untuk menyiarkan transaksi ini.",
+ "loadingHistory": "Memuat transaksi…",
+ "explorer": "Penjelajah blok",
+ "explorerDesc": "Server yang ditanyai dompet ini untuk saldo dan riwayat. Arahkan ke node Anda sendiri untuk privasi maksimal.",
+ "explorerUrl": "URL server",
+ "explorerUrlHint": "Basis REST Esplora / electrs, mis. https://mempool.space/api",
+ "deviceSync": "Sinkronisasi perangkat",
+ "deviceSyncDesc": "Jaga dompet ini tetap tersinkron di seluruh perangkat Anda dengan menyimpan salinan terenkripsi di relay Nostr — hanya perangkat dengan seed Anda yang bisa membacanya. Matikan untuk menyimpan semuanya di perangkat ini.",
+ "syncAcross": "Sinkronkan antar perangkat",
+ "syncOn": "Aktif",
+ "syncOff": "Nonaktif",
+ "relaysLabel": "Relay",
+ "relaysHint": "Satu URL wss:// per baris.",
+ "home": "Beranda",
+ "logout": "Keluar",
+ "createNew": "Buat baru",
+ "importExisting": "Impor yang ada",
+ "genIntro": "Buat frasa benih baru 12 kata. Catatlah. Ini satu-satunya cara memulihkan dompet ini.",
+ "generateSeed": "Buat frasa benih",
+ "writeDownWarn": "⚠ Tulis 12 kata ini di kertas, secara berurutan. Siapa pun yang memilikinya dapat menghabiskan koin Anda.",
+ "copyPhrase": "Salin frasa",
+ "regenerate": "Buat ulang",
+ "verifyBackup": "Verifikasi cadangan",
+ "skipVerification": "Lewati verifikasi",
+ "confirmBackupIntro": "Konfirmasi cadangan dengan memasukkan kata yang diminta.",
+ "wordN": "Kata #{n}",
+ "reenterPassphrase": "Masukkan ulang frasa sandi",
+ "back": "← Kembali",
+ "openWallet": "Buka dompet",
+ "wordsMismatch": "Kata-kata itu tidak cocok dengan frasa Anda. Periksa cadangan Anda.",
+ "passphraseMismatch": "Frasa sandi tidak cocok dengan yang Anda masukkan.",
+ "seedPhrase": "Frasa benih",
+ "seedPlaceholder": "masukkan kata-kata dipisahkan spasi",
+ "optionalPassphrase": "Frasa sandi opsional",
+ "leaveBlank": "kosongkan jika tidak dipakai",
+ "show": "Tampilkan",
+ "hide": "Sembunyikan",
+ "invalidSeed": "Frasa benih tidak valid — periksa ejaan dan urutan kata.",
+ "keysNote": "Kunci tidak pernah meninggalkan browser Anda. Berfungsi offline. Simpan halaman ini dan buka secara lokal.",
+ "balance": "Saldo",
+ "pending": "Tertunda",
+ "tabReceive": "Terima",
+ "tabSend": "Kirim",
+ "tabHistory": "Riwayat",
+ "tabSettings": "Pengaturan",
+ "copyAddress": "Salin alamat",
+ "paymentReceived": "Pembayaran diterima!",
+ "tapToProceed": "Ketuk di mana saja untuk lanjut",
+ "recipient": "Penerima",
+ "recipients": "Penerima",
+ "max": "Maks",
+ "feeRate": "Biaya",
+ "feeEconomy": "Hemat",
+ "feeNormal": "Normal",
+ "feePriority": "Prioritas",
+ "feeCustom": "Kustom",
+ "selectedRate": "Biaya dipilih: {n} sat/vB",
+ "coinSelection": "Pemilihan koin",
+ "automatic": "Otomatis",
+ "manual": "Manual",
+ "noCoins": "Tidak ada koin tersedia.",
+ "nSelected": "{n} dipilih",
+ "addRecipient": "+ Tambah penerima",
+ "reviewTx": "Tinjau transaksi",
+ "remove": "Hapus",
+ "enterRecipientAddr": "Masukkan alamat penerima.",
+ "enterAddrForN": "Masukkan alamat untuk penerima {n}.",
+ "enterValidAmtForN": "Masukkan jumlah yang valid untuk penerima {n}.",
+ "selectCoin": "Pilih setidaknya satu koin untuk dibelanjakan.",
+ "networkFee": "Biaya jaringan",
+ "offlineSignNote": "Offline: tanda tangani sekarang, lalu siarkan transaksi dari perangkat online.",
+ "signBroadcast": "Tandatangani & siarkan",
+ "signTx": "Tandatangani transaksi",
+ "broadcastFailed": "Siaran gagal: {msg}",
+ "signingFailed": "Penandatanganan gagal: {msg}",
+ "done": "Selesai",
+ "txSignedNote": "✓ Transaksi ditandatangani. Siarkan kode di bawah dari perangkat online (mis. mempool.space → Broadcast).",
+ "transactionId": "ID transaksi",
+ "signedTxRaw": "Transaksi tertandatangani (kode)",
+ "copyHex": "Salin kode",
+ "downloadLabel": "Unduh",
+ "showQrAirgap": "Tampilkan QR (transfer offline)",
+ "txBroadcast": "✓ Transaksi disiarkan!",
+ "copyTxid": "Salin ID transaksi",
+ "viewOnMempool": "Lihat di mempool.space ↗",
+ "noTxYet": "Belum ada transaksi.",
+ "received": "Diterima",
+ "sent": "Terkirim",
+ "pendingTag": "⏳ tertunda",
+ "awaitingConfirmation": "menunggu konfirmasi",
+ "feeShort": "biaya {x}",
+ "historyOffline": "Riwayat tidak tersedia saat offline.",
+ "status": "Status",
+ "confirmed": "Terkonfirmasi",
+ "confirmedTag": "terkonfirmasi",
+ "pendingInMempool": "Tertunda (di mempool)",
+ "block": "Blok",
+ "date": "Tanggal",
+ "copyId": "Salin ID",
+ "backToHistory": "← Kembali ke riwayat",
+ "recoveryPhrase": "Frasa pemulihan",
+ "recoveryWarn": "⚠ Siapa pun yang melihat kata-kata ini bisa mencuri dana Anda. Pastikan tidak ada yang melihat sebelum menampilkannya.",
+ "bip39Passphrase": "Frasa sandi",
+ "copyPassphrase": "Salin frasa sandi",
+ "revealRecovery": "Tampilkan frasa pemulihan",
+ "offlineTransfer": "Transfer offline",
+ "offlineTransferDesc": "Ekspor koin Anda di perangkat online, lalu impor file di perangkat offline (dengan dompet + benih ini) untuk menandatangani tanpa internet.",
+ "exportSnapshot": "⤓ Ekspor snapshot",
+ "importSnapshot": "Impor snapshot…",
+ "rescan": "Pindai ulang",
+ "rescanDesc": "Alamat Anda saat ini diperbarui otomatis. Pindai ulang hanya jika pembayaran dikirim ke alamat lama (dipakai ulang) dan tidak muncul.",
+ "rescanWallet": "Pindai ulang dompet",
+ "scanning": "Memindai…",
+ "language": "Bahasa",
+ "offlineBanner": "Tidak dapat menjangkau jaringan — bekerja offline. Impor snapshot di Pengaturan untuk memuat koin.",
+ "retry": "Coba lagi",
+ "copied": "Tersalin",
+ "snapshotExported": "Snapshot diekspor",
+ "importedNCoins": "{n} koin diimpor",
+ "unmatchedSuffix": " · {n} alamat bukan milik dompet ini",
+ "importFailed": "Impor gagal: {msg}",
+ "copy": "Salin",
+ "switchUnit": "Ganti BTC / sats",
+ "footerMadeBy": "dibuat oleh",
+ "footerSourceOn": "sumber tersedia di"
+} \ No newline at end of file
diff --git a/src/locales/ja.json b/src/locales/ja.json
new file mode 100644
index 0000000..e107ab0
--- /dev/null
+++ b/src/locales/ja.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "パスフレーズ",
+ "howItWorks": "仕組み",
+ "installApp": "アプリをインストール",
+ "hiwBasicsTitle": "基本",
+ "hiwBasics1": "ウォレットを作成すると、このページがランダムな12個の単語を生成します。これらの単語があなたのウォレットの鍵です。これを持っている人は誰でもコインを使えてしまうので、紙に書き留めて、あなただけがアクセスできる場所に保管してください。",
+ "hiwBasics2": "12個の単語を失い、バックアップもない場合、コインは永久に取り戻せません。リセット用のリンクも連絡できる相手もいないので、お金を入れる前にバックアップしておきましょう。",
+ "hiwBasics3": "サーバーもアカウントもありません。アプリ全体がブラウザで動作する単一のページなので、誰もあなたのコインを預かることはなく、サーバー上の何かがあなたの鍵を見ることもありません。残高と履歴を表示するために、公開ブロックエクスプローラー(既定では mempool.space、設定で指定すればご自身のノード)から読み込みます。",
+ "hiwBasics4": "このページを保存して、インターネットがまったくない状態でもコンピューターから直接開くこともできます。オフラインでも動作し続けます。",
+ "hiwBasics5": "通常のBitcoin標準(12語のBIP39フレーズとBIP84ネイティブSegWit鍵)に従っているので、万が一このサイトがなくなっても、同じフレーズをSparrow、Electrum、その他の標準的なウォレットで復元でき、コインはそこにそのまま残っています。",
+ "hiwTribute": "Hal Wallet という名前は、伝説的なサイファーパンクであり Bitcoin の先駆者である Hal Finney(1956–2014)への敬意を込めたものです。",
+ "signExport": "署名する(別の場所でブロードキャスト)",
+ "scanQr": "QRをスキャン",
+ "scanHint": "カメラをQRコードに向けてください",
+ "scanNoCamera": "カメラにアクセスできませんでした。",
+ "scanNoDecoder": "QRスキャンは初回の使用時に接続が必要です。",
+ "scanUnrecognized": "そのQRからBitcoinアドレスを読み取れませんでした。",
+ "broadcastScanned": "トランザクションをブロードキャストしますか?",
+ "broadcastNow": "ブロードキャスト",
+ "scanOffline": "オフラインです — このトランザクションをブロードキャストするには再接続してください。",
+ "loadingHistory": "トランザクションを読み込み中…",
+ "explorer": "ブロックエクスプローラー",
+ "explorerDesc": "このウォレットが残高と履歴を照会するサーバーです。プライバシーを最大限に高めるには、ご自身のノードを指定してください。",
+ "explorerUrl": "サーバーURL",
+ "explorerUrlHint": "Esplora / electrs REST のベース。例: https://mempool.space/api",
+ "deviceSync": "デバイス同期",
+ "deviceSyncDesc": "暗号化したコピーを Nostr リレーに保存することで、このウォレットを複数のデバイス間で同期し続けます — シードを持つデバイスだけが読み取れます。すべてをこのデバイス内に留めておくにはオフにしてください。",
+ "syncAcross": "デバイス間で同期",
+ "syncOn": "オン",
+ "syncOff": "オフ",
+ "relaysLabel": "リレー",
+ "relaysHint": "1行につき wss:// URL を1つ。",
+ "home": "ホーム",
+ "logout": "ログアウト",
+ "createNew": "新規作成",
+ "importExisting": "インポート",
+ "genIntro": "新しい12単語のシードフレーズを生成します。書き留めてください。これがこのウォレットを復元する唯一の方法です。",
+ "generateSeed": "シードフレーズを生成",
+ "writeDownWarn": "⚠ この12単語を順番どおり紙に書き留めてください。これを持つ人は誰でもあなたのコインを使えます。",
+ "copyPhrase": "フレーズをコピー",
+ "regenerate": "再生成",
+ "verifyBackup": "バックアップを確認",
+ "skipVerification": "確認をスキップ",
+ "confirmBackupIntro": "指定された単語を入力してバックアップを確認してください。",
+ "wordN": "{n} 番目の単語",
+ "reenterPassphrase": "パスフレーズを再入力",
+ "back": "← 戻る",
+ "openWallet": "ウォレットを開く",
+ "wordsMismatch": "単語がフレーズと一致しません。バックアップを確認してください。",
+ "passphraseMismatch": "パスフレーズが入力したものと一致しません。",
+ "seedPhrase": "シードフレーズ",
+ "seedPlaceholder": "単語をスペース区切りで入力",
+ "optionalPassphrase": "任意のパスフレーズ",
+ "leaveBlank": "使わない場合は空欄",
+ "show": "表示",
+ "hide": "隠す",
+ "invalidSeed": "無効なシードフレーズ — つづりと順番を確認してください。",
+ "keysNote": "鍵はブラウザから出ません。完全にオフラインで動作します。このページを保存してローカルで開けます。",
+ "balance": "残高",
+ "pending": "保留中",
+ "tabReceive": "受取",
+ "tabSend": "送金",
+ "tabHistory": "履歴",
+ "tabSettings": "設定",
+ "copyAddress": "アドレスをコピー",
+ "paymentReceived": "入金を受け取りました!",
+ "tapToProceed": "どこでもタップして続行",
+ "recipient": "受取人",
+ "recipients": "受取人",
+ "max": "全額",
+ "feeRate": "手数料",
+ "feeEconomy": "節約",
+ "feeNormal": "通常",
+ "feePriority": "優先",
+ "feeCustom": "カスタム",
+ "selectedRate": "選択中: {n} sat/vB",
+ "coinSelection": "コイン選択",
+ "automatic": "自動",
+ "manual": "手動",
+ "noCoins": "利用可能なコインがありません。",
+ "nSelected": "{n} 件選択",
+ "addRecipient": "+ 受取人を追加",
+ "reviewTx": "トランザクションを確認",
+ "remove": "削除",
+ "enterRecipientAddr": "送金先アドレスを入力してください。",
+ "enterAddrForN": "受取人 {n} のアドレスを入力してください。",
+ "enterValidAmtForN": "受取人 {n} の有効な金額を入力してください。",
+ "selectCoin": "使用するコインを1つ以上選択してください。",
+ "networkFee": "ネットワーク手数料",
+ "offlineSignNote": "オフライン:今すぐ署名し、オンライン端末からトランザクションを送信してください。",
+ "signBroadcast": "署名して送信",
+ "signTx": "トランザクションに署名",
+ "broadcastFailed": "送信に失敗: {msg}",
+ "signingFailed": "署名に失敗: {msg}",
+ "done": "完了",
+ "txSignedNote": "✓ 署名済み。下のコードをオンライン端末から送信してください(例: mempool.space → Broadcast)。",
+ "transactionId": "トランザクションID",
+ "signedTxRaw": "署名済みトランザクション(コード)",
+ "copyHex": "コードをコピー",
+ "downloadLabel": "ダウンロード",
+ "showQrAirgap": "QRを表示(オフライン転送用)",
+ "txBroadcast": "✓ トランザクションを送信しました!",
+ "copyTxid": "トランザクションIDをコピー",
+ "viewOnMempool": "mempool.spaceで見る ↗",
+ "noTxYet": "まだ取引はありません。",
+ "received": "受取",
+ "sent": "送金",
+ "pendingTag": "⏳ 保留中",
+ "awaitingConfirmation": "承認待ち",
+ "feeShort": "手数料 {x}",
+ "historyOffline": "オフラインでは履歴を表示できません。",
+ "status": "状態",
+ "confirmed": "承認済み",
+ "confirmedTag": "承認済み",
+ "pendingInMempool": "保留中(mempool)",
+ "block": "ブロック",
+ "date": "日時",
+ "copyId": "IDをコピー",
+ "backToHistory": "← 履歴に戻る",
+ "recoveryPhrase": "復元フレーズ",
+ "recoveryWarn": "⚠ この単語を見た人は資金を盗めます。表示前に誰も見ていないことを確認してください。",
+ "bip39Passphrase": "パスフレーズ",
+ "copyPassphrase": "パスフレーズをコピー",
+ "revealRecovery": "復元フレーズを表示",
+ "offlineTransfer": "オフライン転送",
+ "offlineTransferDesc": "オンライン端末でコインをエクスポートし、オフライン端末(このウォレットとシード)でファイルをインポートすれば、インターネットなしで署名できます。",
+ "exportSnapshot": "⤓ スナップショットを書出",
+ "importSnapshot": "スナップショットを読込…",
+ "rescan": "再スキャン",
+ "rescanDesc": "現在のアドレスは自動更新されます。古い(再利用した)アドレスへの入金が表示されない場合のみ再スキャンしてください。",
+ "rescanWallet": "ウォレットを再スキャン",
+ "scanning": "スキャン中…",
+ "language": "言語",
+ "offlineBanner": "ネットワークに接続できません — オフライン動作中。設定からスナップショットを読み込んでコインを表示できます。",
+ "retry": "再試行",
+ "copied": "コピーしました",
+ "snapshotExported": "スナップショットを書き出しました",
+ "importedNCoins": "{n} 件のコインを読み込みました",
+ "unmatchedSuffix": " · このウォレットにない {n} 件のアドレス",
+ "importFailed": "読み込みに失敗: {msg}",
+ "copy": "コピー",
+ "switchUnit": "BTC / sats を切替",
+ "footerMadeBy": "作成者:",
+ "footerSourceOn": "ソースは"
+} \ No newline at end of file
diff --git a/src/locales/ko.json b/src/locales/ko.json
new file mode 100644
index 0000000..765838a
--- /dev/null
+++ b/src/locales/ko.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "패스프레이즈",
+ "howItWorks": "작동 방식",
+ "installApp": "앱 설치",
+ "hiwBasicsTitle": "기본 사항",
+ "hiwBasics1": "지갑을 만들면 페이지에서 무작위 단어 12개가 생성됩니다. 이 단어들이 지갑의 열쇠입니다. 이를 가진 사람은 누구나 코인을 사용할 수 있으므로, 종이에 적어 본인만 접근할 수 있는 곳에 보관하세요.",
+ "hiwBasics2": "12개의 단어를 잃어버리고 백업도 없다면 코인은 영원히 사라집니다. 재설정 링크도 없고 연락할 곳도 없으니, 돈을 넣기 전에 반드시 백업하세요.",
+ "hiwBasics3": "서버도 계정도 없습니다. 전체 앱은 브라우저에서 실행되는 단일 페이지이므로, 아무도 코인을 보관하지 않고 서버의 어떤 것도 키를 보지 못합니다. 잔액과 내역을 표시하기 위해 공개 블록 탐색기에서 데이터를 읽어옵니다(기본값은 mempool.space, 설정에서 지정하면 본인의 노드 사용).",
+ "hiwBasics4": "이 페이지를 저장해 인터넷 없이 컴퓨터에서 바로 열 수도 있습니다. 오프라인에서도 계속 작동합니다.",
+ "hiwBasics5": "일반적인 비트코인 표준(12단어 BIP39 구문과 BIP84 네이티브 SegWit 키)을 따르므로, 이 사이트가 사라지더라도 Sparrow, Electrum 또는 다른 표준 지갑에서 동일한 구문으로 복원하면 코인이 그대로 있습니다.",
+ "hiwTribute": "Hal Wallet이라는 이름은 전설적인 사이퍼펑크이자 비트코인 선구자인 Hal Finney(1956–2014)에 대한 헌사입니다.",
+ "signExport": "서명 후 (다른 곳에서 브로드캐스트)",
+ "scanQr": "QR 스캔",
+ "scanHint": "카메라를 QR 코드에 맞추세요",
+ "scanNoCamera": "카메라에 접근할 수 없습니다.",
+ "scanNoDecoder": "QR 스캔은 처음 사용할 때 연결이 필요합니다.",
+ "scanUnrecognized": "해당 QR에서 비트코인 주소를 읽을 수 없습니다.",
+ "broadcastScanned": "트랜잭션을 브로드캐스트할까요?",
+ "broadcastNow": "브로드캐스트",
+ "scanOffline": "오프라인 상태입니다 — 이 트랜잭션을 브로드캐스트하려면 다시 연결하세요.",
+ "loadingHistory": "트랜잭션 불러오는 중…",
+ "explorer": "블록 탐색기",
+ "explorerDesc": "이 지갑이 잔액과 내역을 조회하는 서버입니다. 최대한의 프라이버시를 위해 본인의 노드를 지정하세요.",
+ "explorerUrl": "서버 URL",
+ "explorerUrlHint": "Esplora / electrs REST 기본 주소, 예: https://mempool.space/api",
+ "deviceSync": "기기 동기화",
+ "deviceSyncDesc": "암호화된 사본을 Nostr 릴레이에 저장해 여러 기기에서 이 지갑을 동기화하세요 — 시드를 가진 기기만 읽을 수 있습니다. 모든 것을 이 기기에만 보관하려면 끄세요.",
+ "syncAcross": "기기 간 동기화",
+ "syncOn": "켜짐",
+ "syncOff": "꺼짐",
+ "relaysLabel": "릴레이",
+ "relaysHint": "한 줄에 하나의 wss:// URL을 입력하세요.",
+ "home": "홈",
+ "logout": "로그아웃",
+ "createNew": "새로 만들기",
+ "importExisting": "가져오기",
+ "genIntro": "새 12단어 시드 문구를 생성합니다. 적어 두세요. 이 지갑을 복구하는 유일한 방법입니다.",
+ "generateSeed": "시드 문구 생성",
+ "writeDownWarn": "⚠ 이 12단어를 순서대로 종이에 적으세요. 이를 가진 사람은 누구나 코인을 쓸 수 있습니다.",
+ "copyPhrase": "문구 복사",
+ "regenerate": "다시 생성",
+ "verifyBackup": "백업 확인",
+ "skipVerification": "확인 건너뛰기",
+ "confirmBackupIntro": "요청된 단어를 입력해 백업을 확인하세요.",
+ "wordN": "{n}번째 단어",
+ "reenterPassphrase": "암호문구 다시 입력",
+ "back": "← 뒤로",
+ "openWallet": "지갑 열기",
+ "wordsMismatch": "단어가 문구와 일치하지 않습니다. 백업을 확인하세요.",
+ "passphraseMismatch": "암호문구가 입력한 것과 일치하지 않습니다.",
+ "seedPhrase": "시드 문구",
+ "seedPlaceholder": "단어를 공백으로 구분해 입력",
+ "optionalPassphrase": "선택 암호문구",
+ "leaveBlank": "사용 안 하면 비워 두세요",
+ "show": "표시",
+ "hide": "숨기기",
+ "invalidSeed": "잘못된 시드 문구 — 철자와 순서를 확인하세요.",
+ "keysNote": "키는 브라우저를 벗어나지 않습니다. 완전 오프라인 작동. 이 페이지를 저장해 로컬에서 열 수 있습니다.",
+ "balance": "잔액",
+ "pending": "대기 중",
+ "tabReceive": "받기",
+ "tabSend": "보내기",
+ "tabHistory": "내역",
+ "tabSettings": "설정",
+ "copyAddress": "주소 복사",
+ "paymentReceived": "결제가 도착했습니다!",
+ "tapToProceed": "아무 곳이나 눌러 계속",
+ "recipient": "받는 사람",
+ "recipients": "받는 사람",
+ "max": "최대",
+ "feeRate": "수수료",
+ "feeEconomy": "절약",
+ "feeNormal": "보통",
+ "feePriority": "우선",
+ "feeCustom": "직접 입력",
+ "selectedRate": "선택한 수수료: {n} sat/vB",
+ "coinSelection": "코인 선택",
+ "automatic": "자동",
+ "manual": "수동",
+ "noCoins": "사용 가능한 코인이 없습니다.",
+ "nSelected": "{n}개 선택",
+ "addRecipient": "+ 받는 사람 추가",
+ "reviewTx": "거래 검토",
+ "remove": "삭제",
+ "enterRecipientAddr": "받는 주소를 입력하세요.",
+ "enterAddrForN": "받는 사람 {n}의 주소를 입력하세요.",
+ "enterValidAmtForN": "받는 사람 {n}의 올바른 금액을 입력하세요.",
+ "selectCoin": "사용할 코인을 하나 이상 선택하세요.",
+ "networkFee": "네트워크 수수료",
+ "offlineSignNote": "오프라인: 지금 서명한 뒤 온라인 기기에서 거래를 전송하세요.",
+ "signBroadcast": "서명 후 전송",
+ "signTx": "거래 서명",
+ "broadcastFailed": "전송 실패: {msg}",
+ "signingFailed": "서명 실패: {msg}",
+ "done": "완료",
+ "txSignedNote": "✓ 거래가 서명되었습니다. 아래 코드를 온라인 기기에서 전송하세요(예: mempool.space → Broadcast).",
+ "transactionId": "거래 ID",
+ "signedTxRaw": "서명된 거래(코드)",
+ "copyHex": "코드 복사",
+ "downloadLabel": "다운로드",
+ "showQrAirgap": "QR 표시(오프라인 전송용)",
+ "txBroadcast": "✓ 거래가 전송되었습니다!",
+ "copyTxid": "거래 ID 복사",
+ "viewOnMempool": "mempool.space에서 보기 ↗",
+ "noTxYet": "아직 거래가 없습니다.",
+ "received": "받음",
+ "sent": "보냄",
+ "pendingTag": "⏳ 대기 중",
+ "awaitingConfirmation": "확인 대기 중",
+ "feeShort": "수수료 {x}",
+ "historyOffline": "오프라인에서는 내역을 볼 수 없습니다.",
+ "status": "상태",
+ "confirmed": "확인됨",
+ "confirmedTag": "확인됨",
+ "pendingInMempool": "대기 중(멤풀)",
+ "block": "블록",
+ "date": "날짜",
+ "copyId": "ID 복사",
+ "backToHistory": "← 내역으로",
+ "recoveryPhrase": "복구 문구",
+ "recoveryWarn": "⚠ 이 단어를 보는 사람은 자금을 훔칠 수 있습니다. 표시하기 전에 아무도 보지 않는지 확인하세요.",
+ "bip39Passphrase": "암호문구",
+ "copyPassphrase": "암호문구 복사",
+ "revealRecovery": "복구 문구 표시",
+ "offlineTransfer": "오프라인 전송",
+ "offlineTransferDesc": "온라인 기기에서 코인을 내보낸 뒤, 오프라인 기기(이 지갑과 시드)에서 파일을 가져오면 인터넷 없이 서명할 수 있습니다.",
+ "exportSnapshot": "⤓ 스냅샷 내보내기",
+ "importSnapshot": "스냅샷 가져오기…",
+ "rescan": "다시 스캔",
+ "rescanDesc": "현재 주소는 자동으로 갱신됩니다. 결제가 예전(재사용) 주소로 가서 보이지 않을 때만 다시 스캔하세요.",
+ "rescanWallet": "지갑 다시 스캔",
+ "scanning": "스캔 중…",
+ "language": "언어",
+ "offlineBanner": "네트워크에 연결할 수 없음 — 오프라인 작동 중. 설정에서 스냅샷을 가져와 코인을 불러오세요.",
+ "retry": "다시 시도",
+ "copied": "복사됨",
+ "snapshotExported": "스냅샷을 내보냈습니다",
+ "importedNCoins": "{n}개 코인을 가져왔습니다",
+ "unmatchedSuffix": " · 이 지갑에 없는 주소 {n}개",
+ "importFailed": "가져오기 실패: {msg}",
+ "copy": "복사",
+ "switchUnit": "BTC / sats 전환",
+ "footerMadeBy": "만든 사람:",
+ "footerSourceOn": "소스 공개:"
+} \ No newline at end of file
diff --git a/src/locales/mr.json b/src/locales/mr.json
new file mode 100644
index 0000000..7b369a0
--- /dev/null
+++ b/src/locales/mr.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "पासफ्रेज",
+ "howItWorks": "हे कसे चालते",
+ "installApp": "अॅप इन्स्टॉल करा",
+ "hiwBasicsTitle": "मूलभूत गोष्टी",
+ "hiwBasics1": "तुम्ही वॉलेट तयार करता तेव्हा हे पान बारा यादृच्छिक शब्द तयार करते. तेच शब्द तुमच्या वॉलेटची किल्ली आहेत. ज्याच्याकडे ते आहेत तो कॉइन्स खर्च करू शकतो, म्हणून ते कागदावर लिहून ठेवा आणि फक्त तुम्हालाच पोहोचता येईल अशा ठिकाणी ठेवा.",
+ "hiwBasics2": "जर तुम्ही हे बारा शब्द हरवले आणि तुमच्याकडे बॅकअप नसेल, तर कॉइन्स कायमचे गेले. रीसेट लिंक नाही आणि कुणाला फोन करायचाही पर्याय नाही, म्हणून पैसे टाकण्यापूर्वी त्यांचा बॅकअप घ्या.",
+ "hiwBasics3": "येथे कोणताही सर्व्हर नाही आणि कोणतेही खाते नाही. संपूर्ण अॅप एकच पान आहे जे तुमच्या ब्राउझरमध्ये चालते, त्यामुळे तुमचे कॉइन्स कुणाकडेही नसतात आणि कोणत्याही सर्व्हरवर तुमच्या किल्ल्या कधीच दिसत नाहीत. तुमची शिल्लक आणि इतिहास दाखवण्यासाठी ते सार्वजनिक ब्लॉक एक्सप्लोररमधून वाचते (मूलनुसार mempool.space, किंवा तुम्ही सेटिंग्जमध्ये सेट केल्यास तुमचा स्वतःचा नोड).",
+ "hiwBasics4": "तुम्ही हे पान सेव्ह करून इंटरनेटशिवायही थेट तुमच्या संगणकावरून उघडू शकता. ते ऑफलाइनही चालत राहते.",
+ "hiwBasics5": "ते नेहमीच्या बिटकॉइन मानकांचे पालन करते (१२-शब्दांचा BIP39 फ्रेज आणि BIP84 नेटिव्ह SegWit किल्ल्या), त्यामुळे ही साइट कधी नाहीशी झाली तरी तुम्ही तोच फ्रेज Sparrow, Electrum, किंवा इतर कोणत्याही मानक वॉलेटमध्ये पुनर्संचयित करू शकता आणि तुमचे कॉइन्स तिथेच असतील.",
+ "hiwTribute": "Hal Wallet हे नाव पौराणिक सायफरपंक आणि बिटकॉइन अग्रदूत Hal Finney (१९५६–२०१४) यांना श्रद्धांजली आहे.",
+ "signExport": "साइन करा आणि (इतरत्र ब्रॉडकास्ट करा)",
+ "scanQr": "QR स्कॅन करा",
+ "scanHint": "कॅमेरा QR कोडकडे रोखा",
+ "scanNoCamera": "कॅमेरा वापरता आला नाही.",
+ "scanNoDecoder": "QR स्कॅनिंगसाठी पहिल्यांदा वापरताना कनेक्शन आवश्यक आहे.",
+ "scanUnrecognized": "त्या QR मधून बिटकॉइन पत्ता वाचता आला नाही.",
+ "broadcastScanned": "व्यवहार ब्रॉडकास्ट करायचा?",
+ "broadcastNow": "ब्रॉडकास्ट करा",
+ "scanOffline": "तुम्ही ऑफलाइन आहात — हा व्यवहार ब्रॉडकास्ट करण्यासाठी पुन्हा कनेक्ट व्हा.",
+ "loadingHistory": "व्यवहार लोड होत आहेत…",
+ "explorer": "ब्लॉक एक्सप्लोरर",
+ "explorerDesc": "हे वॉलेट शिल्लक आणि इतिहासासाठी ज्या सर्व्हरला विचारणा करते. कमाल गोपनीयतेसाठी ते तुमच्या स्वतःच्या नोडकडे रोखा.",
+ "explorerUrl": "सर्व्हर URL",
+ "explorerUrlHint": "Esplora / electrs REST बेस, उदा. https://mempool.space/api",
+ "deviceSync": "डिव्हाइस सिंक",
+ "deviceSyncDesc": "Nostr रिलेवर एन्क्रिप्टेड प्रत साठवून हे वॉलेट तुमच्या सर्व डिव्हाइसवर सिंक ठेवा — फक्त तुमचा सीड असलेले डिव्हाइसच ते वाचू शकते. सर्व काही या डिव्हाइसवरच ठेवण्यासाठी ते बंद करा.",
+ "syncAcross": "डिव्हाइसदरम्यान सिंक करा",
+ "syncOn": "चालू",
+ "syncOff": "बंद",
+ "relaysLabel": "रिले",
+ "relaysHint": "प्रति ओळ एक wss:// URL.",
+ "home": "मुख्यपृष्ठ",
+ "logout": "बाहेर पडा",
+ "createNew": "नवीन तयार करा",
+ "importExisting": "अस्तित्वातील आयात करा",
+ "genIntro": "नवीन १२-शब्दांचा सीड वाक्यांश तयार करा. तो लिहून ठेवा. हे वॉलेट परत मिळवण्याचा हाच एकमेव मार्ग आहे.",
+ "generateSeed": "सीड वाक्यांश तयार करा",
+ "writeDownWarn": "⚠ हे १२ शब्द क्रमाने कागदावर लिहा. ज्याच्याकडे हे असतील तो तुमची नाणी खर्च करू शकतो.",
+ "copyPhrase": "वाक्यांश कॉपी करा",
+ "regenerate": "पुन्हा तयार करा",
+ "verifyBackup": "बॅकअप तपासा",
+ "skipVerification": "पडताळणी वगळा",
+ "confirmBackupIntro": "मागितलेले शब्द टाकून तुमचा बॅकअप निश्चित करा.",
+ "wordN": "शब्द #{n}",
+ "reenterPassphrase": "पासफ्रेज पुन्हा टाका",
+ "back": "← मागे",
+ "openWallet": "वॉलेट उघडा",
+ "wordsMismatch": "हे शब्द तुमच्या वाक्यांशाशी जुळत नाहीत. तुमचा बॅकअप तपासा.",
+ "passphraseMismatch": "हा पासफ्रेज तुम्ही टाकलेल्याशी जुळत नाही.",
+ "seedPhrase": "सीड वाक्यांश",
+ "seedPlaceholder": "तुमचे शब्द स्पेसने वेगळे करून टाका",
+ "optionalPassphrase": "ऐच्छिक पासफ्रेज",
+ "leaveBlank": "वापर नसल्यास रिकामे ठेवा",
+ "show": "दाखवा",
+ "hide": "लपवा",
+ "invalidSeed": "अवैध सीड वाक्यांश — स्पेलिंग व क्रम तपासा.",
+ "keysNote": "की कधीही तुमचा ब्राउझर सोडत नाहीत. पूर्णपणे ऑफलाइन चालते. हे पान जतन करून स्थानिकरीत्या उघडा.",
+ "balance": "शिल्लक",
+ "pending": "प्रलंबित",
+ "tabReceive": "मिळवा",
+ "tabSend": "पाठवा",
+ "tabHistory": "इतिहास",
+ "tabSettings": "सेटिंग्ज",
+ "copyAddress": "पत्ता कॉपी करा",
+ "paymentReceived": "पेमेंट मिळाले!",
+ "tapToProceed": "पुढे जाण्यासाठी कुठेही टॅप करा",
+ "recipient": "प्राप्तकर्ता",
+ "recipients": "प्राप्तकर्ते",
+ "max": "कमाल",
+ "feeRate": "शुल्क",
+ "feeEconomy": "किफायतशीर",
+ "feeNormal": "सामान्य",
+ "feePriority": "प्राधान्य",
+ "feeCustom": "सानुकूल",
+ "selectedRate": "निवडलेले शुल्क: {n} sat/vB",
+ "coinSelection": "नाणे निवड",
+ "automatic": "स्वयंचलित",
+ "manual": "स्वहस्ते",
+ "noCoins": "कोणतीही नाणी उपलब्ध नाहीत.",
+ "nSelected": "{n} निवडली",
+ "addRecipient": "+ प्राप्तकर्ता जोडा",
+ "reviewTx": "व्यवहार पुनरावलोकन",
+ "remove": "काढा",
+ "enterRecipientAddr": "प्राप्तकर्त्याचा पत्ता टाका.",
+ "enterAddrForN": "प्राप्तकर्ता {n} चा पत्ता टाका.",
+ "enterValidAmtForN": "प्राप्तकर्ता {n} साठी वैध रक्कम टाका.",
+ "selectCoin": "खर्चासाठी किमान एक नाणे निवडा.",
+ "networkFee": "नेटवर्क शुल्क",
+ "offlineSignNote": "ऑफलाइन: आता स्वाक्षरी करा, मग ऑनलाइन उपकरणावरून व्यवहार प्रसारित करा.",
+ "signBroadcast": "स्वाक्षरी व प्रसारण",
+ "signTx": "व्यवहार स्वाक्षरी",
+ "broadcastFailed": "प्रसारण अयशस्वी: {msg}",
+ "signingFailed": "स्वाक्षरी अयशस्वी: {msg}",
+ "done": "झाले",
+ "txSignedNote": "✓ व्यवहार स्वाक्षरीत झाला. खालील कोड ऑनलाइन उपकरणावरून प्रसारित करा (उदा. mempool.space → Broadcast).",
+ "transactionId": "व्यवहार ID",
+ "signedTxRaw": "स्वाक्षरीत व्यवहार (कोड)",
+ "copyHex": "कोड कॉपी करा",
+ "downloadLabel": "डाउनलोड",
+ "showQrAirgap": "QR दाखवा (ऑफलाइन हस्तांतरणासाठी)",
+ "txBroadcast": "✓ व्यवहार प्रसारित झाला!",
+ "copyTxid": "व्यवहार ID कॉपी करा",
+ "viewOnMempool": "mempool.space वर पहा ↗",
+ "noTxYet": "अजून व्यवहार नाहीत.",
+ "received": "मिळाले",
+ "sent": "पाठवले",
+ "pendingTag": "⏳ प्रलंबित",
+ "awaitingConfirmation": "पुष्टीची प्रतीक्षा",
+ "feeShort": "शुल्क {x}",
+ "historyOffline": "ऑफलाइनमध्ये इतिहास उपलब्ध नाही.",
+ "status": "स्थिती",
+ "confirmed": "पुष्ट",
+ "confirmedTag": "पुष्ट",
+ "pendingInMempool": "प्रलंबित (mempool मध्ये)",
+ "block": "ब्लॉक",
+ "date": "दिनांक",
+ "copyId": "ID कॉपी करा",
+ "backToHistory": "← इतिहासाकडे परत",
+ "recoveryPhrase": "रिकव्हरी वाक्यांश",
+ "recoveryWarn": "⚠ हे शब्द पाहणारा कोणीही तुमचे पैसे चोरू शकतो. दाखवण्यापूर्वी कोणी पाहत नाही याची खात्री करा.",
+ "bip39Passphrase": "पासफ्रेज",
+ "copyPassphrase": "पासफ्रेज कॉपी करा",
+ "revealRecovery": "रिकव्हरी वाक्यांश दाखवा",
+ "offlineTransfer": "ऑफलाइन हस्तांतरण",
+ "offlineTransferDesc": "ऑनलाइन उपकरणावर तुमची नाणी निर्यात करा, मग ऑफलाइन उपकरणावर (याच वॉलेट व सीडसह) फाइल आयात करून इंटरनेटशिवाय स्वाक्षरी करा.",
+ "exportSnapshot": "⤓ स्नॅपशॉट निर्यात",
+ "importSnapshot": "स्नॅपशॉट आयात…",
+ "rescan": "पुन्हा स्कॅन",
+ "rescanDesc": "तुमचा सध्याचा पत्ता आपोआप अद्ययावत होतो. पेमेंट जुन्या (पुन्हा वापरलेल्या) पत्त्यावर आले व दिसत नसेल तरच पुन्हा स्कॅन करा.",
+ "rescanWallet": "वॉलेट पुन्हा स्कॅन",
+ "scanning": "स्कॅन होत आहे…",
+ "language": "भाषा",
+ "offlineBanner": "नेटवर्कशी संपर्क नाही — ऑफलाइन काम सुरू. नाणी लोड करण्यासाठी सेटिंग्जमधून स्नॅपशॉट आयात करा.",
+ "retry": "पुन्हा प्रयत्न",
+ "copied": "कॉपी झाले",
+ "snapshotExported": "स्नॅपशॉट निर्यात झाला",
+ "importedNCoins": "{n} नाणी आयात झाली",
+ "unmatchedSuffix": " · {n} पत्ते या वॉलेटमध्ये नाहीत",
+ "importFailed": "आयात अयशस्वी: {msg}",
+ "copy": "कॉपी",
+ "switchUnit": "BTC / sats बदला",
+ "footerMadeBy": "द्वारे बनवले",
+ "footerSourceOn": "सोर्स येथे"
+} \ No newline at end of file
diff --git a/src/locales/pt.json b/src/locales/pt.json
new file mode 100644
index 0000000..277622d
--- /dev/null
+++ b/src/locales/pt.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Senha",
+ "howItWorks": "Como funciona",
+ "installApp": "Instalar aplicativo",
+ "hiwBasicsTitle": "O básico",
+ "hiwBasics1": "Quando você cria uma carteira, a página gera doze palavras aleatórias. Essas palavras são a chave da sua carteira. Qualquer pessoa que as tiver pode gastar as moedas, então anote-as no papel e guarde-as em um lugar que só você possa acessar.",
+ "hiwBasics2": "Se você perder as doze palavras e não tiver um backup, as moedas estarão perdidas para sempre. Não há link de redefinição nem ninguém para ligar, então faça o backup antes de colocar dinheiro.",
+ "hiwBasics3": "Não há servidor nem conta. O aplicativo inteiro é uma única página que roda no seu navegador, então ninguém guarda suas moedas e nada em um servidor jamais vê suas chaves. Para mostrar seu saldo e histórico, ele consulta um explorador de blocos público (mempool.space por padrão, ou seu próprio nó, se você configurar um nas Configurações).",
+ "hiwBasics4": "Você pode até salvar esta página e abri-la diretamente do seu computador sem internet alguma. Ela continua funcionando offline.",
+ "hiwBasics5": "Ela segue os padrões usuais do Bitcoin (uma frase BIP39 de 12 palavras e chaves BIP84 native SegWit), então, se este site algum dia desaparecer, você pode restaurar a mesma frase no Sparrow, Electrum ou qualquer outra carteira padrão e suas moedas estarão lá.",
+ "hiwTribute": "O nome Hal Wallet é uma homenagem ao lendário cypherpunk e pioneiro do Bitcoin, Hal Finney (1956–2014).",
+ "signExport": "Assinar e (transmitir em outro lugar)",
+ "scanQr": "Ler QR",
+ "scanHint": "Aponte a câmera para um código QR",
+ "scanNoCamera": "Não foi possível acessar a câmera.",
+ "scanNoDecoder": "A leitura de QR precisa de conexão na primeira vez que é usada.",
+ "scanUnrecognized": "Não foi possível ler um endereço Bitcoin desse QR.",
+ "broadcastScanned": "Transmitir transação?",
+ "broadcastNow": "Transmitir",
+ "scanOffline": "Você está offline — reconecte-se para transmitir esta transação.",
+ "loadingHistory": "Carregando transações…",
+ "explorer": "Explorador de blocos",
+ "explorerDesc": "O servidor que esta carteira consulta para saldos e histórico. Aponte-o para seu próprio nó para máxima privacidade.",
+ "explorerUrl": "URL do servidor",
+ "explorerUrlHint": "Base REST do Esplora / electrs, por exemplo https://mempool.space/api",
+ "deviceSync": "Sincronização de dispositivos",
+ "deviceSyncDesc": "Mantenha esta carteira sincronizada entre seus dispositivos armazenando uma cópia criptografada em um relay Nostr — somente um dispositivo com sua seed pode lê-la. Desative para manter tudo neste dispositivo.",
+ "syncAcross": "Sincronizar entre dispositivos",
+ "syncOn": "Ativado",
+ "syncOff": "Desativado",
+ "relaysLabel": "Relays",
+ "relaysHint": "Um URL wss:// por linha.",
+ "home": "Início",
+ "logout": "Sair",
+ "createNew": "Criar nova",
+ "importExisting": "Importar existente",
+ "genIntro": "Gere uma nova frase semente de 12 palavras. Anote-a. É a única forma de recuperar esta carteira.",
+ "generateSeed": "Gerar frase semente",
+ "writeDownWarn": "⚠ Anote estas 12 palavras no papel, em ordem. Quem as tiver pode gastar suas moedas.",
+ "copyPhrase": "Copiar frase",
+ "regenerate": "Gerar novamente",
+ "verifyBackup": "Verificar backup",
+ "skipVerification": "Pular verificação",
+ "confirmBackupIntro": "Confirme seu backup digitando as palavras solicitadas.",
+ "wordN": "Palavra nº {n}",
+ "reenterPassphrase": "Digite a senha novamente",
+ "back": "← Voltar",
+ "openWallet": "Abrir carteira",
+ "wordsMismatch": "Essas palavras não correspondem à sua frase. Verifique seu backup.",
+ "passphraseMismatch": "Essa senha não corresponde à que você digitou.",
+ "seedPhrase": "Frase semente",
+ "seedPlaceholder": "digite suas palavras separadas por espaços",
+ "optionalPassphrase": "Senha opcional",
+ "leaveBlank": "deixe em branco se não usar",
+ "show": "Mostrar",
+ "hide": "Ocultar",
+ "invalidSeed": "Frase semente inválida — verifique a grafia e a ordem das palavras.",
+ "keysNote": "As chaves nunca saem do seu navegador. Funciona offline. Salve esta página e abra-a localmente.",
+ "balance": "Saldo",
+ "pending": "Pendente",
+ "tabReceive": "Receber",
+ "tabSend": "Enviar",
+ "tabHistory": "Histórico",
+ "tabSettings": "Ajustes",
+ "copyAddress": "Copiar endereço",
+ "paymentReceived": "Pagamento recebido!",
+ "tapToProceed": "Toque em qualquer lugar para continuar",
+ "recipient": "Destinatário",
+ "recipients": "Destinatários",
+ "max": "Máx",
+ "feeRate": "Taxa",
+ "feeEconomy": "Econômica",
+ "feeNormal": "Normal",
+ "feePriority": "Prioridade",
+ "feeCustom": "Personalizada",
+ "selectedRate": "Taxa escolhida: {n} sat/vB",
+ "coinSelection": "Seleção de moedas",
+ "automatic": "Automática",
+ "manual": "Manual",
+ "noCoins": "Nenhuma moeda disponível.",
+ "nSelected": "{n} selecionada(s)",
+ "addRecipient": "+ Adicionar destinatário",
+ "reviewTx": "Revisar transação",
+ "remove": "Remover",
+ "enterRecipientAddr": "Digite um endereço de destino.",
+ "enterAddrForN": "Digite um endereço para o destinatário {n}.",
+ "enterValidAmtForN": "Digite um valor válido para o destinatário {n}.",
+ "selectCoin": "Selecione ao menos uma moeda para gastar.",
+ "networkFee": "Taxa de rede",
+ "offlineSignNote": "Offline: assine agora e transmita a transação de um dispositivo conectado.",
+ "signBroadcast": "Assinar e transmitir",
+ "signTx": "Assinar transação",
+ "broadcastFailed": "Falha ao transmitir: {msg}",
+ "signingFailed": "Falha ao assinar: {msg}",
+ "done": "Concluído",
+ "txSignedNote": "✓ Transação assinada. Transmita o código abaixo de um dispositivo conectado (ex.: mempool.space → Broadcast).",
+ "transactionId": "ID da transação",
+ "signedTxRaw": "Transação assinada (código)",
+ "copyHex": "Copiar código",
+ "downloadLabel": "Baixar",
+ "showQrAirgap": "Mostrar QR (transferência offline)",
+ "txBroadcast": "✓ Transação transmitida!",
+ "copyTxid": "Copiar ID da transação",
+ "viewOnMempool": "Ver no mempool.space ↗",
+ "noTxYet": "Nenhuma transação ainda.",
+ "received": "Recebido",
+ "sent": "Enviado",
+ "pendingTag": "⏳ pendente",
+ "awaitingConfirmation": "aguardando confirmação",
+ "feeShort": "taxa {x}",
+ "historyOffline": "O histórico não está disponível offline.",
+ "status": "Status",
+ "confirmed": "Confirmada",
+ "confirmedTag": "confirmada",
+ "pendingInMempool": "Pendente (no mempool)",
+ "block": "Bloco",
+ "date": "Data",
+ "copyId": "Copiar ID",
+ "backToHistory": "← Voltar ao histórico",
+ "recoveryPhrase": "Frase de recuperação",
+ "recoveryWarn": "⚠ Quem vir estas palavras pode roubar seus fundos. Certifique-se de que ninguém esteja olhando antes de revelá-las.",
+ "bip39Passphrase": "Senha",
+ "copyPassphrase": "Copiar senha",
+ "revealRecovery": "Revelar frase de recuperação",
+ "offlineTransfer": "Transferência offline",
+ "offlineTransferDesc": "Exporte suas moedas em um dispositivo conectado, depois importe o arquivo em um offline (com esta carteira + semente) para assinar sem internet.",
+ "exportSnapshot": "⤓ Exportar snapshot",
+ "importSnapshot": "Importar snapshot…",
+ "rescan": "Reescanear",
+ "rescanDesc": "Seu endereço atual atualiza automaticamente. Reescaneie apenas se um pagamento foi enviado a um endereço antigo (reutilizado) e não aparece.",
+ "rescanWallet": "Reescanear carteira",
+ "scanning": "Escaneando…",
+ "language": "Idioma",
+ "offlineBanner": "Sem acesso à rede — trabalhando offline. Importe um snapshot em Ajustes para carregar moedas.",
+ "retry": "Tentar de novo",
+ "copied": "Copiado",
+ "snapshotExported": "Snapshot exportado",
+ "importedNCoins": "{n} moeda(s) importada(s)",
+ "unmatchedSuffix": " · {n} endereço(s) fora desta carteira",
+ "importFailed": "Falha ao importar: {msg}",
+ "copy": "Copiar",
+ "switchUnit": "Alternar BTC / sats",
+ "footerMadeBy": "feito por",
+ "footerSourceOn": "código disponível no"
+} \ No newline at end of file
diff --git a/src/locales/ru.json b/src/locales/ru.json
new file mode 100644
index 0000000..7c700b8
--- /dev/null
+++ b/src/locales/ru.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Парольная фраза",
+ "howItWorks": "Как это работает",
+ "installApp": "Установить приложение",
+ "hiwBasicsTitle": "Основы",
+ "hiwBasics1": "Когда вы создаёте кошелёк, страница генерирует двенадцать случайных слов. Эти слова — ключ к вашему кошельку. Любой, у кого они есть, может потратить монеты, поэтому запишите их на бумаге и храните там, куда можете добраться только вы.",
+ "hiwBasics2": "Если вы потеряете двенадцать слов и у вас нет резервной копии, монеты пропадут навсегда. Нет ссылки для сброса и некому позвонить, поэтому сделайте резервную копию, прежде чем класть деньги.",
+ "hiwBasics3": "Здесь нет сервера и нет учётной записи. Всё приложение — это одна страница, работающая в вашем браузере, поэтому никто не хранит ваши монеты и ничто на сервере никогда не видит ваши ключи. Чтобы показать баланс и историю, оно читает данные из публичного блок-эксплорера (по умолчанию mempool.space или вашего собственного узла, если вы укажете его в Настройках).",
+ "hiwBasics4": "Вы даже можете сохранить эту страницу и открыть её прямо с компьютера вообще без интернета. Она продолжает работать офлайн.",
+ "hiwBasics5": "Оно следует обычным стандартам Bitcoin (фраза из 12 слов BIP39 и нативные SegWit-ключи BIP84), поэтому, если этот сайт когда-нибудь исчезнет, вы сможете восстановить ту же фразу в Sparrow, Electrum или любом другом стандартном кошельке, и ваши монеты будут на месте.",
+ "hiwTribute": "Название Hal Wallet — это дань уважения легендарному шифропанку и пионеру Bitcoin, Hal Finney (1956–2014).",
+ "signExport": "Подписать и (передать в сеть в другом месте)",
+ "scanQr": "Сканировать QR",
+ "scanHint": "Наведите камеру на QR-код",
+ "scanNoCamera": "Не удалось получить доступ к камере.",
+ "scanNoDecoder": "Для сканирования QR при первом использовании нужно подключение.",
+ "scanUnrecognized": "Не удалось распознать адрес Bitcoin в этом QR.",
+ "broadcastScanned": "Передать транзакцию в сеть?",
+ "broadcastNow": "Передать в сеть",
+ "scanOffline": "Вы офлайн — переподключитесь, чтобы передать эту транзакцию в сеть.",
+ "loadingHistory": "Загрузка транзакций…",
+ "explorer": "Блок-эксплорер",
+ "explorerDesc": "Сервер, к которому этот кошелёк обращается за балансами и историей. Укажите свой собственный узел для максимальной приватности.",
+ "explorerUrl": "URL сервера",
+ "explorerUrlHint": "Базовый REST-адрес Esplora / electrs, например https://mempool.space/api",
+ "deviceSync": "Синхронизация устройств",
+ "deviceSyncDesc": "Держите этот кошелёк синхронизированным между вашими устройствами, храня зашифрованную копию на релее Nostr — прочитать её может только устройство с вашим сидом. Отключите, чтобы хранить всё на этом устройстве.",
+ "syncAcross": "Синхронизация между устройствами",
+ "syncOn": "Вкл",
+ "syncOff": "Выкл",
+ "relaysLabel": "Релеи",
+ "relaysHint": "Один URL wss:// на строку.",
+ "home": "Главная",
+ "logout": "Выйти",
+ "createNew": "Создать",
+ "importExisting": "Импортировать",
+ "genIntro": "Сгенерируйте новую сид-фразу из 12 слов. Запишите её. Это единственный способ восстановить кошелёк.",
+ "generateSeed": "Сгенерировать фразу",
+ "writeDownWarn": "⚠ Запишите эти 12 слов на бумаге, по порядку. Любой, у кого они есть, сможет потратить ваши монеты.",
+ "copyPhrase": "Копировать фразу",
+ "regenerate": "Сгенерировать заново",
+ "verifyBackup": "Проверить копию",
+ "skipVerification": "Пропустить проверку",
+ "confirmBackupIntro": "Подтвердите копию, введя запрошенные слова.",
+ "wordN": "Слово №{n}",
+ "reenterPassphrase": "Повторите пароль-фразу",
+ "back": "← Назад",
+ "openWallet": "Открыть кошелёк",
+ "wordsMismatch": "Эти слова не совпадают с вашей фразой. Проверьте копию.",
+ "passphraseMismatch": "Эта пароль-фраза не совпадает с введённой.",
+ "seedPhrase": "Сид-фраза",
+ "seedPlaceholder": "введите слова через пробел",
+ "optionalPassphrase": "Пароль-фраза (необязательно)",
+ "leaveBlank": "оставьте пустым, если не используется",
+ "show": "Показать",
+ "hide": "Скрыть",
+ "invalidSeed": "Неверная сид-фраза — проверьте написание и порядок слов.",
+ "keysNote": "Ключи не покидают браузер. Работает офлайн. Сохраните эту страницу и откройте локально.",
+ "balance": "Баланс",
+ "pending": "В ожидании",
+ "tabReceive": "Получить",
+ "tabSend": "Отправить",
+ "tabHistory": "История",
+ "tabSettings": "Настройки",
+ "copyAddress": "Копировать адрес",
+ "paymentReceived": "Платёж получен!",
+ "tapToProceed": "Нажмите в любом месте, чтобы продолжить",
+ "recipient": "Получатель",
+ "recipients": "Получатели",
+ "max": "Макс",
+ "feeRate": "Комиссия",
+ "feeEconomy": "Эконом",
+ "feeNormal": "Обычная",
+ "feePriority": "Приоритет",
+ "feeCustom": "Своя",
+ "selectedRate": "Выбрано: {n} sat/vB",
+ "coinSelection": "Выбор монет",
+ "automatic": "Авто",
+ "manual": "Вручную",
+ "noCoins": "Нет доступных монет.",
+ "nSelected": "выбрано: {n}",
+ "addRecipient": "+ Добавить получателя",
+ "reviewTx": "Проверить транзакцию",
+ "remove": "Удалить",
+ "enterRecipientAddr": "Введите адрес получателя.",
+ "enterAddrForN": "Введите адрес для получателя {n}.",
+ "enterValidAmtForN": "Введите корректную сумму для получателя {n}.",
+ "selectCoin": "Выберите хотя бы одну монету.",
+ "networkFee": "Комиссия сети",
+ "offlineSignNote": "Офлайн: подпишите сейчас, затем отправьте транзакцию с устройства с интернетом.",
+ "signBroadcast": "Подписать и отправить",
+ "signTx": "Подписать транзакцию",
+ "broadcastFailed": "Ошибка отправки: {msg}",
+ "signingFailed": "Ошибка подписи: {msg}",
+ "done": "Готово",
+ "txSignedNote": "✓ Транзакция подписана. Отправьте код ниже с устройства с интернетом (напр. mempool.space → Broadcast).",
+ "transactionId": "ID транзакции",
+ "signedTxRaw": "Подписанная транзакция (код)",
+ "copyHex": "Копировать код",
+ "downloadLabel": "Скачать",
+ "showQrAirgap": "Показать QR (для офлайн-передачи)",
+ "txBroadcast": "✓ Транзакция отправлена!",
+ "copyTxid": "Копировать ID транзакции",
+ "viewOnMempool": "Открыть на mempool.space ↗",
+ "noTxYet": "Транзакций пока нет.",
+ "received": "Получено",
+ "sent": "Отправлено",
+ "pendingTag": "⏳ в ожидании",
+ "awaitingConfirmation": "ожидает подтверждения",
+ "feeShort": "комиссия {x}",
+ "historyOffline": "История недоступна офлайн.",
+ "status": "Статус",
+ "confirmed": "Подтверждена",
+ "confirmedTag": "подтверждена",
+ "pendingInMempool": "В ожидании (в мемпуле)",
+ "block": "Блок",
+ "date": "Дата",
+ "copyId": "Копировать ID",
+ "backToHistory": "← К истории",
+ "recoveryPhrase": "Фраза восстановления",
+ "recoveryWarn": "⚠ Любой, кто увидит эти слова, может украсть ваши средства. Убедитесь, что никто не смотрит.",
+ "bip39Passphrase": "Пароль-фраза",
+ "copyPassphrase": "Копировать пароль-фразу",
+ "revealRecovery": "Показать фразу восстановления",
+ "offlineTransfer": "Офлайн-передача",
+ "offlineTransferDesc": "Экспортируйте монеты на устройстве с интернетом, затем импортируйте файл на офлайн-устройстве (с этим кошельком и сид-фразой), чтобы подписать без интернета.",
+ "exportSnapshot": "⤓ Экспорт снимка",
+ "importSnapshot": "Импорт снимка…",
+ "rescan": "Пересканировать",
+ "rescanDesc": "Текущий адрес обновляется автоматически. Пересканируйте, только если платёж пришёл на старый (повторно использованный) адрес и не отображается.",
+ "rescanWallet": "Пересканировать кошелёк",
+ "scanning": "Сканирование…",
+ "language": "Язык",
+ "offlineBanner": "Нет сети — работа офлайн. Импортируйте снимок в Настройках, чтобы загрузить монеты.",
+ "retry": "Повторить",
+ "copied": "Скопировано",
+ "snapshotExported": "Снимок экспортирован",
+ "importedNCoins": "Импортировано монет: {n}",
+ "unmatchedSuffix": " · {n} адрес(ов) не из этого кошелька",
+ "importFailed": "Ошибка импорта: {msg}",
+ "copy": "Копировать",
+ "switchUnit": "Переключить BTC / sats",
+ "footerMadeBy": "сделано —",
+ "footerSourceOn": "исходный код на"
+} \ No newline at end of file
diff --git a/src/locales/sw.json b/src/locales/sw.json
new file mode 100644
index 0000000..4921e66
--- /dev/null
+++ b/src/locales/sw.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Nenosiri",
+ "howItWorks": "Jinsi inavyofanya kazi",
+ "installApp": "Sakinisha programu",
+ "hiwBasicsTitle": "Misingi",
+ "hiwBasics1": "Unapotengeneza pochi, ukurasa hutengeneza maneno kumi na mawili ya nasibu. Maneno hayo ndiyo ufunguo wa pochi yako. Yeyote aliye nayo anaweza kutumia sarafu, kwa hivyo yaandike kwenye karatasi na yahifadhi mahali ambapo ni wewe tu unaweza kufikia.",
+ "hiwBasics2": "Ukipoteza maneno kumi na mawili na hauna nakala ya akiba, sarafu zimepotea kabisa. Hakuna kiungo cha kuweka upya wala mtu wa kupigia simu, kwa hivyo yahifadhi kabla ya kuweka pesa.",
+ "hiwBasics3": "Hakuna seva wala akaunti. Programu nzima ni ukurasa mmoja unaoendeshwa kwenye kivinjari chako, kwa hivyo hakuna anayeshikilia sarafu zako na hakuna kitu kwenye seva kinachoona funguo zako. Ili kuonyesha salio na historia yako, husoma kutoka kwa kichunguzi cha umma cha vitalu (mempool.space kwa chaguo-msingi, au nodi yako mwenyewe ukiweka moja katika Mipangilio).",
+ "hiwBasics4": "Unaweza hata kuhifadhi ukurasa huu na kuufungua moja kwa moja kutoka kwa kompyuta yako bila intaneti kabisa. Unaendelea kufanya kazi nje ya mtandao.",
+ "hiwBasics5": "Hufuata viwango vya kawaida vya Bitcoin (kifungu cha maneno 12 cha BIP39 na funguo asili za BIP84 SegWit), kwa hivyo ikiwa tovuti hii itatoweka, unaweza kurejesha kifungu hicho cha maneno katika Sparrow, Electrum, au pochi nyingine yoyote ya kawaida na sarafu zako zitakuwa pale pale.",
+ "hiwTribute": "Jina Hal Wallet ni heshima kwa mwanaharakati maarufu wa cypherpunk na mwanzilishi wa Bitcoin, Hal Finney (1956–2014).",
+ "signExport": "Saini na (sambaza mahali pengine)",
+ "scanQr": "Changanua QR",
+ "scanHint": "Elekeza kamera kwenye msimbo wa QR",
+ "scanNoCamera": "Imeshindwa kufikia kamera.",
+ "scanNoDecoder": "Kuchanganua QR kunahitaji muunganisho mara ya kwanza kunapotumika.",
+ "scanUnrecognized": "Imeshindwa kusoma anwani ya Bitcoin kutoka kwa QR hiyo.",
+ "broadcastScanned": "Sambaza muamala?",
+ "broadcastNow": "Sambaza",
+ "scanOffline": "Uko nje ya mtandao — unganisha tena ili kusambaza muamala huu.",
+ "loadingHistory": "Inapakia miamala…",
+ "explorer": "Kichunguzi cha vitalu",
+ "explorerDesc": "Seva ambayo pochi hii huuliza kuhusu salio na historia. Ielekeze kwenye nodi yako mwenyewe kwa faragha ya juu zaidi.",
+ "explorerUrl": "URL ya seva",
+ "explorerUrlHint": "Msingi wa REST wa Esplora / electrs, k.m. https://mempool.space/api",
+ "deviceSync": "Usawazishaji wa vifaa",
+ "deviceSyncDesc": "Weka pochi hii ikiwa imesawazishwa katika vifaa vyako kwa kuhifadhi nakala iliyosimbwa kwa njia fiche kwenye relay ya Nostr — kifaa chenye mbegu yako pekee ndicho kinaweza kuisoma. Izime ili kuweka kila kitu kwenye kifaa hiki.",
+ "syncAcross": "Sawazisha katika vifaa",
+ "syncOn": "Imewashwa",
+ "syncOff": "Imezimwa",
+ "relaysLabel": "Relay",
+ "relaysHint": "URL moja ya wss:// kwa kila mstari.",
+ "home": "Mwanzo",
+ "logout": "Toka",
+ "createNew": "Tengeneza mpya",
+ "importExisting": "Leta iliyopo",
+ "genIntro": "Tengeneza kifungu kipya cha mbegu chenye maneno 12. Kiandike. Ndiyo njia pekee ya kurejesha pochi hii.",
+ "generateSeed": "Tengeneza kifungu cha mbegu",
+ "writeDownWarn": "⚠ Andika maneno haya 12 kwenye karatasi, kwa mpangilio. Yeyote mwenye nayo anaweza kutumia sarafu zako.",
+ "copyPhrase": "Nakili kifungu",
+ "regenerate": "Tengeneza tena",
+ "verifyBackup": "Thibitisha nakala",
+ "skipVerification": "Ruka uthibitisho",
+ "confirmBackupIntro": "Thibitisha nakala yako kwa kuingiza maneno yaliyoombwa.",
+ "wordN": "Neno #{n}",
+ "reenterPassphrase": "Ingiza tena nenosiri",
+ "back": "← Rudi",
+ "openWallet": "Fungua pochi",
+ "wordsMismatch": "Maneno hayo hayalingani na kifungu chako. Angalia nakala yako.",
+ "passphraseMismatch": "Nenosiri hilo halilingani na ulilolitumia.",
+ "seedPhrase": "Kifungu cha mbegu",
+ "seedPlaceholder": "andika maneno yako yakitenganishwa kwa nafasi",
+ "optionalPassphrase": "Nenosiri la hiari",
+ "leaveBlank": "acha tupu kama halitumiki",
+ "show": "Onyesha",
+ "hide": "Ficha",
+ "invalidSeed": "Kifungu cha mbegu si sahihi — angalia tahajia na mpangilio.",
+ "keysNote": "Funguo hazitoki kamwe kwenye kivinjari chako. Hufanya kazi nje ya mtandao. Hifadhi ukurasa huu uufungue ndani.",
+ "balance": "Salio",
+ "pending": "Inasubiri",
+ "tabReceive": "Pokea",
+ "tabSend": "Tuma",
+ "tabHistory": "Historia",
+ "tabSettings": "Mipangilio",
+ "copyAddress": "Nakili anwani",
+ "paymentReceived": "Malipo yamepokelewa!",
+ "tapToProceed": "Gusa popote ili kuendelea",
+ "recipient": "Mpokeaji",
+ "recipients": "Wapokeaji",
+ "max": "Kiwango cha juu",
+ "feeRate": "Ada",
+ "feeEconomy": "Nafuu",
+ "feeNormal": "Kawaida",
+ "feePriority": "Kipaumbele",
+ "feeCustom": "Maalum",
+ "selectedRate": "Ada iliyochaguliwa: {n} sat/vB",
+ "coinSelection": "Uchaguzi wa sarafu",
+ "automatic": "Otomatiki",
+ "manual": "Mwenyewe",
+ "noCoins": "Hakuna sarafu zinazopatikana.",
+ "nSelected": "{n} zimechaguliwa",
+ "addRecipient": "+ Ongeza mpokeaji",
+ "reviewTx": "Kagua muamala",
+ "remove": "Ondoa",
+ "enterRecipientAddr": "Ingiza anwani ya mpokeaji.",
+ "enterAddrForN": "Ingiza anwani ya mpokeaji {n}.",
+ "enterValidAmtForN": "Ingiza kiasi sahihi kwa mpokeaji {n}.",
+ "selectCoin": "Chagua angalau sarafu moja ya kutumia.",
+ "networkFee": "Ada ya mtandao",
+ "offlineSignNote": "Nje ya mtandao: tia saini sasa, kisha tangaza muamala kutoka kifaa chenye mtandao.",
+ "signBroadcast": "Tia saini & tangaza",
+ "signTx": "Tia saini muamala",
+ "broadcastFailed": "Kutangaza kumeshindwa: {msg}",
+ "signingFailed": "Kutia saini kumeshindwa: {msg}",
+ "done": "Imekamilika",
+ "txSignedNote": "✓ Muamala umetiwa saini. Tangaza msimbo ulio hapa chini kutoka kifaa chenye mtandao (mf. mempool.space → Broadcast).",
+ "transactionId": "Kitambulisho cha muamala",
+ "signedTxRaw": "Muamala uliotiwa saini (msimbo)",
+ "copyHex": "Nakili msimbo",
+ "downloadLabel": "Pakua",
+ "showQrAirgap": "Onyesha QR (kuhamisha nje ya mtandao)",
+ "txBroadcast": "✓ Muamala umetangazwa!",
+ "copyTxid": "Nakili kitambulisho cha muamala",
+ "viewOnMempool": "Tazama kwenye mempool.space ↗",
+ "noTxYet": "Bado hakuna miamala.",
+ "received": "Imepokelewa",
+ "sent": "Imetumwa",
+ "pendingTag": "⏳ inasubiri",
+ "awaitingConfirmation": "inasubiri uthibitisho",
+ "feeShort": "ada {x}",
+ "historyOffline": "Historia haipatikani ukiwa nje ya mtandao.",
+ "status": "Hali",
+ "confirmed": "Imethibitishwa",
+ "confirmedTag": "imethibitishwa",
+ "pendingInMempool": "Inasubiri (kwenye mempool)",
+ "block": "Block",
+ "date": "Tarehe",
+ "copyId": "Nakili kitambulisho",
+ "backToHistory": "← Rudi kwenye historia",
+ "recoveryPhrase": "Kifungu cha kurejesha",
+ "recoveryWarn": "⚠ Yeyote anayeona maneno haya anaweza kuiba fedha zako. Hakikisha hakuna anayetazama kabla ya kuyaonyesha.",
+ "bip39Passphrase": "Nenosiri",
+ "copyPassphrase": "Nakili nenosiri",
+ "revealRecovery": "Onyesha kifungu cha kurejesha",
+ "offlineTransfer": "Uhamisho nje ya mtandao",
+ "offlineTransferDesc": "Hamisha sarafu zako kwenye kifaa chenye mtandao, kisha leta faili kwenye kifaa kisicho na mtandao (chenye pochi hii na mbegu) ili kutia saini bila intaneti.",
+ "exportSnapshot": "⤓ Hamisha snapshot",
+ "importSnapshot": "Leta snapshot…",
+ "rescan": "Changanua tena",
+ "rescanDesc": "Anwani yako ya sasa husasishwa kiotomatiki. Changanua tena tu ikiwa malipo yalitumwa kwa anwani ya zamani (iliyotumika tena) na hayaonekani.",
+ "rescanWallet": "Changanua pochi tena",
+ "scanning": "Inachanganua…",
+ "language": "Lugha",
+ "offlineBanner": "Imeshindwa kufikia mtandao — inafanya kazi nje ya mtandao. Leta snapshot katika Mipangilio kupakia sarafu.",
+ "retry": "Jaribu tena",
+ "copied": "Imenakiliwa",
+ "snapshotExported": "Snapshot imehamishwa",
+ "importedNCoins": "Sarafu {n} zimeletwa",
+ "unmatchedSuffix": " · anwani {n} si za pochi hii",
+ "importFailed": "Kuleta kumeshindwa: {msg}",
+ "copy": "Nakili",
+ "switchUnit": "Badilisha BTC / sats",
+ "footerMadeBy": "imetengenezwa na",
+ "footerSourceOn": "msimbo unapatikana"
+} \ No newline at end of file
diff --git a/src/locales/ta.json b/src/locales/ta.json
new file mode 100644
index 0000000..b30ebb5
--- /dev/null
+++ b/src/locales/ta.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "கடவுச்சொற்றொடர்",
+ "howItWorks": "இது எப்படி வேலை செய்கிறது",
+ "installApp": "செயலியை நிறுவு",
+ "hiwBasicsTitle": "அடிப்படைகள்",
+ "hiwBasics1": "நீங்கள் ஒரு வாலெட்டை உருவாக்கும்போது, பக்கம் பன்னிரண்டு சீரற்ற சொற்களை உருவாக்குகிறது. அந்தச் சொற்களே உங்கள் வாலெட்டின் சாவி. அவற்றை வைத்திருக்கும் எவரும் நாணயங்களைச் செலவழிக்க முடியும், எனவே அவற்றை காகிதத்தில் எழுதி உங்களால் மட்டுமே அணுக முடிந்த இடத்தில் வைத்துக்கொள்ளுங்கள்.",
+ "hiwBasics2": "பன்னிரண்டு சொற்களை இழந்து காப்புப்பிரதி இல்லையென்றால், நாணயங்கள் நிரந்தரமாக போய்விடும். மீட்டமைப்பு இணைப்பு எதுவும் இல்லை, அழைக்க யாரும் இல்லை, எனவே பணம் போடுவதற்கு முன் அவற்றை காப்புப்பிரதி எடுங்கள்.",
+ "hiwBasics3": "சேவையகம் இல்லை, கணக்கு இல்லை. முழு செயலியும் உங்கள் உலாவியில் இயங்கும் ஒரே ஒரு பக்கம், எனவே உங்கள் நாணயங்களை யாரும் வைத்திருப்பதில்லை, சேவையகத்தில் உள்ள எதுவும் உங்கள் சாவிகளைப் பார்ப்பதில்லை. உங்கள் இருப்பையும் வரலாற்றையும் காட்ட இது ஒரு பொது பிளாக் எக்ஸ்புளோரரிலிருந்து படிக்கிறது (இயல்பாக mempool.space, அல்லது அமைப்புகளில் அமைத்தால் உங்கள் சொந்த நோடு).",
+ "hiwBasics4": "இந்தப் பக்கத்தைச் சேமித்து, இணையம் இல்லாமலேயே உங்கள் கணினியிலிருந்து நேரடியாகத் திறக்கலாம். இது ஆஃப்லைனிலும் தொடர்ந்து வேலை செய்கிறது.",
+ "hiwBasics5": "இது வழக்கமான பிட்காயின் தரநிலைகளைப் பின்பற்றுகிறது (12-சொல் BIP39 சொற்றொடர் மற்றும் BIP84 நேட்டிவ் SegWit சாவிகள்), எனவே இந்த தளம் எப்போதாவது மறைந்தாலும் அதே சொற்றொடரை Sparrow, Electrum, அல்லது வேறு எந்த தரநிலை வாலெட்டிலும் மீட்டெடுக்கலாம், உங்கள் நாணயங்கள் அங்கேயே இருக்கும்.",
+ "hiwTribute": "Hal Wallet என்ற பெயர், புகழ்பெற்ற சைஃபர்பங்க் மற்றும் பிட்காயின் முன்னோடி Hal Finney (1956–2014) அவர்களுக்கான அஞ்சலி.",
+ "signExport": "கையொப்பமிட்டு (வேறு இடத்தில் ஒளிபரப்பு)",
+ "scanQr": "QR ஐ ஸ்கேன் செய்",
+ "scanHint": "கேமராவை ஒரு QR குறியீட்டை நோக்கிக் காட்டுங்கள்",
+ "scanNoCamera": "கேமராவை அணுக முடியவில்லை.",
+ "scanNoDecoder": "QR ஸ்கேனிங்கிற்கு முதல் முறை பயன்படுத்தும்போது இணைப்பு தேவை.",
+ "scanUnrecognized": "அந்த QR இலிருந்து பிட்காயின் முகவரியைப் படிக்க முடியவில்லை.",
+ "broadcastScanned": "பரிவர்த்தனையை ஒளிபரப்பவா?",
+ "broadcastNow": "ஒளிபரப்பு",
+ "scanOffline": "நீங்கள் ஆஃப்லைனில் உள்ளீர்கள் — இந்தப் பரிவர்த்தனையை ஒளிபரப்ப மீண்டும் இணையுங்கள்.",
+ "loadingHistory": "பரிவர்த்தனைகள் ஏற்றப்படுகின்றன…",
+ "explorer": "பிளாக் எக்ஸ்புளோரர்",
+ "explorerDesc": "இருப்புகளுக்கும் வரலாற்றுக்கும் இந்த வாலெட் வினவும் சேவையகம். அதிகபட்ச தனியுரிமைக்கு உங்கள் சொந்த நோடை நோக்கி அமைக்கவும்.",
+ "explorerUrl": "சேவையக URL",
+ "explorerUrlHint": "Esplora / electrs REST அடிப்படை, எ.கா. https://mempool.space/api",
+ "deviceSync": "சாதன ஒத்திசைவு",
+ "deviceSyncDesc": "Nostr ரிலேயில் மறையாக்கப்பட்ட நகலைச் சேமிப்பதன் மூலம் உங்கள் சாதனங்களில் இந்த வாலெட்டை ஒத்திசைவாக வைத்திருங்கள் — உங்கள் சீட் உள்ள சாதனம் மட்டுமே அதைப் படிக்க முடியும். எல்லாவற்றையும் இந்தச் சாதனத்தில் மட்டும் வைக்க அதை அணைக்கவும்.",
+ "syncAcross": "சாதனங்களில் ஒத்திசை",
+ "syncOn": "இயக்கு",
+ "syncOff": "அணை",
+ "relaysLabel": "ரிலேக்கள்",
+ "relaysHint": "ஒரு வரிக்கு ஒரு wss:// URL.",
+ "home": "முகப்பு",
+ "logout": "வெளியேறு",
+ "createNew": "புதிது உருவாக்கு",
+ "importExisting": "உள்ளதை இறக்கு",
+ "genIntro": "புதிய 12-சொல் சீட் சொற்றொடரை உருவாக்கவும். எழுதி வைக்கவும். இந்த வாலட்டை மீட்க இதுவே ஒரே வழி.",
+ "generateSeed": "சீட் சொற்றொடரை உருவாக்கு",
+ "writeDownWarn": "⚠ இந்த 12 சொற்களை வரிசையாக காகிதத்தில் எழுதவும். இவை உள்ளவர் உங்கள் நாணயங்களைச் செலவழிக்கலாம்.",
+ "copyPhrase": "சொற்றொடரை நகலெடு",
+ "regenerate": "மீண்டும் உருவாக்கு",
+ "verifyBackup": "காப்பை சரிபார்",
+ "skipVerification": "சரிபார்ப்பைத் தவிர்",
+ "confirmBackupIntro": "கேட்கப்பட்ட சொற்களை உள்ளிட்டு உங்கள் காப்பை உறுதிப்படுத்துங்கள்.",
+ "wordN": "சொல் #{n}",
+ "reenterPassphrase": "கடவுச்சொற்றொடரை மீண்டும் உள்ளிடு",
+ "back": "← பின்",
+ "openWallet": "வாலட்டைத் திற",
+ "wordsMismatch": "இந்த சொற்கள் உங்கள் சொற்றொடருடன் பொருந்தவில்லை. உங்கள் காப்பை சரிபார்க்கவும்.",
+ "passphraseMismatch": "இந்த கடவுச்சொற்றொடர் நீங்கள் உள்ளிட்டதுடன் பொருந்தவில்லை.",
+ "seedPhrase": "சீட் சொற்றொடர்",
+ "seedPlaceholder": "உங்கள் சொற்களை இடைவெளியால் பிரித்து உள்ளிடவும்",
+ "optionalPassphrase": "விருப்பக் கடவுச்சொற்றொடர்",
+ "leaveBlank": "பயன்படுத்தாவிட்டால் காலியாக விடவும்",
+ "show": "காட்டு",
+ "hide": "மறை",
+ "invalidSeed": "தவறான சீட் சொற்றொடர் — எழுத்துப்பிழை, வரிசையைச் சரிபார்க்கவும்.",
+ "keysNote": "விசைகள் உங்கள் உலாவியை விட்டு வெளியேறாது. முழுவதும் ஆஃப்லைனில் இயங்கும். இந்தப் பக்கத்தைச் சேமித்து உள்ளூரில் திறக்கவும்.",
+ "balance": "இருப்பு",
+ "pending": "நிலுவையில்",
+ "tabReceive": "பெறு",
+ "tabSend": "அனுப்பு",
+ "tabHistory": "வரலாறு",
+ "tabSettings": "அமைப்புகள்",
+ "copyAddress": "முகவரியை நகலெடு",
+ "paymentReceived": "பணம் பெறப்பட்டது!",
+ "tapToProceed": "தொடர எங்கேனும் தட்டவும்",
+ "recipient": "பெறுநர்",
+ "recipients": "பெறுநர்கள்",
+ "max": "அதிகபட்சம்",
+ "feeRate": "கட்டணம்",
+ "feeEconomy": "சிக்கனம்",
+ "feeNormal": "சாதாரண",
+ "feePriority": "முன்னுரிமை",
+ "feeCustom": "தனிப்பயன்",
+ "selectedRate": "தேர்ந்த கட்டணம்: {n} sat/vB",
+ "coinSelection": "நாணயத் தேர்வு",
+ "automatic": "தானியங்கி",
+ "manual": "கைமுறை",
+ "noCoins": "நாணயங்கள் எதுவும் இல்லை.",
+ "nSelected": "{n} தேர்ந்தது",
+ "addRecipient": "+ பெறுநரைச் சேர்",
+ "reviewTx": "பரிவர்த்தனையை மதிப்பாய்வு",
+ "remove": "அகற்று",
+ "enterRecipientAddr": "பெறுநர் முகவரியை உள்ளிடவும்.",
+ "enterAddrForN": "பெறுநர் {n}-இன் முகவரியை உள்ளிடவும்.",
+ "enterValidAmtForN": "பெறுநர் {n}-க்கு சரியான தொகையை உள்ளிடவும்.",
+ "selectCoin": "செலவழிக்க குறைந்தது ஒரு நாணயத்தைத் தேர்ந்தெடுக்கவும்.",
+ "networkFee": "நெட்வொர்க் கட்டணம்",
+ "offlineSignNote": "ஆஃப்லைன்: இப்போது கையொப்பமிடவும், பிறகு ஆன்லைன் சாதனத்திலிருந்து பரிவர்த்தனையை ஒளிபரப்பவும்.",
+ "signBroadcast": "கையொப்பம் & ஒளிபரப்பு",
+ "signTx": "பரிவர்த்தனையில் கையொப்பம்",
+ "broadcastFailed": "ஒளிபரப்பு தோல்வி: {msg}",
+ "signingFailed": "கையொப்பம் தோல்வி: {msg}",
+ "done": "முடிந்தது",
+ "txSignedNote": "✓ பரிவர்த்தனை கையொப்பமிடப்பட்டது. கீழுள்ள குறியீட்டை ஆன்லைன் சாதனத்திலிருந்து ஒளிபரப்பவும் (எ.கா. mempool.space → Broadcast).",
+ "transactionId": "பரிவர்த்தனை ID",
+ "signedTxRaw": "கையொப்பமிட்ட பரிவர்த்தனை (குறியீடு)",
+ "copyHex": "குறியீடு நகலெடு",
+ "downloadLabel": "பதிவிறக்கு",
+ "showQrAirgap": "QR காட்டு (ஆஃப்லைன் பரிமாற்றத்திற்கு)",
+ "txBroadcast": "✓ பரிவர்த்தனை ஒளிபரப்பப்பட்டது!",
+ "copyTxid": "பரிவர்த்தனை ID நகலெடு",
+ "viewOnMempool": "mempool.space இல் பார் ↗",
+ "noTxYet": "இன்னும் பரிவர்த்தனைகள் இல்லை.",
+ "received": "பெறப்பட்டது",
+ "sent": "அனுப்பப்பட்டது",
+ "pendingTag": "⏳ நிலுவையில்",
+ "awaitingConfirmation": "உறுதிப்படுத்தலுக்காகக் காத்திருக்கிறது",
+ "feeShort": "கட்டணம் {x}",
+ "historyOffline": "ஆஃப்லைனில் வரலாறு கிடைக்காது.",
+ "status": "நிலை",
+ "confirmed": "உறுதியானது",
+ "confirmedTag": "உறுதியானது",
+ "pendingInMempool": "நிலுவையில் (mempool இல்)",
+ "block": "பிளாக்",
+ "date": "தேதி",
+ "copyId": "ID நகலெடு",
+ "backToHistory": "← வரலாற்றுக்கு",
+ "recoveryPhrase": "மீட்பு சொற்றொடர்",
+ "recoveryWarn": "⚠ இந்த சொற்களைப் பார்க்கும் எவரும் உங்கள் பணத்தைத் திருடலாம். காட்டும் முன் யாரும் பார்க்கவில்லை என உறுதி செய்யவும்.",
+ "bip39Passphrase": "கடவுச்சொற்றொடர்",
+ "copyPassphrase": "கடவுச்சொற்றொடரை நகலெடு",
+ "revealRecovery": "மீட்பு சொற்றொடரைக் காட்டு",
+ "offlineTransfer": "ஆஃப்லைன் பரிமாற்றம்",
+ "offlineTransferDesc": "ஆன்லைன் சாதனத்தில் நாணயங்களை ஏற்றுமதி செய்து, ஆஃப்லைன் சாதனத்தில் (இந்த வாலட் மற்றும் சீடுடன்) கோப்பை இறக்கி இணையம் இல்லாமல் கையொப்பமிடவும்.",
+ "exportSnapshot": "⤓ ஸ்னாப்ஷாட் ஏற்று",
+ "importSnapshot": "ஸ்னாப்ஷாட் இறக்கு…",
+ "rescan": "மீண்டும் ஸ்கேன்",
+ "rescanDesc": "உங்கள் தற்போதைய முகவரி தானாகப் புதுப்பிக்கப்படும். பணம் பழைய (மறுபயன்பாட்டு) முகவரிக்கு வந்து தெரியவில்லை எனில் மட்டுமே மீண்டும் ஸ்கேன் செய்யவும்.",
+ "rescanWallet": "வாலட்டை மீண்டும் ஸ்கேன்",
+ "scanning": "ஸ்கேன் செய்கிறது…",
+ "language": "மொழி",
+ "offlineBanner": "நெட்வொர்க்கை அடைய முடியவில்லை — ஆஃப்லைனில் இயங்குகிறது. நாணயங்களை ஏற்ற அமைப்புகளில் ஸ்னாப்ஷாட்டை இறக்கவும்.",
+ "retry": "மீண்டும் முயல்",
+ "copied": "நகலெடுக்கப்பட்டது",
+ "snapshotExported": "ஸ்னாப்ஷாட் ஏற்றப்பட்டது",
+ "importedNCoins": "{n} நாணயங்கள் இறக்கப்பட்டன",
+ "unmatchedSuffix": " · {n} முகவரிகள் இந்த வாலட்டில் இல்லை",
+ "importFailed": "இறக்குமதி தோல்வி: {msg}",
+ "copy": "நகலெடு",
+ "switchUnit": "BTC / sats மாற்று",
+ "footerMadeBy": "உருவாக்கியவர்",
+ "footerSourceOn": "மூலம்"
+} \ No newline at end of file
diff --git a/src/locales/te.json b/src/locales/te.json
new file mode 100644
index 0000000..fc2b2d0
--- /dev/null
+++ b/src/locales/te.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "పాస్‌ఫ్రేజ్",
+ "howItWorks": "ఇది ఎలా పనిచేస్తుంది",
+ "installApp": "యాప్‌ను ఇన్‌స్టాల్ చేయండి",
+ "hiwBasicsTitle": "ప్రాథమిక అంశాలు",
+ "hiwBasics1": "మీరు వాలెట్ సృష్టించినప్పుడు, ఈ పేజీ పన్నెండు యాదృచ్ఛిక పదాలను రూపొందిస్తుంది. ఆ పదాలే మీ వాలెట్‌కు తాళంచెవి. వాటిని కలిగి ఉన్న ఎవరైనా కాయిన్‌లను ఖర్చు చేయగలరు, కాబట్టి వాటిని కాగితంపై రాసి, మీకు మాత్రమే అందుబాటులో ఉండే చోట భద్రపరచండి.",
+ "hiwBasics2": "ఆ పన్నెండు పదాలను కోల్పోయి, బ్యాకప్ లేకపోతే, కాయిన్‌లు శాశ్వతంగా పోతాయి. రీసెట్ లింక్ ఉండదు, ఫోన్ చేయడానికి ఎవరూ ఉండరు, కాబట్టి డబ్బు వేయడానికి ముందే వాటిని బ్యాకప్ చేయండి.",
+ "hiwBasics3": "సర్వర్ ఉండదు, ఖాతా ఉండదు. మొత్తం యాప్ మీ బ్రౌజర్‌లో నడిచే ఒకే పేజీ, కాబట్టి మీ కాయిన్‌లను ఎవరూ కలిగి ఉండరు, మీ తాళంచెవులను సర్వర్‌లో ఏదీ చూడదు. మీ నిల్వ, చరిత్రను చూపడానికి అది ఒక పబ్లిక్ బ్లాక్ ఎక్స్‌ప్లోరర్ నుండి చదువుతుంది (డిఫాల్ట్‌గా mempool.space, లేదా సెట్టింగ్‌లలో మీరు సెట్ చేస్తే మీ స్వంత నోడ్).",
+ "hiwBasics4": "మీరు ఈ పేజీని సేవ్ చేసి, అస్సలు ఇంటర్నెట్ లేకుండానే మీ కంప్యూటర్ నుండి నేరుగా తెరవవచ్చు. ఇది ఆఫ్‌లైన్‌లో పనిచేస్తూనే ఉంటుంది.",
+ "hiwBasics5": "ఇది సాధారణ బిట్‌కాయిన్ ప్రమాణాలను అనుసరిస్తుంది (12-పదాల BIP39 ఫ్రేజ్, BIP84 నేటివ్ SegWit కీలు), కాబట్టి ఈ సైట్ ఎప్పుడైనా అదృశ్యమైతే, మీరు అదే ఫ్రేజ్‌ను Sparrow, Electrum, లేదా ఏదైనా ఇతర ప్రామాణిక వాలెట్‌లో పునరుద్ధరించవచ్చు, మీ కాయిన్‌లు అక్కడే ఉంటాయి.",
+ "hiwTribute": "Hal Wallet అనే పేరు ప్రఖ్యాత సైఫర్‌పంక్, బిట్‌కాయిన్ మార్గదర్శి Hal Finney (1956–2014)కి నివాళి.",
+ "signExport": "సంతకం చేసి (వేరే చోట ప్రసారం చేయండి)",
+ "scanQr": "QR స్కాన్ చేయండి",
+ "scanHint": "కెమెరాను QR కోడ్‌పై గురిపెట్టండి",
+ "scanNoCamera": "కెమెరాను యాక్సెస్ చేయలేకపోయాం.",
+ "scanNoDecoder": "QR స్కానింగ్‌కు మొదటిసారి వాడేటప్పుడు కనెక్షన్ అవసరం.",
+ "scanUnrecognized": "ఆ QR నుండి బిట్‌కాయిన్ చిరునామాను చదవలేకపోయాం.",
+ "broadcastScanned": "లావాదేవీని ప్రసారం చేయాలా?",
+ "broadcastNow": "ప్రసారం చేయండి",
+ "scanOffline": "మీరు ఆఫ్‌లైన్‌లో ఉన్నారు — ఈ లావాదేవీని ప్రసారం చేయడానికి తిరిగి కనెక్ట్ అవ్వండి.",
+ "loadingHistory": "లావాదేవీలు లోడ్ అవుతున్నాయి…",
+ "explorer": "బ్లాక్ ఎక్స్‌ప్లోరర్",
+ "explorerDesc": "నిల్వలు, చరిత్ర కోసం ఈ వాలెట్ ప్రశ్నించే సర్వర్. గరిష్ట గోప్యత కోసం దీన్ని మీ స్వంత నోడ్‌కు గురిపెట్టండి.",
+ "explorerUrl": "సర్వర్ URL",
+ "explorerUrlHint": "Esplora / electrs REST బేస్, ఉదా. https://mempool.space/api",
+ "deviceSync": "పరికర సమకాలీకరణ",
+ "deviceSyncDesc": "ఎన్‌క్రిప్ట్ చేసిన కాపీని Nostr రిలేపై నిల్వ చేయడం ద్వారా ఈ వాలెట్‌ను మీ పరికరాల అంతటా సమకాలీకరించండి — మీ సీడ్ ఉన్న పరికరం మాత్రమే దాన్ని చదవగలదు. ప్రతిదీ ఈ పరికరంలోనే ఉంచడానికి దీన్ని ఆఫ్ చేయండి.",
+ "syncAcross": "పరికరాల అంతటా సమకాలీకరించండి",
+ "syncOn": "ఆన్",
+ "syncOff": "ఆఫ్",
+ "relaysLabel": "రిలేలు",
+ "relaysHint": "ఒక్కో లైన్‌కు ఒక wss:// URL.",
+ "home": "హోమ్",
+ "logout": "లాగౌట్",
+ "createNew": "కొత్తది సృష్టించు",
+ "importExisting": "ఉన్నదాన్ని దిగుమతి",
+ "genIntro": "కొత్త 12-పదాల సీడ్ ఫ్రేజ్ సృష్టించండి. దాన్ని రాసుకోండి. ఈ వాలెట్‌ను తిరిగి పొందడానికి ఇదే ఏకైక మార్గం.",
+ "generateSeed": "సీడ్ ఫ్రేజ్ సృష్టించు",
+ "writeDownWarn": "⚠ ఈ 12 పదాలను వరుసగా కాగితంపై రాయండి. ఇవి ఉన్నవారు మీ నాణేలను ఖర్చు చేయగలరు.",
+ "copyPhrase": "ఫ్రేజ్ కాపీ",
+ "regenerate": "మళ్లీ సృష్టించు",
+ "verifyBackup": "బ్యాకప్ ధృవీకరించు",
+ "skipVerification": "ధృవీకరణ దాటవేయి",
+ "confirmBackupIntro": "అడిగిన పదాలను నమోదు చేసి మీ బ్యాకప్‌ను ధృవీకరించండి.",
+ "wordN": "పదం #{n}",
+ "reenterPassphrase": "పాస్‌ఫ్రేజ్ మళ్లీ నమోదు చేయి",
+ "back": "← వెనక్కి",
+ "openWallet": "వాలెట్ తెరువు",
+ "wordsMismatch": "ఈ పదాలు మీ ఫ్రేజ్‌తో సరిపోలడం లేదు. మీ బ్యాకప్ చూడండి.",
+ "passphraseMismatch": "ఈ పాస్‌ఫ్రేజ్ మీరు నమోదు చేసినదానితో సరిపోలడం లేదు.",
+ "seedPhrase": "సీడ్ ఫ్రేజ్",
+ "seedPlaceholder": "మీ పదాలను ఖాళీలతో వేరు చేసి నమోదు చేయండి",
+ "optionalPassphrase": "ఐచ్ఛిక పాస్‌ఫ్రేజ్",
+ "leaveBlank": "వాడకపోతే ఖాళీగా ఉంచండి",
+ "show": "చూపు",
+ "hide": "దాచు",
+ "invalidSeed": "చెల్లని సీడ్ ఫ్రేజ్ — స్పెల్లింగ్, వరుస చూడండి.",
+ "keysNote": "కీలు మీ బ్రౌజర్‌ను ఎప్పుడూ వదలవు. పూర్తిగా ఆఫ్‌లైన్‌లో పనిచేస్తుంది. ఈ పేజీని సేవ్ చేసి స్థానికంగా తెరవండి.",
+ "balance": "బ్యాలెన్స్",
+ "pending": "పెండింగ్",
+ "tabReceive": "స్వీకరించు",
+ "tabSend": "పంపు",
+ "tabHistory": "చరిత్ర",
+ "tabSettings": "సెట్టింగ్‌లు",
+ "copyAddress": "చిరునామా కాపీ",
+ "paymentReceived": "చెల్లింపు అందింది!",
+ "tapToProceed": "కొనసాగడానికి ఎక్కడైనా నొక్కండి",
+ "recipient": "గ్రహీత",
+ "recipients": "గ్రహీతలు",
+ "max": "గరిష్ఠం",
+ "feeRate": "ఫీజు",
+ "feeEconomy": "ఆర్థిక",
+ "feeNormal": "సాధారణ",
+ "feePriority": "ప్రాధాన్యం",
+ "feeCustom": "అనుకూల",
+ "selectedRate": "ఎంచుకున్న ఫీజు: {n} sat/vB",
+ "coinSelection": "నాణెం ఎంపిక",
+ "automatic": "స్వయంచాలక",
+ "manual": "మాన్యువల్",
+ "noCoins": "నాణేలు అందుబాటులో లేవు.",
+ "nSelected": "{n} ఎంచుకోబడ్డాయి",
+ "addRecipient": "+ గ్రహీతను జోడించు",
+ "reviewTx": "లావాదేవీ సమీక్ష",
+ "remove": "తొలగించు",
+ "enterRecipientAddr": "గ్రహీత చిరునామా నమోదు చేయండి.",
+ "enterAddrForN": "గ్రహీత {n} చిరునామా నమోదు చేయండి.",
+ "enterValidAmtForN": "గ్రహీత {n} కోసం సరైన మొత్తాన్ని నమోదు చేయండి.",
+ "selectCoin": "ఖర్చు చేయడానికి కనీసం ఒక నాణెం ఎంచుకోండి.",
+ "networkFee": "నెట్‌వర్క్ ఫీజు",
+ "offlineSignNote": "ఆఫ్‌లైన్: ఇప్పుడే సంతకం చేయండి, తర్వాత ఆన్‌లైన్ పరికరం నుండి లావాదేవీని ప్రసారం చేయండి.",
+ "signBroadcast": "సంతకం & ప్రసారం",
+ "signTx": "లావాదేవీపై సంతకం",
+ "broadcastFailed": "ప్రసారం విఫలం: {msg}",
+ "signingFailed": "సంతకం విఫలం: {msg}",
+ "done": "పూర్తయింది",
+ "txSignedNote": "✓ లావాదేవీపై సంతకం అయింది. కింది కోడ్‌ను ఆన్‌లైన్ పరికరం నుండి ప్రసారం చేయండి (ఉదా. mempool.space → Broadcast).",
+ "transactionId": "లావాదేవీ ID",
+ "signedTxRaw": "సంతకం చేసిన లావాదేవీ (కోడ్)",
+ "copyHex": "కోడ్ కాపీ",
+ "downloadLabel": "డౌన్‌లోడ్",
+ "showQrAirgap": "QR చూపు (ఆఫ్‌లైన్ బదిలీ కోసం)",
+ "txBroadcast": "✓ లావాదేవీ ప్రసారమైంది!",
+ "copyTxid": "లావాదేవీ ID కాపీ",
+ "viewOnMempool": "mempool.space లో చూడండి ↗",
+ "noTxYet": "ఇంకా లావాదేవీలు లేవు.",
+ "received": "అందింది",
+ "sent": "పంపబడింది",
+ "pendingTag": "⏳ పెండింగ్",
+ "awaitingConfirmation": "ధృవీకరణ కోసం వేచి",
+ "feeShort": "ఫీజు {x}",
+ "historyOffline": "ఆఫ్‌లైన్‌లో చరిత్ర అందుబాటులో లేదు.",
+ "status": "స్థితి",
+ "confirmed": "ధృవీకరించబడింది",
+ "confirmedTag": "ధృవీకరించబడింది",
+ "pendingInMempool": "పెండింగ్ (mempool లో)",
+ "block": "బ్లాక్",
+ "date": "తేదీ",
+ "copyId": "ID కాపీ",
+ "backToHistory": "← చరిత్రకు తిరిగి",
+ "recoveryPhrase": "రికవరీ ఫ్రేజ్",
+ "recoveryWarn": "⚠ ఈ పదాలు చూసిన ఎవరైనా మీ నిధులను దొంగిలించగలరు. చూపే ముందు ఎవరూ చూడటం లేదని నిర్ధారించుకోండి.",
+ "bip39Passphrase": "పాస్‌ఫ్రేజ్",
+ "copyPassphrase": "పాస్‌ఫ్రేజ్ కాపీ",
+ "revealRecovery": "రికవరీ ఫ్రేజ్ చూపు",
+ "offlineTransfer": "ఆఫ్‌లైన్ బదిలీ",
+ "offlineTransferDesc": "ఆన్‌లైన్ పరికరంలో మీ నాణేలను ఎగుమతి చేసి, ఆఫ్‌లైన్ పరికరంలో (ఈ వాలెట్, సీడ్‌తో) ఫైల్‌ను దిగుమతి చేసి ఇంటర్నెట్ లేకుండా సంతకం చేయండి.",
+ "exportSnapshot": "⤓ స్నాప్‌షాట్ ఎగుమతి",
+ "importSnapshot": "స్నాప్‌షాట్ దిగుమతి…",
+ "rescan": "మళ్లీ స్కాన్",
+ "rescanDesc": "మీ ప్రస్తుత చిరునామా స్వయంచాలకంగా అప్‌డేట్ అవుతుంది. చెల్లింపు పాత (మళ్లీ వాడిన) చిరునామాకు వచ్చి కనిపించకపోతేనే మళ్లీ స్కాన్ చేయండి.",
+ "rescanWallet": "వాలెట్ మళ్లీ స్కాన్",
+ "scanning": "స్కాన్ అవుతోంది…",
+ "language": "భాష",
+ "offlineBanner": "నెట్‌వర్క్ చేరలేకపోయింది — ఆఫ్‌లైన్‌లో పని. నాణేలు లోడ్ చేయడానికి సెట్టింగ్‌లలో స్నాప్‌షాట్ దిగుమతి చేయండి.",
+ "retry": "మళ్లీ ప్రయత్నించు",
+ "copied": "కాపీ అయింది",
+ "snapshotExported": "స్నాప్‌షాట్ ఎగుమతి అయింది",
+ "importedNCoins": "{n} నాణేలు దిగుమతి అయ్యాయి",
+ "unmatchedSuffix": " · {n} చిరునామాలు ఈ వాలెట్‌లో లేవు",
+ "importFailed": "దిగుమతి విఫలం: {msg}",
+ "copy": "కాపీ",
+ "switchUnit": "BTC / sats మార్చు",
+ "footerMadeBy": "తయారు చేసినవారు",
+ "footerSourceOn": "సోర్స్ ఇక్కడ"
+} \ No newline at end of file
diff --git a/src/locales/tr.json b/src/locales/tr.json
new file mode 100644
index 0000000..80c352f
--- /dev/null
+++ b/src/locales/tr.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Parola",
+ "howItWorks": "Nasıl çalışır",
+ "installApp": "Uygulamayı yükle",
+ "hiwBasicsTitle": "Temel bilgiler",
+ "hiwBasics1": "Bir cüzdan oluşturduğunuzda, sayfa rastgele on iki kelime üretir. Bu kelimeler cüzdanınızın anahtarıdır. Bunlara sahip olan herkes paralarınızı harcayabilir, bu yüzden onları bir kâğıda yazın ve yalnızca sizin ulaşabileceğiniz bir yerde saklayın.",
+ "hiwBasics2": "On iki kelimeyi kaybeder ve yedeğiniz olmazsa, paralarınız tamamen kaybolur. Sıfırlama bağlantısı yoktur ve arayabileceğiniz kimse yoktur, bu yüzden para yatırmadan önce onları yedekleyin.",
+ "hiwBasics3": "Sunucu yok, hesap yok. Tüm uygulama tarayıcınızda çalışan tek bir sayfadır, yani paralarınızı kimse tutmaz ve hiçbir sunucu anahtarlarınızı görmez. Bakiyenizi ve geçmişinizi göstermek için herkese açık bir blok gezgininden okur (varsayılan olarak mempool.space, ya da Ayarlar'da belirlerseniz kendi düğümünüz).",
+ "hiwBasics4": "Bu sayfayı kaydedip bilgisayarınızdan hiç internet olmadan bile açabilirsiniz. Çevrimdışı çalışmaya devam eder.",
+ "hiwBasics5": "Olağan Bitcoin standartlarını izler (12 kelimelik bir BIP39 ifadesi ve BIP84 yerel SegWit anahtarları), bu yüzden bu site bir gün kaybolursa aynı ifadeyi Sparrow, Electrum veya başka herhangi bir standart cüzdanda geri yükleyebilirsiniz ve paralarınız tam orada olur.",
+ "hiwTribute": "Hal Wallet adı, efsanevi cypherpunk ve Bitcoin öncüsü Hal Finney (1956–2014) anısına bir saygı duruşudur.",
+ "signExport": "İmzala ve (başka yerde yayınla)",
+ "scanQr": "QR tara",
+ "scanHint": "Kamerayı bir QR koduna doğrultun",
+ "scanNoCamera": "Kameraya erişilemedi.",
+ "scanNoDecoder": "QR taraması ilk kez kullanıldığında bir bağlantı gerektirir.",
+ "scanUnrecognized": "O QR kodundan bir Bitcoin adresi okunamadı.",
+ "broadcastScanned": "İşlem yayınlansın mı?",
+ "broadcastNow": "Yayınla",
+ "scanOffline": "Çevrimdışısınız — bu işlemi yayınlamak için yeniden bağlanın.",
+ "loadingHistory": "İşlemler yükleniyor…",
+ "explorer": "Blok gezgini",
+ "explorerDesc": "Bu cüzdanın bakiyeler ve geçmiş için sorguladığı sunucu. Maksimum gizlilik için kendi düğümünüze yönlendirin.",
+ "explorerUrl": "Sunucu URL'si",
+ "explorerUrlHint": "Esplora / electrs REST tabanı, örn. https://mempool.space/api",
+ "deviceSync": "Cihaz senkronizasyonu",
+ "deviceSyncDesc": "Bir Nostr aktarıcısında şifrelenmiş bir kopya saklayarak bu cüzdanı cihazlarınız arasında senkronize tutun — yalnızca tohumunuza sahip bir cihaz onu okuyabilir. Her şeyi bu cihazda tutmak için kapatın.",
+ "syncAcross": "Cihazlar arasında senkronize et",
+ "syncOn": "Açık",
+ "syncOff": "Kapalı",
+ "relaysLabel": "Aktarıcılar",
+ "relaysHint": "Satır başına bir wss:// URL'si.",
+ "home": "Ana sayfa",
+ "logout": "Çıkış",
+ "createNew": "Yeni oluştur",
+ "importExisting": "Mevcudu içe aktar",
+ "genIntro": "Yeni 12 kelimelik tohum ifadesi oluşturun. Yazın. Bu cüzdanı kurtarmanın tek yolu budur.",
+ "generateSeed": "Tohum ifadesi oluştur",
+ "writeDownWarn": "⚠ Bu 12 kelimeyi sırayla kâğıda yazın. Bunlara sahip olan herkes paranızı harcayabilir.",
+ "copyPhrase": "İfadeyi kopyala",
+ "regenerate": "Yeniden oluştur",
+ "verifyBackup": "Yedeği doğrula",
+ "skipVerification": "Doğrulamayı atla",
+ "confirmBackupIntro": "İstenen kelimeleri girerek yedeğinizi onaylayın.",
+ "wordN": "{n}. kelime",
+ "reenterPassphrase": "Parolayı tekrar girin",
+ "back": "← Geri",
+ "openWallet": "Cüzdanı aç",
+ "wordsMismatch": "Bu kelimeler ifadenizle eşleşmiyor. Yedeğinizi kontrol edin.",
+ "passphraseMismatch": "Bu parola girdiğinizle eşleşmiyor.",
+ "seedPhrase": "Tohum ifadesi",
+ "seedPlaceholder": "kelimelerinizi boşlukla ayırarak girin",
+ "optionalPassphrase": "İsteğe bağlı parola",
+ "leaveBlank": "kullanılmıyorsa boş bırakın",
+ "show": "Göster",
+ "hide": "Gizle",
+ "invalidSeed": "Geçersiz tohum ifadesi — yazımı ve sırayı kontrol edin.",
+ "keysNote": "Anahtarlar tarayıcınızdan asla çıkmaz. Tamamen çevrimdışı çalışır. Bu sayfayı kaydedip yerel olarak açın.",
+ "balance": "Bakiye",
+ "pending": "Beklemede",
+ "tabReceive": "Al",
+ "tabSend": "Gönder",
+ "tabHistory": "Geçmiş",
+ "tabSettings": "Ayarlar",
+ "copyAddress": "Adresi kopyala",
+ "paymentReceived": "Ödeme alındı!",
+ "tapToProceed": "Devam etmek için herhangi bir yere dokunun",
+ "recipient": "Alıcı",
+ "recipients": "Alıcılar",
+ "max": "Maks",
+ "feeRate": "Ücret",
+ "feeEconomy": "Ekonomik",
+ "feeNormal": "Normal",
+ "feePriority": "Öncelikli",
+ "feeCustom": "Özel",
+ "selectedRate": "Seçilen ücret: {n} sat/vB",
+ "coinSelection": "Coin seçimi",
+ "automatic": "Otomatik",
+ "manual": "Manuel",
+ "noCoins": "Kullanılabilir coin yok.",
+ "nSelected": "{n} seçili",
+ "addRecipient": "+ Alıcı ekle",
+ "reviewTx": "İşlemi gözden geçir",
+ "remove": "Kaldır",
+ "enterRecipientAddr": "Bir alıcı adresi girin.",
+ "enterAddrForN": "Alıcı {n} için bir adres girin.",
+ "enterValidAmtForN": "Alıcı {n} için geçerli bir tutar girin.",
+ "selectCoin": "Harcamak için en az bir coin seçin.",
+ "networkFee": "Ağ ücreti",
+ "offlineSignNote": "Çevrimdışı: şimdi imzalayın, sonra işlemi çevrimiçi bir cihazdan yayınlayın.",
+ "signBroadcast": "İmzala ve yayınla",
+ "signTx": "İşlemi imzala",
+ "broadcastFailed": "Yayın başarısız: {msg}",
+ "signingFailed": "İmzalama başarısız: {msg}",
+ "done": "Tamam",
+ "txSignedNote": "✓ İşlem imzalandı. Aşağıdaki kodu çevrimiçi bir cihazdan yayınlayın (örn. mempool.space → Broadcast).",
+ "transactionId": "İşlem kimliği",
+ "signedTxRaw": "İmzalı işlem (kod)",
+ "copyHex": "kod kopyala",
+ "downloadLabel": "İndir",
+ "showQrAirgap": "QR göster (çevrimdışı aktarım için)",
+ "txBroadcast": "✓ İşlem yayınlandı!",
+ "copyTxid": "İşlem kimliği kopyala",
+ "viewOnMempool": "mempool.space’te gör ↗",
+ "noTxYet": "Henüz işlem yok.",
+ "received": "Alındı",
+ "sent": "Gönderildi",
+ "pendingTag": "⏳ beklemede",
+ "awaitingConfirmation": "onay bekleniyor",
+ "feeShort": "ücret {x}",
+ "historyOffline": "Çevrimdışıyken geçmiş kullanılamaz.",
+ "status": "Durum",
+ "confirmed": "Onaylandı",
+ "confirmedTag": "onaylandı",
+ "pendingInMempool": "Beklemede (mempool’da)",
+ "block": "Blok",
+ "date": "Tarih",
+ "copyId": "Kimliği kopyala",
+ "backToHistory": "← Geçmişe dön",
+ "recoveryPhrase": "Kurtarma ifadesi",
+ "recoveryWarn": "⚠ Bu kelimeleri gören herkes paranızı çalabilir. Göstermeden önce kimsenin bakmadığından emin olun.",
+ "bip39Passphrase": "Parola",
+ "copyPassphrase": "Parolayı kopyala",
+ "revealRecovery": "Kurtarma ifadesini göster",
+ "offlineTransfer": "Çevrimdışı aktarım",
+ "offlineTransferDesc": "Coinlerinizi çevrimiçi bir cihazda dışa aktarın, sonra çevrimdışı cihazda (bu cüzdan + tohum ile) dosyayı içe aktarıp internetsiz imzalayın.",
+ "exportSnapshot": "⤓ Anlık görüntü dışa aktar",
+ "importSnapshot": "Anlık görüntü içe aktar…",
+ "rescan": "Yeniden tara",
+ "rescanDesc": "Mevcut adresiniz otomatik güncellenir. Yalnızca bir ödeme eski (yeniden kullanılmış) bir adrese geldiyse ve görünmüyorsa yeniden tarayın.",
+ "rescanWallet": "Cüzdanı yeniden tara",
+ "scanning": "Taranıyor…",
+ "language": "Dil",
+ "offlineBanner": "Ağa ulaşılamıyor — çevrimdışı çalışılıyor. Coinleri yüklemek için Ayarlar’dan anlık görüntü içe aktarın.",
+ "retry": "Yeniden dene",
+ "copied": "Kopyalandı",
+ "snapshotExported": "Anlık görüntü dışa aktarıldı",
+ "importedNCoins": "{n} coin içe aktarıldı",
+ "unmatchedSuffix": " · {n} adres bu cüzdanda değil",
+ "importFailed": "İçe aktarma başarısız: {msg}",
+ "copy": "Kopyala",
+ "switchUnit": "BTC / sats değiştir",
+ "footerMadeBy": "yapan:",
+ "footerSourceOn": "kaynak kodu"
+} \ No newline at end of file
diff --git a/src/locales/ur.json b/src/locales/ur.json
new file mode 100644
index 0000000..dc48572
--- /dev/null
+++ b/src/locales/ur.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "پاس فریز",
+ "howItWorks": "یہ کیسے کام کرتا ہے",
+ "installApp": "ایپ انسٹال کریں",
+ "hiwBasicsTitle": "بنیادی باتیں",
+ "hiwBasics1": "جب آپ والیٹ بناتے ہیں تو یہ صفحہ بارہ بے ترتیب الفاظ تیار کرتا ہے۔ یہی الفاظ آپ کے والیٹ کی کلید ہیں۔ جس کے پاس بھی یہ ہوں وہ سکے خرچ کر سکتا ہے، اس لیے انہیں کاغذ پر لکھ لیں اور کسی ایسی جگہ رکھیں جہاں صرف آپ پہنچ سکیں۔",
+ "hiwBasics2": "اگر آپ بارہ الفاظ کھو دیں اور آپ کے پاس بیک اپ نہ ہو تو سکے ہمیشہ کے لیے ختم ہو جائیں گے۔ نہ کوئی ری سیٹ لنک ہے اور نہ کسی کو فون کیا جا سکتا ہے، اس لیے رقم ڈالنے سے پہلے انہیں بیک اپ کر لیں۔",
+ "hiwBasics3": "نہ کوئی سرور ہے اور نہ کوئی اکاؤنٹ۔ پوری ایپ ایک ہی صفحہ ہے جو آپ کے براؤزر میں چلتا ہے، اس لیے نہ کوئی آپ کے سکے رکھتا ہے اور نہ کسی سرور پر کوئی چیز آپ کی کلیدیں دیکھتی ہے۔ آپ کا بیلنس اور تاریخ دکھانے کے لیے یہ ایک عوامی بلاک ایکسپلورر سے پڑھتا ہے (طے شدہ طور پر mempool.space، یا اگر آپ ترتیبات میں اپنا نوڈ مقرر کریں تو وہ)۔",
+ "hiwBasics4": "آپ اس صفحے کو محفوظ بھی کر سکتے ہیں اور اسے بغیر کسی انٹرنیٹ کے سیدھا اپنے کمپیوٹر سے کھول سکتے ہیں۔ یہ آف لائن کام کرتا رہتا ہے۔",
+ "hiwBasics5": "یہ معمول کے بٹ کوائن معیارات کی پیروی کرتا ہے (12 الفاظ والا BIP39 فریز اور BIP84 نیٹو SegWit کلیدیں)، اس لیے اگر یہ سائٹ کبھی ختم ہو جائے تو آپ وہی فریز Sparrow، Electrum یا کسی بھی دوسرے معیاری والیٹ میں بحال کر سکتے ہیں اور آپ کے سکے وہیں موجود ہوں گے۔",
+ "hiwTribute": "نام Hal Wallet مشہور سائفر پنک اور بٹ کوائن کے علمبردار Hal Finney (1956–2014) کو خراج تحسین ہے۔",
+ "signExport": "دستخط کریں اور (کہیں اور نشر کریں)",
+ "scanQr": "QR اسکین کریں",
+ "scanHint": "کیمرے کو QR کوڈ کی طرف کریں",
+ "scanNoCamera": "کیمرے تک رسائی حاصل نہ ہو سکی۔",
+ "scanNoDecoder": "QR اسکیننگ کو پہلی بار استعمال کے وقت ایک کنکشن کی ضرورت ہوتی ہے۔",
+ "scanUnrecognized": "اس QR سے بٹ کوائن ایڈریس نہیں پڑھا جا سکا۔",
+ "broadcastScanned": "ٹرانزیکشن نشر کریں؟",
+ "broadcastNow": "نشر کریں",
+ "scanOffline": "آپ آف لائن ہیں — اس ٹرانزیکشن کو نشر کرنے کے لیے دوبارہ منسلک ہوں۔",
+ "loadingHistory": "ٹرانزیکشنز لوڈ ہو رہی ہیں…",
+ "explorer": "بلاک ایکسپلورر",
+ "explorerDesc": "وہ سرور جس سے یہ والیٹ بیلنس اور تاریخ کے لیے استفسار کرتا ہے۔ زیادہ سے زیادہ پرائیویسی کے لیے اسے اپنے نوڈ کی طرف مقرر کریں۔",
+ "explorerUrl": "سرور URL",
+ "explorerUrlHint": "Esplora / electrs REST بنیاد، مثلاً https://mempool.space/api",
+ "deviceSync": "ڈیوائس سنک",
+ "deviceSyncDesc": "اس والیٹ کو اپنی ڈیوائسز پر سنک رکھیں، اس کے لیے ایک Nostr ریلے پر ایک خفیہ کردہ نقل محفوظ کریں — صرف آپ کے سیڈ والی ڈیوائس ہی اسے پڑھ سکتی ہے۔ سب کچھ اسی ڈیوائس پر رکھنے کے لیے اسے بند کر دیں۔",
+ "syncAcross": "ڈیوائسز پر سنک کریں",
+ "syncOn": "آن",
+ "syncOff": "آف",
+ "relaysLabel": "ریلے",
+ "relaysHint": "ہر سطر پر ایک wss:// URL۔",
+ "home": "ہوم",
+ "logout": "لاگ آؤٹ",
+ "createNew": "نیا بنائیں",
+ "importExisting": "موجودہ درآمد کریں",
+ "genIntro": "نیا 12 الفاظ کا سیڈ فقرہ بنائیں۔ اسے لکھ لیں۔ یہی اس والیٹ کو بحال کرنے کا واحد طریقہ ہے۔",
+ "generateSeed": "سیڈ فقرہ بنائیں",
+ "writeDownWarn": "⚠ ان 12 الفاظ کو ترتیب سے کاغذ پر لکھیں۔ جس کے پاس یہ ہوں وہ آپ کے سکے خرچ کر سکتا ہے۔",
+ "copyPhrase": "فقرہ کاپی کریں",
+ "regenerate": "دوبارہ بنائیں",
+ "verifyBackup": "بیک اپ کی تصدیق",
+ "skipVerification": "تصدیق چھوڑیں",
+ "confirmBackupIntro": "مطلوبہ الفاظ درج کر کے اپنے بیک اپ کی تصدیق کریں۔",
+ "wordN": "لفظ #{n}",
+ "reenterPassphrase": "پاس فریز دوبارہ درج کریں",
+ "back": "← واپس",
+ "openWallet": "والیٹ کھولیں",
+ "wordsMismatch": "یہ الفاظ آپ کے فقرے سے میل نہیں کھاتے۔ اپنا بیک اپ دیکھیں۔",
+ "passphraseMismatch": "یہ پاس فریز آپ کے درج کردہ سے میل نہیں کھاتا۔",
+ "seedPhrase": "سیڈ فقرہ",
+ "seedPlaceholder": "اپنے الفاظ خالی جگہ سے الگ کر کے لکھیں",
+ "optionalPassphrase": "اختیاری پاس فریز",
+ "leaveBlank": "استعمال نہ ہو تو خالی چھوڑیں",
+ "show": "دکھائیں",
+ "hide": "چھپائیں",
+ "invalidSeed": "غلط سیڈ فقرہ — ہجے اور ترتیب دیکھیں۔",
+ "keysNote": "چابیاں کبھی آپ کے براؤزر سے باہر نہیں جاتیں۔ مکمل آف لائن کام کرتا ہے۔ یہ صفحہ محفوظ کر کے مقامی طور پر کھولیں۔",
+ "balance": "بیلنس",
+ "pending": "زیرِ التوا",
+ "tabReceive": "وصول",
+ "tabSend": "بھیجیں",
+ "tabHistory": "تاریخ",
+ "tabSettings": "ترتیبات",
+ "copyAddress": "پتہ کاپی کریں",
+ "paymentReceived": "ادائیگی موصول ہوئی!",
+ "tapToProceed": "جاری رکھنے کے لیے کہیں بھی ٹیپ کریں",
+ "recipient": "وصول کنندہ",
+ "recipients": "وصول کنندگان",
+ "max": "زیادہ سے زیادہ",
+ "feeRate": "فیس",
+ "feeEconomy": "اکنامی",
+ "feeNormal": "عام",
+ "feePriority": "ترجیحی",
+ "feeCustom": "حسبِ ضرورت",
+ "selectedRate": "منتخب فیس: {n} sat/vB",
+ "coinSelection": "سکوں کا انتخاب",
+ "automatic": "خودکار",
+ "manual": "دستی",
+ "noCoins": "کوئی سکے دستیاب نہیں۔",
+ "nSelected": "{n} منتخب",
+ "addRecipient": "+ وصول کنندہ شامل کریں",
+ "reviewTx": "لین دین کا جائزہ",
+ "remove": "ہٹائیں",
+ "enterRecipientAddr": "وصول کنندہ کا پتہ درج کریں۔",
+ "enterAddrForN": "وصول کنندہ {n} کا پتہ درج کریں۔",
+ "enterValidAmtForN": "وصول کنندہ {n} کے لیے درست رقم درج کریں۔",
+ "selectCoin": "خرچ کے لیے کم از کم ایک سکہ منتخب کریں۔",
+ "networkFee": "نیٹ ورک فیس",
+ "offlineSignNote": "آف لائن: ابھی دستخط کریں، پھر کسی آن لائن آلے سے لین دین نشر کریں۔",
+ "signBroadcast": "دستخط اور نشر",
+ "signTx": "لین دین پر دستخط",
+ "broadcastFailed": "نشر ناکام: {msg}",
+ "signingFailed": "دستخط ناکام: {msg}",
+ "done": "مکمل",
+ "txSignedNote": "✓ لین دین پر دستخط ہو گئے۔ نیچے دیا کوڈ کسی آن لائن آلے سے نشر کریں (مثلاً mempool.space ← Broadcast)۔",
+ "transactionId": "لین دین ID",
+ "signedTxRaw": "دستخط شدہ لین دین (کوڈ)",
+ "copyHex": "کوڈ کاپی کریں",
+ "downloadLabel": "ڈاؤن لوڈ",
+ "showQrAirgap": "QR دکھائیں (آف لائن منتقلی کے لیے)",
+ "txBroadcast": "✓ لین دین نشر ہو گیا!",
+ "copyTxid": "لین دین ID کاپی کریں",
+ "viewOnMempool": "mempool.space پر دیکھیں ↗",
+ "noTxYet": "ابھی کوئی لین دین نہیں۔",
+ "received": "موصول",
+ "sent": "بھیجا گیا",
+ "pendingTag": "⏳ زیرِ التوا",
+ "awaitingConfirmation": "تصدیق کے منتظر",
+ "feeShort": "فیس {x}",
+ "historyOffline": "آف لائن میں تاریخ دستیاب نہیں۔",
+ "status": "حیثیت",
+ "confirmed": "تصدیق شدہ",
+ "confirmedTag": "تصدیق شدہ",
+ "pendingInMempool": "زیرِ التوا (mempool میں)",
+ "block": "بلاک",
+ "date": "تاریخ",
+ "copyId": "ID کاپی کریں",
+ "backToHistory": "← تاریخ پر واپس",
+ "recoveryPhrase": "بحالی فقرہ",
+ "recoveryWarn": "⚠ جو بھی یہ الفاظ دیکھے آپ کی رقم چرا سکتا ہے۔ ظاہر کرنے سے پہلے یقینی بنائیں کوئی نہیں دیکھ رہا۔",
+ "bip39Passphrase": "پاس فریز",
+ "copyPassphrase": "پاس فریز کاپی کریں",
+ "revealRecovery": "بحالی فقرہ ظاہر کریں",
+ "offlineTransfer": "آف لائن منتقلی",
+ "offlineTransferDesc": "کسی آن لائن آلے پر اپنے سکے برآمد کریں، پھر آف لائن آلے (اسی والیٹ اور سیڈ کے ساتھ) پر فائل درآمد کر کے بغیر انٹرنیٹ دستخط کریں۔",
+ "exportSnapshot": "⤓ سنیپ شاٹ برآمد",
+ "importSnapshot": "سنیپ شاٹ درآمد…",
+ "rescan": "دوبارہ اسکین",
+ "rescanDesc": "آپ کا موجودہ پتہ خودکار اپ ڈیٹ ہوتا ہے۔ صرف تب دوبارہ اسکین کریں جب ادائیگی پرانے (دوبارہ استعمال شدہ) پتے پر آئی ہو اور نظر نہ آ رہی ہو۔",
+ "rescanWallet": "والیٹ دوبارہ اسکین",
+ "scanning": "اسکین جاری…",
+ "language": "زبان",
+ "offlineBanner": "نیٹ ورک تک رسائی نہیں — آف لائن کام جاری۔ سکے لوڈ کرنے کے لیے ترتیبات سے سنیپ شاٹ درآمد کریں۔",
+ "retry": "دوبارہ کوشش",
+ "copied": "کاپی ہو گیا",
+ "snapshotExported": "سنیپ شاٹ برآمد ہو گیا",
+ "importedNCoins": "{n} سکے درآمد ہوئے",
+ "unmatchedSuffix": " · {n} پتے اس والیٹ میں نہیں",
+ "importFailed": "درآمد ناکام: {msg}",
+ "copy": "کاپی",
+ "switchUnit": "BTC / sats بدلیں",
+ "footerMadeBy": "بنایا از",
+ "footerSourceOn": "سورس کوڈ یہاں"
+} \ No newline at end of file
diff --git a/src/locales/vi.json b/src/locales/vi.json
new file mode 100644
index 0000000..0a4d413
--- /dev/null
+++ b/src/locales/vi.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "Cụm mật khẩu",
+ "howItWorks": "Cách hoạt động",
+ "installApp": "Cài đặt ứng dụng",
+ "hiwBasicsTitle": "Những điều cơ bản",
+ "hiwBasics1": "Khi bạn tạo ví, trang web sẽ tạo ra mười hai từ ngẫu nhiên. Những từ đó là chìa khóa cho ví của bạn. Bất kỳ ai có chúng đều có thể tiêu số coin, vì vậy hãy ghi chúng ra giấy và cất ở nơi chỉ mình bạn có thể lấy được.",
+ "hiwBasics2": "Nếu bạn làm mất mười hai từ này và không có bản sao lưu, số coin sẽ mất vĩnh viễn. Không có liên kết đặt lại và không có ai để gọi, vì vậy hãy sao lưu chúng trước khi nạp tiền vào.",
+ "hiwBasics3": "Không có máy chủ và không có tài khoản. Toàn bộ ứng dụng là một trang duy nhất chạy trong trình duyệt của bạn, nên không ai giữ coin của bạn và không có thứ gì trên máy chủ từng thấy được khóa của bạn. Để hiển thị số dư và lịch sử, nó đọc dữ liệu từ một trình duyệt khối công khai (mặc định là mempool.space, hoặc node của riêng bạn nếu bạn thiết lập trong phần Cài đặt).",
+ "hiwBasics4": "Bạn thậm chí có thể lưu trang này và mở trực tiếp từ máy tính mà không cần internet. Nó vẫn hoạt động ngoại tuyến.",
+ "hiwBasics5": "Nó tuân theo các tiêu chuẩn Bitcoin thông thường (cụm 12 từ BIP39 và khóa SegWit gốc BIP84), nên nếu trang web này biến mất, bạn có thể khôi phục cùng cụm từ đó trong Sparrow, Electrum, hoặc bất kỳ ví tiêu chuẩn nào khác và số coin của bạn sẽ vẫn ở đó.",
+ "hiwTribute": "Cái tên Hal Wallet là sự tri ân dành cho nhà cypherpunk huyền thoại và người tiên phong của Bitcoin, Hal Finney (1956–2014).",
+ "signExport": "Ký & (phát đi nơi khác)",
+ "scanQr": "Quét QR",
+ "scanHint": "Hướng camera vào mã QR",
+ "scanNoCamera": "Không thể truy cập camera.",
+ "scanNoDecoder": "Quét QR cần kết nối trong lần sử dụng đầu tiên.",
+ "scanUnrecognized": "Không thể đọc địa chỉ Bitcoin từ mã QR đó.",
+ "broadcastScanned": "Phát giao dịch?",
+ "broadcastNow": "Phát đi",
+ "scanOffline": "Bạn đang ngoại tuyến — hãy kết nối lại để phát giao dịch này.",
+ "loadingHistory": "Đang tải giao dịch…",
+ "explorer": "Trình duyệt khối",
+ "explorerDesc": "Máy chủ mà ví này truy vấn để lấy số dư và lịch sử. Hãy trỏ nó tới node của riêng bạn để có quyền riêng tư tối đa.",
+ "explorerUrl": "URL máy chủ",
+ "explorerUrlHint": "Cơ sở REST của Esplora / electrs, ví dụ https://mempool.space/api",
+ "deviceSync": "Đồng bộ thiết bị",
+ "deviceSyncDesc": "Giữ ví này đồng bộ trên các thiết bị của bạn bằng cách lưu một bản sao đã mã hóa trên relay Nostr — chỉ thiết bị có seed của bạn mới đọc được. Hãy tắt nó để giữ mọi thứ trên thiết bị này.",
+ "syncAcross": "Đồng bộ trên các thiết bị",
+ "syncOn": "Bật",
+ "syncOff": "Tắt",
+ "relaysLabel": "Relay",
+ "relaysHint": "Mỗi URL wss:// trên một dòng.",
+ "home": "Trang chủ",
+ "logout": "Đăng xuất",
+ "createNew": "Tạo mới",
+ "importExisting": "Nhập ví có sẵn",
+ "genIntro": "Tạo cụm từ hạt giống 12 từ mới. Hãy ghi lại. Đây là cách duy nhất để khôi phục ví này.",
+ "generateSeed": "Tạo cụm từ hạt giống",
+ "writeDownWarn": "⚠ Ghi 12 từ này ra giấy, theo đúng thứ tự. Bất kỳ ai có chúng đều có thể tiêu coin của bạn.",
+ "copyPhrase": "Sao chép cụm từ",
+ "regenerate": "Tạo lại",
+ "verifyBackup": "Xác minh sao lưu",
+ "skipVerification": "Bỏ qua xác minh",
+ "confirmBackupIntro": "Xác nhận bản sao lưu bằng cách nhập các từ được yêu cầu.",
+ "wordN": "Từ #{n}",
+ "reenterPassphrase": "Nhập lại mật khẩu",
+ "back": "← Quay lại",
+ "openWallet": "Mở ví",
+ "wordsMismatch": "Các từ này không khớp với cụm từ của bạn. Hãy kiểm tra bản sao lưu.",
+ "passphraseMismatch": "Mật khẩu không khớp với mật khẩu bạn đã nhập.",
+ "seedPhrase": "Cụm từ hạt giống",
+ "seedPlaceholder": "nhập các từ cách nhau bằng dấu cách",
+ "optionalPassphrase": "Mật khẩu tùy chọn",
+ "leaveBlank": "để trống nếu không dùng",
+ "show": "Hiện",
+ "hide": "Ẩn",
+ "invalidSeed": "Cụm từ hạt giống không hợp lệ — kiểm tra chính tả và thứ tự.",
+ "keysNote": "Khóa không bao giờ rời khỏi trình duyệt của bạn. Hoạt động hoàn toàn ngoại tuyến. Lưu trang này và mở cục bộ.",
+ "balance": "Số dư",
+ "pending": "Đang chờ",
+ "tabReceive": "Nhận",
+ "tabSend": "Gửi",
+ "tabHistory": "Lịch sử",
+ "tabSettings": "Cài đặt",
+ "copyAddress": "Sao chép địa chỉ",
+ "paymentReceived": "Đã nhận thanh toán!",
+ "tapToProceed": "Chạm vào bất kỳ đâu để tiếp tục",
+ "recipient": "Người nhận",
+ "recipients": "Người nhận",
+ "max": "Tối đa",
+ "feeRate": "Phí",
+ "feeEconomy": "Tiết kiệm",
+ "feeNormal": "Thường",
+ "feePriority": "Ưu tiên",
+ "feeCustom": "Tùy chỉnh",
+ "selectedRate": "Phí đã chọn: {n} sat/vB",
+ "coinSelection": "Chọn coin",
+ "automatic": "Tự động",
+ "manual": "Thủ công",
+ "noCoins": "Không có coin khả dụng.",
+ "nSelected": "Đã chọn {n}",
+ "addRecipient": "+ Thêm người nhận",
+ "reviewTx": "Xem lại giao dịch",
+ "remove": "Xóa",
+ "enterRecipientAddr": "Nhập địa chỉ người nhận.",
+ "enterAddrForN": "Nhập địa chỉ cho người nhận {n}.",
+ "enterValidAmtForN": "Nhập số tiền hợp lệ cho người nhận {n}.",
+ "selectCoin": "Chọn ít nhất một coin để chi.",
+ "networkFee": "Phí mạng",
+ "offlineSignNote": "Ngoại tuyến: ký ngay, sau đó phát giao dịch từ thiết bị có mạng.",
+ "signBroadcast": "Ký & phát",
+ "signTx": "Ký giao dịch",
+ "broadcastFailed": "Phát thất bại: {msg}",
+ "signingFailed": "Ký thất bại: {msg}",
+ "done": "Xong",
+ "txSignedNote": "✓ Đã ký giao dịch. Phát mã bên dưới từ thiết bị có mạng (vd. mempool.space → Broadcast).",
+ "transactionId": "ID giao dịch",
+ "signedTxRaw": "Giao dịch đã ký (mã)",
+ "copyHex": "Sao chép mã",
+ "downloadLabel": "Tải xuống",
+ "showQrAirgap": "Hiện QR (chuyển ngoại tuyến)",
+ "txBroadcast": "✓ Đã phát giao dịch!",
+ "copyTxid": "Sao chép ID giao dịch",
+ "viewOnMempool": "Xem trên mempool.space ↗",
+ "noTxYet": "Chưa có giao dịch.",
+ "received": "Đã nhận",
+ "sent": "Đã gửi",
+ "pendingTag": "⏳ đang chờ",
+ "awaitingConfirmation": "đang chờ xác nhận",
+ "feeShort": "phí {x}",
+ "historyOffline": "Không xem được lịch sử khi ngoại tuyến.",
+ "status": "Trạng thái",
+ "confirmed": "Đã xác nhận",
+ "confirmedTag": "đã xác nhận",
+ "pendingInMempool": "Đang chờ (trong mempool)",
+ "block": "Khối",
+ "date": "Ngày",
+ "copyId": "Sao chép ID",
+ "backToHistory": "← Về lịch sử",
+ "recoveryPhrase": "Cụm từ khôi phục",
+ "recoveryWarn": "⚠ Bất kỳ ai thấy các từ này đều có thể đánh cắp tiền của bạn. Hãy chắc chắn không ai nhìn trước khi hiển thị.",
+ "bip39Passphrase": "Mật khẩu",
+ "copyPassphrase": "Sao chép mật khẩu",
+ "revealRecovery": "Hiện cụm từ khôi phục",
+ "offlineTransfer": "Chuyển ngoại tuyến",
+ "offlineTransferDesc": "Xuất coin trên thiết bị có mạng, rồi nhập tệp trên thiết bị ngoại tuyến (có ví và hạt giống này) để ký không cần internet.",
+ "exportSnapshot": "⤓ Xuất snapshot",
+ "importSnapshot": "Nhập snapshot…",
+ "rescan": "Quét lại",
+ "rescanDesc": "Địa chỉ hiện tại tự cập nhật. Chỉ quét lại nếu thanh toán được gửi đến địa chỉ cũ (dùng lại) và không hiển thị.",
+ "rescanWallet": "Quét lại ví",
+ "scanning": "Đang quét…",
+ "language": "Ngôn ngữ",
+ "offlineBanner": "Không kết nối được mạng — đang ngoại tuyến. Nhập snapshot trong Cài đặt để tải coin.",
+ "retry": "Thử lại",
+ "copied": "Đã sao chép",
+ "snapshotExported": "Đã xuất snapshot",
+ "importedNCoins": "Đã nhập {n} coin",
+ "unmatchedSuffix": " · {n} địa chỉ không thuộc ví này",
+ "importFailed": "Nhập thất bại: {msg}",
+ "copy": "Sao chép",
+ "switchUnit": "Đổi BTC / sats",
+ "footerMadeBy": "làm bởi",
+ "footerSourceOn": "mã nguồn tại"
+} \ No newline at end of file
diff --git a/src/locales/zh.json b/src/locales/zh.json
new file mode 100644
index 0000000..c26db60
--- /dev/null
+++ b/src/locales/zh.json
@@ -0,0 +1,145 @@
+{
+ "passphrase": "口令",
+ "howItWorks": "工作原理",
+ "installApp": "安装应用",
+ "hiwBasicsTitle": "基础知识",
+ "hiwBasics1": "创建钱包时,页面会生成十二个随机单词。这些单词就是你钱包的钥匙。任何拥有它们的人都能花掉你的币,所以请把它们抄写在纸上,妥善保存在只有你能拿到的地方。",
+ "hiwBasics2": "如果你丢失了这十二个单词且没有备份,币就永远找不回来了。没有重置链接,也没有人可以求助,所以在存入资金前请先备份好它们。",
+ "hiwBasics3": "这里没有服务器,也没有账户。整个应用就是一个在你浏览器中运行的单一页面,因此没有人保管你的币,服务器上也不会有任何东西看到你的密钥。为了显示你的余额和历史记录,它会从公共区块浏览器读取数据(默认使用 mempool.space,或者你在设置中配置的自己的节点)。",
+ "hiwBasics4": "你甚至可以保存此页面,在完全没有网络的情况下直接从电脑打开它。它在离线状态下依然有效。",
+ "hiwBasics5": "它遵循通用的比特币标准(12 个单词的 BIP39 助记词和 BIP84 原生 SegWit 密钥),所以即使本站有一天消失了,你也可以在 Sparrow、Electrum 或任何其他标准钱包中恢复同样的助记词,你的币就在那里。",
+ "hiwTribute": "Hal Wallet 这个名字是为了致敬传奇密码朋克和比特币先驱 Hal Finney(1956–2014)。",
+ "signExport": "签名并(在别处广播)",
+ "scanQr": "扫描二维码",
+ "scanHint": "将摄像头对准 QR 码",
+ "scanNoCamera": "无法访问摄像头。",
+ "scanNoDecoder": "QR 扫描首次使用时需要联网。",
+ "scanUnrecognized": "无法从该 QR 码中读取比特币地址。",
+ "broadcastScanned": "广播交易?",
+ "broadcastNow": "广播",
+ "scanOffline": "你已离线——请重新连接以广播此交易。",
+ "loadingHistory": "正在加载交易…",
+ "explorer": "区块浏览器",
+ "explorerDesc": "本钱包用于查询余额和历史记录的服务器。将其指向你自己的节点以获得最高的隐私性。",
+ "explorerUrl": "服务器 URL",
+ "explorerUrlHint": "Esplora / electrs REST 基础地址,例如 https://mempool.space/api",
+ "deviceSync": "设备同步",
+ "deviceSyncDesc": "通过在 Nostr 中继上存储加密副本,让此钱包在你的各设备间保持同步——只有拥有你种子的设备才能读取它。关闭它可将所有内容仅保留在本设备上。",
+ "syncAcross": "跨设备同步",
+ "syncOn": "开",
+ "syncOff": "关",
+ "relaysLabel": "中继",
+ "relaysHint": "每行一个 wss:// URL。",
+ "home": "首页",
+ "logout": "退出",
+ "createNew": "新建",
+ "importExisting": "导入已有",
+ "genIntro": "生成一组新的 12 词助记词。请抄写下来。这是恢复钱包的唯一方式。",
+ "generateSeed": "生成助记词",
+ "writeDownWarn": "⚠ 请按顺序将这 12 个词抄在纸上。任何拿到它们的人都能花掉你的币。",
+ "copyPhrase": "复制助记词",
+ "regenerate": "重新生成",
+ "verifyBackup": "验证备份",
+ "skipVerification": "跳过验证",
+ "confirmBackupIntro": "请输入指定的词以确认你的备份。",
+ "wordN": "第 {n} 个词",
+ "reenterPassphrase": "再次输入密码短语",
+ "back": "← 返回",
+ "openWallet": "打开钱包",
+ "wordsMismatch": "这些词与你的助记词不符。请检查备份。",
+ "passphraseMismatch": "该密码短语与你输入的不符。",
+ "seedPhrase": "助记词",
+ "seedPlaceholder": "输入助记词,用空格分隔",
+ "optionalPassphrase": "可选密码短语",
+ "leaveBlank": "不使用请留空",
+ "show": "显示",
+ "hide": "隐藏",
+ "invalidSeed": "助记词无效——请检查拼写和顺序。",
+ "keysNote": "密钥永不离开你的浏览器。可完全离线使用。保存此页面并从本地打开。",
+ "balance": "余额",
+ "pending": "待确认",
+ "tabReceive": "接收",
+ "tabSend": "发送",
+ "tabHistory": "历史",
+ "tabSettings": "设置",
+ "copyAddress": "复制地址",
+ "paymentReceived": "已收到付款!",
+ "tapToProceed": "点击任意处继续",
+ "recipient": "收款人",
+ "recipients": "收款人",
+ "max": "全部",
+ "feeRate": "费率",
+ "feeEconomy": "经济",
+ "feeNormal": "普通",
+ "feePriority": "优先",
+ "feeCustom": "自定义",
+ "selectedRate": "所选费率:{n} sat/vB",
+ "coinSelection": "选币",
+ "automatic": "自动",
+ "manual": "手动",
+ "noCoins": "没有可用的币。",
+ "nSelected": "已选 {n}",
+ "addRecipient": "+ 添加收款人",
+ "reviewTx": "检查交易",
+ "remove": "移除",
+ "enterRecipientAddr": "请输入收款地址。",
+ "enterAddrForN": "请输入收款人 {n} 的地址。",
+ "enterValidAmtForN": "请输入收款人 {n} 的有效金额。",
+ "selectCoin": "请至少选择一枚币来花费。",
+ "networkFee": "网络手续费",
+ "offlineSignNote": "离线:现在签名,然后在联网设备上广播该交易。",
+ "signBroadcast": "签名并广播",
+ "signTx": "签名交易",
+ "broadcastFailed": "广播失败:{msg}",
+ "signingFailed": "签名失败:{msg}",
+ "done": "完成",
+ "txSignedNote": "✓ 交易已签名。请在任意联网设备上广播下方的代码(例如 mempool.space → Broadcast)。",
+ "transactionId": "交易 ID",
+ "signedTxRaw": "已签名交易(代码)",
+ "copyHex": "复制代码",
+ "downloadLabel": "下载",
+ "showQrAirgap": "显示二维码(用于离线传输)",
+ "txBroadcast": "✓ 交易已广播!",
+ "copyTxid": "复制交易 ID",
+ "viewOnMempool": "在 mempool.space 查看 ↗",
+ "noTxYet": "暂无交易。",
+ "received": "已收到",
+ "sent": "已发送",
+ "pendingTag": "⏳ 待确认",
+ "awaitingConfirmation": "等待确认",
+ "feeShort": "手续费 {x}",
+ "historyOffline": "离线模式下无法查看历史。",
+ "status": "状态",
+ "confirmed": "已确认",
+ "confirmedTag": "已确认",
+ "pendingInMempool": "待确认(在内存池)",
+ "block": "区块",
+ "date": "日期",
+ "copyId": "复制 ID",
+ "backToHistory": "← 返回历史",
+ "recoveryPhrase": "恢复助记词",
+ "recoveryWarn": "⚠ 任何看到这些词的人都能盗走你的资金。显示前请确保无人窥视。",
+ "bip39Passphrase": "密码短语",
+ "copyPassphrase": "复制密码短语",
+ "revealRecovery": "显示恢复助记词",
+ "offlineTransfer": "离线传输",
+ "offlineTransferDesc": "在联网设备上导出你的币,然后在离线设备上(使用此钱包和助记词)导入文件,即可离线签名。",
+ "exportSnapshot": "⤓ 导出快照",
+ "importSnapshot": "导入快照…",
+ "rescan": "重新扫描",
+ "rescanDesc": "当前地址会自动更新。仅当付款发到旧(重复使用)地址且未显示时才需重新扫描。",
+ "rescanWallet": "重新扫描钱包",
+ "scanning": "扫描中…",
+ "language": "语言",
+ "offlineBanner": "无法连接网络——离线工作。请在“设置”中导入快照以加载币。",
+ "retry": "重试",
+ "copied": "已复制",
+ "snapshotExported": "快照已导出",
+ "importedNCoins": "已导入 {n} 枚币",
+ "unmatchedSuffix": " · {n} 个地址不属于此钱包",
+ "importFailed": "导入失败:{msg}",
+ "copy": "复制",
+ "switchUnit": "切换 BTC / sats",
+ "footerMadeBy": "制作者",
+ "footerSourceOn": "源代码见"
+} \ No newline at end of file