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/vi.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/vi.json')
| -rw-r--r-- | src/locales/vi.json | 145 |
1 files changed, 145 insertions, 0 deletions
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 |
