diff options
| author | Adam Soltys <[email protected]> | 2026-06-24 08:59:31 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-06-24 08:59:31 -0700 |
| commit | 17acf5ec80a0c0b0acc44a6a8373e154c68d4748 (patch) | |
| tree | a3fb56b85cc9cd21962ed64b084294096948d75b /src/locales/ru.json | |
| parent | f59cca61111f38963099190bdbbce9a76bc3fafe (diff) | |
| download | coinosv3-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]>
Diffstat (limited to 'src/locales/ru.json')
| -rw-r--r-- | src/locales/ru.json | 145 |
1 files changed, 145 insertions, 0 deletions
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 |
