diff --git a/de/src/i18n/de-DE/translation.json b/de/src/i18n/de-DE/translation.json new file mode 100644 index 0000000..e40617d --- /dev/null +++ b/de/src/i18n/de-DE/translation.json @@ -0,0 +1,320 @@ +{ + "displayRange.days": "{value} Days", + "displayRange.sixMonths": "6 Months", + "displayRange.oneYear": "1 Year", + "displayRange.selectRange": "Select range", + "dropdown.option.30days": "30 Days", + "dropdown.option.60days": "60 Days", + "dropdown.option.90days": "90 Days", + "dropdown.option.6months": "6 Months", + "dropdown.option.1year": "1 Year", + "bills.list.filter.by": "Filter by", + "bills.list.filter.date.issue": "Issue date", + "bills.list.filter.date.maturity": "Maturity date", + "Select date range": "Select date range", + "range.start": "Start", + "range.end": "End", + "calendar.date.picker.selected.date": "Selected date", + "Cancel": "Cancel", + "Confirm": "Confirm", + "nav.home": "Home", + "nav.balances": "Balances", + "nav.quotes": "Quotes", + "nav.quotes.pending": "Pending", + "nav.quotes.offered": "Offered", + "nav.quotes.offerExpired": "Offer expired", + "nav.quotes.accepted": "Accepted", + "nav.quotes.denied": "Denied", + "nav.quotes.rejected": "Rejected", + "nav.quotes.canceled": "Canceled", + "nav.keysets": "Keysets", + "nav.dashboard": "Dashboard", + "nav.toggleSubmenu": "Toggle {title} submenu", + "home.page.title": "Home", + "home.identity.title": "Identity", + "home.identity.name": "Name", + "home.identity.email": "Email", + "home.identity.keys": "Keys", + "home.identity.nodeId": "Node ID", + "home.identity.bitcoinPublicKey": "Bitcoin Public Key", + "home.identity.nostrPublicKey": "Nostr Public Key", + "home.identity.address": "Address", + "home.identity.none": "No identity found", + "home.clowder.title": "Clowder", + "home.clowder.loading": "Loading clowder information...", + "home.clowder.error": "Failed to load clowder information", + "home.clowder.nodeId": "Node ID", + "home.clowder.nodeIdLabel": "Clowder Node ID", + "home.clowder.version": "Version", + "home.clowder.network": "Network", + "home.clowder.changeAddress": "Change Address", + "home.clowder.startedAt": "Started At", + "home.clowder.none": "No clowder information available", + "home.mint.title": "Mint Info", + "home.mint.loading": "Loading mint information...", + "home.mint.error": "Failed to load mint information", + "home.mint.network": "Network", + "home.mint.clowderNodeId": "Clowder Node ID", + "home.mint.clowderChangeAddress": "Clowder Change Address", + "home.mint.versions": "Versions", + "home.mint.version.wildcat": "Wildcat", + "home.mint.version.ebillCore": "BCR eBill Core", + "home.mint.version.cdkMintd": "CDK Mintd", + "home.mint.version.clowder": "Clowder", + "home.mint.startedAt": "Started At", + "home.mint.buildTime": "Build Time", + "home.mint.none": "No mint information available", + "language.label": "Language", + "language.select": "Select language", + "locale.en-US": "English (US)", + "locale.en-GB": "English (UK)", + "locale.de-AT": "Deutsch (AT)", + "locale.de-DE": "Deutsch (DE)", + "locale.es-AR": "Español (AR)", + "locale.es-ES": "Español (ES)", + "locale.it-IT": "Italiano (IT)", + "locale.tr-TR": "Türkçe (TR)", + "locale.ach-UG": "Acholi (UG)", + "balances.page.title": "Balances", + "balances.error": "Error loading balances: {error}", + "balances.bitcoin": "Bitcoin balance", + "balances.eiou": "e-IOU balance", + "balances.creditToken": "Credit token balance", + "balances.debitToken": "Debit token balance", + "balances.chart.bitcoin": "Bitcoin", + "balances.chart.eiou": "e-IOU", + "balances.chart.creditToken": "Credit token", + "balances.chart.debitToken": "Debit token", + "month.jan.short": "Jan", + "month.feb.short": "Feb", + "month.mar.short": "Mar", + "month.apr.short": "Apr", + "month.may.short": "May", + "month.jun.short": "Jun", + "month.jul.short": "Jul", + "month.aug.short": "Aug", + "month.sep.short": "Sep", + "month.oct.short": "Oct", + "month.nov.short": "Nov", + "month.dec.short": "Dec", + "earnings.page.title": "Earnings", + "earnings.summary": "Earned during the selected timeframe", + "earnings.timeframe.today": "Today", + "earnings.timeframe.lastWeek": "Last week", + "earnings.timeframe.lastMonth": "Last month", + "earnings.timeframe.last3Months": "Last 3 months", + "earnings.timeframe.last6Months": "Last 6 months", + "earnings.timeframe.lastYear": "Last year", + "earnings.empty": "No accepted quotes for the selected timeframe.", + "earnings.cashflow": "CashFlow", + "cashflow.page.title": "CashFlow", + "info.page.title": "Info", + "keysets.page.title": "Keysets", + "keysets.empty": "No keysets found", + "keysets.search.placeholder": "Search by keyset ID, currency, maturity date, or status...", + "keysets.search.noMatch": "No keysets match your search criteria", + "keysets.sort.currency": "Currency", + "keysets.sort.maturity": "Maturity", + "keysets.sort.status": "Status", + "keysets.status.active": "Active", + "keysets.status.inactive": "Inactive", + "keysets.card.meta": "Currency: {currency} | Maturity date: {maturityDate}", + "keysets.view": "View", + "keysets.noExpiry": "No expiry", + "keyset.detail.notFound": "Keyset not found", + "keyset.detail.meta": "Currency: {currency} | Maturity date: {maturityDate}", + "keyset.detail.redeem.success": "Redemption enabled successfully", + "keyset.detail.redeem.error": "Failed to enable redemption: {error}", + "keyset.detail.redeem.enabling": "Enabling redemption...", + "keyset.detail.redeem.noMatchingBills": "No matching bills found", + "keyset.detail.redeem.waitingPayments": "Waiting for e-bill payments...", + "keyset.detail.redeem.checkingMintStatus": "Checking mint status...", + "keyset.detail.redeem.waitingMintCompletion": "Waiting for mint completion...", + "keyset.detail.redeem.action": "Redeem", + "keyset.detail.allQuotes": "All quotes ({count})", + "keyset.detail.table.quoteId": "Quote ID", + "keyset.detail.table.quoteStatus": "Quote status", + "keyset.detail.table.paymentStatus": "Payment status", + "keyset.detail.table.mintStatus": "Redemption status", + "keyset.detail.table.paymentAddress": "Payment address", + "keyset.detail.table.sum": "Sum", + "keyset.detail.table.paid": "Paid", + "keyset.detail.table.unpaid": "Unpaid", + "keyset.detail.table.na": "N/A", + "keyset.detail.table.mintChecking": "Checking...", + "keyset.detail.table.mintComplete": "Complete", + "keyset.detail.table.mintPending": "Pending", + "keyset.detail.noQuotes": "No quotes available", + "keyset.detail.invalidId": "Invalid keyset ID", + "keyset.detail.title": "Keyset {id}", + "keyset.detail.backToQuote": "Back to quote {id}", + "quote.status.Pending": "Pending", + "quote.status.Offered": "Offered", + "quote.status.OfferExpired": "Offer expired", + "quote.status.Accepted": "Accepted", + "quote.status.Denied": "Denied", + "quote.status.Rejected": "Rejected", + "quote.status.Canceled": "Canceled", + "quote.status.Minting": "Minting", + "dropdown.label.selectRange": "Select Range", + "dropdown.clearPresetRange": "Clear preset range", + "calendar.nav.prevMonth": "Go to previous month", + "calendar.nav.nextMonth": "Go to next month", + "nav.user.unknown": "Unknown User", + "nav.user.initials.fallback": "U", + "nav.user.avatarFallback": "CN", + "nav.user.account": "Account", + "nav.user.notifications": "Notifications", + "nav.user.logout": "Log out", + "icon.userAnonymous": "Anonymous user", + "ui.breadcrumb.ariaLabel": "breadcrumb", + "ui.breadcrumb.more": "More", + "ui.sheet.close": "Close", + "ui.sidebar.title": "Sidebar", + "ui.sidebar.description": "Displays the mobile sidebar.", + "ui.sidebar.toggle": "Toggle Sidebar", + "ui.search.clear": "Clear search", + "copyButton.defaultLabel": "Value", + "copyButton.copied": "{label} copied to clipboard", + "copyButton.failed": "Failed to copy {label}", + "discountForm.days": "Days", + "discountForm.discountRate": "Fee rate", + "discountForm.netAmount": "Net amount", + "discountForm.annualDiscount": "Annual fee", + "discountForm.grossAmount": "Gross amount", + "discountForm.validation.net.required": "Net amount is required", + "discountForm.validation.net.invalid": "Net amount must be a valid number", + "discountForm.validation.net.min": "Net amount must be at least {min}", + "discountForm.validation.net.maxGross": "Net amount cannot exceed gross amount", + "discountForm.validation.required": "{label} is required", + "discountForm.validation.wholeNumber": "{label} must be a whole number", + "discountForm.validation.invalid": "{label} is invalid", + "discountForm.validation.min": "{label} must be at least {min}", + "discountForm.validation.max": "{label} must be at most {max}", + "discountForm.validation.range": "Please enter a valid value between {min} and {max}.", + "discountForm.validation.rateRange": "Please enter a valid value between {min}% and {max}%.", + "endorsement.event.issue": "Bill issued", + "endorsement.event.offered": "Quote offered", + "endorsement.event.acceptance": "Bill accepted", + "endorsement.event.rejection": "Bill rejected", + "endorsement.event.endorsed": "Bill endorsed", + "endorsement.event.minting": "Minting enabled", + "endorsement.event.requestToPay": "Request to pay", + "endorsement.event.payment": "Payment received", + "endorsement.history.title": "Bill history", + "endorsement.history.eventCount": "({count, plural, one {# event} other {# events}})", + "endorsement.history.hide": "Hide history", + "endorsement.history.show": "Show history", + "endorsement.history.descending": "Descending", + "endorsement.history.ascending": "Ascending", + "endorsement.history.empty": "No history events available", + "endorsement.history.maturityDateLabel": "Maturity date:", + "endorsement.history.signedBy": "Signed by", + "endorsement.history.signatory": "Signatory:", + "endorsement.history.endorsedTo": "Endorsed to", + "endorsement.history.locationLabel": "Location:", + "participants.role.drawee": "Drawee", + "participants.role.drawer": "Drawer", + "participants.role.payee": "Payee", + "participants.role.holder": "Holder", + "participants.role.bearer": "Bearer", + "qrCode.error.generic": "QR code cannot be generated (data too large)", + "qrCode.error.tooLarge": "Data too large for QR code ({length} characters, max {max})", + "qrCode.modal.title": "QR Code", + "qrCode.modal.triggerLabel": "Show QR code", + "qrCode.feeToken.label": "Scan to use fee token", + "qrCode.feeToken.title": "Fee Token QR Code", + "qrCode.feeToken.triggerLabel": "Show QR code for fee token", + "sortButtons.ascending": "{label} Ascending", + "sortButtons.descending": "{label} Descending", + "sortButtons.sortByWithLabel": "Sort by {label}", + "sortButtons.sortByLabel": "Sort by:", + "truncatedTextPopover.copied": "Copied to clipboard", + "truncatedTextPopover.copyFailed": "Failed to copy to clipboard", + "truncatedTextPopover.copiedShort": "Copied!", + "truncatedTextPopover.copyAction": "Copy to clipboard", + "quotes.deny.description": "Are you sure you want to deny this quote? This action cannot be undone.", + "quotes.deny.confirmButton": "Yes, deny quote", + "quotes.actions.deny.title": "Confirm denying quote", + "quotes.actions.deny.button": "Deny", + "quotes.actions.offer.title": "Offer quote", + "quotes.actions.offer.description": "Make an offer to the current holder of this bill", + "quotes.actions.offer.button": "Offer", + "quotes.actions.enableMinting.title": "Confirm enabling minting", + "quotes.actions.enableMinting.description": "Are you sure you want to enable minting for this quote?", + "quotes.actions.enableMinting.confirmButton": "Yes, enable minting", + "quotes.actions.enableMinting.button": "Enable minting", + "quotes.error.loadQuote.title": "Failed to load quote", + "quotes.error.loadQuotes.title": "Failed to load quotes", + "quotes.error.unknown": "Unknown error occurred", + "quotes.error.checkApi": "Check if the API server is running and accessible", + "quotes.error.tryAgain": "Please try again later.", + "quotes.empty.noQuoteData": "No quote data available", + "quotes.common.unknown": "Unknown", + "quotes.detail.quoteId": "Quote ID:", + "quotes.detail.billId": "Bill ID:", + "quotes.detail.status": "Quote status:", + "quotes.detail.minting": "Redemption status:", + "quotes.detail.minting.active": "Active", + "quotes.detail.minting.inactive": "Inactive", + "quotes.detail.deadline": "Deadline:", + "quotes.detail.payment": "Payment status:", + "quotes.payment.paid": "Paid", + "quotes.payment.rejected": "Rejected to pay", + "quotes.payment.inMempool": "In mempool", + "quotes.payment.requested": "Requested", + "quotes.detail.sum": "Sum:", + "quotes.detail.discounted": "Fee:", + "quotes.detail.discount.absolute": "Effective fee (absolute):", + "quotes.detail.discount.relative": "Effective fee (relative):", + "quotes.detail.feeToken": "Fee token:", + "quotes.detail.maturityDate": "Maturity date:", + "quotes.detail.participants": "Participants:", + "quotes.breadcrumb": "Quotes", + "quotes.detail.title": "Quote", + "quotes.detail.backToKeyset": "Back to keyset", + "quotes.detail.goToKeyset": "Go to keyset", + "quotes.card.error.title": "Cannot load quote", + "quotes.card.error.description": "Quote {id} is unavailable. {message}", + "quotes.card.view": "View", + "quotes.card.loadingBillDetails": "Loading bill details...", + "quotes.card.error.billInfo": "Error loading bill information", + "quotes.card.noBillData": "No bill data available", + "quotes.list.empty": "No quotes available.", + "quotes.sort.amount": "Amount", + "quotes.sort.maturity": "Maturity", + "quotes.sort.status": "Status", + "quotes.search.placeholder": "Search by quote ID, status, or amount...", + "quotes.search.noMatch": "No quotes match your search criteria", + "quotes.statusPage.title": "{status} quotes", + "quotes.statusPage.titleAll": "All quotes", + "quotes.calendar.selectDate": "Select date", + "quotes.calendar.selectedDate": "Selected date", + "quotes.offer.confirmTitle": "Confirm offering quote", + "quotes.offer.confirmDescription": "Review your inputs and confirm the offer", + "quotes.offer.netAmount": "Net amount:", + "quotes.offer.validUntil": "Valid until:", + "quotes.paymentRequest.title": "Payment request", + "quotes.paymentRequest.addressToPay": "Address to pay", + "quotes.paymentRequest.linkToMempool": "Link to mempool", + "quotes.paymentRequest.requestedAt": "Requested at", + "quotes.paymentRequest.deadline": "Deadline", + "quotes.requestToPay.confirmTitle": "Confirm requesting to pay", + "quotes.requestToPay.confirmDescription": "Are you sure you want to request to pay this e-bill?", + "quotes.requestToPay.confirmButton": "Yes, request to pay", + "quotes.requestToPay.loadingInfo": "Loading information for payment", + "quotes.requestToPay.button": "Request to pay", + "quotes.requestToPay.deadlineLabel": "Payment deadline:", + "quotes.requestToPay.deadlineTitle": "Payment deadline", + "quotes.detail.redemptionStatus": "Redemption status:", + "quotes.redemption.complete": "Complete", + "quotes.redemption.pending": "Pending", + "quotes.payment.notRequested": "Not requested", + "quotes.redemption.checking": "Checking...", + "quotes.feeToken.badge.checking": "Checking...", + "quotes.feeToken.badge.spent": "Spent", + "quotes.feeToken.badge.active": "Active", + "quotes.feeToken.check.error": "Failed to check fee token: {error}", + "quotes.feeToken.badge.error": "Error", + "quotes.feeToken.badge.unknown": "Unknown" +} diff --git a/en/src/i18n/en-US/translation.json b/en/src/i18n/en-US/translation.json new file mode 100644 index 0000000..e40617d --- /dev/null +++ b/en/src/i18n/en-US/translation.json @@ -0,0 +1,320 @@ +{ + "displayRange.days": "{value} Days", + "displayRange.sixMonths": "6 Months", + "displayRange.oneYear": "1 Year", + "displayRange.selectRange": "Select range", + "dropdown.option.30days": "30 Days", + "dropdown.option.60days": "60 Days", + "dropdown.option.90days": "90 Days", + "dropdown.option.6months": "6 Months", + "dropdown.option.1year": "1 Year", + "bills.list.filter.by": "Filter by", + "bills.list.filter.date.issue": "Issue date", + "bills.list.filter.date.maturity": "Maturity date", + "Select date range": "Select date range", + "range.start": "Start", + "range.end": "End", + "calendar.date.picker.selected.date": "Selected date", + "Cancel": "Cancel", + "Confirm": "Confirm", + "nav.home": "Home", + "nav.balances": "Balances", + "nav.quotes": "Quotes", + "nav.quotes.pending": "Pending", + "nav.quotes.offered": "Offered", + "nav.quotes.offerExpired": "Offer expired", + "nav.quotes.accepted": "Accepted", + "nav.quotes.denied": "Denied", + "nav.quotes.rejected": "Rejected", + "nav.quotes.canceled": "Canceled", + "nav.keysets": "Keysets", + "nav.dashboard": "Dashboard", + "nav.toggleSubmenu": "Toggle {title} submenu", + "home.page.title": "Home", + "home.identity.title": "Identity", + "home.identity.name": "Name", + "home.identity.email": "Email", + "home.identity.keys": "Keys", + "home.identity.nodeId": "Node ID", + "home.identity.bitcoinPublicKey": "Bitcoin Public Key", + "home.identity.nostrPublicKey": "Nostr Public Key", + "home.identity.address": "Address", + "home.identity.none": "No identity found", + "home.clowder.title": "Clowder", + "home.clowder.loading": "Loading clowder information...", + "home.clowder.error": "Failed to load clowder information", + "home.clowder.nodeId": "Node ID", + "home.clowder.nodeIdLabel": "Clowder Node ID", + "home.clowder.version": "Version", + "home.clowder.network": "Network", + "home.clowder.changeAddress": "Change Address", + "home.clowder.startedAt": "Started At", + "home.clowder.none": "No clowder information available", + "home.mint.title": "Mint Info", + "home.mint.loading": "Loading mint information...", + "home.mint.error": "Failed to load mint information", + "home.mint.network": "Network", + "home.mint.clowderNodeId": "Clowder Node ID", + "home.mint.clowderChangeAddress": "Clowder Change Address", + "home.mint.versions": "Versions", + "home.mint.version.wildcat": "Wildcat", + "home.mint.version.ebillCore": "BCR eBill Core", + "home.mint.version.cdkMintd": "CDK Mintd", + "home.mint.version.clowder": "Clowder", + "home.mint.startedAt": "Started At", + "home.mint.buildTime": "Build Time", + "home.mint.none": "No mint information available", + "language.label": "Language", + "language.select": "Select language", + "locale.en-US": "English (US)", + "locale.en-GB": "English (UK)", + "locale.de-AT": "Deutsch (AT)", + "locale.de-DE": "Deutsch (DE)", + "locale.es-AR": "Español (AR)", + "locale.es-ES": "Español (ES)", + "locale.it-IT": "Italiano (IT)", + "locale.tr-TR": "Türkçe (TR)", + "locale.ach-UG": "Acholi (UG)", + "balances.page.title": "Balances", + "balances.error": "Error loading balances: {error}", + "balances.bitcoin": "Bitcoin balance", + "balances.eiou": "e-IOU balance", + "balances.creditToken": "Credit token balance", + "balances.debitToken": "Debit token balance", + "balances.chart.bitcoin": "Bitcoin", + "balances.chart.eiou": "e-IOU", + "balances.chart.creditToken": "Credit token", + "balances.chart.debitToken": "Debit token", + "month.jan.short": "Jan", + "month.feb.short": "Feb", + "month.mar.short": "Mar", + "month.apr.short": "Apr", + "month.may.short": "May", + "month.jun.short": "Jun", + "month.jul.short": "Jul", + "month.aug.short": "Aug", + "month.sep.short": "Sep", + "month.oct.short": "Oct", + "month.nov.short": "Nov", + "month.dec.short": "Dec", + "earnings.page.title": "Earnings", + "earnings.summary": "Earned during the selected timeframe", + "earnings.timeframe.today": "Today", + "earnings.timeframe.lastWeek": "Last week", + "earnings.timeframe.lastMonth": "Last month", + "earnings.timeframe.last3Months": "Last 3 months", + "earnings.timeframe.last6Months": "Last 6 months", + "earnings.timeframe.lastYear": "Last year", + "earnings.empty": "No accepted quotes for the selected timeframe.", + "earnings.cashflow": "CashFlow", + "cashflow.page.title": "CashFlow", + "info.page.title": "Info", + "keysets.page.title": "Keysets", + "keysets.empty": "No keysets found", + "keysets.search.placeholder": "Search by keyset ID, currency, maturity date, or status...", + "keysets.search.noMatch": "No keysets match your search criteria", + "keysets.sort.currency": "Currency", + "keysets.sort.maturity": "Maturity", + "keysets.sort.status": "Status", + "keysets.status.active": "Active", + "keysets.status.inactive": "Inactive", + "keysets.card.meta": "Currency: {currency} | Maturity date: {maturityDate}", + "keysets.view": "View", + "keysets.noExpiry": "No expiry", + "keyset.detail.notFound": "Keyset not found", + "keyset.detail.meta": "Currency: {currency} | Maturity date: {maturityDate}", + "keyset.detail.redeem.success": "Redemption enabled successfully", + "keyset.detail.redeem.error": "Failed to enable redemption: {error}", + "keyset.detail.redeem.enabling": "Enabling redemption...", + "keyset.detail.redeem.noMatchingBills": "No matching bills found", + "keyset.detail.redeem.waitingPayments": "Waiting for e-bill payments...", + "keyset.detail.redeem.checkingMintStatus": "Checking mint status...", + "keyset.detail.redeem.waitingMintCompletion": "Waiting for mint completion...", + "keyset.detail.redeem.action": "Redeem", + "keyset.detail.allQuotes": "All quotes ({count})", + "keyset.detail.table.quoteId": "Quote ID", + "keyset.detail.table.quoteStatus": "Quote status", + "keyset.detail.table.paymentStatus": "Payment status", + "keyset.detail.table.mintStatus": "Redemption status", + "keyset.detail.table.paymentAddress": "Payment address", + "keyset.detail.table.sum": "Sum", + "keyset.detail.table.paid": "Paid", + "keyset.detail.table.unpaid": "Unpaid", + "keyset.detail.table.na": "N/A", + "keyset.detail.table.mintChecking": "Checking...", + "keyset.detail.table.mintComplete": "Complete", + "keyset.detail.table.mintPending": "Pending", + "keyset.detail.noQuotes": "No quotes available", + "keyset.detail.invalidId": "Invalid keyset ID", + "keyset.detail.title": "Keyset {id}", + "keyset.detail.backToQuote": "Back to quote {id}", + "quote.status.Pending": "Pending", + "quote.status.Offered": "Offered", + "quote.status.OfferExpired": "Offer expired", + "quote.status.Accepted": "Accepted", + "quote.status.Denied": "Denied", + "quote.status.Rejected": "Rejected", + "quote.status.Canceled": "Canceled", + "quote.status.Minting": "Minting", + "dropdown.label.selectRange": "Select Range", + "dropdown.clearPresetRange": "Clear preset range", + "calendar.nav.prevMonth": "Go to previous month", + "calendar.nav.nextMonth": "Go to next month", + "nav.user.unknown": "Unknown User", + "nav.user.initials.fallback": "U", + "nav.user.avatarFallback": "CN", + "nav.user.account": "Account", + "nav.user.notifications": "Notifications", + "nav.user.logout": "Log out", + "icon.userAnonymous": "Anonymous user", + "ui.breadcrumb.ariaLabel": "breadcrumb", + "ui.breadcrumb.more": "More", + "ui.sheet.close": "Close", + "ui.sidebar.title": "Sidebar", + "ui.sidebar.description": "Displays the mobile sidebar.", + "ui.sidebar.toggle": "Toggle Sidebar", + "ui.search.clear": "Clear search", + "copyButton.defaultLabel": "Value", + "copyButton.copied": "{label} copied to clipboard", + "copyButton.failed": "Failed to copy {label}", + "discountForm.days": "Days", + "discountForm.discountRate": "Fee rate", + "discountForm.netAmount": "Net amount", + "discountForm.annualDiscount": "Annual fee", + "discountForm.grossAmount": "Gross amount", + "discountForm.validation.net.required": "Net amount is required", + "discountForm.validation.net.invalid": "Net amount must be a valid number", + "discountForm.validation.net.min": "Net amount must be at least {min}", + "discountForm.validation.net.maxGross": "Net amount cannot exceed gross amount", + "discountForm.validation.required": "{label} is required", + "discountForm.validation.wholeNumber": "{label} must be a whole number", + "discountForm.validation.invalid": "{label} is invalid", + "discountForm.validation.min": "{label} must be at least {min}", + "discountForm.validation.max": "{label} must be at most {max}", + "discountForm.validation.range": "Please enter a valid value between {min} and {max}.", + "discountForm.validation.rateRange": "Please enter a valid value between {min}% and {max}%.", + "endorsement.event.issue": "Bill issued", + "endorsement.event.offered": "Quote offered", + "endorsement.event.acceptance": "Bill accepted", + "endorsement.event.rejection": "Bill rejected", + "endorsement.event.endorsed": "Bill endorsed", + "endorsement.event.minting": "Minting enabled", + "endorsement.event.requestToPay": "Request to pay", + "endorsement.event.payment": "Payment received", + "endorsement.history.title": "Bill history", + "endorsement.history.eventCount": "({count, plural, one {# event} other {# events}})", + "endorsement.history.hide": "Hide history", + "endorsement.history.show": "Show history", + "endorsement.history.descending": "Descending", + "endorsement.history.ascending": "Ascending", + "endorsement.history.empty": "No history events available", + "endorsement.history.maturityDateLabel": "Maturity date:", + "endorsement.history.signedBy": "Signed by", + "endorsement.history.signatory": "Signatory:", + "endorsement.history.endorsedTo": "Endorsed to", + "endorsement.history.locationLabel": "Location:", + "participants.role.drawee": "Drawee", + "participants.role.drawer": "Drawer", + "participants.role.payee": "Payee", + "participants.role.holder": "Holder", + "participants.role.bearer": "Bearer", + "qrCode.error.generic": "QR code cannot be generated (data too large)", + "qrCode.error.tooLarge": "Data too large for QR code ({length} characters, max {max})", + "qrCode.modal.title": "QR Code", + "qrCode.modal.triggerLabel": "Show QR code", + "qrCode.feeToken.label": "Scan to use fee token", + "qrCode.feeToken.title": "Fee Token QR Code", + "qrCode.feeToken.triggerLabel": "Show QR code for fee token", + "sortButtons.ascending": "{label} Ascending", + "sortButtons.descending": "{label} Descending", + "sortButtons.sortByWithLabel": "Sort by {label}", + "sortButtons.sortByLabel": "Sort by:", + "truncatedTextPopover.copied": "Copied to clipboard", + "truncatedTextPopover.copyFailed": "Failed to copy to clipboard", + "truncatedTextPopover.copiedShort": "Copied!", + "truncatedTextPopover.copyAction": "Copy to clipboard", + "quotes.deny.description": "Are you sure you want to deny this quote? This action cannot be undone.", + "quotes.deny.confirmButton": "Yes, deny quote", + "quotes.actions.deny.title": "Confirm denying quote", + "quotes.actions.deny.button": "Deny", + "quotes.actions.offer.title": "Offer quote", + "quotes.actions.offer.description": "Make an offer to the current holder of this bill", + "quotes.actions.offer.button": "Offer", + "quotes.actions.enableMinting.title": "Confirm enabling minting", + "quotes.actions.enableMinting.description": "Are you sure you want to enable minting for this quote?", + "quotes.actions.enableMinting.confirmButton": "Yes, enable minting", + "quotes.actions.enableMinting.button": "Enable minting", + "quotes.error.loadQuote.title": "Failed to load quote", + "quotes.error.loadQuotes.title": "Failed to load quotes", + "quotes.error.unknown": "Unknown error occurred", + "quotes.error.checkApi": "Check if the API server is running and accessible", + "quotes.error.tryAgain": "Please try again later.", + "quotes.empty.noQuoteData": "No quote data available", + "quotes.common.unknown": "Unknown", + "quotes.detail.quoteId": "Quote ID:", + "quotes.detail.billId": "Bill ID:", + "quotes.detail.status": "Quote status:", + "quotes.detail.minting": "Redemption status:", + "quotes.detail.minting.active": "Active", + "quotes.detail.minting.inactive": "Inactive", + "quotes.detail.deadline": "Deadline:", + "quotes.detail.payment": "Payment status:", + "quotes.payment.paid": "Paid", + "quotes.payment.rejected": "Rejected to pay", + "quotes.payment.inMempool": "In mempool", + "quotes.payment.requested": "Requested", + "quotes.detail.sum": "Sum:", + "quotes.detail.discounted": "Fee:", + "quotes.detail.discount.absolute": "Effective fee (absolute):", + "quotes.detail.discount.relative": "Effective fee (relative):", + "quotes.detail.feeToken": "Fee token:", + "quotes.detail.maturityDate": "Maturity date:", + "quotes.detail.participants": "Participants:", + "quotes.breadcrumb": "Quotes", + "quotes.detail.title": "Quote", + "quotes.detail.backToKeyset": "Back to keyset", + "quotes.detail.goToKeyset": "Go to keyset", + "quotes.card.error.title": "Cannot load quote", + "quotes.card.error.description": "Quote {id} is unavailable. {message}", + "quotes.card.view": "View", + "quotes.card.loadingBillDetails": "Loading bill details...", + "quotes.card.error.billInfo": "Error loading bill information", + "quotes.card.noBillData": "No bill data available", + "quotes.list.empty": "No quotes available.", + "quotes.sort.amount": "Amount", + "quotes.sort.maturity": "Maturity", + "quotes.sort.status": "Status", + "quotes.search.placeholder": "Search by quote ID, status, or amount...", + "quotes.search.noMatch": "No quotes match your search criteria", + "quotes.statusPage.title": "{status} quotes", + "quotes.statusPage.titleAll": "All quotes", + "quotes.calendar.selectDate": "Select date", + "quotes.calendar.selectedDate": "Selected date", + "quotes.offer.confirmTitle": "Confirm offering quote", + "quotes.offer.confirmDescription": "Review your inputs and confirm the offer", + "quotes.offer.netAmount": "Net amount:", + "quotes.offer.validUntil": "Valid until:", + "quotes.paymentRequest.title": "Payment request", + "quotes.paymentRequest.addressToPay": "Address to pay", + "quotes.paymentRequest.linkToMempool": "Link to mempool", + "quotes.paymentRequest.requestedAt": "Requested at", + "quotes.paymentRequest.deadline": "Deadline", + "quotes.requestToPay.confirmTitle": "Confirm requesting to pay", + "quotes.requestToPay.confirmDescription": "Are you sure you want to request to pay this e-bill?", + "quotes.requestToPay.confirmButton": "Yes, request to pay", + "quotes.requestToPay.loadingInfo": "Loading information for payment", + "quotes.requestToPay.button": "Request to pay", + "quotes.requestToPay.deadlineLabel": "Payment deadline:", + "quotes.requestToPay.deadlineTitle": "Payment deadline", + "quotes.detail.redemptionStatus": "Redemption status:", + "quotes.redemption.complete": "Complete", + "quotes.redemption.pending": "Pending", + "quotes.payment.notRequested": "Not requested", + "quotes.redemption.checking": "Checking...", + "quotes.feeToken.badge.checking": "Checking...", + "quotes.feeToken.badge.spent": "Spent", + "quotes.feeToken.badge.active": "Active", + "quotes.feeToken.check.error": "Failed to check fee token: {error}", + "quotes.feeToken.badge.error": "Error", + "quotes.feeToken.badge.unknown": "Unknown" +}