import { defineI18nLabels } from "@tailor-platform/app-shell"; /** * Central i18n label catalogue for the erp app. * * Uses app-shell's native i18n: `defineI18nLabels({ en, ja })` returns * - `useT()` → a `t("key")` hook for use inside components (resolves against the * active ``), plus `t.dynamic(key, fallback)` for keys built * at runtime (e.g. enum values), and * - `labels.t("key")` → a `LocalizedString` for static config like a page's * `meta.title`, resolved by app-shell per active locale. * * `en` is the required base locale. Keys are namespaced by area (`nav.*`, * `common.*`, `status.*`, `invoice.*`) so they stay collision-free as the * catalogue grows module by module. * * This is the PoC scope: the sidebar navigation and the invoice area. The same * pattern extends to every other module. * * IMPORTANT — the catalogue is built LAZILY (see the bottom of this file). * `defineI18nLabels` must not be called at module-evaluation time: in Vite dev, * app-shell rewrites its import to a virtual proxy that eagerly evaluates every * page module first, and since pages import this module, a top-level call would * run mid-cycle (before app-shell itself is initialised) → "defineI18nLabels is * not a function". Deferring the call to first use (render time) breaks the * circular initialisation. */ const buildCatalogue = () => defineI18nLabels({ en: { "bp.selectRequired": "Select a value", "bp.partners": "Business partners", "bp.allPartners": "All", "bp.customerRole": "Customer", "bp.supplierRole": "Supplier", "bp.roles": "Relationship", "bp.commonInfo": "Shared details", "bp.actions": "Actions", "bp.partnerInformation": "Business partner information", "bp.editPartner": "Edit business partner", "bp.partnerDeactivateDescription": "Deactivate this business partner? Customer and supplier account statuses will not change, and existing documents will be retained.", "bp.customerSettings": "Customer settings", "bp.supplierSettings": "Supplier settings", "bp.searchPartners": "Search by partner name", "bp.addAccount": "Add account", "bp.accounts": "Accounts", "bp.editAccount": "Edit account", "bp.accountDeactivateDescription": "Deactivate this account? It will no longer be available for new transactions. Other accounts and existing documents will be retained.", "bp.registerCustomer": "Register as a customer", "bp.registerSupplier": "Register as a supplier", "bp.noAccountInactive": "No account registered. Reactivate this business partner to add an account.", "bp.accountCompanyName": "Account name", "bp.totalPartners": "partners", "bp.customers": "Customer accounts", "bp.suppliers": "Supplier accounts", "bp.partnerName": "Business partner name", "bp.accountName": "Account name", "bp.type": "Partner type", "bp.ORGANIZATION": "Organization", "bp.INDIVIDUAL": "Individual", "bp.ACTIVE": "Active", "bp.INACTIVE": "Inactive", "bp.status": "Status", "bp.create": "Create", "bp.save": "Save", "bp.saving": "Saving…", "bp.saved": "Saved", "bp.cancel": "Cancel", "bp.edit": "Edit", "bp.deactivate": "Deactivate", "bp.reactivate": "Reactivate", "bp.deactivateConfirm": "Deactivate this record? Existing documents will be retained.", "bp.addresses": "Addresses", "bp.basicInformation": "Basic information", "bp.defaultAddressesOptional": "Default addresses (optional)", "bp.defaultBanksOptional": "Default bank accounts (optional)", "bp.banks": "Bank accounts", "bp.addAddress": "Add address", "bp.editAddress": "Edit address", "bp.addBank": "Add bank account", "bp.editBank": "Edit bank account", "bp.line1": "Address line 1", "bp.line2": "Address line 2", "bp.city": "City", "bp.state": "State / province", "bp.postalCode": "Postal code", "bp.country": "Country", "bp.bankName": "Bank name", "bp.accountHolderName": "Account holder", "bp.accountNumber": "Account number", "bp.routingNumber": "Routing number", "bp.currency": "Currency", "bp.company": "Our legal entity", "bp.code": "Account code", "bp.partner": "Business partner", "bp.preferredCurrency": "Preferred currency (optional)", "bp.defaultExpenseAccount": "Default expense account (optional)", "bp.defaultExpenseAccountPlaceholder": "Select the default for non-PO invoices", "bp.accountSettings": "Account settings", "bp.addressUsages": "Addresses", "bp.assignAddress": "Assign address", "bp.assignBank": "Assign bank account", "bp.bankUsages": "Bank accounts", "bp.purpose": "Purpose", "bp.address": "Address", "bp.bank": "Bank account", "bp.addUsage": "Assign", "bp.remove": "Remove assignment", "bp.default": "Default", "bp.setDefault": "Set as default", "bp.unsetDefault": "Unset default", "bp.BILL_TO": "Bill to", "bp.SHIP_TO": "Ship to", "bp.ORDER_FROM": "Order from", "bp.REMIT_TO": "Remit to", "bp.SHIP_FROM": "Ship from", "bp.RETURN_TO": "Return to", "bp.PAYMENT": "Payment", "bp.RECEIPT": "Receipt", "bp.REFUND": "Refund", "bp.empty": "No records", "bp.notFound": "Record not found", "bp.search": "Search by name or code", "bp.next": "Next", "bp.previous": "Previous", "bp.loading": "Loading…", "bp.loadFailed": "Could not load results", "bp.retry": "Retry", "bp.loadMore": "Load more", "bp.clearSelection": "Clear selection", "bp.searchAddresses": "Search addresses", "bp.searchBanks": "Search bank name or account holder", // — Sidebar navigation: groups — "nav.group.procurement": "Procurement", "nav.group.sales": "Sales", "nav.group.inventory": "Inventory", "nav.group.generalLedger": "General Ledger", "nav.group.masterData": "Master Data", "nav.group.userManagement": "User Management", "nav.language": "Language", // — Sidebar navigation: items — "nav.item.purchaseOrders": "Purchase Orders", "nav.item.inboundShipments": "Inbound Shipments", "nav.item.invoices": "Invoices", "nav.item.payments": "Payments", "nav.item.salesOrders": "Sales Orders", "nav.item.outboundShipments": "Outbound Shipments", "nav.item.receivableInvoices": "Invoices", "nav.item.receipts": "Receipts", "nav.item.stockLevels": "Stock Levels", "nav.item.transferOrders": "Transfer Orders", "nav.item.stockAdjustments": "Stock Adjustments", "nav.item.journalEntries": "Journal Entries", "nav.item.fiscalYears": "Fiscal Years", "nav.item.accountingPeriods": "Accounting Periods", "nav.item.trialBalance": "Trial Balance", "nav.item.companies": "Companies", "nav.item.sites": "Sites", "nav.item.suppliers": "Suppliers", "nav.item.products": "Products", "nav.item.productAttributes": "Product Attributes", "nav.item.items": "Items", "nav.item.chartOfAccounts": "Chart of Accounts", "nav.item.users": "Users", "nav.item.roles": "Roles", // — Common — "common.language": "Language", // — Status (raw enum value → display), resolved via t.dynamic(`status.${value}`) — "status.DRAFT": "Draft", "status.REGISTERED": "Registered", "status.POSTED": "Posted", "status.CANCELLED": "Cancelled", "status.INVOICE": "Invoice", "status.CREDIT_MEMO": "Credit Memo", "status.SUBMITTED": "Submitted", "status.OPEN": "Open", "status.CLOSED": "Closed", "status.REVERSED": "Reversed", "status.ORDERED": "Ordered", "status.CONFIRMED": "Confirmed", "status.REJECTED": "Rejected", "status.NOT_RECEIVED": "Not Received", "status.PARTIALLY_RECEIVED": "Partially Received", "status.RECEIVED": "Received", "status.NOT_BILLED": "Not Billed", "status.PARTIALLY_BILLED": "Partially Billed", "status.BILLED": "Billed", "status.NOT_FULFILLED": "Not Fulfilled", "status.PARTIALLY_FULFILLED": "Partially Fulfilled", "status.FULFILLED": "Fulfilled", "status.ADDED": "Added", "status.MODIFIED": "Modified", "status.REMOVED": "Removed", // — Invoice list — "invoice.list.title": "Invoices", "invoice.list.create": "Create Invoice", "invoice.field.documentNumber": "Document Number", "invoice.field.supplier": "Supplier", "invoice.field.type": "Type", "invoice.field.status": "Status", "invoice.field.totalAmount": "Total Amount", "invoice.field.documentDate": "Document Date", "invoice.field.externalDocumentNumber": "Supplier Invoice #", "invoice.action.view": "View", // — Common — "common.total": "Total", "common.cancel": "Cancel", "common.release": "Release", "common.view": "View", "common.loading": "Loading...", "common.creating": "Creating...", "common.saving": "Saving...", "common.saveChanges": "Save Changes", "common.back": "Back", "common.downloadCsv": "Download CSV", "common.exporting": "Exporting...", "common.status": "Status", "common.item": "Item", "common.quantity": "Quantity", "common.storageLocation": "Storage Location", "common.createdDate": "Created Date", "common.documentNumber": "Document Number", "common.dueDate": "Due Date", "common.supplier": "Supplier", "common.unknown": "Unknown", // — Invoice detail — "invoice.detail.title": "Invoice Detail", "invoice.detail.loadErrorTitle": "Failed to load invoice", "invoice.detail.loadErrorMessage": "An error occurred while fetching the invoice details.", "invoice.detail.infoTitle": "Invoice Information", "invoice.field.currency": "Currency", "invoice.field.postingDate": "Posting Date", "invoice.field.description": "Description", "invoice.field.qty": "Qty", "invoice.field.unitPrice": "Unit Price", "invoice.field.amount": "Amount", "invoice.field.dueDate": "Due Date", "invoice.detail.activeHolds": (props: { count: number }) => `Active Holds (${props.count})`, "invoice.detail.holdsHint": "Matching placed the holds below. Posting is blocked until they are released.", "invoice.detail.holdReleased": "Hold released", "invoice.detail.tabDetails": "Details", "invoice.detail.tabJournal": "Journal", "invoice.detail.tabAttachment": "Attachment", "invoice.detail.lineItems": "Line Items", "invoice.detail.noLineItems": "No line items.", "invoice.detail.dueSchedule": "Due Schedule", // — Invoice attachment (supporting document) — "invoice.attachment.title": "Attachment", "invoice.attachment.uploadedToast": "Attachment uploaded", "invoice.attachment.deletedToast": "Attachment deleted", "invoice.attachment.uploadError": "Failed to upload the attachment.", "invoice.attachment.deleteError": "Failed to delete the attachment.", "invoice.attachment.dropHint": "Drag & drop a file here, or click to select", "invoice.attachment.dropTypes": "JPG / PNG / PDF · Up to 3 files", "invoice.attachment.limitExceeded": "You can attach up to 3 files.", "invoice.attachment.unsupportedType": "Only JPG, PNG, or PDF files are supported.", "invoice.attachment.previewLoading": "Loading preview…", "invoice.attachment.previewError": "Couldn't load the preview.", "invoice.attachment.previewUnavailable": "This file can't be previewed.", // — Invoice actions (action panel) — "invoice.actions.title": "Actions", "invoice.actions.back": "Back to Invoices", "invoice.actions.register": "Register", "invoice.actions.edit": "Edit", "invoice.actions.post": "Post", "invoice.actions.createPayment": "Create Payment", "invoice.actions.posting": "Posting...", "invoice.actions.confirmPost": "Confirm posting", "invoice.actions.postDialogTitle": "Post as accounts payable", "invoice.actions.postDialogDescription": "Post this invoice as accounts payable. A journal entry is posted to the general ledger and the payable is formally recognized (unpaid). This is not the actual payment (cash disbursement).", "invoice.actions.registeredToast": "Invoice registered", "invoice.actions.postedToast": "Invoice posted", // — Hold reasons (resolved via t.dynamic(`hold.${reasonCode}`)) — "hold.INVOICE_UNIT_DIFFERS_FROM_PURCHASE_ORDER_UNIT": "Invoice unit differs from the purchase order unit", "hold.INVOICE_UNIT_PRICE_DIFFERS_FROM_PURCHASE_ORDER_UNIT_PRICE": "Invoice unit price differs from the purchase order unit price", "hold.INVOICE_QUANTITY_EXCEEDS_ORDERED_QUANTITY": "Invoiced quantity exceeds the ordered quantity", "hold.INVOICE_QUANTITY_EXCEEDS_RECEIVED_QUANTITY": "Invoiced quantity exceeds the received quantity", // — Purchase order (titles) — "purchaseOrder.list.title": "Purchase Orders", "purchaseOrder.list.create": "Create Purchase Order", "purchaseOrder.detail.title": "Purchase Order Detail", "purchaseOrder.detail.loadErrorTitle": "Failed to load purchase order", "purchaseOrder.detail.loadErrorMessage": "An error occurred while fetching the purchase order details.", // — Purchase order list (table columns) — "purchaseOrder.field.documentNumber": "Document Number", "purchaseOrder.field.supplierName": "Supplier Name", "purchaseOrder.field.receivingSite": "Receiving Site", "purchaseOrder.field.status": "Status", "purchaseOrder.field.receiptStatus": "Receipt Status", "purchaseOrder.field.billingStatus": "Billing Status", "purchaseOrder.field.orderDate": "Order Date", "purchaseOrder.field.externalReference": "External Reference", "purchaseOrder.field.totalAmount": "Total Amount", "purchaseOrder.field.createdDate": "Created Date", "purchaseOrder.action.view": "View", // — Purchase order detail — "purchaseOrder.detail.infoTitle": "Purchase Order Information", "purchaseOrder.field.supplier": "Supplier", "purchaseOrder.field.closeReason": "Close Reason", "purchaseOrder.detail.lineItems": "Line Items", "purchaseOrder.detail.noLineItems": "No line items.", "purchaseOrder.field.item": "Item", "purchaseOrder.field.orderedQty": "Ordered Qty", "purchaseOrder.field.uom": "UoM", "purchaseOrder.field.unitPrice": "Unit Price", "purchaseOrder.field.subtotal": "Subtotal", "purchaseOrder.detail.totals": "Totals", // — Purchase order actions (action panel) — "purchaseOrder.actions.title": "Actions", "purchaseOrder.actions.back": "Back to Purchase Orders", "purchaseOrder.actions.duplicate": "Duplicate", "purchaseOrder.actions.edit": "Edit", "purchaseOrder.actions.submit": "Submit for Approval", "purchaseOrder.actions.approve": "Approve", "purchaseOrder.actions.reject": "Reject", "purchaseOrder.actions.amend": "Amend", "purchaseOrder.actions.createInboundShipment": "Create Inbound Shipment", "purchaseOrder.actions.close": "Close", "purchaseOrder.actions.cancel": "Cancel", "purchaseOrder.actions.revisionHistory": "Revision History", "purchaseOrder.actions.duplicatedToast": "Purchase order duplicated", "purchaseOrder.actions.submittedToast": "Purchase order submitted", "purchaseOrder.actions.approvedToast": "Purchase order approved", "purchaseOrder.actions.rejectedToast": "Purchase order rejected", "purchaseOrder.actions.cancelledToast": "Purchase order cancelled", "purchaseOrder.actions.closedToast": "Purchase order closed", "purchaseOrder.actions.remainingGrToast": "Draft GR created for remaining quantities", "purchaseOrder.actions.fullyReceivedToast": "PO is fully received — no remaining quantities", "purchaseOrder.actions.closeDialogTitle": "Close Purchase Order", "purchaseOrder.actions.closeDialogDescription": "Provide a reason for closing this purchase order. If open quantity remains, check the write-off box to close it anyway.", "purchaseOrder.actions.closeReasonRequired": "Close reason (required)", "purchaseOrder.actions.closeReasonOptional": "Close reason (optional)", "purchaseOrder.actions.writeOffRemaining": "Write off remaining open quantity", "purchaseOrder.actions.closing": "Closing...", "purchaseOrder.actions.confirmClose": "Confirm Close", "purchaseOrder.actions.rejectDialogTitle": "Reject Purchase Order", "purchaseOrder.actions.rejectDialogDescription": "Provide a reason for rejecting this purchase order.", "purchaseOrder.actions.rejectReasonPlaceholder": "Enter reason for rejection", "purchaseOrder.actions.rejecting": "Rejecting...", "purchaseOrder.actions.confirmRejection": "Confirm Rejection", // — Purchase order revision history (drawer) — "purchaseOrder.revision.title": "Revision History", "purchaseOrder.revision.description": "Header and line changes grouped by revision, newest first.", "purchaseOrder.revision.empty": "No revision history. This PO has not been amended since creation.", "purchaseOrder.revision.revisionLabel": (props: { number: string }) => `Revision v${props.number}`, "purchaseOrder.revision.headerField": "Header Field", "purchaseOrder.revision.before": "Before", "purchaseOrder.revision.after": "After", "purchaseOrder.revision.action": "Action", "purchaseOrder.revision.item": "Item", "purchaseOrder.revision.changes": "Changes", "purchaseOrder.revision.fieldOrderDate": "Order Date", "purchaseOrder.revision.fieldReceivingSite": "Receiving Site", "purchaseOrder.revision.fieldExternalReference": "External Reference", "purchaseOrder.revision.fieldItem": "Item", "purchaseOrder.revision.fieldQuantity": "Quantity", "purchaseOrder.revision.fieldUnitPrice": "Unit Price", "purchaseOrder.revision.fieldUnit": "Unit", // — Purchase order forms (create / edit / amend) — "purchaseOrder.form.createTitle": "Create Purchase Order", "purchaseOrder.form.editTitle": "Edit Purchase Order", "purchaseOrder.form.amendTitle": "Amend Purchase Order", "purchaseOrder.form.linesLoadErrorTitle": "Failed to load purchase order lines", "purchaseOrder.form.editLinesLoadErrorMessage": "An error occurred while loading the line items. Try again before editing to avoid saving an incomplete order.", "purchaseOrder.form.amendLinesLoadErrorMessage": "An error occurred while loading the line items. Try again before amending to avoid acting on an incomplete order.", "purchaseOrder.form.supplierLabel": "Supplier *", "purchaseOrder.form.supplierReadonly": "Supplier", "purchaseOrder.form.supplierPlaceholder": "Select a supplier", "purchaseOrder.form.receivingSiteLabel": "Receiving Site *", "purchaseOrder.form.receivingSiteReadonly": "Receiving Site", "purchaseOrder.form.sitePlaceholder": "Select a site", "purchaseOrder.form.receivingSitePlaceholder": "Select receiving site", "purchaseOrder.form.selectSitePlaceholder": "Select site", "purchaseOrder.form.externalReferenceLabel": "External Reference", "purchaseOrder.form.externalReferencePlaceholder": "Supplier order reference", "purchaseOrder.form.orderDateLabel": "Order Date", "purchaseOrder.form.lineItems": "Line Items", "purchaseOrder.form.itemLabel": "Item *", "purchaseOrder.form.itemPlaceholder": "Search items...", "purchaseOrder.form.unitLabel": "Unit *", "purchaseOrder.form.unitPlaceholder": "Select unit", "purchaseOrder.form.quantityLabel": "Quantity *", "purchaseOrder.form.quantityAria": "Quantity", "purchaseOrder.form.unitPriceLabel": "Unit Price *", "purchaseOrder.form.unitPriceAria": "Unit Price", "purchaseOrder.form.creating": "Creating...", "purchaseOrder.form.createSubmit": "Create Purchase Order", "purchaseOrder.form.saving": "Saving...", "purchaseOrder.form.saveChanges": "Save Changes", "purchaseOrder.form.cancel": "Cancel", "purchaseOrder.form.createdToast": "Purchase order created", "purchaseOrder.form.updatedToast": "Purchase order updated", "purchaseOrder.form.noCompanyError": "No company found. Please ensure a company exists.", "purchaseOrder.form.noBaseCurrencyError": "The company has no base currency. Please configure it first.", "purchaseOrder.form.itemRequired": "Item is required", "purchaseOrder.form.quantityRequired": "Quantity is required", "purchaseOrder.form.quantityPositiveInteger": "Quantity must be a positive integer", "purchaseOrder.form.unitPriceRequired": "Unit price is required", "purchaseOrder.form.unitPriceDecimals": "Unit price must have at most 2 decimal places", "purchaseOrder.form.unitRequired": "Unit is required", "purchaseOrder.form.supplierRequired": "Supplier is required", "purchaseOrder.form.receivingSiteRequired": "Receiving site is required", "purchaseOrder.form.atLeastOneLine": "At least one line item is required", // — Amend-specific — "purchaseOrder.amend.purchaseOrderLabel": "Purchase Order", "purchaseOrder.amend.reasonLabel": "Amendment Reason", "purchaseOrder.amend.reasonPlaceholder": "Reason for this amendment (optional)", "purchaseOrder.amend.headerChanges": "Header Changes", "purchaseOrder.amend.headerChangesHint": "Modified fields are recorded in the revision history under this revision number.", "purchaseOrder.amend.orderDate": "Order Date", "purchaseOrder.amend.receivingSite": "Receiving Site", "purchaseOrder.amend.externalReference": "External Reference", "purchaseOrder.amend.existingLines": "Existing Lines", "purchaseOrder.amend.action": "Action", "purchaseOrder.amend.selectAction": "Select action", "purchaseOrder.amend.item": "Item", "purchaseOrder.amend.unit": "Unit", "purchaseOrder.amend.quantity": "Quantity", "purchaseOrder.amend.unitPrice": "Unit Price", "purchaseOrder.amend.newLines": "New Lines", "purchaseOrder.amend.addLine": "Add Line", "purchaseOrder.amend.itemLabel": "Item *", "purchaseOrder.amend.itemPlaceholder": "Search items...", "purchaseOrder.amend.unitLabel": "Unit *", "purchaseOrder.amend.unitPlaceholder": "Select unit", "purchaseOrder.amend.quantityLabel": "Quantity *", "purchaseOrder.amend.unitPriceLabel": "Unit Price *", "purchaseOrder.amend.receivingSiteLabel": "Receiving Site", "purchaseOrder.amend.selectSitePlaceholder": "Select site", "purchaseOrder.amend.amending": "Amending...", "purchaseOrder.amend.submit": "Submit Amendment", "purchaseOrder.amend.cancel": "Cancel", "purchaseOrder.amend.actionKeep": "KEEP", "purchaseOrder.amend.actionModify": "MODIFY", "purchaseOrder.amend.actionRemove": "REMOVE", "purchaseOrder.amend.atLeastOneChange": "At least one change (header field, MODIFY, REMOVE, or ADD) is required", "purchaseOrder.amend.itemRequired": "Item is required", "purchaseOrder.amend.unitRequired": "Unit is required", "purchaseOrder.amend.quantityRequired": "Quantity is required", "purchaseOrder.amend.unitPriceRequired": "Unit price is required", "purchaseOrder.amend.unitPriceDecimals": "Unit price must have at most 2 decimal places", "purchaseOrder.amend.amendedToast": (props: { revision: string }) => `Purchase order amended (revision ${props.revision})`, // — Sales order (titles) — "salesOrder.list.title": "Sales Orders", "salesOrder.list.create": "Create Sales Order", "salesOrder.detail.title": "Sales Order Detail", "salesOrder.detail.loadErrorTitle": "Failed to load sales order", "salesOrder.detail.loadErrorMessage": "An error occurred while fetching the sales order details.", // — Sales order list (table columns) — "salesOrder.field.documentNumber": "Document Number", "salesOrder.field.customer": "Customer", "salesOrder.field.orderStatus": "Order Status", "salesOrder.field.fulfillment": "Fulfillment", "salesOrder.field.billing": "Billing", "salesOrder.field.totalAmount": "Total Amount", "salesOrder.field.orderDate": "Order Date", "salesOrder.field.createdDate": "Created Date", "salesOrder.action.view": "View", // — Sales order detail — "salesOrder.detail.infoTitle": "Sales Order Information", "salesOrder.field.shippingAddress": "Shipping Address", "salesOrder.field.billingAddress": "Billing Address", "salesOrder.field.rejectionReason": "Rejection Reason", "salesOrder.field.closeReason": "Close Reason", "salesOrder.detail.lineItems": "Line Items", "salesOrder.detail.noLineItems": "No line items.", "salesOrder.field.item": "Item", "salesOrder.field.uom": "UoM", "salesOrder.field.ordered": "Ordered", "salesOrder.field.shipped": "Shipped", "salesOrder.field.unitPrice": "Unit Price", "salesOrder.field.subtotal": "Subtotal", "salesOrder.detail.total": "Total", // — Sales order actions (action panel) — "salesOrder.actions.title": "Actions", "salesOrder.actions.back": "Back to Sales Orders", "salesOrder.actions.submit": "Submit", "salesOrder.actions.confirm": "Confirm", "salesOrder.actions.reject": "Reject", "salesOrder.actions.createOutboundShipment": "Create Outbound Shipment", "salesOrder.actions.close": "Close", "salesOrder.actions.cancel": "Cancel", "salesOrder.actions.amend": "Amend", "salesOrder.actions.submittedToast": "Sales order submitted", "salesOrder.actions.confirmedToast": "Sales order confirmed", "salesOrder.actions.rejectedToast": "Sales order rejected", "salesOrder.actions.closedToast": "Sales order closed", "salesOrder.actions.cancelledToast": "Sales order cancelled", "salesOrder.actions.revisionHistory": "Revision History", "salesOrder.actions.edit": "Edit", "salesOrder.actions.rejectDialogTitle": "Reject Sales Order", "salesOrder.actions.rejectDialogDescription": "Provide a reason for rejecting this sales order.", "salesOrder.actions.rejectReasonPlaceholder": "Enter reason for rejection", "salesOrder.actions.rejecting": "Rejecting...", "salesOrder.actions.confirmRejection": "Confirm Rejection", "salesOrder.actions.closeDialogTitle": "Close Sales Order", "salesOrder.actions.closeDialogDescription": "Optionally provide a reason for closing this sales order.", "salesOrder.actions.closeReasonOptional": "Close reason (optional)", "salesOrder.actions.closing": "Closing...", "salesOrder.actions.confirmClose": "Confirm Close", // — Sales order revision history (drawer) — "salesOrder.revision.title": "Revision History", "salesOrder.revision.description": "Header and line changes grouped by revision, newest first.", "salesOrder.revision.empty": "No revision history. This SO has not been amended since creation.", "salesOrder.revision.revisionLabel": (props: { number: string }) => `Revision v${props.number}`, "salesOrder.revision.headerField": "Header Field", "salesOrder.revision.before": "Before", "salesOrder.revision.after": "After", "salesOrder.revision.action": "Action", "salesOrder.revision.item": "Item", "salesOrder.revision.changes": "Changes", "salesOrder.revision.fieldOrderDate": "Order Date", "salesOrder.revision.fieldShippingAddress": "Shipping Address", "salesOrder.revision.fieldBillingAddress": "Billing Address", "salesOrder.revision.fieldItem": "Item", "salesOrder.revision.fieldQuantity": "Quantity", "salesOrder.revision.fieldUnitPrice": "Unit Price", "salesOrder.revision.fieldUnit": "Unit", "salesOrder.revision.fieldDescription": "Description", "salesOrder.revision.fieldRequiresPhysicalFulfillment": "Requires Shipment", // — Sales order create form — "salesOrder.form.createTitle": "Create Sales Order", "salesOrder.form.editTitle": "Edit Sales Order", "salesOrder.form.saving": "Saving...", "salesOrder.form.saveChanges": "Save Changes", "salesOrder.form.updatedToast": "Sales order updated", "salesOrder.form.atLeastOneLine": "At least one line is required", "salesOrder.form.amendTitle": "Amend Sales Order", "salesOrder.form.customerLabel": "Customer *", "salesOrder.form.orderDateLabel": "Order Date", "salesOrder.form.shippingAddressLabel": "Shipping Address", "salesOrder.form.shippingAddressPlaceholder": "Required before the order can be submitted", "salesOrder.form.billingAddressLabel": "Billing Address", "salesOrder.form.billingAddressPlaceholder": "Optional billing address", "salesOrder.form.linesLabel": "Lines *", "salesOrder.form.qtyPlaceholder": "Qty", "salesOrder.form.unitPricePlaceholder": "Unit price", "salesOrder.form.removeLineAria": "Remove line", "salesOrder.form.addLine": "Add line", "salesOrder.form.total": (props: { amount: string }) => `Total: ${props.amount}`, "salesOrder.form.creating": "Creating...", "salesOrder.form.createSubmit": "Create Sales Order", "salesOrder.form.cancel": "Cancel", "salesOrder.form.createdToast": "Sales order created", "salesOrder.form.customerRequired": "Customer is required", "salesOrder.form.itemRequired": "Item is required", "salesOrder.form.quantityPositive": "Quantity must be positive", "salesOrder.form.unitPriceRequired": "Unit price is required", // — Amend-specific — "salesOrder.amend.salesOrderLabel": "Sales Order", "salesOrder.amend.reasonLabel": "Amendment Reason", "salesOrder.amend.reasonPlaceholder": "Reason for this amendment (optional)", "salesOrder.amend.headerChanges": "Header Changes", "salesOrder.amend.headerChangesHint": "Modified fields are recorded in the revision history under this revision number.", "salesOrder.amend.orderDate": "Order Date", "salesOrder.amend.shippingAddress": "Shipping Address", "salesOrder.amend.billingAddress": "Billing Address", "salesOrder.amend.existingLines": "Existing Lines", "salesOrder.amend.action": "Action", "salesOrder.amend.selectAction": "Select action", "salesOrder.amend.item": "Item", "salesOrder.amend.unit": "Unit", "salesOrder.amend.quantity": "Quantity", "salesOrder.amend.unitPrice": "Unit Price", "salesOrder.amend.newLines": "New Lines", "salesOrder.amend.addLine": "Add Line", "salesOrder.amend.itemLabel": "Item *", "salesOrder.amend.itemPlaceholder": "Search items...", "salesOrder.amend.unitLabel": "Unit *", "salesOrder.amend.unitPlaceholder": "Select unit", "salesOrder.amend.quantityLabel": "Quantity *", "salesOrder.amend.unitPriceLabel": "Unit Price *", "salesOrder.amend.amending": "Amending...", "salesOrder.amend.submit": "Submit Amendment", "salesOrder.amend.cancel": "Cancel", "salesOrder.amend.actionKeep": "KEEP", "salesOrder.amend.actionModify": "MODIFY", "salesOrder.amend.actionRemove": "REMOVE", "salesOrder.amend.atLeastOneChange": "At least one change (header field, MODIFY, REMOVE, or ADD) is required", "salesOrder.amend.itemRequired": "Item is required", "salesOrder.amend.unitRequired": "Unit is required", "salesOrder.amend.quantityRequired": "Quantity is required", "salesOrder.amend.unitPriceRequired": "Unit price is required", "salesOrder.amend.unitPriceDecimals": "Unit price must have at most 2 decimal places", "salesOrder.amend.amendedToast": (props: { revision: string }) => `Sales order amended (revision ${props.revision})`, // — Inbound shipment — "inboundShipment.list.title": "Inbound Shipments", "inboundShipment.list.create": "Create Inbound Shipment", "inboundShipment.detail.title": "Inbound Shipment Detail", "inboundShipment.detail.loadErrorTitle": "Failed to load inbound shipment", "inboundShipment.detail.loadErrorMessage": "An error occurred while fetching the inbound shipment details.", "inboundShipment.edit.title": "Edit Inbound Shipment", "inboundShipment.create.title": "Create Inbound Shipment", "inboundShipment.detail.tabLines": "Lines", "inboundShipment.detail.tabJournal": "Journal", "inboundShipment.detail.infoTitle": "Inbound Shipment Information", "inboundShipment.detail.lineItems": "Line Items", "inboundShipment.detail.noLineItems": "No line items.", "inboundShipment.field.shipmentNumber": "Shipment Number", "inboundShipment.field.receivingSite": "Receiving Site", "inboundShipment.field.receiptDate": "Receipt Date", "inboundShipment.field.lines": "Lines", "inboundShipment.field.openQty": "Open Qty", "inboundShipment.field.sku": "SKU", "inboundShipment.field.ordered": "Ordered", "inboundShipment.field.toReceive": "To Receive", "inboundShipment.field.thisReceipt": "This Receipt", "inboundShipment.field.openRemaining": "Open Remaining", "inboundShipment.actions.back": "Back to Inbound Shipments", "inboundShipment.actions.edit": "Edit Inbound Shipment", "inboundShipment.actions.settle": "Post / Settle", "inboundShipment.actions.cancel": "Cancel Inbound Shipment", "inboundShipment.actions.createRemaining": "Create GR for Remaining", "inboundShipment.actions.viewPurchaseOrder": "View Purchase Order", "inboundShipment.actions.postedToast": "Inbound shipment posted", "inboundShipment.actions.cancelledToast": "Inbound shipment cancelled", "inboundShipment.actions.remainingCreatedToast": "Draft GR created for remaining quantities", "inboundShipment.actions.fullyReceivedToast": "PO is fully received — no remaining quantities", "inboundShipment.journal.draftHint": "Posting this shipment books the receipt's costing journal (Dr Inventory / Cr GR/IR Clearing, etc.).", "inboundShipment.journal.noEntries": "No journal entries are linked to this shipment.", "inboundShipment.journal.account": "Account", "inboundShipment.journal.debit": "Debit", "inboundShipment.journal.credit": "Credit", "inboundShipment.edit.receiptDate": "Receipt Date", "inboundShipment.edit.receivedLines": "Received Lines", "inboundShipment.edit.linesEdited": (props: { count: number }) => `${props.count} line${props.count === 1 ? "" : "s"} edited`, "inboundShipment.edit.poLineRef": "PO Line Ref", "inboundShipment.edit.receivedQty": "Received Qty", "inboundShipment.edit.receivedQtyAria": "Received Quantity", "inboundShipment.edit.uom": "UoM", "inboundShipment.edit.onlyDraftEditable": "Only inbound shipments in DRAFT status can be edited.", "inboundShipment.edit.updatedToast": "Inbound shipment updated", "inboundShipment.create.selectPO": "Select Purchase Order", "inboundShipment.create.selectPODescription": "Browse and select a purchase order with open items", "inboundShipment.create.filterPlaceholder": "Filter by supplier, PO number, SKU, item name...", "inboundShipment.create.noMatchingPO": "No matching purchase orders.", "inboundShipment.create.colSupplier": "Supplier", "inboundShipment.create.colPONumber": "PO Number", "inboundShipment.create.colOrderDate": "Order Date", "inboundShipment.create.colOpenQty": "Open Qty", "inboundShipment.create.remaining": (props: { qty: number }) => `${props.qty} remaining`, "inboundShipment.create.select": "Select", "inboundShipment.create.purchaseOrder": "Purchase Order", "inboundShipment.create.searchPlaceholder": "Search by supplier or PO number...", "inboundShipment.create.browse": "Browse", "inboundShipment.create.supplierLabel": "Supplier:", "inboundShipment.create.receiptDate": "Receipt Date", "inboundShipment.create.colItem": "Item", "inboundShipment.create.colOrdered": "Ordered", "inboundShipment.create.colOtherReceipts": "Other Receipts", "inboundShipment.create.colRemaining": "Remaining", "inboundShipment.create.colReceiveQty": "Receive Qty", "inboundShipment.create.colUom": "UoM", "inboundShipment.create.allReceived": "All items on this PO have been fully received. No PO lines to receive.", "inboundShipment.create.submit": "Create Inbound Shipment", "inboundShipment.create.errorSelectPO": "Select a purchase order first.", "inboundShipment.create.errorNoQty": "At least one line must have a quantity greater than 0", "inboundShipment.create.createdToast": "Inbound shipment created", "inboundShipment.form.purchaseOrderRequired": "Purchase Order is required", "inboundShipment.form.receiptDateRequired": "Receipt Date is required", "inboundShipment.form.atLeastOneLine": "At least one line is required", "inboundShipment.form.itemRequired": "Item is required", "inboundShipment.form.quantityRequired": "Quantity is required", // — Payment — "payment.list.title": "Payments", "payment.list.create": "Create Payment", "payment.detail.title": "Payment Detail", "payment.detail.loadErrorTitle": "Failed to load payment", "payment.detail.loadErrorMessage": "An error occurred while fetching the payment details.", "payment.create.title": "Create Payment", "payment.detail.tabDetails": "Details", "payment.detail.tabJournal": "Journal", "payment.detail.infoTitle": "Payment Information", "payment.detail.settlements": "Settlements", "payment.detail.noSettlements": "No settlements.", "payment.field.paymentDate": "Payment Date", "payment.field.supplier": "Supplier", "payment.field.paymentAccount": "Payment Account", "payment.field.amount": "Amount", "payment.field.currency": "Currency", "payment.field.postedAt": "Posted At", "payment.field.invoice": "Invoice", "payment.field.dueDate": "Due Date", "payment.field.scheduled": "Scheduled", "payment.field.paid": "Paid", "payment.detail.creditSuffix": " (Credit)", "payment.actions.back": "Back to Payments", "payment.actions.post": "Post", "payment.actions.cancel": "Cancel", "payment.actions.reverse": "Reverse", "payment.actions.postedToast": "Payment posted", "payment.actions.cancelledToast": "Payment cancelled", "payment.actions.reversedToast": "Payment reversed", "payment.actions.postDialogTitle": "Post payment", "payment.actions.postDialogDescription": "Post this payment. A journal entry (Dr Accounts Payable / Cr Cash) is booked to the general ledger and the targeted due-schedule lines are settled.", "payment.actions.posting": "Posting...", "payment.actions.confirmPost": "Confirm posting", "payment.actions.cancelDialogTitle": "Cancel payment", "payment.actions.cancelDialogDescription": "Cancel this draft payment. The general ledger is not affected (it has not been posted).", "payment.actions.keep": "Keep", "payment.actions.cancelling": "Cancelling...", "payment.actions.confirmCancel": "Confirm cancel", "payment.actions.reverseDialogTitle": "Reverse payment", "payment.actions.reverseDialogDescription": "Reverse this posted payment. A reversing entry is booked on the given date and the settled due-schedule lines become open again.", "payment.actions.reversalDate": "Reversal Date", "payment.actions.reversing": "Reversing...", "payment.actions.confirmReversal": "Confirm reversal", "payment.journal.draftHint": "Posting this payment books a journal entry (Dr Accounts Payable / Cr Cash).", "payment.journal.noEntries": "No journal entries are linked to this payment.", "payment.journal.account": "Account", "payment.journal.debit": "Debit", "payment.journal.credit": "Credit", "payment.create.method": "Method *", "payment.create.modeBySupplier": "By Supplier", "payment.create.modeByInvoice": "By Invoice", "payment.create.supplierRequired": "Supplier *", "payment.create.invoiceRequired": "Invoice *", "payment.create.selectInvoicePlaceholder": "Select an open invoice", "payment.create.supplierAuto": "Supplier (auto)", "payment.create.paymentAccountLabel": "Payment Account (Cash) *", "payment.create.paymentAccountPlaceholder": "Select the cash/bank account", "payment.create.paymentDateLabel": "Payment Date *", "payment.create.itemsToSettle": "Items to Settle (Open)", "payment.create.selectSupplierHint": "Select a supplier to see its open invoices.", "payment.create.selectInvoiceHint": "Select an invoice to see the items to settle.", "payment.create.noOpenPayables": "No open (posted) payables.", "payment.create.colInvoice": "Invoice", "payment.create.colDueDate": "Due Date", "payment.create.colOpenBalance": "Open Balance", "payment.create.colPayment": "Payment", "payment.create.paymentTotal": "Payment Total", "payment.create.settleAria": (props: { doc: string }) => `Settle ${props.doc}`, "payment.create.submit": "Create Payment", "payment.create.errorSelectSupplierInvoice": "Select a supplier and an open invoice", "payment.create.errorSelectItem": "Select at least one item to settle", "payment.create.createdToast": "Payment created", "payment.form.paymentAccountRequired": "Payment account is required", "payment.form.paymentDateRequired": "Payment date is required", // — Outbound shipment — "outboundShipment.list.title": "Outbound Shipments", "outboundShipment.list.create": "Create Outbound Shipment", "outboundShipment.detail.title": "Outbound Shipment Detail", "outboundShipment.detail.loadErrorTitle": "Failed to load outbound shipment", "outboundShipment.detail.loadErrorMessage": "An error occurred while fetching the outbound shipment details.", "outboundShipment.detail.tabLines": "Lines", "outboundShipment.detail.tabJournal": "Journal", "outboundShipment.journal.draftHint": "Posting this shipment books the shipment's costing journal (Dr COGS / Cr Inventory, etc.).", "outboundShipment.journal.noEntries": "No journal entries are linked to this shipment.", "outboundShipment.journal.account": "Account", "outboundShipment.journal.debit": "Debit", "outboundShipment.journal.credit": "Credit", "outboundShipment.create.title": "Create Outbound Shipment", "outboundShipment.detail.infoTitle": "Outbound Shipment Information", "outboundShipment.detail.lines": "Lines", "outboundShipment.detail.noLines": "No lines.", "outboundShipment.field.documentNumber": "Document Number", "outboundShipment.field.source": "Source", "outboundShipment.field.issueDate": "Issue Date", "outboundShipment.field.item": "Item", "outboundShipment.field.storageLocation": "Storage Location", "outboundShipment.field.quantity": "Quantity", "outboundShipment.field.createdDate": "Created Date", "outboundShipment.actions.back": "Back to Outbound Shipments", "outboundShipment.actions.settle": "Post / Settle", "outboundShipment.actions.cancel": "Cancel", "outboundShipment.actions.postedToast": "Outbound shipment posted", "outboundShipment.actions.cancelledToast": "Outbound shipment cancelled", "outboundShipment.create.salesOrderLabel": "Sales Order *", "outboundShipment.create.salesOrderPlaceholder": "Select a confirmed sales order", "outboundShipment.create.issueFromLabel": "Issue From (Storage Location) *", "outboundShipment.create.issueDateLabel": "Issue Date", "outboundShipment.create.openLinesTitle": "Open lines to issue (from the sales order)", "outboundShipment.create.colItem": "Item", "outboundShipment.create.colOrdered": "Ordered", "outboundShipment.create.colShipped": "Shipped", "outboundShipment.create.colOpen": "Open", "outboundShipment.create.issueHint": "Every open line above is issued from the selected location. Posting the goods issue reduces stock and advances the sales order.", "outboundShipment.create.submit": "Create Outbound Shipment", "outboundShipment.create.createdToast": "Outbound shipment created", "outboundShipment.form.salesOrderRequired": "Sales order is required", "outboundShipment.form.storageLocationRequired": "Storage location is required", // — Stock level — "stockLevel.list.title": "Stock Levels", "stockLevel.field.sku": "SKU", "stockLevel.field.item": "Item", "stockLevel.field.site": "Site", "stockLevel.field.onHand": "On Hand", "stockLevel.field.reserved": "Reserved", "stockLevel.field.blocked": "Blocked", "stockLevel.field.available": "Available", "stockLevel.list.showCost": "Show cost", "stockLevel.list.searchTruncated": (props: { total: number; limit: number }) => `Search matched ${props.total} items; showing stock for the first ${props.limit} only. Refine your search to narrow the result.`, "stockLevel.list.loadError": (props: { message: string }) => `Error loading stock levels: ${props.message}`, "stockLevel.list.selected": (props: { count: number }) => `${props.count} selected`, "stockLevel.list.clear": "Clear", "stockLevel.list.transfer": "Transfer", "stockLevel.list.transferTooltipSite": "Select a single site to transfer from", "stockLevel.list.transferTooltipItem": "Select at least one item", "stockLevel.list.allSites": "All sites", "stockLevel.list.filterBySite": "Filter by site", "stockLevel.list.searchPlaceholder": "Search SKU or item name", "stockLevel.cost.title": (props: { sku: string; itemName: string }) => `Cost — ${props.sku}${props.itemName ? ` · ${props.itemName}` : ""}`, "stockLevel.cost.site": (props: { siteName: string }) => `Site: ${props.siteName}`, "stockLevel.cost.loading": "Loading…", "stockLevel.cost.valuationPolicyTitle": "Inventory Valuation Policy", "stockLevel.cost.policy": "Policy", "stockLevel.cost.costingMethod": "Costing Method", "stockLevel.cost.company": "Company", "stockLevel.cost.assigned": "Assigned", "stockLevel.cost.noPolicy": "No inventory valuation policy assigned yet — the company default is auto-assigned on this item's first valuation-affecting movement (the standard-cost history is shown below in the meantime).", "stockLevel.cost.sectionStandard": "Standard Costs (newest first)", "stockLevel.cost.sectionFifo": "Cost Layers (FIFO · newest first)", "stockLevel.cost.sectionAverage": "Moving Average History (newest first)", "stockLevel.cost.eventReceipt": "Receipt", "stockLevel.cost.eventIssue": "Issue", "stockLevel.cost.version": "Version", "stockLevel.cost.unitCost": "Unit Cost", "stockLevel.cost.published": "Published", "stockLevel.cost.received": "Received", "stockLevel.cost.receivedQty": "Received Qty", "stockLevel.cost.remainingQty": "Remaining Qty", "stockLevel.cost.sequence": "Sequence", "stockLevel.cost.type": "Type", "stockLevel.cost.quantity": "Quantity", "stockLevel.cost.movingAvgCost": "Moving Avg Cost", "stockLevel.cost.qtyAfter": "Qty After", // — Transfer order — "transferOrder.list.title": "Transfer Orders", "transferOrder.list.create": "Create Transfer Order", "transferOrder.detail.title": "Transfer Order Detail", "transferOrder.detail.loadErrorTitle": "Failed to load transfer order", "transferOrder.detail.loadErrorMessage": "An error occurred while fetching the transfer order details.", "transferOrder.edit.title": "Edit Transfer Order", "transferOrder.create.title": "Create Transfer Order", "transferOrder.detail.infoTitle": "Transfer Order Information", "transferOrder.detail.notes": "Notes", "transferOrder.detail.lineItems": "Line Items", "transferOrder.detail.noLineItems": "No line items.", "transferOrder.field.documentNumber": "Document Number", "transferOrder.field.source": "Source", "transferOrder.field.destination": "Destination", "transferOrder.field.plannedShipment": "Planned Shipment", "transferOrder.field.expectedReceipt": "Expected Receipt", "transferOrder.field.createdDate": "Created Date", "transferOrder.field.updatedDate": "Updated Date", "transferOrder.field.closedAt": "Closed At", "transferOrder.field.item": "Item", "transferOrder.field.uom": "UoM", "transferOrder.field.orderedQty": "Ordered Qty", "transferOrder.field.shipped": "Shipped", "transferOrder.field.received": "Received", "transferOrder.actions.back": "Back to Transfer Orders", "transferOrder.actions.edit": "Edit", "transferOrder.actions.open": "Open", "transferOrder.actions.ship": "Ship", "transferOrder.actions.receive": "Receive", "transferOrder.actions.close": "Close", "transferOrder.actions.openedToast": "Transfer order opened", "transferOrder.actions.shippedToast": "Transfer order shipped", "transferOrder.actions.receivedToast": "Transfer order received", "transferOrder.actions.closedToast": "Transfer order closed", "transferOrder.form.sourceLabel": "Source Site (ship from) *", "transferOrder.form.destinationLabel": "Destination Site (receive at) *", "transferOrder.form.plannedShipmentLabel": "Planned Shipment Date *", "transferOrder.form.expectedReceiptLabel": "Expected Receipt Date *", "transferOrder.form.notesLabel": "Notes", "transferOrder.form.notesPlaceholder": "Operator notes", "transferOrder.form.lineItems": "Line Items", "transferOrder.form.addLine": "Add Line", "transferOrder.form.colItem": "Item", "transferOrder.form.colQty": "Qty", "transferOrder.form.colUnit": "Unit", "transferOrder.form.qtyPlaceholder": "1", "transferOrder.form.noLines": 'No lines. Click "Add Line" to start.', "transferOrder.form.removeLineAria": "Remove line", "transferOrder.create.submit": "Create Transfer Order", "transferOrder.create.createdToast": "Transfer order created", "transferOrder.edit.updatedToast": "Transfer order updated", "transferOrder.form.checkingStock": "Still checking source stock availability — please retry.", "transferOrder.form.notInStock": "Not in stock at the source site", "transferOrder.form.sourceSiteRequired": "Source Site is required", "transferOrder.form.destinationSiteRequired": "Destination Site is required", "transferOrder.form.plannedShipmentDateRequired": "Planned shipment date is required", "transferOrder.form.expectedReceiptDateRequired": "Expected receipt date is required", "transferOrder.form.atLeastOneLine": "At least one line is required", "transferOrder.form.sourceDifferentFromDestination": "Source and destination must be different sites", "transferOrder.form.expectedReceiptNotBeforePlanned": "Expected receipt date cannot be before the planned shipment date", "transferOrder.form.receiptBeforeShipment": "Expected receipt date cannot be before the planned shipment date", "transferOrder.form.itemRequired": "Item is required", "transferOrder.form.orderedQuantityRequired": "Ordered quantity is required", "transferOrder.form.quantityMustBeNumber": "Quantity must be a number", "transferOrder.form.quantityMustBePositive": "Quantity must be greater than 0", "transferOrder.warning.notInStock": "Not in stock at the source site — choose an item stocked here before saving.", "transferOrder.warning.exceedsStock": (props: { available: string }) => `Exceeds available stock at the source site (${props.available} available)`, // — Home — "page.home.title": "Home", // — General Ledger: Accounting Period — "accountingPeriod.list.title": "Accounting Periods", "accountingPeriod.list.create": "Create Accounting Period", "accountingPeriod.detail.title": "Accounting Period Detail", "accountingPeriod.detail.loadErrorTitle": "Failed to load accounting period", "accountingPeriod.detail.loadErrorMessage": "An error occurred while fetching the accounting period details.", "accountingPeriod.create.title": "Create Accounting Period", // — General Ledger: Fiscal Year — "fiscalYear.list.title": "Fiscal Years", "fiscalYear.list.create": "Create Fiscal Year", "fiscalYear.create.title": "Create Fiscal Year", // — General Ledger: Journal Entry — "journalEntry.list.title": "Journal Entries", "journalEntry.list.create": "Create Journal Entry", "journalEntry.detail.title": "Journal Entry Detail", "journalEntry.detail.loadErrorTitle": "Failed to load journal entry", "journalEntry.detail.loadErrorMessage": "An error occurred while fetching the journal entry details.", "journalEntry.create.title": "Create Journal Entry", // — General Ledger: Trial Balance — "trialBalance.list.title": "Trial Balance", // — Inventory: Item Valuation — "itemValuation.field.item": "Item", "itemValuation.field.company": "Company", "itemValuation.field.valuationPolicy": "Inventory Valuation Policy", "itemValuation.field.createdAt": "Created At", "itemValuation.action.view": "View", "itemValuation.list.title": "Item Valuations", "itemValuation.list.create": "Assign Valuation Policy", "itemValuation.detail.title": "Item Valuation Detail", "itemValuation.detail.loadErrorTitle": "Failed to load item valuation", "itemValuation.detail.loadErrorMessage": "An error occurred while fetching the item valuation details.", "itemValuation.create.title": "Assign Valuation Policy", "itemValuation.detail.infoTitle": "Item Valuation", "itemValuation.actions.title": "Actions", "itemValuation.actions.back": "Back to Item Valuations", "itemValuation.form.itemLabel": "Item *", "itemValuation.form.companyLabel": "Company *", "itemValuation.form.companyPlaceholder": "Select a company", "itemValuation.form.policyLabel": "Inventory Valuation Policy *", "itemValuation.form.policyPlaceholder": "Select a policy", "itemValuation.form.policyCompanyFirstPlaceholder": "Select a company first", "itemValuation.form.policyDescription": "Only policies belonging to the selected company can be assigned.", "itemValuation.form.assigning": "Assigning...", "itemValuation.form.submit": "Assign Valuation Policy", "itemValuation.form.cancel": "Cancel", "itemValuation.form.assignedToast": "Inventory valuation policy assigned", "itemValuation.form.companyRequired": "Company is required", "itemValuation.form.policyRequired": "Inventory valuation policy is required", "itemValuation.form.itemRequired": "Item is required", // — Inventory: Valuation Policy — "valuationPolicy.field.name": "Name", "valuationPolicy.field.company": "Company", "valuationPolicy.field.costingMethod": "Costing Method", "valuationPolicy.field.default": "Default", "valuationPolicy.field.defaultYes": "Default", "valuationPolicy.field.created": "Created", "valuationPolicy.list.title": "Inventory Valuation Policies", "valuationPolicy.list.create": "New Policy", "valuationPolicy.create.drawerTitle": "Create Inventory Valuation Policy", "valuationPolicy.create.nameLabel": "Name *", "valuationPolicy.create.namePlaceholder": "e.g. Standard Cost (Tailor)", "valuationPolicy.create.companyLabel": "Company *", "valuationPolicy.create.companyPlaceholder": "Select a company", "valuationPolicy.create.costingMethodLabel": "Costing Method *", "valuationPolicy.create.costingMethodPlaceholder": "Select a costing method", "valuationPolicy.create.costingMethodDescription": "Standard: value at a per-item standard cost and post purchase price variance (PPV) on receipts / FIFO: consume cost layers oldest-first / Average: issue at a moving average. FIFO and Average value at actual cost and never post PPV.", "valuationPolicy.create.isDefaultLabel": "Set as the company default", "valuationPolicy.create.isDefaultDescription": "When default, items without an explicit assignment are auto-assigned this policy on their first valuation-affecting movement (at most one default per company).", "valuationPolicy.create.no": "No", "valuationPolicy.create.yes": "Yes", "valuationPolicy.create.cancel": "Cancel", "valuationPolicy.create.creating": "Creating...", "valuationPolicy.create.submit": "Create Inventory Valuation Policy", "valuationPolicy.create.createdToast": "Inventory valuation policy created", "valuationPolicy.create.nameRequired": "Name is required", "valuationPolicy.create.companyRequired": "Company is required", "valuationPolicy.create.accountRequired": "Account is required", // — Master Data: Chart of Accounts — "account.list.title": "Chart of Accounts", "account.field.code": "Code", "account.field.name": "Name", "account.field.type": "Type", "account.field.status": "Status", "account.list.create": "Create Account", "account.create.title": "Create Account", "account.detail.title": "Account Detail", "account.detail.loadErrorTitle": "Failed to load account", "account.detail.loadErrorMessage": "An error occurred while fetching the account details.", "account.detail.infoTitle": "Account Information", "account.edit.title": "Edit Account", "account.edit.loadErrorTitle": "Failed to load account", "account.edit.loadErrorMessage": "An error occurred while fetching the account details.", "account.field.company": "Company", "account.field.createdAt": "Created At", "account.actions.title": "Actions", "account.actions.back": "Back to Accounts", "account.actions.edit": "Edit Account", "account.actions.deactivate": "Deactivate", "account.actions.reactivate": "Reactivate", "account.actions.deactivatedToast": "Account deactivated", "account.actions.reactivatedToast": "Account reactivated", "account.form.companyLabel": "Company", "account.form.companyPlaceholder": "Select company", "account.form.codeLabel": "Code *", "account.form.codePlaceholder": "e.g. 1200", "account.form.nameLabel": "Name *", "account.form.namePlaceholder": "Enter account name", "account.form.typeLabel": "Type *", "account.form.typePlaceholder": "Select type", "account.form.companyRequired": "Company is required", "account.form.codeRequired": "Code is required", "account.form.nameRequired": "Name is required", "account.form.typeRequired": "Type is required", "account.form.creating": "Creating...", "account.form.createSubmit": "Create Account", "account.form.saving": "Saving...", "account.form.saveChanges": "Save Changes", "account.form.cancel": "Cancel", "account.form.createdToast": "Account created", "account.form.updatedToast": "Account updated", "account.type.ASSET": "Asset", "account.type.LIABILITY": "Liability", "account.type.EQUITY": "Equity", "account.type.REVENUE": "Revenue", "account.type.EXPENSE": "Expense", "account.action.view": "View", // — Master Data: Company — "company.list.title": "Companies", "company.field.legalName": "Legal Name", "company.field.taxId": "Tax ID", "company.field.baseCurrency": "Base Currency", "company.field.status": "Status", "company.field.createdDate": "Created Date", "company.valuationPolicy.name": "Name", "company.valuationPolicy.costingMethod": "Costing Method", "company.valuationPolicy.created": "Created", "company.list.create": "Create Company", "company.detail.title": "Company Detail", "company.detail.loadErrorTitle": "Failed to load company", "company.detail.loadErrorMessage": "An error occurred while fetching the company details.", "company.create.title": "Create Company", "company.edit.title": "Edit Company", "company.edit.loadErrorTitle": "Failed to load company", "company.edit.loadErrorMessage": "An error occurred while fetching the company details.", // — Company detail — "company.detail.infoTitle": "Company Information", "company.field.registrationNumber": "Registration Number", "company.field.street": "Street", "company.field.city": "City", "company.field.state": "State", "company.field.postalCode": "Postal Code", "company.field.country": "Country", "company.field.createdAt": "Created At", // — Company actions — "company.actions.title": "Actions", "company.actions.back": "Back to Companies", "company.actions.edit": "Edit Company", // — Company valuation actions — "company.valuation.actions.changeDefault": "Change default costing method", "company.valuation.actions.createPolicy": "Create inventory valuation policy", // — Change default valuation policy modal — "company.valuation.modal.title": "Change default inventory valuation policy", "company.valuation.modal.description": "Select the policy to use as this company's default. Each company has at most one default.", "company.valuation.modal.currentDefault": "Current default:", "company.valuation.modal.notSet": "Not set", "company.valuation.modal.loading": "Loading…", "company.valuation.modal.selectPlaceholder": "Select the new default policy", "company.valuation.modal.cancel": "Cancel", "company.valuation.modal.changing": "Changing...", "company.valuation.modal.setDefault": "Set as default", "company.valuation.modal.changedToast": "Default inventory valuation policy changed", // — Valuation policy drawer — "valuationPolicy.drawer.title": "Inventory Valuation Policy", "valuationPolicy.drawer.editTitle": "Edit Inventory Valuation Policy", "valuationPolicy.drawer.name": "Name", "valuationPolicy.drawer.costingMethod": "Costing Method", "valuationPolicy.drawer.companyDefault": "Company Default", "valuationPolicy.drawer.yes": "Yes", "valuationPolicy.drawer.no": "No", "valuationPolicy.drawer.postingAccounts": "Posting Accounts", "valuationPolicy.drawer.close": "Close", "valuationPolicy.drawer.edit": "Edit", "valuationPolicy.drawer.costingMethodReadonly": "The costing method cannot be changed (create a new policy to switch method).", "valuationPolicy.drawer.namePlaceholder": "Enter a policy name", "valuationPolicy.drawer.nameLabel": "Name *", "valuationPolicy.drawer.setDefault": "Set as the company default", "valuationPolicy.drawer.cancel": "Cancel", "valuationPolicy.drawer.saving": "Saving...", "valuationPolicy.drawer.saveChanges": "Save Changes", "valuationPolicy.drawer.updatedToast": "Inventory valuation policy updated", "valuationPolicy.drawer.loading": "Loading…", "valuationPolicy.drawer.nameRequired": "Name is required", "valuationPolicy.drawer.accountRequired": "Account is required", "valuationPolicy.drawer.accountInventory": "Inventory Account", "valuationPolicy.drawer.accountAccrual": "Accrual Account (GR/IR)", "valuationPolicy.drawer.accountCogs": "COGS Account", "valuationPolicy.drawer.accountPpv": "PPV Account", "valuationPolicy.drawer.accountAdjustment": "Adjustment Account", "valuationPolicy.drawer.accountStdCostAdj": "Standard Cost Adjustment Account", "valuationPolicy.drawer.accountInvoicePriceVar": "Invoice Price Variance Account", "valuationPolicy.drawer.accountConsumedPriceVar": "Consumed Price Variance Account", // — Company edit form — "company.form.legalNameLabel": "Legal Name *", "company.form.legalNamePlaceholder": "Enter legal name", "company.form.taxIdLabel": "Tax ID", "company.form.taxIdPlaceholder": "Enter tax ID", "company.form.registrationNumberLabel": "Registration Number", "company.form.registrationNumberPlaceholder": "Enter registration number", "company.form.streetLabel": "Street", "company.form.streetPlaceholder": "Enter street", "company.form.cityLabel": "City", "company.form.cityPlaceholder": "Enter city", "company.form.stateLabel": "State", "company.form.statePlaceholder": "Enter state (optional)", "company.form.postalCodeLabel": "Postal Code", "company.form.postalCodePlaceholder": "Enter postal code", "company.form.countryLabel": "Country", "company.form.countryPlaceholder": "Enter country", "company.form.saving": "Saving...", "company.form.saveChanges": "Save Changes", "company.form.cancel": "Cancel", "company.form.updatedToast": "Company updated", "company.form.legalNameRequired": "Legal name is required", // — Company create form — "company.form.baseCurrencyLabel": "Base Currency", "company.form.currencyPlaceholder": "Select currency", "company.form.creating": "Creating...", "company.form.createSubmit": "Create Company", "company.form.createdToast": "Company created", "company.form.baseCurrencyRequired": "Base currency is required", "company.form.streetRequired": "Street is required", "company.form.cityRequired": "City is required", "company.form.postalCodeRequired": "Postal code is required", "company.form.countryRequired": "Country is required", // — Master Data: Item — "item.field.sku": "SKU", "item.field.name": "Name", "item.field.unit": "Unit", "item.field.status": "Status", "item.field.createdDate": "Created Date", "item.field.barcode": "Barcode", "item.list.title": "Items", "item.list.create": "Create Item", "item.detail.title": "Item Detail", "item.detail.loadErrorTitle": "Failed to load item", "item.detail.loadErrorMessage": "An error occurred while fetching the item details.", "item.detail.infoTitle": "Item Information", "item.create.title": "Create Item", // — Item detail tabs — "item.tab.common": "Shared details", "item.tab.purchasing": "Procurement settings", "item.tab.selling": "Sales settings", "item.tab.valuation": "Valuation settings", // — Item actions — "item.actions.title": "Actions", "item.actions.back": "Back to Items", "item.actions.edit": "Edit Item", "item.actions.setValuation": "Set item valuation", // — Item edit modal — "item.modal.editTitle": "Edit Item", "item.modal.editDescription": "Edit the item's basic information.", "item.modal.loading": "Loading…", // — Item form — "item.form.skuLabel": "SKU *", "item.form.skuPlaceholder": "Enter SKU", "item.form.nameLabel": "Name *", "item.form.namePlaceholder": "Enter name", "item.form.editNameLabel": "Name *", "item.form.editNamePlaceholder": "Enter item name", "item.form.barcodeLabel": "Barcode", "item.form.barcodePlaceholder": "Enter a barcode (optional)", "item.form.unitLabel": "Unit *", "item.form.unitPlaceholder": "Select unit", "item.form.creating": "Creating...", "item.form.createSubmit": "Create Item", "item.form.saving": "Saving...", "item.form.saveChanges": "Save Changes", "item.form.cancel": "Cancel", "item.form.createdToast": "Item created", "item.form.updatedToast": "Item updated", "item.form.skuRequired": "SKU is required", "item.form.nameRequired": "Name is required", "item.form.unitRequired": "Unit is required", // — Item procurement settings — "item.purchasing.title": "Procurement", "item.purchasing.notAdopted": "Not available for procurement. This item cannot be added to purchase order lines.", "item.purchasing.adopt": "Enable Procurement", "item.purchasing.adoptTitle": "Enable Procurement", "item.purchasing.editTitle": "Edit Procurement Settings", "item.purchasing.dialogDescription": "Changes do not affect existing purchase orders; only new order lines pick up the updated values.", "item.purchasing.receiptExpected": "Goods Receipt Expected", "item.purchasing.receiptExpectedHint": "Whether ordering this item is expected to produce an inbound shipment.", "item.purchasing.yes": "Yes", "item.purchasing.no": "No", "item.purchasing.save": "Save", "item.purchasing.withdraw": "Disable Procurement", "item.purchasing.withdrawConfirmTitle": "Disable procurement for this item?", "item.purchasing.withdrawConfirmMessage": "This item can no longer be added to purchase order lines. Existing purchase orders are not affected.", "item.purchasing.adoptedToast": "Procurement enabled", "item.purchasing.updatedToast": "Procurement settings updated", "item.purchasing.withdrawnToast": "Procurement disabled", // — Item sales settings — "item.selling.title": "Sales", "item.selling.notAdopted": "Not available for sales. This item cannot be added to sales order lines.", "item.selling.adopt": "Enable Sales", "item.selling.adoptTitle": "Enable Sales", "item.selling.editTitle": "Edit Sales Settings", "item.selling.dialogDescription": "Changes do not affect existing sales orders; only new order lines pick up the updated values.", "item.selling.shipmentExpected": "Outbound Shipment Expected", "item.selling.shipmentExpectedHint": "Whether selling this item is expected to produce an outbound shipment.", "item.selling.yes": "Yes", "item.selling.no": "No", "item.selling.save": "Save", "item.selling.withdraw": "Disable Sales", "item.selling.withdrawConfirmTitle": "Disable sales for this item?", "item.selling.withdrawConfirmMessage": "This item can no longer be added to sales order lines. Existing sales orders are not affected.", "item.selling.adoptedToast": "Sales enabled", "item.selling.updatedToast": "Sales settings updated", "item.selling.withdrawnToast": "Sales disabled", // — Item valuations — "item.valuations.title": "Item Valuations", "item.valuations.empty": 'No item valuation is set. Use "Set item valuation" on the right to assign one.', "item.valuations.colCompany": "Company", "item.valuations.colCostingMethod": "Costing Method", "item.valuations.colPolicy": "Inventory Valuation Policy", "item.valuations.colSetOn": "Set On", "item.valuations.createStandardCost": "Create Standard Cost", "item.valuations.reviseStandardCost": "Revise Standard Cost", "item.valuations.standardCostLabel": "This item's standard cost (unit)", "item.valuations.notSet": "Not set", // — Item standard cost card — "item.stdCostCard.title": "Standard Cost", "item.stdCostCard.hint": "The standard cost is item-wide, not per company. It values inventory only in companies where the item's policy uses standard costing.", // — Item standard cost modal — "item.stdCost.createTitle": "Create Standard Cost", "item.stdCost.reviseTitle": "Revise Standard Cost", "item.stdCost.description": "Valuing this item under a STANDARD policy requires a standard cost (unit cost).", "item.stdCost.fieldLabel": "Standard Cost *", "item.stdCost.fieldPlaceholder": "e.g. 12.50", "item.stdCost.fieldDescription": "The unit cost for items valued under a STANDARD policy. It is published as this item's standard cost, and subsequent movements are valued at it (the difference from the purchase price posts as purchase price variance).", "item.stdCost.cancel": "Cancel", "item.stdCost.creating": "Creating...", "item.stdCost.revising": "Revising...", "item.stdCost.create": "Create Standard Cost", "item.stdCost.revise": "Revise Standard Cost", "item.stdCost.createdToast": "Standard cost created", "item.stdCost.revisedToast": "Standard cost revised", "item.stdCost.validation": "Enter a number of 0 or greater", // — Item valuation set drawer — "item.valuationDrawer.setTitle": "Set Item Valuation", "item.valuationDrawer.changeTitle": "Change Item Valuation", "item.valuationDrawer.companyLabel": "Company", "item.valuationDrawer.companySelectLabel": "Company *", "item.valuationDrawer.companyPlaceholder": "Select a company", "item.valuationDrawer.policyLabel": "Inventory Valuation Policy *", "item.valuationDrawer.policyPlaceholder": "Select a policy", "item.valuationDrawer.policySelectCompanyFirst": "Select a company first", "item.valuationDrawer.policyDescription": "Only policies belonging to the selected company can be assigned. An item with ledger history in the company cannot change policy.", "item.valuationDrawer.cancel": "Cancel", "item.valuationDrawer.setting": "Setting...", "item.valuationDrawer.submit": "Set Item Valuation", "item.valuationDrawer.savedToast": "Item valuation set", "item.valuationDrawer.companyRequired": "Company is required", "item.valuationDrawer.policyRequired": "Inventory valuation policy is required", // — Master Data: Product — "product.field.code": "Code", "product.field.name": "Name", "product.field.status": "Status", "product.field.createdDate": "Created Date", "product.action.view": "View", "product.list.title": "Products", "product.detail.title": "Product Detail", "product.detail.loadErrorTitle": "Failed to load product", "product.detail.loadErrorMessage": "An error occurred while fetching the product details.", // — Product detail — "product.detail.infoTitle": "Product Information", "product.field.unit": "Unit", "product.field.description": "Description", "product.detail.attributesTitle": "Attributes", "product.detail.noAttributes": "No attributes assigned.", "product.detail.variantsTitle": "Variants", "product.detail.noVariantsTitle": "No variants", "product.detail.noVariantsMessage": "Variants are generated from attribute combinations via the API.", "product.field.sku": "SKU", "product.field.itemName": "Item Name", "product.field.itemStatus": "Item Status", "product.actions.viewItem": "View Item", // — Product actions — "product.actions.title": "Actions", "product.actions.back": "Back to Products", // — Master Data: Product Attribute — "productAttribute.field.code": "Code", "productAttribute.field.name": "Name", "productAttribute.field.createdDate": "Created Date", "productAttribute.field.label": "Label", "productAttribute.action.edit": "Edit", "productAttribute.list.title": "Product Attributes", "productAttribute.detail.title": "Product Attribute", "productAttribute.detail.loadErrorTitle": "Failed to load attribute", "productAttribute.detail.loadErrorMessage": "An error occurred while fetching the attribute details.", // — Product attribute detail — "productAttribute.detail.infoTitle": "Attribute", "productAttribute.detail.valuesTitle": "Values", "productAttribute.detail.valuesDescription": "The predefined values for this attribute. Labels are immutable post-creation.", // — Master Data: Site — "site.field.name": "Name", "site.field.type": "Type", "site.field.company": "Company", "site.field.city": "City", "site.field.country": "Country", "site.field.status": "Status", "site.field.createdDate": "Created Date", "site.action.view": "View", "site.list.title": "Sites", "site.list.create": "Create Site", "site.detail.title": "Site Detail", "site.detail.loadErrorTitle": "Failed to load site", "site.detail.loadErrorMessage": "An error occurred while fetching the site details.", "site.create.title": "Create Site", "site.edit.title": "Edit Site", "site.edit.loadErrorTitle": "Failed to load site", "site.edit.loadErrorMessage": "An error occurred while fetching the site details.", // — Site detail — "site.detail.infoTitle": "Site Information", "site.field.street": "Street", "site.field.state": "State", "site.field.postalCode": "Postal Code", "site.field.timezone": "Timezone", "site.field.createdAt": "Created At", // — Site actions — "site.actions.title": "Actions", "site.actions.back": "Back to Sites", "site.actions.edit": "Edit Site", // — Site edit form — "site.form.nameLabel": "Name *", "site.form.namePlaceholder": "Enter site name", "site.form.typeLabel": "Type *", "site.form.typePlaceholder": "Select type", "site.form.streetLabel": "Street", "site.form.streetPlaceholder": "Enter street address", "site.form.cityLabel": "City", "site.form.cityPlaceholder": "Enter city", "site.form.stateLabel": "State", "site.form.statePlaceholder": "Enter state (optional)", "site.form.postalCodeLabel": "Postal Code", "site.form.postalCodePlaceholder": "Enter postal code", "site.form.countryLabel": "Country", "site.form.countryPlaceholder": "Select country", "site.form.timezoneLabel": "Timezone", "site.form.timezonePlaceholder": "Select timezone", "site.form.timezoneInputPlaceholder": "e.g. Asia/Tokyo", "site.form.saving": "Saving...", "site.form.saveChanges": "Save Changes", "site.form.cancel": "Cancel", "site.form.updatedToast": "Site updated", "site.form.nameRequired": "Name is required", "site.form.typeRequired": "Type is required", // — Site create form — "site.form.companyLabel": "Company", "site.form.companyPlaceholder": "Select company", "site.form.creating": "Creating...", "site.form.createSubmit": "Create Site", "site.form.createdToast": "Site created", "site.form.companyRequired": "Company is required", "site.form.streetRequired": "Street is required", "site.form.cityRequired": "City is required", "site.form.postalCodeRequired": "Postal code is required", "site.form.countryRequired": "Country is required", "site.form.timezoneRequired": "Timezone is required", // — Master Data: Supplier — "supplier.field.name": "Name", "supplier.field.type": "Type", "supplier.field.company": "Company", "supplier.field.preferredCurrency": "Preferred Currency", "supplier.field.status": "Status", "supplier.field.createdDate": "Created Date", "supplier.field.roles": "Roles", "supplier.field.createdAt": "Created At", "supplier.action.view": "View", "supplier.list.title": "Suppliers", "supplier.list.create": "Create Supplier", "supplier.detail.title": "Supplier Detail", "supplier.detail.loadErrorTitle": "Failed to load supplier", "supplier.detail.loadErrorMessage": "An error occurred while fetching the supplier details.", "supplier.detail.infoTitle": "Supplier Information", "supplier.detail.identificationsTitle": "Identifications", "supplier.detail.noIdentifications": "No identifications on file.", "supplier.detail.colType": "Type", "supplier.detail.colValue": "Value", "supplier.detail.colCountry": "Country", "supplier.detail.colValidFrom": "Valid From", "supplier.detail.colValidTo": "Valid To", "supplier.create.title": "Create Supplier", "supplier.edit.title": "Edit Supplier", "supplier.edit.loadErrorTitle": "Failed to load supplier", "supplier.edit.loadErrorMessage": "An error occurred while fetching the supplier details.", // — Supplier actions — "supplier.actions.title": "Actions", "supplier.actions.back": "Back to Suppliers", "supplier.actions.edit": "Edit Supplier", "supplier.actions.setTolerance": "Set invoice tolerance", // — Supplier ID types (resolved via t.dynamic) — "supplier.idType.TAX_ID": "Tax ID", "supplier.idType.VAT": "VAT", "supplier.idType.DUNS": "DUNS", "supplier.idType.COMPANY_REGISTRY": "Company Registry", "supplier.idType.NATIONAL_ID": "National ID", "supplier.idType.OTHER": "Other", // — Supplier create form — "supplier.form.nameLabel": "Name *", "supplier.form.namePlaceholder": "Enter supplier name", "supplier.form.typeLabel": "Type *", "supplier.form.typePlaceholder": "Select type", "supplier.form.typeOrganization": "Organization", "supplier.form.typeIndividual": "Individual", "supplier.form.companyLabel": "Company *", "supplier.form.companyPlaceholder": "Select company", "supplier.form.preferredCurrencyLabel": "Preferred Currency", "supplier.form.currencyPlaceholder": "Select currency (optional)", "supplier.form.taxIdSectionTitle": "Tax Identification (optional)", "supplier.form.taxIdLabel": "Tax ID", "supplier.form.taxIdPlaceholder": "e.g., GB123456789", "supplier.form.taxIdCountryLabel": "Issuing Country", "supplier.form.taxIdCountryPlaceholder": "ISO country code, e.g., GB", "supplier.form.taxIdErrorToast": "Tax ID could not be saved: ", "supplier.form.creating": "Creating...", "supplier.form.createSubmit": "Create Supplier", "supplier.form.cancel": "Cancel", "supplier.form.createdToast": "Supplier created", "supplier.form.nameRequired": "Name is required", "supplier.form.typeRequired": "Type is required", "supplier.form.companyRequired": "Company is required", // — Supplier edit form — "supplier.form.identificationsTitle": "Identifications", "supplier.form.addIdentification": "Add", "supplier.form.noIdentifications": "No identifications. Click Add to create one.", "supplier.form.idTypeLabel": "Type", "supplier.form.idTypePlaceholder": "Type", "supplier.form.idValueLabel": "Value", "supplier.form.idValuePlaceholder": "e.g., GB123456789", "supplier.form.idCountryLabel": "Country", "supplier.form.idCountryPlaceholder": "GB", "supplier.form.removeIdentificationAria": "Remove identification", "supplier.form.saving": "Saving...", "supplier.form.saveChanges": "Save Changes", "supplier.form.updatedToast": "Supplier updated", "supplier.form.partialErrorToast": "Supplier saved but some identifications failed: ", // — Invoice tolerance drawer — "supplier.tolerance.drawerTitle": "Set Invoice Tolerance", "supplier.tolerance.quantityAbsolute": "Quantity tolerance (absolute)", "supplier.tolerance.quantityAbsoluteDescription": "Absolute quantity variance to allow. e.g. 5 (allow up to 5 units)", "supplier.tolerance.quantityPercentage": "Quantity tolerance (percentage)", "supplier.tolerance.quantityPercentageDescription": "Quantity variance to allow, as a fraction. e.g. 0.05 = 5%", "supplier.tolerance.unitPriceAbsolute": "Unit price tolerance (absolute)", "supplier.tolerance.unitPriceAbsoluteDescription": "Absolute unit-price variance to allow. e.g. 0.50", "supplier.tolerance.unitPricePercentage": "Unit price tolerance (percentage)", "supplier.tolerance.unitPricePercentageDescription": "Unit-price variance to allow, as a fraction. e.g. 0.05 = 5%", "supplier.tolerance.placeholder": "Leave blank for strict match", "supplier.tolerance.cancel": "Cancel", "supplier.tolerance.setting": "Setting...", "supplier.tolerance.submit": "Set Invoice Tolerance", "supplier.tolerance.savedToast": "Invoice tolerance saved", "supplier.tolerance.validation": "Enter a number of 0 or greater", "supplier.tolerance.loading": "Loading…", // — Supplier invoice tolerance display card — "supplier.toleranceCard.title": "Invoice Tolerance", "supplier.toleranceCard.loading": "Loading…", "supplier.toleranceCard.empty": "Not configured", "supplier.toleranceCard.notSet": "Not set (strict match)", // — Procurement: Invoice create — "invoice.create.title": "Create Invoice", // — Invoice create form — "invoice.form.invoiceTypeLabel": "What is this invoice for? *", "invoice.form.invoiceTypePlaceholder": "Select invoice type", "invoice.form.invoiceTypePoName": "Purchase Order invoice (matched to a PO)", "invoice.form.invoiceTypeOtherName": "Other invoice (no PO — freight, fees, adjustments)", "invoice.form.purchaseOrderLabel": "Purchase Order *", "invoice.form.purchaseOrderPlaceholder": "Select an ORDERED purchase order", "invoice.form.supplierLabel": "Supplier *", "invoice.form.payableControlAccountLabel": "Payable Control Account *", "invoice.form.payableAccountPlaceholder": "Select a liability account", "invoice.form.distributionAccountLabel": "Distribution Account *", "invoice.form.distributionAccountPlaceholder": "Select the account each line is booked to", "invoice.form.documentDateLabel": "Document Date", "invoice.form.supplierInvoiceLabel": "Supplier Invoice #", "invoice.form.externalDocNumPlaceholder": "Supplier's own invoice number (optional)", "invoice.form.previewHeading": "Invoice lines (from purchase order)", "invoice.form.invoiceLinesLabel": "Invoice lines *", "invoice.form.lineNumber": (props: { number: number }) => `Line ${props.number}`, "invoice.form.descriptionPlaceholder": "Description (e.g. Freight)", "invoice.form.headerDescriptionLabel": "Description", "invoice.form.headerDescriptionPlaceholder": "Invoice description (optional)", "invoice.form.amountPlaceholder": "Amount", "invoice.form.removeLineAria": "Remove line", "invoice.form.addLine": "Add line", "invoice.form.removeDistributionAria": "Remove distribution", "invoice.form.addDistribution": "Add distribution", "invoice.form.distributionsLabel": "Distributions", "invoice.form.distributionsHint": "Split this line across one or more expense accounts.", "invoice.form.creating": "Creating...", "invoice.form.createSubmit": "Create Invoice", "invoice.form.cancel": "Cancel", "invoice.form.createdToast": "Invoice created", // — Invoice edit — "invoice.edit.title": "Edit Invoice", "invoice.edit.save": "Save", "invoice.edit.saving": "Saving...", "invoice.edit.updatedToast": "Invoice updated", "invoice.edit.dueScheduleInvalid": "The payment schedule could not be adjusted because a due date is missing.", "invoice.edit.notDraft": "Only draft invoices can be edited.", "invoice.edit.descriptionLabel": "Description", "invoice.edit.descriptionPlaceholder": "Invoice description", "invoice.edit.poLinesReadOnly": "Purchase-order lines come from the linked purchase order and cannot be edited here.", "invoice.form.payableAccountRequired": "Payable control account is required", "invoice.form.documentDateRequired": "Document date is required", "invoice.form.purchaseOrderRequired": "Purchase order is required", "invoice.form.distributionAccountRequired": "Distribution account is required", "invoice.form.supplierRequired": "Supplier is required", "invoice.form.currencyUnresolved": "Could not resolve a currency for this supplier or company.", "invoice.form.linesNotLoaded": "Purchase order lines are still loading; please try again.", "invoice.form.nonReceiptPoUnsupported": "Purchase orders containing service or non-receipt lines cannot be invoiced from this form yet.", "invoice.form.atLeastOneLineRequired": "Add at least one line with a description and a positive amount", "invoice.form.atLeastOneDistributionRequired": "Add at least one distribution", "invoice.form.lineDescriptionRequired": "Description is required", "invoice.form.lineAmountInvalid": "Enter a positive amount", // — Invoice journal tab — "invoice.journal.account": "Account", "invoice.journal.debit": "Debit", "invoice.journal.credit": "Credit", "invoice.journal.loading": "Loading...", "invoice.journal.noEntries": "No journal entries are linked to this invoice.", "invoice.journal.postedEntries": "Posted journal entries (booked to the general ledger as shown).", "invoice.journal.previewHint": "Posting (postAccountPayableDocument) will book this journal entry (preview). If the ordered price and the invoiced price differ, an acquisition cost adjustment entry is also booked at post time.", "invoice.journal.apControlAccount": "AP Control Account", "invoice.journal.apBooking": "AP Booking", "invoice.journal.journalEntry": "Journal Entry", "invoice.journal.entryKindAp": "AP Booking", "invoice.journal.entryKindAcqAdj": "Acquisition Cost Adjustment", "invoice.journal.entryKindInventory": "Inventory Cost", // — Invoice related documents — "invoice.relatedDocs.title": "Related Documents", "invoice.relatedDocs.order": "Order", "invoice.relatedDocs.receipt": "Receipt", // — Invoice document modals — "invoice.modal.purchaseOrderTitle": "Purchase Order", "invoice.modal.inboundShipmentTitle": "Inbound Shipment", "invoice.modal.purchaseOrderNotFound": "Purchase order not found.", "invoice.modal.inboundShipmentNotFound": "Inbound shipment not found.", "invoice.modal.close": "Close", // — Company detail tabs — "company.detail.tabBasic": "Basic Information", "company.detail.tabValuation": "Inventory Valuation Policies", // — Company valuation policy banner — "company.valuation.currentDefault": "Current default costing method", "company.valuation.noDefaultHint": "No default policy is set. Items without an explicit assignment are auto-assigned the company default on their first valuation-affecting movement.", // — User Management: Profile — "profile.list.title": "My Profile", "profile.list.loadErrorTitle": "Failed to load profile", "profile.list.loadErrorMessage": "An error occurred while fetching your profile.", "profile.edit.title": "Edit Profile", "profile.detail.infoTitle": "Profile Information", "profile.field.name": "Name", "profile.field.email": "Email", "profile.field.status": "Status", "profile.field.assignedRoles": "Assigned Roles", "profile.actions.title": "Actions", "profile.actions.signOut": "Sign out", // — User Management: Profile form — "profile.form.nameLabel": "Name", "profile.form.namePlaceholder": "Enter name", "profile.form.emailLabel": "Email", "profile.form.emailPlaceholder": "Enter email", "profile.form.saving": "Saving...", "profile.form.saveChanges": "Save Changes", "profile.form.cancel": "Cancel", "profile.form.updatedToast": "Profile updated", "profile.form.nameRequired": "Name is required", "profile.form.emailInvalid": "Invalid email address", // — User Management: Role — "role.field.name": "Name", "role.field.description": "Description", "role.field.status": "Status", "role.field.permissions": "Permissions", "role.action.view": "View", "role.list.title": "Roles", "role.list.create": "Create Role", "role.detail.title": "Role Detail", "role.detail.loadErrorTitle": "Failed to load role", "role.detail.loadErrorMessage": "An error occurred while fetching the role details.", "role.create.title": "Create Role", "role.edit.title": "Edit Role", "role.edit.loadErrorTitle": "Failed to load role", "role.edit.loadErrorMessage": "An error occurred while fetching the role details.", // — User Management: Role detail — "role.detail.infoTitle": "Role Information", "role.detail.createdAt": "Created At", "role.detail.updatedAt": "Updated At", "role.detail.permissionsTitle": "Permissions", "role.detail.noPermissions": "No permissions assigned.", // — User Management: Role actions — "role.actions.title": "Actions", "role.actions.back": "Back to Role List", "role.actions.edit": "Edit Role", "role.actions.deactivate": "Deactivate Role", "role.actions.reactivate": "Reactivate Role", "role.actions.deactivatedToast": "Role deactivated", "role.actions.reactivatedToast": "Role reactivated", // — User Management: Role form — "role.form.nameLabel": "Name", "role.form.namePlaceholder": "Enter role name", "role.form.descriptionLabel": "Description", "role.form.descriptionPlaceholder": "Enter description", "role.form.permissionsLabel": "Permissions", "role.form.noPermissions": "No permissions available.", "role.form.saving": "Saving...", "role.form.saveChanges": "Save Changes", "role.form.cancel": "Cancel", "role.form.updatedToast": "Role updated", "role.form.updatedToastDescription": "Permission changes may take some time to take effect.", "role.form.loadErrorTitle": "Failed to load permissions", "role.form.loadErrorMessage": "An error occurred while fetching the permissions list.", "role.form.nameRequired": "Name is required", "role.form.loadingPermissions": "Loading permissions...", "role.form.creating": "Creating...", "role.form.createSubmit": "Create Role", "role.form.createdToast": "Role created", "role.form.atLeastOnePermission": "At least one permission must be selected", // — User Management: User — "user.field.name": "Name", "user.field.email": "Email", "user.field.status": "Status", "user.field.roles": "Roles", "user.action.view": "View", "user.list.title": "Users", "user.list.create": "Create User", "user.detail.title": "User Detail", "user.detail.loadErrorTitle": "Failed to load user", "user.detail.loadErrorMessage": "An error occurred while fetching the user details.", "user.create.title": "Create User", "user.edit.title": "Edit User", "user.edit.loadErrorTitle": "Failed to load user", "user.edit.loadErrorMessage": "An error occurred while fetching the user details.", // — User Management: User detail — "user.detail.infoTitle": "User Information", "user.field.createdAt": "Created At", "user.field.updatedAt": "Updated At", "user.detail.assignedRoles": "Assigned Roles", "user.detail.noRoles": "No roles assigned", // — User Management: User actions — "user.actions.title": "Actions", "user.actions.back": "Back to User List", "user.actions.edit": "Edit User", "user.actions.deactivate": "Deactivate User", "user.actions.reactivate": "Reactivate User", "user.actions.manageRoles": "Manage Roles", "user.actions.deactivatedToast": "User deactivated", "user.actions.reactivatedToast": "User reactivated", "user.actions.rolesUpdatedToast": "Roles updated", "user.actions.manageRolesDialogTitle": "Manage Roles", "user.actions.manageRolesDialogDescription": "Select the roles for this user.", "user.actions.noRolesAvailable": "No roles available", "user.actions.cancel": "Cancel", "user.actions.saving": "Saving...", "user.actions.save": "Save", // — User Management: User form — "user.form.nameLabel": "Name", "user.form.namePlaceholder": "Enter name", "user.form.emailLabel": "Email", "user.form.emailPlaceholder": "Enter email", "user.form.saving": "Saving...", "user.form.saveChanges": "Save Changes", "user.form.cancel": "Cancel", "user.form.updatedToast": "User updated", "user.form.nameRequired": "Name is required", "user.form.emailInvalid": "Invalid email address", "user.form.rolesLabel": "Roles", "user.form.rolesPlaceholder": "Select roles", "user.form.creating": "Creating...", "user.form.createSubmit": "Create User", "user.form.createdDialogTitle": "User Created", "user.form.createdDialogDescription": "The user has been created. Please copy the initial password and share it with the user. This password will not be shown again.", "user.form.passwordCopied": "Password copied to clipboard", "user.form.done": "Done", // — Stock adjustment — "stockAdjustment.list.title": "Stock Adjustments", "stockAdjustment.list.create": "Create Stock Adjustment", "stockAdjustment.detail.title": "Stock Adjustment Detail", "stockAdjustment.detail.loadErrorTitle": "Failed to load stock adjustment", "stockAdjustment.detail.loadErrorMessage": "An error occurred while fetching the stock adjustment details.", "stockAdjustment.create.title": "Create Stock Adjustment", "stockAdjustment.detail.infoTitle": "Stock Adjustment Information", "stockAdjustment.detail.lines": "Lines", "stockAdjustment.detail.noLines": "No lines.", "stockAdjustment.field.type": "Type", "stockAdjustment.field.reason": "Reason", "stockAdjustment.field.reasonCode": "Reason Code", "stockAdjustment.field.adjustmentDate": "Adjustment Date", "stockAdjustment.field.rejectionReason": "Rejection Reason", "stockAdjustment.field.createdDate": "Created Date", "stockAdjustment.field.item": "Item", "stockAdjustment.field.storageLocation": "Storage Location", "stockAdjustment.field.effect": "Effect", "stockAdjustment.field.quantity": "Quantity", "stockAdjustment.detail.fromCategory": (props: { category: string }) => ` (from ${props.category})`, "stockAdjustment.actions.back": "Back to Stock Adjustments", "stockAdjustment.actions.submit": "Submit", "stockAdjustment.actions.cancel": "Cancel", "stockAdjustment.actions.confirm": "Confirm", "stockAdjustment.actions.reject": "Reject", "stockAdjustment.actions.submittedToast": "Stock adjustment submitted", "stockAdjustment.actions.cancelledToast": "Stock adjustment cancelled", "stockAdjustment.actions.confirmedToast": "Stock adjustment confirmed", "stockAdjustment.actions.rejectedToast": "Stock adjustment rejected", "stockAdjustment.create.typeLabel": "Adjustment Type *", "stockAdjustment.create.typePlaceholder": "Select adjustment type", "stockAdjustment.create.typeCorrection": "Correction — count correction (increase / decrease)", "stockAdjustment.create.typeScrap": "Scrap — write off stock", "stockAdjustment.create.typeBlock": "Block — move available → blocked", "stockAdjustment.create.typeUnblock": "Unblock — move blocked → available", "stockAdjustment.create.reasonCodeLabel": "Reason Code *", "stockAdjustment.create.reasonCodePlaceholder": "e.g. CYCLE_COUNT, DAMAGE, THEFT", "stockAdjustment.create.adjustmentDateLabel": "Adjustment Date", "stockAdjustment.create.linesLabel": "Lines *", "stockAdjustment.create.quantityPlaceholder": "Quantity", "stockAdjustment.create.directionIncrease": "Increase", "stockAdjustment.create.directionDecrease": "Decrease", "stockAdjustment.create.directionPlaceholder": "Direction", "stockAdjustment.create.categoryAvailable": "Available", "stockAdjustment.create.categoryBlocked": "Blocked", "stockAdjustment.create.categoryPlaceholder": "From category", "stockAdjustment.create.addLine": "Add line", "stockAdjustment.create.removeLineAria": "Remove line", "stockAdjustment.create.submit": "Create Stock Adjustment", "stockAdjustment.create.createdToast": "Stock adjustment created", "stockAdjustment.form.reasonCodeRequired": "Reason code is required", "stockAdjustment.form.itemRequired": "Item is required", "stockAdjustment.form.storageLocationRequired": "Storage location is required", "stockAdjustment.form.quantityMustBePositive": "Quantity must be positive", "stockAdjustment.form.directionRequired": "Direction is required for a correction", // — General Ledger: Accounting Period (detail + actions + form) — "accountingPeriod.field.name": "Name", "accountingPeriod.field.fiscalYear": "Fiscal Year", "accountingPeriod.field.type": "Type", "accountingPeriod.field.startDate": "Start Date", "accountingPeriod.field.endDate": "End Date", "accountingPeriod.field.status": "Status", "accountingPeriod.detail.infoTitle": "Accounting Period Information", "accountingPeriod.actions.title": "Actions", "accountingPeriod.actions.back": "Back to Accounting Periods", "accountingPeriod.actions.openPeriod": "Open Period", "accountingPeriod.actions.closePeriod": "Close Period", "accountingPeriod.actions.openedToast": "Accounting period opened", "accountingPeriod.actions.closedToast": "Accounting period closed", "accountingPeriod.form.fiscalYearLabel": "Fiscal Year", "accountingPeriod.form.fiscalYearPlaceholder": "Select fiscal year", "accountingPeriod.form.nameLabel": "Name", "accountingPeriod.form.namePlaceholder": "e.g. 2026-07", "accountingPeriod.form.periodTypeLabel": "Period Type", "accountingPeriod.form.periodTypePlaceholder": "Select period type", "accountingPeriod.form.startDateLabel": "Start Date", "accountingPeriod.form.endDateLabel": "End Date", "accountingPeriod.form.creating": "Creating...", "accountingPeriod.form.createSubmit": "Create Accounting Period", "accountingPeriod.form.cancel": "Cancel", "accountingPeriod.form.createdToast": "Accounting period created", "accountingPeriod.form.fiscalYearRequired": "Fiscal year is required", "accountingPeriod.form.nameRequired": "Name is required", "accountingPeriod.form.startDateRequired": "Start date is required", "accountingPeriod.form.endDateRequired": "End date is required", "accountingPeriod.form.periodTypeRequired": "Period type is required", "accountingPeriod.form.typeOperating": "Operating", "accountingPeriod.form.typeAdjustment": "Adjustment", "accountingPeriod.table.view": "View", // — General Ledger: Fiscal Year (table + form) — "fiscalYear.field.name": "Name", "fiscalYear.field.startDate": "Start Date", "fiscalYear.field.endDate": "End Date", "fiscalYear.field.yearEndClosed": "Year-End Closed", "fiscalYear.field.yearEndClosedYes": "Yes", "fiscalYear.field.yearEndClosedNo": "No", "fiscalYear.form.companyLabel": "Company", "fiscalYear.form.companyPlaceholder": "Select company", "fiscalYear.form.nameLabel": "Name", "fiscalYear.form.namePlaceholder": "e.g. FY2026", "fiscalYear.form.startDateLabel": "Start Date", "fiscalYear.form.endDateLabel": "End Date", "fiscalYear.form.creating": "Creating...", "fiscalYear.form.createSubmit": "Create Fiscal Year", "fiscalYear.form.cancel": "Cancel", "fiscalYear.form.createdToast": "Fiscal year created", "fiscalYear.form.companyRequired": "Company is required", "fiscalYear.form.nameRequired": "Name is required", "fiscalYear.form.startDateRequired": "Start date is required", "fiscalYear.form.endDateRequired": "End date is required", // — General Ledger: Journal Entry (list table + detail + modal + actions + form) — "journalEntry.field.account": "Account", "journalEntry.field.description": "Description", "journalEntry.field.debit": "Debit", "journalEntry.field.credit": "Credit", "journalEntry.field.entryDate": "Entry Date", "journalEntry.field.postedAt": "Posted At", "journalEntry.field.accountingPeriod": "Accounting Period", "journalEntry.field.source": "Source", "journalEntry.field.note": "Note", "journalEntry.field.amount": "Amount", "journalEntry.detail.noLines": "No journal lines.", "journalEntry.detail.total": "Total", "journalEntry.actions.title": "Actions", "journalEntry.actions.back": "Back to Journal Entries", "journalEntry.actions.post": "Post", "journalEntry.actions.cancel": "Cancel", "journalEntry.actions.reverse": "Reverse", "journalEntry.actions.postedToast": "Journal entry posted", "journalEntry.actions.cancelledToast": "Journal entry cancelled", "journalEntry.actions.reversedToast": "Journal entry reversed", "journalEntry.modal.title": "Journal Entry", "journalEntry.modal.close": "Close", "journalEntry.modal.reverse": "Reverse", "journalEntry.modal.loading": "Loading…", "journalEntry.modal.notFound": "Journal entry not found.", "journalEntry.modal.reversingCreatedToast": "Reversing entry created", "journalEntry.form.accountingPeriodLabel": "Accounting Period *", "journalEntry.form.accountingPeriodPlaceholder": "Select an open period", "journalEntry.form.entryDateLabel": "Entry Date", "journalEntry.form.descriptionLabel": "Description", "journalEntry.form.descriptionPlaceholder": "Optional description", "journalEntry.form.linesLabel": "Lines *", "journalEntry.form.debitPlaceholder": "Debit", "journalEntry.form.creditPlaceholder": "Credit", "journalEntry.form.removeLineAria": "Remove line", "journalEntry.form.addLine": "Add line", "journalEntry.form.debitTotal": (props: { amount: string }) => `Debit: ${props.amount}`, "journalEntry.form.creditTotal": (props: { amount: string }) => `Credit: ${props.amount}`, "journalEntry.form.balanced": "Balanced ✓", "journalEntry.form.notBalanced": "Not balanced ✗", "journalEntry.form.creating": "Creating...", "journalEntry.form.createSubmit": "Create Journal Entry", "journalEntry.form.cancel": "Cancel", "journalEntry.form.createdToast": "Journal entry created", "journalEntry.form.accountingPeriodRequired": "Accounting period is required", "journalEntry.form.atLeastTwoLines": "At least two lines are required", "journalEntry.form.accountRequired": "Account is required", "journalEntry.form.debitOrCreditNotBoth": "A line carries a debit or a credit, not both", "journalEntry.form.enterDebitOrCredit": "Enter a debit or a credit", "journalEntry.list.company": "Company", "journalEntry.list.companyPlaceholder": "Select a company", "journalEntry.list.status": "Status", "journalEntry.list.accountingPeriod": "Accounting Period", "journalEntry.list.allPeriods": "All Periods", "journalEntry.list.entryDate": "Entry Date", "journalEntry.list.account": "Account", "journalEntry.list.source": "Source", "journalEntry.list.description": "Description", "journalEntry.list.descriptionPlaceholder": "Search description (Enter)", "journalEntry.list.documentNo": "Document No.", "journalEntry.list.documentNoTooltip": "Search journal entries related to a document number. Types: AP Document / AR Document / Purchase Order / Inbound Shipment / Outbound Shipment / Transfer Order. A purchase order shows the combined journals of its invoices and receipts. (Stock adjustments and payments have no document number, so they are excluded.)", "journalEntry.list.documentNoTooltipAria": "About document search", "journalEntry.list.numberPlaceholder": "Number (Enter)", "journalEntry.list.view": "View", "journalEntry.list.rowsPerPage": "Rows per page", "journalEntry.list.pageOf": (props: { page: number; total: number }) => `Page ${props.page} / ${props.total}`, "journalEntry.list.firstPage": "First page", "journalEntry.list.prevPage": "Previous page", "journalEntry.list.nextPage": "Next page", "journalEntry.list.lastPage": "Last page", "journalEntry.list.loadError": "Failed to load journal entries.", "journalEntry.list.empty": "No journal entries to show.", "journalEntry.list.expandAria": "Expand", "journalEntry.list.collapseAria": "Collapse", "journalEntry.list.viewFlat": "List", "journalEntry.list.viewGrouped": "Voucher", "journalEntry.list.viewLabel": "View", "journalEntry.list.statusAll": "All", "journalEntry.list.sourceAll": "All", "journalEntry.list.accountAll": "All", "journalEntry.list.docTypeNone": "(none)", "journalEntry.list.docTypeAP": "AP Document", "journalEntry.list.docTypeAR": "AR Document", "journalEntry.list.docTypePO": "Purchase Order", "journalEntry.list.docTypeInbound": "Inbound Shipment", "journalEntry.list.docTypeOutbound": "Outbound Shipment", "journalEntry.list.docTypeTransfer": "Transfer Order", "journalEntry.list.headerDebit": "Debit", "journalEntry.list.headerCredit": "Credit", "journalEntry.list.headerAmount": "Amount", "journalEntry.list.totalRows": (props: { count: number }) => `${props.count} rows`, // — General Ledger: Trial Balance — "trialBalance.field.company": "Company", "trialBalance.field.companyPlaceholder": "Select company", "trialBalance.field.accountingPeriod": "Accounting Period", "trialBalance.field.allPostedEntries": "All posted entries", "trialBalance.report.title": "Trial Balance", "trialBalance.report.balanced": "Balanced ✓", "trialBalance.report.notBalanced": "Not balanced ✗", "trialBalance.report.noBalances": "No balances to report.", "trialBalance.report.code": "Code", "trialBalance.report.name": "Name", "trialBalance.report.type": "Type", "trialBalance.report.debit": "Debit", "trialBalance.report.credit": "Credit", "trialBalance.report.net": "Net", "trialBalance.report.balanceSheet": "Balance Sheet (ASSET / LIABILITY / EQUITY)", "trialBalance.report.profitLoss": "Profit & Loss (REVENUE / EXPENSE)", "trialBalance.report.total": "Total", // — AR (Accounts Receivable): Customer Invoice list — "arInvoice.list.title": "Customer Invoices", "arInvoice.list.create": "Create Invoice", "arInvoice.field.documentNumber": "Document Number", "arInvoice.field.customer": "Customer", "arInvoice.field.type": "Type", "arInvoice.field.status": "Status", "arInvoice.field.totalAmount": "Total Amount", "arInvoice.field.documentDate": "Document Date", "arInvoice.field.externalDocumentNumber": "Customer Invoice #", "arInvoice.action.view": "View", // — AR: Customer Invoice detail — "arInvoice.detail.title": "Customer Invoice Detail", "arInvoice.detail.loadErrorTitle": "Failed to load invoice", "arInvoice.detail.loadErrorMessage": "An error occurred while fetching the invoice details.", "arInvoice.detail.infoTitle": "Invoice Information", "arInvoice.field.currency": "Currency", "arInvoice.field.postingDate": "Posting Date", "arInvoice.field.description": "Description", "arInvoice.field.qty": "Qty", "arInvoice.field.unitPrice": "Unit Price", "arInvoice.field.amount": "Amount", "arInvoice.field.dueDate": "Due Date", "arInvoice.detail.tabDetails": "Details", "arInvoice.detail.tabJournal": "Journal", "arInvoice.detail.lineItems": "Line Items", "arInvoice.detail.noLineItems": "No line items.", "arInvoice.detail.dueSchedule": "Due Schedule", "arInvoice.detail.relatedDocs": "Related Documents", "arInvoice.detail.salesOrder": "Sales Order", // — AR: Customer Invoice actions — "arInvoice.actions.title": "Actions", "arInvoice.actions.back": "Back to Invoices", "arInvoice.actions.register": "Register", "arInvoice.actions.post": "Post", "arInvoice.actions.cancel": "Cancel", "arInvoice.actions.createReceipt": "Create Receipt", "arInvoice.actions.posting": "Posting...", "arInvoice.actions.confirmPost": "Confirm posting", "arInvoice.actions.postDialogTitle": "Post as accounts receivable", "arInvoice.actions.postDialogDescription": "Post this invoice as accounts receivable. A journal entry (Dr Receivable / Cr Revenue) is booked to the general ledger and the receivable is formally recognized (uncollected). This is not the actual receipt (cash collection).", "arInvoice.actions.keep": "Keep", "arInvoice.actions.cancelling": "Cancelling...", "arInvoice.actions.confirmCancel": "Confirm cancel", "arInvoice.actions.cancelDialogTitle": "Cancel invoice", "arInvoice.actions.cancelDialogDescription": "Cancel this invoice. This action cannot be undone.", "arInvoice.actions.registeredToast": "Invoice registered", "arInvoice.actions.postedToast": "Invoice posted", "arInvoice.actions.cancelledToast": "Invoice cancelled", // — AR: Customer Invoice create — "arInvoice.create.title": "Create Customer Invoice", // — AR: Customer Invoice form — "arInvoice.form.invoiceTypeLabel": "What is this invoice for? *", "arInvoice.form.invoiceTypePlaceholder": "Select invoice type", "arInvoice.form.invoiceTypeSoName": "Sales Order invoice (matched to a SO)", "arInvoice.form.invoiceTypeOtherName": "Other invoice (no SO — services, fees, adjustments)", "arInvoice.form.salesOrderLabel": "Sales Order *", "arInvoice.form.salesOrderPlaceholder": "Select a CONFIRMED sales order", "arInvoice.form.customerLabel": "Customer *", "arInvoice.form.receivableControlAccountLabel": "Receivable Control Account *", "arInvoice.form.receivableAccountPlaceholder": "Select a receivable (asset) account", "arInvoice.form.revenueAccountLabel": "Revenue Account *", "arInvoice.form.revenueAccountPlaceholder": "Select the revenue account", "arInvoice.form.distributionAccountLabel": "Distribution Account *", "arInvoice.form.distributionAccountPlaceholder": "Select the account each line is booked to", "arInvoice.form.documentDateLabel": "Document Date", "arInvoice.form.customerInvoiceLabel": "Customer Invoice #", "arInvoice.form.externalDocNumPlaceholder": "Customer's own invoice number (optional)", "arInvoice.form.previewHeading": "Invoice lines (from sales order)", "arInvoice.form.invoiceLinesLabel": "Invoice lines *", "arInvoice.form.descriptionPlaceholder": "Description (e.g. Service fee)", "arInvoice.form.amountPlaceholder": "Amount", "arInvoice.form.removeLineAria": "Remove line", "arInvoice.form.addLine": "Add line", "arInvoice.form.creating": "Creating...", "arInvoice.form.createSubmit": "Create Invoice", "arInvoice.form.cancel": "Cancel", "arInvoice.form.createdToast": "Invoice created", "arInvoice.form.receivableAccountRequired": "Receivable control account is required", "arInvoice.form.salesOrderRequired": "Sales order is required", "arInvoice.form.revenueAccountRequired": "Revenue account is required", "arInvoice.form.distributionAccountRequired": "Distribution account is required", "arInvoice.form.customerRequired": "Customer is required", "arInvoice.form.atLeastOneLineRequired": "Add at least one line with a description and a positive amount", "arInvoice.form.colItem": "Item", "arInvoice.form.colQty": "Qty", "arInvoice.form.colUnitPrice": "Unit Price", "arInvoice.form.colAmount": "Amount", "arInvoice.form.total": "Total", // — AR: Customer Invoice journal tab — "arInvoice.journal.draftHint": "Posting this invoice books a journal entry (Dr Receivable / Cr Revenue).", "arInvoice.journal.noEntries": "No journal entries are linked to this invoice.", "arInvoice.journal.account": "Account", "arInvoice.journal.debit": "Debit", "arInvoice.journal.credit": "Credit", "arInvoice.journal.loading": "Loading...", "arInvoice.journal.total": "Total", // — Receipt (incoming payment) list — "receipt.list.title": "Receipts", "receipt.list.create": "Create Receipt", "receipt.field.paymentDate": "Receipt Date", "receipt.field.customer": "Customer", "receipt.field.depositAccount": "Deposit Account", "receipt.field.amount": "Amount", "receipt.field.status": "Status", "receipt.action.view": "View", // — Receipt detail — "receipt.detail.title": "Receipt Detail", "receipt.detail.loadErrorTitle": "Failed to load receipt", "receipt.detail.loadErrorMessage": "An error occurred while fetching the receipt details.", "receipt.detail.infoTitle": "Receipt Information", "receipt.field.currency": "Currency", "receipt.field.postedAt": "Posted At", "receipt.detail.tabDetails": "Details", "receipt.detail.tabJournal": "Journal", "receipt.detail.settlements": "Settlements", "receipt.detail.noSettlements": "No settlements.", "receipt.detail.colInvoice": "Invoice", "receipt.detail.colDueDate": "Due Date", "receipt.detail.colScheduled": "Scheduled", "receipt.detail.colReceived": "Received", "receipt.detail.total": "Total", "receipt.detail.creditSuffix": " (Credit)", // — Receipt actions — "receipt.actions.title": "Actions", "receipt.actions.back": "Back to Receipts", "receipt.actions.post": "Post", "receipt.actions.cancel": "Cancel", "receipt.actions.reverse": "Reverse", "receipt.actions.posting": "Posting...", "receipt.actions.confirmPost": "Confirm posting", "receipt.actions.postDialogTitle": "Post receipt", "receipt.actions.postDialogDescription": "Post this receipt. A journal entry (Dr Cash / Cr Accounts Receivable) is booked to the general ledger and the targeted due-schedule lines are settled.", "receipt.actions.keep": "Keep", "receipt.actions.cancelling": "Cancelling...", "receipt.actions.confirmCancel": "Confirm cancel", "receipt.actions.cancelDialogTitle": "Cancel receipt", "receipt.actions.cancelDialogDescription": "Cancel this draft receipt. The general ledger is not affected (it has not been posted).", "receipt.actions.reversing": "Reversing...", "receipt.actions.confirmReversal": "Confirm reversal", "receipt.actions.reverseDialogTitle": "Reverse receipt", "receipt.actions.reverseDialogDescription": "Reverse this posted receipt. A reversing entry is booked on the given date and the settled due-schedule lines become open again.", "receipt.actions.reversalDate": "Reversal Date", "receipt.actions.postedToast": "Receipt posted", "receipt.actions.cancelledToast": "Receipt cancelled", "receipt.actions.reversedToast": "Receipt reversed", // — Receipt create — "receipt.create.title": "Create Receipt", // — Receipt form — "receipt.form.methodLabel": "Method *", "receipt.form.modeByCustomer": "By Customer", "receipt.form.modeByInvoice": "By Invoice", "receipt.form.customerLabel": "Customer *", "receipt.form.invoiceLabel": "Invoice *", "receipt.form.customerAuto": "Customer (auto)", "receipt.form.depositAccountLabel": "Deposit Account (Cash) *", "receipt.form.depositAccountPlaceholder": "Select the cash/bank account", "receipt.form.receiptDateLabel": "Receipt Date *", "receipt.form.itemsToSettle": "Items to Settle (Open)", "receipt.form.selectCustomerHint": "Select a customer to see its open invoices.", "receipt.form.selectInvoiceHint": "Select an invoice to see the items to settle.", "receipt.form.noOpenReceivables": "No open (posted) receivables.", "receipt.form.colInvoice": "Invoice", "receipt.form.colDueDate": "Due Date", "receipt.form.colOpenBalance": "Open Balance", "receipt.form.colReceipt": "Receipt", "receipt.form.receiptTotal": "Receipt Total", "receipt.form.settleAria": (props: { doc: string }) => `Settle ${props.doc}`, "receipt.form.selectInvoicePlaceholder": "Select an open invoice", "receipt.form.creating": "Creating...", "receipt.form.createSubmit": "Create Receipt", "receipt.form.cancel": "Cancel", "receipt.form.createdToast": "Receipt created", "receipt.form.depositAccountRequired": "Deposit account is required", "receipt.form.receiptDateRequired": "Receipt date is required", "receipt.form.errorSelectCustomerInvoice": "Select a customer and an open invoice", "receipt.form.errorSelectItem": "Select at least one item to settle", // — Receipt journal tab — "receipt.journal.draftHint": "Posting this receipt books a journal entry (Dr Cash / Cr Accounts Receivable).", "receipt.journal.noEntries": "No journal entries are linked to this receipt.", "receipt.journal.account": "Account", "receipt.journal.debit": "Debit", "receipt.journal.credit": "Credit", "receipt.journal.loading": "Loading...", "receipt.journal.total": "Total", // — Shared journal entries view (JournalEntriesView composed component) — "journal.view.list": "List", "journal.view.voucher": "Voucher", "journal.view.account": "Account", "journal.view.description": "Description", "journal.view.debit": "Debit", "journal.view.credit": "Credit", "journal.view.total": "Total", }, ja: { "bp.selectRequired": "選択してください", "bp.partners": "取引先", "bp.allPartners": "すべて", "bp.customerRole": "顧客", "bp.supplierRole": "仕入先", "bp.roles": "取引区分", "bp.commonInfo": "共通情報", "bp.actions": "操作", "bp.partnerInformation": "取引先情報", "bp.editPartner": "取引先を編集", "bp.partnerDeactivateDescription": "この取引先を無効化しますか?顧客・仕入先アカウントの状態は変更されず、過去の伝票も保持されます。", "bp.customerSettings": "顧客設定", "bp.supplierSettings": "仕入先設定", "bp.searchPartners": "取引先名で検索", "bp.addAccount": "アカウントを追加", "bp.accounts": "アカウント", "bp.editAccount": "アカウントを編集", "bp.accountDeactivateDescription": "このアカウントを無効化しますか?新規伝票で利用できなくなります。他のアカウントや過去の伝票は保持されます。", "bp.registerCustomer": "顧客として登録", "bp.registerSupplier": "仕入先として登録", "bp.noAccountInactive": "アカウントは未登録です。追加するには取引先を再有効化してください。", "bp.accountCompanyName": "アカウント名", "bp.totalPartners": "件", "bp.customers": "顧客アカウント", "bp.suppliers": "仕入先アカウント", "bp.partnerName": "取引先名(BP)", "bp.accountName": "Account名", "bp.type": "取引先種別", "bp.ORGANIZATION": "法人", "bp.INDIVIDUAL": "個人", "bp.ACTIVE": "有効", "bp.INACTIVE": "無効", "bp.status": "状態", "bp.create": "新規作成", "bp.save": "保存", "bp.saving": "保存中…", "bp.saved": "保存しました", "bp.cancel": "キャンセル", "bp.edit": "編集", "bp.deactivate": "無効化", "bp.reactivate": "再有効化", "bp.deactivateConfirm": "無効化しますか?過去の伝票は保持されます。", "bp.addresses": "住所一覧", "bp.basicInformation": "基本情報", "bp.defaultAddressesOptional": "既定の住所(任意)", "bp.defaultBanksOptional": "既定の銀行口座(任意)", "bp.banks": "銀行口座一覧", "bp.addAddress": "住所を追加", "bp.editAddress": "住所を編集", "bp.addBank": "銀行口座を追加", "bp.editBank": "銀行口座を編集", "bp.line1": "住所1", "bp.line2": "住所2", "bp.city": "市区町村", "bp.state": "都道府県", "bp.postalCode": "郵便番号", "bp.country": "国", "bp.bankName": "銀行名", "bp.accountHolderName": "口座名義", "bp.accountNumber": "口座番号", "bp.routingNumber": "ルーティング番号", "bp.currency": "通貨", "bp.company": "自社法人", "bp.code": "Accountコード", "bp.partner": "取引先(BP)", "bp.preferredCurrency": "優先通貨(任意)", "bp.defaultExpenseAccount": "既定費用科目(任意)", "bp.defaultExpenseAccountPlaceholder": "POなし請求書の既定費用科目を選択", "bp.accountSettings": "Account設定", "bp.addressUsages": "住所", "bp.assignAddress": "住所を割り当てる", "bp.assignBank": "銀行口座を割り当てる", "bp.bankUsages": "銀行口座", "bp.purpose": "用途", "bp.address": "住所", "bp.bank": "銀行口座", "bp.addUsage": "割り当てる", "bp.remove": "割当解除", "bp.default": "既定", "bp.setDefault": "既定にする", "bp.unsetDefault": "既定を解除", "bp.BILL_TO": "請求先", "bp.SHIP_TO": "納品先", "bp.ORDER_FROM": "発注先", "bp.REMIT_TO": "支払先", "bp.SHIP_FROM": "出荷元", "bp.RETURN_TO": "返品先", "bp.PAYMENT": "支払", "bp.RECEIPT": "入金", "bp.REFUND": "返金", "bp.empty": "登録はありません", "bp.notFound": "対象のレコードが見つかりません", "bp.search": "名前・コードで検索", "bp.next": "次へ", "bp.previous": "前へ", "bp.loading": "読み込み中…", "bp.loadFailed": "候補を取得できませんでした", "bp.retry": "再試行", "bp.loadMore": "さらに表示", "bp.clearSelection": "選択を解除", "bp.searchAddresses": "住所を検索", "bp.searchBanks": "銀行名・口座名義で検索", // — サイドバー: グループ — "nav.group.procurement": "調達", "nav.group.sales": "販売", "nav.group.inventory": "在庫", "nav.group.generalLedger": "総勘定元帳", "nav.group.masterData": "マスタデータ", "nav.group.userManagement": "ユーザー管理", "nav.language": "言語", // — サイドバー: 項目 — "nav.item.purchaseOrders": "発注", "nav.item.inboundShipments": "入荷", "nav.item.invoices": "請求書", "nav.item.payments": "支払", "nav.item.salesOrders": "受注", "nav.item.outboundShipments": "出荷", "nav.item.receivableInvoices": "請求書", "nav.item.receipts": "入金", "nav.item.stockLevels": "在庫状況", "nav.item.transferOrders": "移動指示", "nav.item.stockAdjustments": "在庫調整", "nav.item.journalEntries": "仕訳", "nav.item.fiscalYears": "会計年度", "nav.item.accountingPeriods": "会計期間", "nav.item.trialBalance": "試算表", "nav.item.companies": "会社", "nav.item.sites": "拠点", "nav.item.suppliers": "仕入先", "nav.item.products": "商品", "nav.item.productAttributes": "商品属性", "nav.item.items": "品目", "nav.item.chartOfAccounts": "勘定科目", "nav.item.users": "ユーザー", "nav.item.roles": "ロール", // — 共通 — "common.language": "言語", // — ステータス — "status.DRAFT": "下書き", "status.REGISTERED": "登録済み", "status.POSTED": "計上済み", "status.CANCELLED": "取消", "status.INVOICE": "請求書", "status.CREDIT_MEMO": "貸方伝票", "status.SUBMITTED": "申請済み", "status.OPEN": "オープン", "status.CLOSED": "完了", "status.REVERSED": "取消済み", "status.ORDERED": "発注済み", "status.CONFIRMED": "確定済み", "status.REJECTED": "却下", "status.NOT_RECEIVED": "未入荷", "status.PARTIALLY_RECEIVED": "一部入荷", "status.RECEIVED": "入荷済み", "status.NOT_BILLED": "未請求", "status.PARTIALLY_BILLED": "一部請求", "status.BILLED": "請求済み", "status.NOT_FULFILLED": "未出荷", "status.PARTIALLY_FULFILLED": "一部出荷", "status.FULFILLED": "出荷済み", "status.ADDED": "追加", "status.MODIFIED": "変更", "status.REMOVED": "削除", // — 請求書一覧 — "invoice.list.title": "請求書一覧", "invoice.list.create": "請求書を作成", "invoice.field.documentNumber": "伝票番号", "invoice.field.supplier": "仕入先", "invoice.field.type": "種別", "invoice.field.status": "ステータス", "invoice.field.totalAmount": "合計金額", "invoice.field.documentDate": "伝票日付", "invoice.field.externalDocumentNumber": "仕入先請求書番号", "invoice.action.view": "詳細", // — 共通 — "common.total": "合計", "common.cancel": "キャンセル", "common.release": "解除", "common.view": "詳細", "common.loading": "読み込み中...", "common.creating": "作成中...", "common.saving": "保存中...", "common.saveChanges": "変更を保存", "common.back": "戻る", "common.downloadCsv": "CSVをダウンロード", "common.exporting": "エクスポート中...", "common.status": "ステータス", "common.item": "品目", "common.quantity": "数量", "common.storageLocation": "保管場所", "common.createdDate": "作成日", "common.documentNumber": "伝票番号", "common.dueDate": "支払期日", "common.supplier": "仕入先", "common.unknown": "不明", // — 請求書詳細 — "invoice.detail.title": "請求書詳細", "invoice.detail.loadErrorTitle": "請求書の読み込みに失敗しました", "invoice.detail.loadErrorMessage": "請求書の詳細を取得中にエラーが発生しました。", "invoice.detail.infoTitle": "請求書情報", "invoice.field.currency": "通貨", "invoice.field.postingDate": "計上日", "invoice.field.description": "説明", "invoice.field.qty": "数量", "invoice.field.unitPrice": "単価", "invoice.field.amount": "金額", "invoice.field.dueDate": "支払期日", "invoice.detail.activeHolds": (props: { count: number }) => `有効な保留 (${props.count})`, "invoice.detail.holdsHint": "照合により以下の保留が設定されました。解除されるまで計上はできません。", "invoice.detail.holdReleased": "保留を解除しました", "invoice.detail.tabDetails": "詳細", "invoice.detail.tabJournal": "仕訳", "invoice.detail.tabAttachment": "証憑", "invoice.detail.lineItems": "明細", "invoice.detail.noLineItems": "明細がありません。", "invoice.detail.dueSchedule": "支払予定", // — 請求書 証憑(添付書類) — "invoice.attachment.title": "証憑", "invoice.attachment.uploadedToast": "証憑をアップロードしました", "invoice.attachment.deletedToast": "証憑を削除しました", "invoice.attachment.uploadError": "証憑のアップロードに失敗しました。", "invoice.attachment.deleteError": "証憑の削除に失敗しました。", "invoice.attachment.dropHint": "ここにドラッグ&ドロップ、またはクリックで選択", "invoice.attachment.dropTypes": "JPG / PNG / PDF・最大3件", "invoice.attachment.limitExceeded": "添付できる証憑は3件までです。", "invoice.attachment.unsupportedType": "対応形式は JPG / PNG / PDF です。", "invoice.attachment.previewLoading": "プレビューを読み込み中…", "invoice.attachment.previewError": "プレビューを読み込めませんでした。", "invoice.attachment.previewUnavailable": "このファイルはプレビューできません。", // — 請求書アクション(操作パネル) — "invoice.actions.title": "操作", "invoice.actions.back": "請求書一覧へ戻る", "invoice.actions.register": "登録", "invoice.actions.edit": "編集", "invoice.actions.post": "計上", "invoice.actions.createPayment": "支払を作成", "invoice.actions.posting": "計上中...", "invoice.actions.confirmPost": "計上を確定", "invoice.actions.postDialogTitle": "買掛金として計上", "invoice.actions.postDialogDescription": "この請求書を買掛金として計上します。総勘定元帳に仕訳が転記され、買掛金が正式に認識されます(未払い)。実際の支払(出金)処理ではありません。", "invoice.actions.registeredToast": "請求書を登録しました", "invoice.actions.postedToast": "請求書を計上しました", // — 保留理由 — "hold.INVOICE_UNIT_DIFFERS_FROM_PURCHASE_ORDER_UNIT": "請求書の単位が発注の単位と異なります", "hold.INVOICE_UNIT_PRICE_DIFFERS_FROM_PURCHASE_ORDER_UNIT_PRICE": "請求書の単価が発注の単価と異なります", "hold.INVOICE_QUANTITY_EXCEEDS_ORDERED_QUANTITY": "請求数量が発注数量を超えています", "hold.INVOICE_QUANTITY_EXCEEDS_RECEIVED_QUANTITY": "請求数量が入荷数量を超えています", // — 発注(タイトル) — "purchaseOrder.list.title": "発注一覧", "purchaseOrder.list.create": "発注を作成", "purchaseOrder.detail.title": "発注詳細", "purchaseOrder.detail.loadErrorTitle": "発注の読み込みに失敗しました", "purchaseOrder.detail.loadErrorMessage": "発注の詳細を取得中にエラーが発生しました。", // — 発注一覧(テーブル列) — "purchaseOrder.field.documentNumber": "伝票番号", "purchaseOrder.field.supplierName": "仕入先名", "purchaseOrder.field.receivingSite": "入荷拠点", "purchaseOrder.field.status": "ステータス", "purchaseOrder.field.receiptStatus": "入荷ステータス", "purchaseOrder.field.billingStatus": "請求ステータス", "purchaseOrder.field.orderDate": "発注日", "purchaseOrder.field.externalReference": "外部参照番号", "purchaseOrder.field.totalAmount": "合計金額", "purchaseOrder.field.createdDate": "作成日", "purchaseOrder.action.view": "詳細", // — 発注詳細 — "purchaseOrder.detail.infoTitle": "発注情報", "purchaseOrder.field.supplier": "仕入先", "purchaseOrder.field.closeReason": "完了理由", "purchaseOrder.detail.lineItems": "明細", "purchaseOrder.detail.noLineItems": "明細がありません。", "purchaseOrder.field.item": "品目", "purchaseOrder.field.orderedQty": "発注数量", "purchaseOrder.field.uom": "単位", "purchaseOrder.field.unitPrice": "単価", "purchaseOrder.field.subtotal": "小計", "purchaseOrder.detail.totals": "合計", // — 発注アクション(操作パネル) — "purchaseOrder.actions.title": "操作", "purchaseOrder.actions.back": "発注一覧へ戻る", "purchaseOrder.actions.duplicate": "複製", "purchaseOrder.actions.edit": "編集", "purchaseOrder.actions.submit": "承認申請", "purchaseOrder.actions.approve": "承認", "purchaseOrder.actions.reject": "却下", "purchaseOrder.actions.amend": "変更", "purchaseOrder.actions.createInboundShipment": "入荷を作成", "purchaseOrder.actions.close": "完了", "purchaseOrder.actions.cancel": "取消", "purchaseOrder.actions.revisionHistory": "変更履歴", "purchaseOrder.actions.duplicatedToast": "発注を複製しました", "purchaseOrder.actions.submittedToast": "発注を申請しました", "purchaseOrder.actions.approvedToast": "発注を承認しました", "purchaseOrder.actions.rejectedToast": "発注を却下しました", "purchaseOrder.actions.cancelledToast": "発注を取消しました", "purchaseOrder.actions.closedToast": "発注を完了しました", "purchaseOrder.actions.remainingGrToast": "残数量の下書き入荷を作成しました", "purchaseOrder.actions.fullyReceivedToast": "発注はすべて入荷済みです — 残数量はありません", "purchaseOrder.actions.closeDialogTitle": "発注を完了", "purchaseOrder.actions.closeDialogDescription": "この発注を完了する理由を入力してください。未入荷数量が残っている場合は、償却のチェックボックスをオンにすると強制的に完了できます。", "purchaseOrder.actions.closeReasonRequired": "完了理由(必須)", "purchaseOrder.actions.closeReasonOptional": "完了理由(任意)", "purchaseOrder.actions.writeOffRemaining": "残りの未入荷数量を償却する", "purchaseOrder.actions.closing": "完了処理中...", "purchaseOrder.actions.confirmClose": "完了を確定", "purchaseOrder.actions.rejectDialogTitle": "発注を却下", "purchaseOrder.actions.rejectDialogDescription": "この発注を却下する理由を入力してください。", "purchaseOrder.actions.rejectReasonPlaceholder": "却下理由を入力", "purchaseOrder.actions.rejecting": "却下処理中...", "purchaseOrder.actions.confirmRejection": "却下を確定", // — 発注変更履歴(ドロワー) — "purchaseOrder.revision.title": "変更履歴", "purchaseOrder.revision.description": "ヘッダーと明細の変更をリビジョンごとに新しい順で表示します。", "purchaseOrder.revision.empty": "変更履歴はありません。この発注は作成以降変更されていません。", "purchaseOrder.revision.revisionLabel": (props: { number: string }) => `リビジョン v${props.number}`, "purchaseOrder.revision.headerField": "ヘッダー項目", "purchaseOrder.revision.before": "変更前", "purchaseOrder.revision.after": "変更後", "purchaseOrder.revision.action": "操作", "purchaseOrder.revision.item": "品目", "purchaseOrder.revision.changes": "変更内容", "purchaseOrder.revision.fieldOrderDate": "発注日", "purchaseOrder.revision.fieldReceivingSite": "入荷拠点", "purchaseOrder.revision.fieldExternalReference": "外部参照番号", "purchaseOrder.revision.fieldItem": "品目", "purchaseOrder.revision.fieldQuantity": "数量", "purchaseOrder.revision.fieldUnitPrice": "単価", "purchaseOrder.revision.fieldUnit": "単位", // — 発注フォーム(作成 / 編集 / 変更) — "purchaseOrder.form.createTitle": "発注を作成", "purchaseOrder.form.editTitle": "発注を編集", "purchaseOrder.form.amendTitle": "発注を変更", "purchaseOrder.form.linesLoadErrorTitle": "発注明細の読み込みに失敗しました", "purchaseOrder.form.editLinesLoadErrorMessage": "明細の読み込み中にエラーが発生しました。不完全な状態で保存しないよう、編集前に再度お試しください。", "purchaseOrder.form.amendLinesLoadErrorMessage": "明細の読み込み中にエラーが発生しました。不完全な状態で操作しないよう、変更前に再度お試しください。", "purchaseOrder.form.supplierLabel": "仕入先 *", "purchaseOrder.form.supplierReadonly": "仕入先", "purchaseOrder.form.supplierPlaceholder": "仕入先を選択", "purchaseOrder.form.receivingSiteLabel": "入荷拠点 *", "purchaseOrder.form.receivingSiteReadonly": "入荷拠点", "purchaseOrder.form.sitePlaceholder": "拠点を選択", "purchaseOrder.form.receivingSitePlaceholder": "入荷拠点を選択", "purchaseOrder.form.selectSitePlaceholder": "拠点を選択", "purchaseOrder.form.externalReferenceLabel": "外部参照番号", "purchaseOrder.form.externalReferencePlaceholder": "仕入先の注文参照番号", "purchaseOrder.form.orderDateLabel": "発注日", "purchaseOrder.form.lineItems": "明細", "purchaseOrder.form.itemLabel": "品目 *", "purchaseOrder.form.itemPlaceholder": "品目を検索...", "purchaseOrder.form.unitLabel": "単位 *", "purchaseOrder.form.unitPlaceholder": "単位を選択", "purchaseOrder.form.quantityLabel": "数量 *", "purchaseOrder.form.quantityAria": "数量", "purchaseOrder.form.unitPriceLabel": "単価 *", "purchaseOrder.form.unitPriceAria": "単価", "purchaseOrder.form.creating": "作成中...", "purchaseOrder.form.createSubmit": "発注を作成", "purchaseOrder.form.saving": "保存中...", "purchaseOrder.form.saveChanges": "変更を保存", "purchaseOrder.form.cancel": "キャンセル", "purchaseOrder.form.createdToast": "発注を作成しました", "purchaseOrder.form.updatedToast": "発注を更新しました", "purchaseOrder.form.noCompanyError": "会社が見つかりません。会社が存在することを確認してください。", "purchaseOrder.form.noBaseCurrencyError": "会社に基軸通貨が設定されていません。先に設定してください。", "purchaseOrder.form.itemRequired": "品目は必須です", "purchaseOrder.form.quantityRequired": "数量は必須です", "purchaseOrder.form.quantityPositiveInteger": "数量は正の整数で入力してください", "purchaseOrder.form.unitPriceRequired": "単価は必須です", "purchaseOrder.form.unitPriceDecimals": "単価は小数点以下2桁までで入力してください", "purchaseOrder.form.unitRequired": "単位は必須です", "purchaseOrder.form.supplierRequired": "仕入先は必須です", "purchaseOrder.form.receivingSiteRequired": "入荷拠点は必須です", "purchaseOrder.form.atLeastOneLine": "明細を少なくとも1件入力してください", // — 変更フォーム専用 — "purchaseOrder.amend.purchaseOrderLabel": "発注", "purchaseOrder.amend.reasonLabel": "変更理由", "purchaseOrder.amend.reasonPlaceholder": "この変更の理由(任意)", "purchaseOrder.amend.headerChanges": "ヘッダーの変更", "purchaseOrder.amend.headerChangesHint": "変更した項目はこのリビジョン番号で変更履歴に記録されます。", "purchaseOrder.amend.orderDate": "発注日", "purchaseOrder.amend.receivingSite": "入荷拠点", "purchaseOrder.amend.externalReference": "外部参照番号", "purchaseOrder.amend.existingLines": "既存明細", "purchaseOrder.amend.action": "操作", "purchaseOrder.amend.selectAction": "操作を選択", "purchaseOrder.amend.item": "品目", "purchaseOrder.amend.unit": "単位", "purchaseOrder.amend.quantity": "数量", "purchaseOrder.amend.unitPrice": "単価", "purchaseOrder.amend.newLines": "新規明細", "purchaseOrder.amend.addLine": "明細を追加", "purchaseOrder.amend.itemLabel": "品目 *", "purchaseOrder.amend.itemPlaceholder": "品目を検索...", "purchaseOrder.amend.unitLabel": "単位 *", "purchaseOrder.amend.unitPlaceholder": "単位を選択", "purchaseOrder.amend.quantityLabel": "数量 *", "purchaseOrder.amend.unitPriceLabel": "単価 *", "purchaseOrder.amend.receivingSiteLabel": "入荷拠点", "purchaseOrder.amend.selectSitePlaceholder": "拠点を選択", "purchaseOrder.amend.amending": "変更処理中...", "purchaseOrder.amend.submit": "変更を送信", "purchaseOrder.amend.cancel": "キャンセル", "purchaseOrder.amend.actionKeep": "KEEP", "purchaseOrder.amend.actionModify": "MODIFY", "purchaseOrder.amend.actionRemove": "REMOVE", "purchaseOrder.amend.atLeastOneChange": "少なくとも1つの変更(ヘッダー項目、MODIFY、REMOVE、または ADD)が必要です", "purchaseOrder.amend.itemRequired": "品目は必須です", "purchaseOrder.amend.unitRequired": "単位は必須です", "purchaseOrder.amend.quantityRequired": "数量は必須です", "purchaseOrder.amend.unitPriceRequired": "単価は必須です", "purchaseOrder.amend.unitPriceDecimals": "単価は小数点以下2桁までで入力してください", "purchaseOrder.amend.amendedToast": (props: { revision: string }) => `発注を変更しました(リビジョン ${props.revision})`, // — 受注(タイトル) — "salesOrder.list.title": "受注一覧", "salesOrder.list.create": "受注を作成", "salesOrder.detail.title": "受注詳細", "salesOrder.detail.loadErrorTitle": "受注の読み込みに失敗しました", "salesOrder.detail.loadErrorMessage": "受注の詳細を取得中にエラーが発生しました。", // — 受注一覧(テーブル列) — "salesOrder.field.documentNumber": "伝票番号", "salesOrder.field.customer": "得意先", "salesOrder.field.orderStatus": "受注ステータス", "salesOrder.field.fulfillment": "出荷", "salesOrder.field.billing": "請求", "salesOrder.field.totalAmount": "合計金額", "salesOrder.field.orderDate": "受注日", "salesOrder.field.createdDate": "作成日", "salesOrder.action.view": "詳細", // — 受注詳細 — "salesOrder.detail.infoTitle": "受注情報", "salesOrder.field.shippingAddress": "配送先住所", "salesOrder.field.billingAddress": "請求先住所", "salesOrder.field.rejectionReason": "却下理由", "salesOrder.field.closeReason": "完了理由", "salesOrder.detail.lineItems": "明細", "salesOrder.detail.noLineItems": "明細がありません。", "salesOrder.field.item": "品目", "salesOrder.field.uom": "単位", "salesOrder.field.ordered": "受注数量", "salesOrder.field.shipped": "出荷済み", "salesOrder.field.unitPrice": "単価", "salesOrder.field.subtotal": "小計", "salesOrder.detail.total": "合計", // — 受注アクション(操作パネル) — "salesOrder.actions.title": "操作", "salesOrder.actions.back": "受注一覧へ戻る", "salesOrder.actions.submit": "申請", "salesOrder.actions.confirm": "確定", "salesOrder.actions.reject": "却下", "salesOrder.actions.createOutboundShipment": "出荷を作成", "salesOrder.actions.close": "完了", "salesOrder.actions.cancel": "取消", "salesOrder.actions.amend": "変更", "salesOrder.actions.submittedToast": "受注を申請しました", "salesOrder.actions.confirmedToast": "受注を確定しました", "salesOrder.actions.rejectedToast": "受注を却下しました", "salesOrder.actions.closedToast": "受注を完了しました", "salesOrder.actions.cancelledToast": "受注を取消しました", "salesOrder.actions.revisionHistory": "変更履歴", "salesOrder.actions.edit": "編集", "salesOrder.actions.rejectDialogTitle": "受注を却下", "salesOrder.actions.rejectDialogDescription": "この受注を却下する理由を入力してください。", "salesOrder.actions.rejectReasonPlaceholder": "却下理由を入力", "salesOrder.actions.rejecting": "却下処理中...", "salesOrder.actions.confirmRejection": "却下を確定", "salesOrder.actions.closeDialogTitle": "受注を完了", "salesOrder.actions.closeDialogDescription": "この受注を完了する理由を任意で入力してください。", "salesOrder.actions.closeReasonOptional": "完了理由(任意)", "salesOrder.actions.closing": "完了処理中...", "salesOrder.actions.confirmClose": "完了を確定", // — 受注変更履歴(ドロワー) — "salesOrder.revision.title": "変更履歴", "salesOrder.revision.description": "ヘッダーと明細の変更をリビジョンごとに新しい順で表示します。", "salesOrder.revision.empty": "変更履歴はありません。この受注は作成以降変更されていません。", "salesOrder.revision.revisionLabel": (props: { number: string }) => `リビジョン v${props.number}`, "salesOrder.revision.headerField": "ヘッダー項目", "salesOrder.revision.before": "変更前", "salesOrder.revision.after": "変更後", "salesOrder.revision.action": "操作", "salesOrder.revision.item": "品目", "salesOrder.revision.changes": "変更内容", "salesOrder.revision.fieldOrderDate": "受注日", "salesOrder.revision.fieldShippingAddress": "配送先住所", "salesOrder.revision.fieldBillingAddress": "請求先住所", "salesOrder.revision.fieldItem": "品目", "salesOrder.revision.fieldQuantity": "数量", "salesOrder.revision.fieldUnitPrice": "単価", "salesOrder.revision.fieldUnit": "単位", "salesOrder.revision.fieldDescription": "摘要", "salesOrder.revision.fieldRequiresPhysicalFulfillment": "要出荷", // — 受注作成フォーム — "salesOrder.form.createTitle": "受注を作成", "salesOrder.form.editTitle": "受注を編集", "salesOrder.form.saving": "保存中...", "salesOrder.form.saveChanges": "変更を保存", "salesOrder.form.updatedToast": "受注を更新しました", "salesOrder.form.atLeastOneLine": "明細を少なくとも1件入力してください", "salesOrder.form.amendTitle": "受注を変更", "salesOrder.form.customerLabel": "得意先 *", "salesOrder.form.orderDateLabel": "受注日", "salesOrder.form.shippingAddressLabel": "配送先住所", "salesOrder.form.shippingAddressPlaceholder": "受注を申請する前に必須です", "salesOrder.form.billingAddressLabel": "請求先住所", "salesOrder.form.billingAddressPlaceholder": "任意の請求先住所", "salesOrder.form.linesLabel": "明細 *", "salesOrder.form.qtyPlaceholder": "数量", "salesOrder.form.unitPricePlaceholder": "単価", "salesOrder.form.removeLineAria": "明細を削除", "salesOrder.form.addLine": "明細を追加", "salesOrder.form.total": (props: { amount: string }) => `合計: ${props.amount}`, "salesOrder.form.creating": "作成中...", "salesOrder.form.createSubmit": "受注を作成", "salesOrder.form.cancel": "キャンセル", "salesOrder.form.createdToast": "受注を作成しました", "salesOrder.form.customerRequired": "得意先は必須です", "salesOrder.form.itemRequired": "品目は必須です", "salesOrder.form.quantityPositive": "数量は正の値で入力してください", "salesOrder.form.unitPriceRequired": "単価は必須です", // — 変更フォーム専用 — "salesOrder.amend.salesOrderLabel": "受注", "salesOrder.amend.reasonLabel": "変更理由", "salesOrder.amend.reasonPlaceholder": "この変更の理由(任意)", "salesOrder.amend.headerChanges": "ヘッダーの変更", "salesOrder.amend.headerChangesHint": "変更した項目はこのリビジョン番号で変更履歴に記録されます。", "salesOrder.amend.orderDate": "受注日", "salesOrder.amend.shippingAddress": "配送先住所", "salesOrder.amend.billingAddress": "請求先住所", "salesOrder.amend.existingLines": "既存明細", "salesOrder.amend.action": "操作", "salesOrder.amend.selectAction": "操作を選択", "salesOrder.amend.item": "品目", "salesOrder.amend.unit": "単位", "salesOrder.amend.quantity": "数量", "salesOrder.amend.unitPrice": "単価", "salesOrder.amend.newLines": "新規明細", "salesOrder.amend.addLine": "明細を追加", "salesOrder.amend.itemLabel": "品目 *", "salesOrder.amend.itemPlaceholder": "品目を検索...", "salesOrder.amend.unitLabel": "単位 *", "salesOrder.amend.unitPlaceholder": "単位を選択", "salesOrder.amend.quantityLabel": "数量 *", "salesOrder.amend.unitPriceLabel": "単価 *", "salesOrder.amend.amending": "変更処理中...", "salesOrder.amend.submit": "変更を送信", "salesOrder.amend.cancel": "キャンセル", "salesOrder.amend.actionKeep": "KEEP", "salesOrder.amend.actionModify": "MODIFY", "salesOrder.amend.actionRemove": "REMOVE", "salesOrder.amend.atLeastOneChange": "少なくとも1つの変更(ヘッダー項目、MODIFY、REMOVE、または ADD)が必要です", "salesOrder.amend.itemRequired": "品目は必須です", "salesOrder.amend.unitRequired": "単位は必須です", "salesOrder.amend.quantityRequired": "数量は必須です", "salesOrder.amend.unitPriceRequired": "単価は必須です", "salesOrder.amend.unitPriceDecimals": "単価は小数点以下2桁までで入力してください", "salesOrder.amend.amendedToast": (props: { revision: string }) => `受注を変更しました(リビジョン ${props.revision})`, // — 入荷 — "inboundShipment.list.title": "入荷一覧", "inboundShipment.list.create": "入荷を作成", "inboundShipment.detail.title": "入荷詳細", "inboundShipment.detail.loadErrorTitle": "入荷の読み込みに失敗しました", "inboundShipment.detail.loadErrorMessage": "入荷の詳細を取得中にエラーが発生しました。", "inboundShipment.edit.title": "入荷を編集", "inboundShipment.create.title": "入荷を作成", "inboundShipment.detail.tabLines": "明細", "inboundShipment.detail.tabJournal": "仕訳", "inboundShipment.detail.infoTitle": "入荷情報", "inboundShipment.detail.lineItems": "明細", "inboundShipment.detail.noLineItems": "明細がありません。", "inboundShipment.field.shipmentNumber": "入荷番号", "inboundShipment.field.receivingSite": "入荷拠点", "inboundShipment.field.receiptDate": "入荷日", "inboundShipment.field.lines": "明細数", "inboundShipment.field.openQty": "未入荷数量", "inboundShipment.field.sku": "SKU", "inboundShipment.field.ordered": "発注数量", "inboundShipment.field.toReceive": "入荷予定", "inboundShipment.field.thisReceipt": "今回入荷", "inboundShipment.field.openRemaining": "残数量", "inboundShipment.actions.back": "入荷一覧へ戻る", "inboundShipment.actions.edit": "入荷を編集", "inboundShipment.actions.settle": "計上 / 確定", "inboundShipment.actions.cancel": "入荷を取消", "inboundShipment.actions.createRemaining": "残数量の入荷を作成", "inboundShipment.actions.viewPurchaseOrder": "発注を表示", "inboundShipment.actions.postedToast": "入荷を計上しました", "inboundShipment.actions.cancelledToast": "入荷を取消しました", "inboundShipment.actions.remainingCreatedToast": "残数量の下書き入荷を作成しました", "inboundShipment.actions.fullyReceivedToast": "発注はすべて入荷済みです — 残数量はありません", "inboundShipment.journal.draftHint": "この入荷を計上すると、入荷の原価仕訳(借方 在庫 / 貸方 GR/IR 未達勘定 など)が転記されます。", "inboundShipment.journal.noEntries": "この入荷に紐づく仕訳はありません。", "inboundShipment.journal.account": "勘定科目", "inboundShipment.journal.debit": "借方", "inboundShipment.journal.credit": "貸方", "inboundShipment.edit.receiptDate": "入荷日", "inboundShipment.edit.receivedLines": "入荷明細", "inboundShipment.edit.linesEdited": (props: { count: number }) => `${props.count}件の明細を編集`, "inboundShipment.edit.poLineRef": "発注明細参照", "inboundShipment.edit.receivedQty": "入荷数量", "inboundShipment.edit.receivedQtyAria": "入荷数量", "inboundShipment.edit.uom": "単位", "inboundShipment.edit.onlyDraftEditable": "下書きステータスの入荷のみ編集できます。", "inboundShipment.edit.updatedToast": "入荷を更新しました", "inboundShipment.create.selectPO": "発注を選択", "inboundShipment.create.selectPODescription": "未入荷品目のある発注を参照して選択します", "inboundShipment.create.filterPlaceholder": "仕入先、発注番号、SKU、品目名で絞り込み...", "inboundShipment.create.noMatchingPO": "該当する発注がありません。", "inboundShipment.create.colSupplier": "仕入先", "inboundShipment.create.colPONumber": "発注番号", "inboundShipment.create.colOrderDate": "発注日", "inboundShipment.create.colOpenQty": "未入荷数量", "inboundShipment.create.remaining": (props: { qty: number }) => `残り ${props.qty}`, "inboundShipment.create.select": "選択", "inboundShipment.create.purchaseOrder": "発注", "inboundShipment.create.searchPlaceholder": "仕入先または発注番号で検索...", "inboundShipment.create.browse": "参照", "inboundShipment.create.supplierLabel": "仕入先:", "inboundShipment.create.receiptDate": "入荷日", "inboundShipment.create.colItem": "品目", "inboundShipment.create.colOrdered": "発注数量", "inboundShipment.create.colOtherReceipts": "他の入荷", "inboundShipment.create.colRemaining": "残数量", "inboundShipment.create.colReceiveQty": "入荷数量", "inboundShipment.create.colUom": "単位", "inboundShipment.create.allReceived": "この発注の全品目が入荷済みです。入荷する発注明細はありません。", "inboundShipment.create.submit": "入荷を作成", "inboundShipment.create.errorSelectPO": "先に発注を選択してください。", "inboundShipment.create.errorNoQty": "少なくとも1明細に0より大きい数量を入力してください", "inboundShipment.create.createdToast": "入荷を作成しました", "inboundShipment.form.purchaseOrderRequired": "発注は必須です", "inboundShipment.form.receiptDateRequired": "入荷日は必須です", "inboundShipment.form.atLeastOneLine": "明細を1件以上入力してください", "inboundShipment.form.itemRequired": "品目は必須です", "inboundShipment.form.quantityRequired": "数量は必須です", // — 支払 — "payment.list.title": "支払一覧", "payment.list.create": "支払を作成", "payment.detail.title": "支払詳細", "payment.detail.loadErrorTitle": "支払の読み込みに失敗しました", "payment.detail.loadErrorMessage": "支払の詳細を取得中にエラーが発生しました。", "payment.create.title": "支払を作成", "payment.detail.tabDetails": "詳細", "payment.detail.tabJournal": "仕訳", "payment.detail.infoTitle": "支払情報", "payment.detail.settlements": "消込", "payment.detail.noSettlements": "消込がありません。", "payment.field.paymentDate": "支払日", "payment.field.supplier": "仕入先", "payment.field.paymentAccount": "支払勘定", "payment.field.amount": "金額", "payment.field.currency": "通貨", "payment.field.postedAt": "計上日時", "payment.field.invoice": "請求書", "payment.field.dueDate": "支払期日", "payment.field.scheduled": "予定額", "payment.field.paid": "支払額", "payment.detail.creditSuffix": "(貸方)", "payment.actions.back": "支払一覧へ戻る", "payment.actions.post": "計上", "payment.actions.cancel": "取消", "payment.actions.reverse": "取消(逆仕訳)", "payment.actions.postedToast": "支払を計上しました", "payment.actions.cancelledToast": "支払を取消しました", "payment.actions.reversedToast": "支払を取消(逆仕訳)しました", "payment.actions.postDialogTitle": "支払を計上", "payment.actions.postDialogDescription": "この支払を計上します。総勘定元帳に仕訳(借方 買掛金 / 貸方 現金)が転記され、対象の支払予定明細が消し込まれます。", "payment.actions.posting": "計上中...", "payment.actions.confirmPost": "計上を確定", "payment.actions.cancelDialogTitle": "支払を取消", "payment.actions.cancelDialogDescription": "この下書き支払を取消します。総勘定元帳には影響しません(未計上のため)。", "payment.actions.keep": "保持", "payment.actions.cancelling": "取消中...", "payment.actions.confirmCancel": "取消を確定", "payment.actions.reverseDialogTitle": "支払を取消(逆仕訳)", "payment.actions.reverseDialogDescription": "この計上済みの支払を取消(逆仕訳)します。指定日付で逆仕訳が転記され、消込済みの支払予定明細が再びオープンになります。", "payment.actions.reversalDate": "取消日", "payment.actions.reversing": "取消中...", "payment.actions.confirmReversal": "取消を確定", "payment.journal.draftHint": "この支払を計上すると、仕訳(借方 買掛金 / 貸方 現金)が転記されます。", "payment.journal.noEntries": "この支払に紐づく仕訳はありません。", "payment.journal.account": "勘定科目", "payment.journal.debit": "借方", "payment.journal.credit": "貸方", "payment.create.method": "方法 *", "payment.create.modeBySupplier": "仕入先別", "payment.create.modeByInvoice": "請求書別", "payment.create.supplierRequired": "仕入先 *", "payment.create.invoiceRequired": "請求書 *", "payment.create.selectInvoicePlaceholder": "オープンな請求書を選択", "payment.create.supplierAuto": "仕入先(自動)", "payment.create.paymentAccountLabel": "支払勘定(現金) *", "payment.create.paymentAccountPlaceholder": "現金/銀行口座を選択", "payment.create.paymentDateLabel": "支払日 *", "payment.create.itemsToSettle": "消込対象(オープン)", "payment.create.selectSupplierHint": "仕入先を選択するとオープンな請求書が表示されます。", "payment.create.selectInvoiceHint": "請求書を選択すると消込対象が表示されます。", "payment.create.noOpenPayables": "オープンな(計上済み)買掛金はありません。", "payment.create.colInvoice": "請求書", "payment.create.colDueDate": "支払期日", "payment.create.colOpenBalance": "未消込残高", "payment.create.colPayment": "支払額", "payment.create.paymentTotal": "支払合計", "payment.create.settleAria": (props: { doc: string }) => `${props.doc} を消込`, "payment.create.submit": "支払を作成", "payment.create.errorSelectSupplierInvoice": "仕入先とオープンな請求書を選択してください", "payment.create.errorSelectItem": "消込対象を少なくとも1件選択してください", "payment.create.createdToast": "支払を作成しました", "payment.form.paymentAccountRequired": "支払勘定は必須です", "payment.form.paymentDateRequired": "支払日は必須です", // — 出荷 — "outboundShipment.list.title": "出荷一覧", "outboundShipment.list.create": "出荷を作成", "outboundShipment.detail.title": "出荷詳細", "outboundShipment.detail.loadErrorTitle": "出荷の読み込みに失敗しました", "outboundShipment.detail.loadErrorMessage": "出荷の詳細を取得中にエラーが発生しました。", "outboundShipment.detail.tabLines": "明細", "outboundShipment.detail.tabJournal": "仕訳", "outboundShipment.journal.draftHint": "この出荷を計上すると、出荷の原価仕訳(借方 売上原価 / 貸方 在庫 など)が転記されます。", "outboundShipment.journal.noEntries": "この出荷に紐づく仕訳はありません。", "outboundShipment.journal.account": "勘定科目", "outboundShipment.journal.debit": "借方", "outboundShipment.journal.credit": "貸方", "outboundShipment.create.title": "出荷を作成", "outboundShipment.detail.infoTitle": "出荷情報", "outboundShipment.detail.lines": "明細", "outboundShipment.detail.noLines": "明細がありません。", "outboundShipment.field.documentNumber": "伝票番号", "outboundShipment.field.source": "参照元", "outboundShipment.field.issueDate": "出荷日", "outboundShipment.field.item": "品目", "outboundShipment.field.storageLocation": "保管場所", "outboundShipment.field.quantity": "数量", "outboundShipment.field.createdDate": "作成日", "outboundShipment.actions.back": "出荷一覧へ戻る", "outboundShipment.actions.settle": "計上 / 確定", "outboundShipment.actions.cancel": "取消", "outboundShipment.actions.postedToast": "出荷を計上しました", "outboundShipment.actions.cancelledToast": "出荷を取消しました", "outboundShipment.create.salesOrderLabel": "受注 *", "outboundShipment.create.salesOrderPlaceholder": "確定済みの受注を選択", "outboundShipment.create.issueFromLabel": "出荷元(保管場所) *", "outboundShipment.create.issueDateLabel": "出荷日", "outboundShipment.create.openLinesTitle": "出荷対象のオープン明細(受注より)", "outboundShipment.create.colItem": "品目", "outboundShipment.create.colOrdered": "受注数量", "outboundShipment.create.colShipped": "出荷済み", "outboundShipment.create.colOpen": "残数量", "outboundShipment.create.issueHint": "上記のオープン明細はすべて選択した保管場所から出荷されます。出荷を計上すると在庫が減少し、受注が進行します。", "outboundShipment.create.submit": "出荷を作成", "outboundShipment.create.createdToast": "出荷を作成しました", "outboundShipment.form.salesOrderRequired": "受注は必須です", "outboundShipment.form.storageLocationRequired": "保管場所は必須です", // — 在庫状況 — "stockLevel.list.title": "在庫状況", "stockLevel.field.sku": "SKU", "stockLevel.field.item": "品目", "stockLevel.field.site": "拠点", "stockLevel.field.onHand": "現在庫", "stockLevel.field.reserved": "引当済み", "stockLevel.field.blocked": "保留", "stockLevel.field.available": "利用可能", "stockLevel.list.showCost": "原価を表示", "stockLevel.list.searchTruncated": (props: { total: number; limit: number }) => `検索は ${props.total} 件の品目に一致しました。最初の ${props.limit} 件のみ在庫を表示しています。検索条件を絞り込んでください。`, "stockLevel.list.loadError": (props: { message: string }) => `在庫状況の読み込みエラー: ${props.message}`, "stockLevel.list.selected": (props: { count: number }) => `${props.count}件選択中`, "stockLevel.list.clear": "クリア", "stockLevel.list.transfer": "移動", "stockLevel.list.transferTooltipSite": "移動元となる拠点を1つ選択してください", "stockLevel.list.transferTooltipItem": "品目を少なくとも1件選択してください", "stockLevel.list.allSites": "すべての拠点", "stockLevel.list.filterBySite": "拠点で絞り込み", "stockLevel.list.searchPlaceholder": "SKUまたは品目名で検索", "stockLevel.cost.title": (props: { sku: string; itemName: string }) => `原価 — ${props.sku}${props.itemName ? ` · ${props.itemName}` : ""}`, "stockLevel.cost.site": (props: { siteName: string }) => `拠点: ${props.siteName}`, "stockLevel.cost.loading": "読み込み中…", "stockLevel.cost.valuationPolicyTitle": "在庫評価ポリシー", "stockLevel.cost.policy": "ポリシー", "stockLevel.cost.costingMethod": "原価計算方法", "stockLevel.cost.company": "会社", "stockLevel.cost.assigned": "割当日", "stockLevel.cost.noPolicy": "在庫評価ポリシーはまだ割り当てられていません — この品目の最初の評価に影響する在庫移動時に会社のデフォルトが自動割当されます(それまでは標準原価履歴を以下に表示します)。", "stockLevel.cost.sectionStandard": "標準原価(新しい順)", "stockLevel.cost.sectionFifo": "原価レイヤー(先入先出・新しい順)", "stockLevel.cost.sectionAverage": "移動平均履歴(新しい順)", "stockLevel.cost.eventReceipt": "入庫", "stockLevel.cost.eventIssue": "出庫", "stockLevel.cost.version": "バージョン", "stockLevel.cost.unitCost": "単位原価", "stockLevel.cost.published": "公開日", "stockLevel.cost.received": "入庫日", "stockLevel.cost.receivedQty": "入庫数量", "stockLevel.cost.remainingQty": "残数量", "stockLevel.cost.sequence": "連番", "stockLevel.cost.type": "種別", "stockLevel.cost.quantity": "数量", "stockLevel.cost.movingAvgCost": "移動平均原価", "stockLevel.cost.qtyAfter": "移動後数量", // — 移動指示 — "transferOrder.list.title": "移動指示一覧", "transferOrder.list.create": "移動指示を作成", "transferOrder.detail.title": "移動指示詳細", "transferOrder.detail.loadErrorTitle": "移動指示の読み込みに失敗しました", "transferOrder.detail.loadErrorMessage": "移動指示の詳細を取得中にエラーが発生しました。", "transferOrder.edit.title": "移動指示を編集", "transferOrder.create.title": "移動指示を作成", "transferOrder.detail.infoTitle": "移動指示情報", "transferOrder.detail.notes": "備考", "transferOrder.detail.lineItems": "明細", "transferOrder.detail.noLineItems": "明細がありません。", "transferOrder.field.documentNumber": "伝票番号", "transferOrder.field.source": "移動元", "transferOrder.field.destination": "移動先", "transferOrder.field.plannedShipment": "出荷予定日", "transferOrder.field.expectedReceipt": "入荷予定日", "transferOrder.field.createdDate": "作成日", "transferOrder.field.updatedDate": "更新日", "transferOrder.field.closedAt": "完了日時", "transferOrder.field.item": "品目", "transferOrder.field.uom": "単位", "transferOrder.field.orderedQty": "指示数量", "transferOrder.field.shipped": "出荷済み", "transferOrder.field.received": "入荷済み", "transferOrder.actions.back": "移動指示一覧へ戻る", "transferOrder.actions.edit": "編集", "transferOrder.actions.open": "オープン", "transferOrder.actions.ship": "出荷", "transferOrder.actions.receive": "入荷", "transferOrder.actions.close": "完了", "transferOrder.actions.openedToast": "移動指示をオープンにしました", "transferOrder.actions.shippedToast": "移動指示を出荷しました", "transferOrder.actions.receivedToast": "移動指示を入荷しました", "transferOrder.actions.closedToast": "移動指示を完了しました", "transferOrder.form.sourceLabel": "移動元拠点(出荷元) *", "transferOrder.form.destinationLabel": "移動先拠点(入荷先) *", "transferOrder.form.plannedShipmentLabel": "出荷予定日 *", "transferOrder.form.expectedReceiptLabel": "入荷予定日 *", "transferOrder.form.notesLabel": "備考", "transferOrder.form.notesPlaceholder": "作業者メモ", "transferOrder.form.lineItems": "明細", "transferOrder.form.addLine": "明細を追加", "transferOrder.form.colItem": "品目", "transferOrder.form.colQty": "数量", "transferOrder.form.colUnit": "単位", "transferOrder.form.qtyPlaceholder": "1", "transferOrder.form.noLines": "明細がありません。「明細を追加」をクリックして開始してください。", "transferOrder.form.removeLineAria": "明細を削除", "transferOrder.create.submit": "移動指示を作成", "transferOrder.create.createdToast": "移動指示を作成しました", "transferOrder.edit.updatedToast": "移動指示を更新しました", "transferOrder.form.checkingStock": "移動元の在庫を確認中です — 再度お試しください。", "transferOrder.form.notInStock": "移動元拠点に在庫がありません", "transferOrder.form.sourceSiteRequired": "移動元拠点は必須です", "transferOrder.form.destinationSiteRequired": "移動先拠点は必須です", "transferOrder.form.plannedShipmentDateRequired": "出荷予定日は必須です", "transferOrder.form.expectedReceiptDateRequired": "入荷予定日は必須です", "transferOrder.form.atLeastOneLine": "明細を1件以上入力してください", "transferOrder.form.sourceDifferentFromDestination": "移動元拠点と移動先拠点は異なる拠点を選択してください", "transferOrder.form.expectedReceiptNotBeforePlanned": "入荷予定日は出荷予定日より前に設定できません", "transferOrder.form.receiptBeforeShipment": "入荷予定日は出荷予定日より前にできません", "transferOrder.form.itemRequired": "品目は必須です", "transferOrder.form.orderedQuantityRequired": "指示数量は必須です", "transferOrder.form.quantityMustBeNumber": "数量は数値で入力してください", "transferOrder.form.quantityMustBePositive": "数量は0より大きい値を入力してください", "transferOrder.warning.notInStock": "移動元拠点に在庫がありません — 保存前にこの拠点に在庫のある品目を選択してください。", "transferOrder.warning.exceedsStock": (props: { available: string }) => `移動元拠点の利用可能在庫を超えています(利用可能 ${props.available})`, // — ホーム — "page.home.title": "ホーム", // — 総勘定元帳: 会計期間 — "accountingPeriod.list.title": "会計期間一覧", "accountingPeriod.list.create": "会計期間を作成", "accountingPeriod.detail.title": "会計期間詳細", "accountingPeriod.detail.loadErrorTitle": "会計期間の読み込みに失敗しました", "accountingPeriod.detail.loadErrorMessage": "会計期間の詳細を取得中にエラーが発生しました。", "accountingPeriod.create.title": "会計期間作成", // — 総勘定元帳: 会計年度 — "fiscalYear.list.title": "会計年度一覧", "fiscalYear.list.create": "会計年度を作成", "fiscalYear.create.title": "会計年度作成", // — 総勘定元帳: 仕訳 — "journalEntry.list.title": "仕訳一覧", "journalEntry.list.create": "仕訳を作成", "journalEntry.detail.title": "仕訳詳細", "journalEntry.detail.loadErrorTitle": "仕訳の読み込みに失敗しました", "journalEntry.detail.loadErrorMessage": "仕訳の詳細を取得中にエラーが発生しました。", "journalEntry.create.title": "仕訳作成", // — 総勘定元帳: 試算表 — "trialBalance.list.title": "試算表", // — 在庫: 品目評価 — "itemValuation.field.item": "品目", "itemValuation.field.company": "会社", "itemValuation.field.valuationPolicy": "在庫評価方針", "itemValuation.field.createdAt": "作成日時", "itemValuation.action.view": "表示", "itemValuation.list.title": "品目評価一覧", "itemValuation.list.create": "評価方針を割り当て", "itemValuation.detail.title": "品目評価詳細", "itemValuation.detail.loadErrorTitle": "品目評価の読み込みに失敗しました", "itemValuation.detail.loadErrorMessage": "品目評価の詳細を取得中にエラーが発生しました。", "itemValuation.create.title": "評価方針の割当", "itemValuation.detail.infoTitle": "品目評価", "itemValuation.actions.title": "操作", "itemValuation.actions.back": "品目評価一覧へ戻る", "itemValuation.form.itemLabel": "品目 *", "itemValuation.form.companyLabel": "会社 *", "itemValuation.form.companyPlaceholder": "会社を選択", "itemValuation.form.policyLabel": "在庫評価方針 *", "itemValuation.form.policyPlaceholder": "方針を選択", "itemValuation.form.policyCompanyFirstPlaceholder": "先に会社を選択してください", "itemValuation.form.policyDescription": "選択した会社に属する方針のみ割り当てできます。", "itemValuation.form.assigning": "割当中...", "itemValuation.form.submit": "評価方針を割り当て", "itemValuation.form.cancel": "キャンセル", "itemValuation.form.assignedToast": "在庫評価方針を割り当てました", "itemValuation.form.companyRequired": "会社は必須です", "itemValuation.form.policyRequired": "在庫評価方針は必須です", "itemValuation.form.itemRequired": "品目は必須です", // — 在庫: 評価方針 — "valuationPolicy.field.name": "名称", "valuationPolicy.field.company": "会社", "valuationPolicy.field.costingMethod": "原価計算方式", "valuationPolicy.field.default": "デフォルト", "valuationPolicy.field.defaultYes": "デフォルト", "valuationPolicy.field.created": "作成日", "valuationPolicy.list.title": "在庫評価方針一覧", "valuationPolicy.list.create": "新規方針", "valuationPolicy.create.drawerTitle": "在庫評価方針を作成", "valuationPolicy.create.nameLabel": "名称 *", "valuationPolicy.create.namePlaceholder": "例: 標準原価(Tailor)", "valuationPolicy.create.companyLabel": "会社 *", "valuationPolicy.create.companyPlaceholder": "会社を選択", "valuationPolicy.create.costingMethodLabel": "原価計算方式 *", "valuationPolicy.create.costingMethodPlaceholder": "原価計算方式を選択", "valuationPolicy.create.costingMethodDescription": "標準: 品目別の標準原価で評価し入荷時に購買価格差異(PPV)を転記 / 先入先出: 古い原価レイヤーから順に消費 / 移動平均: 移動平均原価で出庫処理。先入先出と移動平均は実際原価で評価し、PPVは転記しません。", "valuationPolicy.create.isDefaultLabel": "会社のデフォルトに設定", "valuationPolicy.create.isDefaultDescription": "デフォルトに設定すると、明示的な割当のない品目は最初の評価に影響する在庫移動時にこの方針が自動割当されます(会社ごとに1つまで)。", "valuationPolicy.create.no": "いいえ", "valuationPolicy.create.yes": "はい", "valuationPolicy.create.cancel": "キャンセル", "valuationPolicy.create.creating": "作成中...", "valuationPolicy.create.submit": "在庫評価方針を作成", "valuationPolicy.create.createdToast": "在庫評価方針を作成しました", "valuationPolicy.create.nameRequired": "名称は必須です", "valuationPolicy.create.companyRequired": "会社は必須です", "valuationPolicy.create.accountRequired": "勘定科目は必須です", // — マスタデータ: 勘定科目 — "account.list.title": "勘定科目", "account.field.code": "コード", "account.field.name": "名称", "account.field.type": "種別", "account.field.status": "ステータス", "account.list.create": "勘定科目を作成", "account.create.title": "勘定科目作成", "account.detail.title": "勘定科目詳細", "account.detail.loadErrorTitle": "勘定科目の読み込みに失敗しました", "account.detail.loadErrorMessage": "勘定科目の詳細を取得中にエラーが発生しました。", "account.detail.infoTitle": "勘定科目情報", "account.edit.title": "勘定科目編集", "account.edit.loadErrorTitle": "勘定科目の読み込みに失敗しました", "account.edit.loadErrorMessage": "勘定科目の詳細を取得中にエラーが発生しました。", "account.field.company": "会社", "account.field.createdAt": "作成日時", "account.actions.title": "操作", "account.actions.back": "勘定科目一覧へ戻る", "account.actions.edit": "勘定科目を編集", "account.actions.deactivate": "無効化", "account.actions.reactivate": "有効化", "account.actions.deactivatedToast": "勘定科目を無効化しました", "account.actions.reactivatedToast": "勘定科目を有効化しました", "account.form.companyLabel": "会社", "account.form.companyPlaceholder": "会社を選択", "account.form.codeLabel": "コード *", "account.form.codePlaceholder": "例: 1200", "account.form.nameLabel": "名称 *", "account.form.namePlaceholder": "勘定科目名を入力", "account.form.typeLabel": "種別 *", "account.form.typePlaceholder": "種別を選択", "account.form.companyRequired": "会社は必須です", "account.form.codeRequired": "コードは必須です", "account.form.nameRequired": "名称は必須です", "account.form.typeRequired": "種別は必須です", "account.form.creating": "作成中...", "account.form.createSubmit": "勘定科目を作成", "account.form.saving": "保存中...", "account.form.saveChanges": "変更を保存", "account.form.cancel": "キャンセル", "account.form.createdToast": "勘定科目を作成しました", "account.form.updatedToast": "勘定科目を更新しました", "account.type.ASSET": "資産", "account.type.LIABILITY": "負債", "account.type.EQUITY": "純資産", "account.type.REVENUE": "収益", "account.type.EXPENSE": "費用", "account.action.view": "表示", // — マスタデータ: 会社 — "company.list.title": "会社一覧", "company.field.legalName": "正式名称", "company.field.taxId": "納税者番号", "company.field.baseCurrency": "基準通貨", "company.field.status": "ステータス", "company.field.createdDate": "作成日", "company.valuationPolicy.name": "名称", "company.valuationPolicy.costingMethod": "原価計算方式", "company.valuationPolicy.created": "作成日", "company.list.create": "会社を作成", "company.detail.title": "会社詳細", "company.detail.loadErrorTitle": "会社の読み込みに失敗しました", "company.detail.loadErrorMessage": "会社の詳細を取得中にエラーが発生しました。", "company.create.title": "会社作成", "company.edit.title": "会社編集", "company.edit.loadErrorTitle": "会社の読み込みに失敗しました", "company.edit.loadErrorMessage": "会社の詳細を取得中にエラーが発生しました。", // — 会社詳細 — "company.detail.infoTitle": "会社情報", "company.field.registrationNumber": "登録番号", "company.field.street": "番地", "company.field.city": "市区町村", "company.field.state": "都道府県", "company.field.postalCode": "郵便番号", "company.field.country": "国", "company.field.createdAt": "作成日時", // — 会社操作 — "company.actions.title": "操作", "company.actions.back": "会社一覧へ戻る", "company.actions.edit": "会社を編集", // — 会社評価方針操作 — "company.valuation.actions.changeDefault": "デフォルト原価計算方法を変更", "company.valuation.actions.createPolicy": "在庫評価方針を作成", // — デフォルト評価方針変更モーダル — "company.valuation.modal.title": "デフォルト在庫評価方針を変更", "company.valuation.modal.description": "この会社のデフォルトとして使用する方針を選択してください。各会社に設定できるデフォルトは1つです。", "company.valuation.modal.currentDefault": "現在のデフォルト:", "company.valuation.modal.notSet": "未設定", "company.valuation.modal.loading": "読み込み中…", "company.valuation.modal.selectPlaceholder": "新しいデフォルト方針を選択", "company.valuation.modal.cancel": "キャンセル", "company.valuation.modal.changing": "変更中...", "company.valuation.modal.setDefault": "デフォルトに設定", "company.valuation.modal.changedToast": "デフォルト在庫評価方針を変更しました", // — 評価方針ドロワー — "valuationPolicy.drawer.title": "在庫評価方針", "valuationPolicy.drawer.editTitle": "在庫評価方針を編集", "valuationPolicy.drawer.name": "名称", "valuationPolicy.drawer.costingMethod": "原価計算方式", "valuationPolicy.drawer.companyDefault": "会社デフォルト", "valuationPolicy.drawer.yes": "はい", "valuationPolicy.drawer.no": "いいえ", "valuationPolicy.drawer.postingAccounts": "転記勘定科目", "valuationPolicy.drawer.close": "閉じる", "valuationPolicy.drawer.edit": "編集", "valuationPolicy.drawer.costingMethodReadonly": "原価計算方式は変更できません(方式を変更するには新しい方針を作成してください)。", "valuationPolicy.drawer.namePlaceholder": "方針名を入力", "valuationPolicy.drawer.nameLabel": "名称 *", "valuationPolicy.drawer.setDefault": "会社のデフォルトに設定", "valuationPolicy.drawer.cancel": "キャンセル", "valuationPolicy.drawer.saving": "保存中...", "valuationPolicy.drawer.saveChanges": "変更を保存", "valuationPolicy.drawer.updatedToast": "在庫評価方針を更新しました", "valuationPolicy.drawer.loading": "読み込み中…", "valuationPolicy.drawer.nameRequired": "名称は必須です", "valuationPolicy.drawer.accountRequired": "勘定科目は必須です", "valuationPolicy.drawer.accountInventory": "在庫勘定", "valuationPolicy.drawer.accountAccrual": "未達勘定(GR/IR)", "valuationPolicy.drawer.accountCogs": "売上原価勘定", "valuationPolicy.drawer.accountPpv": "購買価格差異勘定", "valuationPolicy.drawer.accountAdjustment": "調整勘定", "valuationPolicy.drawer.accountStdCostAdj": "標準原価調整勘定", "valuationPolicy.drawer.accountInvoicePriceVar": "請求価格差異勘定", "valuationPolicy.drawer.accountConsumedPriceVar": "消費価格差異勘定", // — 会社編集フォーム — "company.form.legalNameLabel": "正式名称 *", "company.form.legalNamePlaceholder": "正式名称を入力", "company.form.taxIdLabel": "納税者番号", "company.form.taxIdPlaceholder": "納税者番号を入力", "company.form.registrationNumberLabel": "登録番号", "company.form.registrationNumberPlaceholder": "登録番号を入力", "company.form.streetLabel": "番地", "company.form.streetPlaceholder": "番地を入力", "company.form.cityLabel": "市区町村", "company.form.cityPlaceholder": "市区町村を入力", "company.form.stateLabel": "都道府県", "company.form.statePlaceholder": "都道府県を入力(任意)", "company.form.postalCodeLabel": "郵便番号", "company.form.postalCodePlaceholder": "郵便番号を入力", "company.form.countryLabel": "国", "company.form.countryPlaceholder": "国を入力", "company.form.saving": "保存中...", "company.form.saveChanges": "変更を保存", "company.form.cancel": "キャンセル", "company.form.updatedToast": "会社を更新しました", "company.form.legalNameRequired": "正式名称は必須です", // — 会社作成フォーム — "company.form.baseCurrencyLabel": "基準通貨", "company.form.currencyPlaceholder": "通貨を選択", "company.form.creating": "作成中...", "company.form.createSubmit": "会社を作成", "company.form.createdToast": "会社を作成しました", "company.form.baseCurrencyRequired": "基準通貨は必須です", "company.form.streetRequired": "番地は必須です", "company.form.cityRequired": "市区町村は必須です", "company.form.postalCodeRequired": "郵便番号は必須です", "company.form.countryRequired": "国は必須です", // — マスタデータ: 品目 — "item.field.sku": "SKU", "item.field.name": "名称", "item.field.unit": "単位", "item.field.status": "ステータス", "item.field.createdDate": "作成日", "item.field.barcode": "バーコード", "item.list.title": "品目一覧", "item.list.create": "品目を作成", "item.detail.title": "品目詳細", "item.detail.loadErrorTitle": "品目の読み込みに失敗しました", "item.detail.loadErrorMessage": "品目の詳細を取得中にエラーが発生しました。", "item.detail.infoTitle": "品目情報", "item.create.title": "品目作成", // — 品目詳細タブ — "item.tab.common": "共通情報", "item.tab.purchasing": "調達設定", "item.tab.selling": "販売設定", "item.tab.valuation": "評価設定", // — 品目操作 — "item.actions.title": "操作", "item.actions.back": "品目一覧へ戻る", "item.actions.edit": "品目を編集", "item.actions.setValuation": "品目評価を設定", // — 品目編集モーダル — "item.modal.editTitle": "品目を編集", "item.modal.editDescription": "品目の基本情報を編集します。", "item.modal.loading": "読み込み中…", // — 品目フォーム — "item.form.skuLabel": "SKU *", "item.form.skuPlaceholder": "SKUを入力", "item.form.nameLabel": "名称 *", "item.form.namePlaceholder": "名称を入力", "item.form.editNameLabel": "名称 *", "item.form.editNamePlaceholder": "品目名を入力", "item.form.barcodeLabel": "バーコード", "item.form.barcodePlaceholder": "バーコードを入力(任意)", "item.form.unitLabel": "単位 *", "item.form.unitPlaceholder": "単位を選択", "item.form.creating": "作成中...", "item.form.createSubmit": "品目を作成", "item.form.saving": "保存中...", "item.form.saveChanges": "変更を保存", "item.form.cancel": "キャンセル", "item.form.createdToast": "品目を作成しました", "item.form.updatedToast": "品目を更新しました", "item.form.skuRequired": "SKUは必須です", "item.form.nameRequired": "名称は必須です", "item.form.unitRequired": "単位は必須です", // — 調達情報 — "item.purchasing.title": "調達情報", "item.purchasing.notAdopted": "調達対象になっていません。この品目は発注明細に追加できません。", "item.purchasing.adopt": "調達対象にする", "item.purchasing.adoptTitle": "調達対象にする", "item.purchasing.editTitle": "調達情報を編集", "item.purchasing.dialogDescription": "変更は既存の発注には影響せず、以後に作成される発注明細から反映されます。", "item.purchasing.receiptExpected": "入荷を伴う", "item.purchasing.receiptExpectedHint": "この品目の発注が入荷を伴うかどうか。", "item.purchasing.yes": "はい", "item.purchasing.no": "いいえ", "item.purchasing.save": "保存", "item.purchasing.withdraw": "調達対象から外す", "item.purchasing.withdrawConfirmTitle": "調達対象から外しますか?", "item.purchasing.withdrawConfirmMessage": "以後、この品目を発注明細に追加できなくなります。既存の発注はそのまま処理されます。", "item.purchasing.adoptedToast": "調達対象にしました", "item.purchasing.updatedToast": "調達情報を更新しました", "item.purchasing.withdrawnToast": "調達対象から外しました", // — 販売情報 — "item.selling.title": "販売情報", "item.selling.notAdopted": "販売対象になっていません。この品目は受注明細に追加できません。", "item.selling.adopt": "販売対象にする", "item.selling.adoptTitle": "販売対象にする", "item.selling.editTitle": "販売情報を編集", "item.selling.dialogDescription": "変更は既存の受注には影響せず、以後に作成される受注明細から反映されます。", "item.selling.shipmentExpected": "出荷を伴う", "item.selling.shipmentExpectedHint": "この品目の販売が出荷を伴うかどうか。", "item.selling.yes": "はい", "item.selling.no": "いいえ", "item.selling.save": "保存", "item.selling.withdraw": "販売対象から外す", "item.selling.withdrawConfirmTitle": "販売対象から外しますか?", "item.selling.withdrawConfirmMessage": "以後、この品目を受注明細に追加できなくなります。既存の受注はそのまま処理されます。", "item.selling.adoptedToast": "販売対象にしました", "item.selling.updatedToast": "販売情報を更新しました", "item.selling.withdrawnToast": "販売対象から外しました", // — 品目評価 — "item.valuations.title": "品目評価", "item.valuations.empty": "品目評価が設定されていません。右の「品目評価を設定」から割り当ててください。", "item.valuations.colCompany": "会社", "item.valuations.colCostingMethod": "原価計算方法", "item.valuations.colPolicy": "在庫評価方針", "item.valuations.colSetOn": "設定日", "item.valuations.createStandardCost": "標準原価を作成", "item.valuations.reviseStandardCost": "標準原価を改定", "item.valuations.standardCostLabel": "この品目の標準原価(単位)", "item.valuations.notSet": "未設定", // — 品目標準原価カード — "item.stdCostCard.title": "標準原価", "item.stdCostCard.hint": "標準原価は会社ごとではなく品目全体で1つです。品目の方針が標準原価計算である会社でのみ在庫の評価に使われます。", // — 品目標準原価モーダル — "item.stdCost.createTitle": "標準原価を作成", "item.stdCost.reviseTitle": "標準原価を改定", "item.stdCost.description": "標準原価計算方法でこの品目を評価するには、標準原価(単位原価)が必要です。", "item.stdCost.fieldLabel": "標準原価 *", "item.stdCost.fieldPlaceholder": "例: 12.50", "item.stdCost.fieldDescription": "標準原価計算方針で評価される品目の単位原価です。この品目の標準原価として公開され、以降の在庫移動はこの原価で評価されます(購買価格との差異は購買価格差異として転記されます)。", "item.stdCost.cancel": "キャンセル", "item.stdCost.creating": "作成中...", "item.stdCost.revising": "改定中...", "item.stdCost.create": "標準原価を作成", "item.stdCost.revise": "標準原価を改定", "item.stdCost.createdToast": "標準原価を作成しました", "item.stdCost.revisedToast": "標準原価を改定しました", "item.stdCost.validation": "0以上の数値を入力してください", // — 品目評価設定ドロワー — "item.valuationDrawer.setTitle": "品目評価を設定", "item.valuationDrawer.changeTitle": "品目評価を変更", "item.valuationDrawer.companyLabel": "会社", "item.valuationDrawer.companySelectLabel": "会社 *", "item.valuationDrawer.companyPlaceholder": "会社を選択", "item.valuationDrawer.policyLabel": "在庫評価方針 *", "item.valuationDrawer.policyPlaceholder": "方針を選択", "item.valuationDrawer.policySelectCompanyFirst": "先に会社を選択してください", "item.valuationDrawer.policyDescription": "選択した会社に属する方針のみ割り当てできます。元帳履歴のある品目は方針を変更できません。", "item.valuationDrawer.cancel": "キャンセル", "item.valuationDrawer.setting": "設定中...", "item.valuationDrawer.submit": "品目評価を設定", "item.valuationDrawer.savedToast": "品目評価を設定しました", "item.valuationDrawer.companyRequired": "会社は必須です", "item.valuationDrawer.policyRequired": "在庫評価方針は必須です", // — マスタデータ: 商品 — "product.field.code": "コード", "product.field.name": "名称", "product.field.status": "ステータス", "product.field.createdDate": "作成日", "product.action.view": "表示", "product.list.title": "商品一覧", "product.detail.title": "商品詳細", "product.detail.loadErrorTitle": "商品の読み込みに失敗しました", "product.detail.loadErrorMessage": "商品の詳細を取得中にエラーが発生しました。", // — 商品詳細 — "product.detail.infoTitle": "商品情報", "product.field.unit": "単位", "product.field.description": "説明", "product.detail.attributesTitle": "属性", "product.detail.noAttributes": "属性が設定されていません。", "product.detail.variantsTitle": "バリアント", "product.detail.noVariantsTitle": "バリアントなし", "product.detail.noVariantsMessage": "バリアントはAPIを通じて属性の組み合わせから生成されます。", "product.field.sku": "SKU", "product.field.itemName": "品目名", "product.field.itemStatus": "品目ステータス", "product.actions.viewItem": "品目を表示", // — 商品操作 — "product.actions.title": "操作", "product.actions.back": "商品一覧へ戻る", // — マスタデータ: 商品属性 — "productAttribute.field.code": "コード", "productAttribute.field.name": "名称", "productAttribute.field.createdDate": "作成日", "productAttribute.field.label": "ラベル", "productAttribute.action.edit": "編集", "productAttribute.list.title": "商品属性一覧", "productAttribute.detail.title": "商品属性", "productAttribute.detail.loadErrorTitle": "属性の読み込みに失敗しました", "productAttribute.detail.loadErrorMessage": "属性の詳細を取得中にエラーが発生しました。", // — 商品属性詳細 — "productAttribute.detail.infoTitle": "属性", "productAttribute.detail.valuesTitle": "値", "productAttribute.detail.valuesDescription": "この属性の定義済みの値です。ラベルは作成後に変更できません。", // — マスタデータ: 拠点 — "site.field.name": "名称", "site.field.type": "種別", "site.field.company": "会社", "site.field.city": "市区町村", "site.field.country": "国", "site.field.status": "ステータス", "site.field.createdDate": "作成日", "site.action.view": "表示", "site.list.title": "拠点一覧", "site.list.create": "拠点を作成", "site.detail.title": "拠点詳細", "site.detail.loadErrorTitle": "拠点の読み込みに失敗しました", "site.detail.loadErrorMessage": "拠点の詳細を取得中にエラーが発生しました。", "site.create.title": "拠点作成", "site.edit.title": "拠点編集", "site.edit.loadErrorTitle": "拠点の読み込みに失敗しました", "site.edit.loadErrorMessage": "拠点の詳細を取得中にエラーが発生しました。", // — 拠点詳細 — "site.detail.infoTitle": "拠点情報", "site.field.street": "番地", "site.field.state": "都道府県", "site.field.postalCode": "郵便番号", "site.field.timezone": "タイムゾーン", "site.field.createdAt": "作成日時", // — 拠点操作 — "site.actions.title": "操作", "site.actions.back": "拠点一覧へ戻る", "site.actions.edit": "拠点を編集", // — 拠点編集フォーム — "site.form.nameLabel": "名称 *", "site.form.namePlaceholder": "拠点名を入力", "site.form.typeLabel": "種別 *", "site.form.typePlaceholder": "種別を選択", "site.form.streetLabel": "番地", "site.form.streetPlaceholder": "番地を入力", "site.form.cityLabel": "市区町村", "site.form.cityPlaceholder": "市区町村を入力", "site.form.stateLabel": "都道府県", "site.form.statePlaceholder": "都道府県を入力(任意)", "site.form.postalCodeLabel": "郵便番号", "site.form.postalCodePlaceholder": "郵便番号を入力", "site.form.countryLabel": "国", "site.form.countryPlaceholder": "国を選択", "site.form.timezoneLabel": "タイムゾーン", "site.form.timezonePlaceholder": "タイムゾーンを選択", "site.form.timezoneInputPlaceholder": "例: Asia/Tokyo", "site.form.saving": "保存中...", "site.form.saveChanges": "変更を保存", "site.form.cancel": "キャンセル", "site.form.updatedToast": "拠点を更新しました", "site.form.nameRequired": "名称は必須です", "site.form.typeRequired": "種別は必須です", // — 拠点作成フォーム — "site.form.companyLabel": "会社", "site.form.companyPlaceholder": "会社を選択", "site.form.creating": "作成中...", "site.form.createSubmit": "拠点を作成", "site.form.createdToast": "拠点を作成しました", "site.form.companyRequired": "会社は必須です", "site.form.streetRequired": "番地は必須です", "site.form.cityRequired": "市区町村は必須です", "site.form.postalCodeRequired": "郵便番号は必須です", "site.form.countryRequired": "国は必須です", "site.form.timezoneRequired": "タイムゾーンは必須です", // — マスタデータ: 仕入先 — "supplier.field.name": "名称", "supplier.field.type": "種別", "supplier.field.company": "会社", "supplier.field.preferredCurrency": "優先通貨", "supplier.field.status": "ステータス", "supplier.field.createdDate": "作成日", "supplier.field.roles": "ロール", "supplier.field.createdAt": "作成日時", "supplier.action.view": "表示", "supplier.list.title": "仕入先一覧", "supplier.list.create": "仕入先を作成", "supplier.detail.title": "仕入先詳細", "supplier.detail.loadErrorTitle": "仕入先の読み込みに失敗しました", "supplier.detail.loadErrorMessage": "仕入先の詳細を取得中にエラーが発生しました。", "supplier.detail.infoTitle": "仕入先情報", "supplier.detail.identificationsTitle": "識別情報", "supplier.detail.noIdentifications": "識別情報がありません。", "supplier.detail.colType": "種別", "supplier.detail.colValue": "値", "supplier.detail.colCountry": "国", "supplier.detail.colValidFrom": "有効開始日", "supplier.detail.colValidTo": "有効終了日", "supplier.create.title": "仕入先作成", "supplier.edit.title": "仕入先編集", "supplier.edit.loadErrorTitle": "仕入先の読み込みに失敗しました", "supplier.edit.loadErrorMessage": "仕入先の詳細を取得中にエラーが発生しました。", // — 仕入先操作 — "supplier.actions.title": "操作", "supplier.actions.back": "仕入先一覧へ戻る", "supplier.actions.edit": "仕入先を編集", "supplier.actions.setTolerance": "請求許容差を設定", // — 仕入先識別種別 — "supplier.idType.TAX_ID": "納税者番号", "supplier.idType.VAT": "VAT", "supplier.idType.DUNS": "DUNS", "supplier.idType.COMPANY_REGISTRY": "会社登録番号", "supplier.idType.NATIONAL_ID": "国民ID", "supplier.idType.OTHER": "その他", // — 仕入先作成フォーム — "supplier.form.nameLabel": "名称 *", "supplier.form.namePlaceholder": "仕入先名を入力", "supplier.form.typeLabel": "種別 *", "supplier.form.typePlaceholder": "種別を選択", "supplier.form.typeOrganization": "法人", "supplier.form.typeIndividual": "個人", "supplier.form.companyLabel": "会社 *", "supplier.form.companyPlaceholder": "会社を選択", "supplier.form.preferredCurrencyLabel": "優先通貨", "supplier.form.currencyPlaceholder": "通貨を選択(任意)", "supplier.form.taxIdSectionTitle": "納税者番号(任意)", "supplier.form.taxIdLabel": "税務ID", "supplier.form.taxIdPlaceholder": "例: GB123456789", "supplier.form.taxIdCountryLabel": "発行国", "supplier.form.taxIdCountryPlaceholder": "ISOコード、例: GB", "supplier.form.taxIdErrorToast": "税務IDを保存できませんでした: ", "supplier.form.creating": "作成中...", "supplier.form.createSubmit": "仕入先を作成", "supplier.form.cancel": "キャンセル", "supplier.form.createdToast": "仕入先を作成しました", "supplier.form.nameRequired": "名称は必須です", "supplier.form.typeRequired": "種別は必須です", "supplier.form.companyRequired": "会社は必須です", // — 仕入先編集フォーム — "supplier.form.identificationsTitle": "識別情報", "supplier.form.addIdentification": "追加", "supplier.form.noIdentifications": "識別情報がありません。「追加」をクリックして作成してください。", "supplier.form.idTypeLabel": "種別", "supplier.form.idTypePlaceholder": "種別", "supplier.form.idValueLabel": "値", "supplier.form.idValuePlaceholder": "例: GB123456789", "supplier.form.idCountryLabel": "国", "supplier.form.idCountryPlaceholder": "GB", "supplier.form.removeIdentificationAria": "識別情報を削除", "supplier.form.saving": "保存中...", "supplier.form.saveChanges": "変更を保存", "supplier.form.updatedToast": "仕入先を更新しました", "supplier.form.partialErrorToast": "仕入先を保存しましたが、一部の識別情報に失敗しました: ", // — 請求許容差ドロワー — "supplier.tolerance.drawerTitle": "請求許容差を設定", "supplier.tolerance.quantityAbsolute": "数量許容差(絶対値)", "supplier.tolerance.quantityAbsoluteDescription": "許容する数量差異の絶対値。例: 5(最大5単位まで許容)", "supplier.tolerance.quantityPercentage": "数量許容差(割合)", "supplier.tolerance.quantityPercentageDescription": "許容する数量差異の割合(小数)。例: 0.05 = 5%", "supplier.tolerance.unitPriceAbsolute": "単価許容差(絶対値)", "supplier.tolerance.unitPriceAbsoluteDescription": "許容する単価差異の絶対値。例: 0.50", "supplier.tolerance.unitPricePercentage": "単価許容差(割合)", "supplier.tolerance.unitPricePercentageDescription": "許容する単価差異の割合(小数)。例: 0.05 = 5%", "supplier.tolerance.placeholder": "厳格照合は空欄のまま", "supplier.tolerance.cancel": "キャンセル", "supplier.tolerance.setting": "設定中...", "supplier.tolerance.submit": "請求許容差を設定", "supplier.tolerance.savedToast": "請求許容差を保存しました", "supplier.tolerance.validation": "0以上の数値を入力してください", "supplier.tolerance.loading": "読み込み中…", // — 仕入先請求許容差表示カード — "supplier.toleranceCard.title": "請求許容差", "supplier.toleranceCard.loading": "読み込み中…", "supplier.toleranceCard.empty": "未設定", "supplier.toleranceCard.notSet": "未設定(厳格照合)", // — 調達: 請求書作成 — "invoice.create.title": "請求書作成", // — 請求書作成フォーム — "invoice.form.invoiceTypeLabel": "この請求書の種類は? *", "invoice.form.invoiceTypePlaceholder": "請求書種別を選択", "invoice.form.invoiceTypePoName": "発注に対する請求書(発注との照合)", "invoice.form.invoiceTypeOtherName": "その他の請求書(発注なし — 運賃・手数料・調整等)", "invoice.form.purchaseOrderLabel": "発注 *", "invoice.form.purchaseOrderPlaceholder": "発注済みの発注を選択", "invoice.form.supplierLabel": "仕入先 *", "invoice.form.payableControlAccountLabel": "買掛金管理勘定 *", "invoice.form.payableAccountPlaceholder": "負債勘定を選択", "invoice.form.distributionAccountLabel": "配賦勘定 *", "invoice.form.distributionAccountPlaceholder": "各明細の仕訳先勘定を選択", "invoice.form.documentDateLabel": "伝票日付", "invoice.form.supplierInvoiceLabel": "仕入先請求書番号", "invoice.form.externalDocNumPlaceholder": "仕入先の請求書番号(任意)", "invoice.form.previewHeading": "請求明細(発注より)", "invoice.form.invoiceLinesLabel": "請求明細 *", "invoice.form.lineNumber": (props: { number: number }) => `明細 ${props.number}`, "invoice.form.descriptionPlaceholder": "説明(例:運賃)", "invoice.form.headerDescriptionLabel": "説明", "invoice.form.headerDescriptionPlaceholder": "請求書の説明(任意)", "invoice.form.amountPlaceholder": "金額", "invoice.form.removeLineAria": "明細を削除", "invoice.form.addLine": "明細を追加", "invoice.form.removeDistributionAria": "配賦を削除", "invoice.form.addDistribution": "配賦を追加", "invoice.form.distributionsLabel": "配賦", "invoice.form.distributionsHint": "明細金額を1つ以上の費用勘定に配賦します。", "invoice.form.creating": "作成中...", "invoice.form.createSubmit": "請求書を作成", "invoice.form.cancel": "キャンセル", "invoice.form.createdToast": "請求書を作成しました", // — 請求書編集 — "invoice.edit.title": "請求書を編集", "invoice.edit.save": "保存", "invoice.edit.saving": "保存中...", "invoice.edit.updatedToast": "請求書を更新しました", "invoice.edit.dueScheduleInvalid": "支払期日が設定されていないため、支払予定を調整できませんでした。", "invoice.edit.notDraft": "編集できるのは下書き(DRAFT)の請求書のみです。", "invoice.edit.descriptionLabel": "説明", "invoice.edit.descriptionPlaceholder": "請求書の説明", "invoice.edit.poLinesReadOnly": "PO由来の明細は連携先の発注に従うため、ここでは編集できません。", "invoice.form.payableAccountRequired": "買掛金管理勘定は必須です", "invoice.form.documentDateRequired": "伝票日付は必須です", "invoice.form.purchaseOrderRequired": "発注は必須です", "invoice.form.distributionAccountRequired": "配賦勘定は必須です", "invoice.form.supplierRequired": "仕入先は必須です", "invoice.form.currencyUnresolved": "この仕入先または会社の通貨を解決できませんでした。", "invoice.form.linesNotLoaded": "発注明細の読み込み中です。再度お試しください。", "invoice.form.nonReceiptPoUnsupported": "サービスまたは入荷不要の明細を含む発注は、現在このフォームから請求書を作成できません。", "invoice.form.atLeastOneLineRequired": "説明と正の金額を持つ明細を少なくとも1件追加してください", "invoice.form.atLeastOneDistributionRequired": "配賦を少なくとも1件追加してください", "invoice.form.lineDescriptionRequired": "説明は必須です", "invoice.form.lineAmountInvalid": "正の金額を入力してください", // — 請求書仕訳タブ — "invoice.journal.account": "勘定科目", "invoice.journal.debit": "借方", "invoice.journal.credit": "貸方", "invoice.journal.loading": "読み込み中...", "invoice.journal.noEntries": "この請求書に関連する仕訳がありません。", "invoice.journal.postedEntries": "計上済み仕訳(総勘定元帳に転記済み)。", "invoice.journal.previewHint": "計上(postAccountPayableDocument)により以下の仕訳が転記されます(プレビュー)。発注単価と請求単価が異なる場合、計上時に取得原価調整仕訳も転記されます。", "invoice.journal.apControlAccount": "買掛金管理勘定", "invoice.journal.apBooking": "買掛金計上", "invoice.journal.journalEntry": "仕訳", "invoice.journal.entryKindAp": "買掛金計上", "invoice.journal.entryKindAcqAdj": "取得原価調整", "invoice.journal.entryKindInventory": "在庫原価", // — 請求書関連書類 — "invoice.relatedDocs.title": "関連書類", "invoice.relatedDocs.order": "発注", "invoice.relatedDocs.receipt": "入荷", // — 請求書書類モーダル — "invoice.modal.purchaseOrderTitle": "発注", "invoice.modal.inboundShipmentTitle": "入荷", "invoice.modal.purchaseOrderNotFound": "発注が見つかりません。", "invoice.modal.inboundShipmentNotFound": "入荷が見つかりません。", "invoice.modal.close": "閉じる", // — 会社詳細タブ — "company.detail.tabBasic": "基本情報", "company.detail.tabValuation": "在庫評価方針", // — 会社評価方針バナー — "company.valuation.currentDefault": "デフォルト原価計算方法", "company.valuation.noDefaultHint": "デフォルト方針が設定されていません。明示的に割り当てられていない品目は、初回の評価影響移動時に会社のデフォルトが自動設定されます。", // — ユーザー管理: プロフィール — "profile.list.title": "マイプロフィール", "profile.list.loadErrorTitle": "プロフィールの読み込みに失敗しました", "profile.list.loadErrorMessage": "プロフィールの取得中にエラーが発生しました。", "profile.edit.title": "プロフィール編集", "profile.detail.infoTitle": "プロフィール情報", "profile.field.name": "氏名", "profile.field.email": "メールアドレス", "profile.field.status": "ステータス", "profile.field.assignedRoles": "割り当てロール", "profile.actions.title": "操作", "profile.actions.signOut": "サインアウト", // — ユーザー管理: プロフィールフォーム — "profile.form.nameLabel": "氏名", "profile.form.namePlaceholder": "氏名を入力", "profile.form.emailLabel": "メールアドレス", "profile.form.emailPlaceholder": "メールアドレスを入力", "profile.form.saving": "保存中...", "profile.form.saveChanges": "変更を保存", "profile.form.cancel": "キャンセル", "profile.form.updatedToast": "プロフィールを更新しました", "profile.form.nameRequired": "氏名は必須です", "profile.form.emailInvalid": "有効なメールアドレスを入力してください", // — ユーザー管理: ロール — "role.field.name": "名称", "role.field.description": "説明", "role.field.status": "ステータス", "role.field.permissions": "権限", "role.action.view": "表示", "role.list.title": "ロール一覧", "role.list.create": "ロールを作成", "role.detail.title": "ロール詳細", "role.detail.loadErrorTitle": "ロールの読み込みに失敗しました", "role.detail.loadErrorMessage": "ロールの詳細を取得中にエラーが発生しました。", "role.create.title": "ロール作成", "role.edit.title": "ロール編集", "role.edit.loadErrorTitle": "ロールの読み込みに失敗しました", "role.edit.loadErrorMessage": "ロールの詳細を取得中にエラーが発生しました。", // — ユーザー管理: ロール詳細 — "role.detail.infoTitle": "ロール情報", "role.detail.createdAt": "作成日時", "role.detail.updatedAt": "更新日時", "role.detail.permissionsTitle": "権限", "role.detail.noPermissions": "権限が割り当てられていません。", // — ユーザー管理: ロール操作 — "role.actions.title": "操作", "role.actions.back": "ロール一覧へ戻る", "role.actions.edit": "ロールを編集", "role.actions.deactivate": "ロールを無効化", "role.actions.reactivate": "ロールを有効化", "role.actions.deactivatedToast": "ロールを無効化しました", "role.actions.reactivatedToast": "ロールを有効化しました", // — ユーザー管理: ロールフォーム — "role.form.nameLabel": "名称", "role.form.namePlaceholder": "ロール名を入力", "role.form.descriptionLabel": "説明", "role.form.descriptionPlaceholder": "説明を入力", "role.form.permissionsLabel": "権限", "role.form.noPermissions": "利用可能な権限がありません。", "role.form.saving": "保存中...", "role.form.saveChanges": "変更を保存", "role.form.cancel": "キャンセル", "role.form.updatedToast": "ロールを更新しました", "role.form.updatedToastDescription": "権限の変更が反映されるまで時間がかかる場合があります。", "role.form.loadErrorTitle": "権限の読み込みに失敗しました", "role.form.loadErrorMessage": "権限一覧の取得中にエラーが発生しました。", "role.form.nameRequired": "名称は必須です", "role.form.loadingPermissions": "権限を読み込み中...", "role.form.creating": "作成中...", "role.form.createSubmit": "ロールを作成", "role.form.createdToast": "ロールを作成しました", "role.form.atLeastOnePermission": "権限を少なくとも1つ選択してください", // — ユーザー管理: ユーザー — "user.field.name": "名称", "user.field.email": "メールアドレス", "user.field.status": "ステータス", "user.field.roles": "ロール", "user.action.view": "表示", "user.list.title": "ユーザー一覧", "user.list.create": "ユーザーを作成", "user.detail.title": "ユーザー詳細", "user.detail.loadErrorTitle": "ユーザーの読み込みに失敗しました", "user.detail.loadErrorMessage": "ユーザーの詳細を取得中にエラーが発生しました。", "user.create.title": "ユーザー作成", "user.edit.title": "ユーザー編集", "user.edit.loadErrorTitle": "ユーザーの読み込みに失敗しました", "user.edit.loadErrorMessage": "ユーザーの詳細を取得中にエラーが発生しました。", // — ユーザー管理: ユーザー詳細 — "user.detail.infoTitle": "ユーザー情報", "user.field.createdAt": "作成日時", "user.field.updatedAt": "更新日時", "user.detail.assignedRoles": "割当ロール", "user.detail.noRoles": "ロールが割り当てられていません", // — ユーザー管理: ユーザー操作 — "user.actions.title": "操作", "user.actions.back": "ユーザー一覧へ戻る", "user.actions.edit": "ユーザーを編集", "user.actions.deactivate": "ユーザーを無効化", "user.actions.reactivate": "ユーザーを有効化", "user.actions.manageRoles": "ロールを管理", "user.actions.deactivatedToast": "ユーザーを無効化しました", "user.actions.reactivatedToast": "ユーザーを有効化しました", "user.actions.rolesUpdatedToast": "ロールを更新しました", "user.actions.manageRolesDialogTitle": "ロールを管理", "user.actions.manageRolesDialogDescription": "このユーザーのロールを選択してください。", "user.actions.noRolesAvailable": "利用可能なロールがありません", "user.actions.cancel": "キャンセル", "user.actions.saving": "保存中...", "user.actions.save": "保存", // — ユーザー管理: ユーザーフォーム — "user.form.nameLabel": "氏名", "user.form.namePlaceholder": "氏名を入力", "user.form.emailLabel": "メールアドレス", "user.form.emailPlaceholder": "メールアドレスを入力", "user.form.saving": "保存中...", "user.form.saveChanges": "変更を保存", "user.form.cancel": "キャンセル", "user.form.updatedToast": "ユーザーを更新しました", "user.form.nameRequired": "氏名は必須です", "user.form.emailInvalid": "有効なメールアドレスを入力してください", "user.form.rolesLabel": "ロール", "user.form.rolesPlaceholder": "ロールを選択", "user.form.creating": "作成中...", "user.form.createSubmit": "ユーザーを作成", "user.form.createdDialogTitle": "ユーザーを作成しました", "user.form.createdDialogDescription": "ユーザーが作成されました。初期パスワードをコピーしてユーザーに共有してください。このパスワードは再表示されません。", "user.form.passwordCopied": "パスワードをクリップボードにコピーしました", "user.form.done": "完了", // — 在庫調整 — "stockAdjustment.list.title": "在庫調整一覧", "stockAdjustment.list.create": "在庫調整を作成", "stockAdjustment.detail.title": "在庫調整詳細", "stockAdjustment.detail.loadErrorTitle": "在庫調整の読み込みに失敗しました", "stockAdjustment.detail.loadErrorMessage": "在庫調整の詳細を取得中にエラーが発生しました。", "stockAdjustment.create.title": "在庫調整を作成", "stockAdjustment.detail.infoTitle": "在庫調整情報", "stockAdjustment.detail.lines": "明細", "stockAdjustment.detail.noLines": "明細がありません。", "stockAdjustment.field.type": "種別", "stockAdjustment.field.reason": "理由", "stockAdjustment.field.reasonCode": "理由コード", "stockAdjustment.field.adjustmentDate": "調整日", "stockAdjustment.field.rejectionReason": "却下理由", "stockAdjustment.field.createdDate": "作成日", "stockAdjustment.field.item": "品目", "stockAdjustment.field.storageLocation": "保管場所", "stockAdjustment.field.effect": "効果", "stockAdjustment.field.quantity": "数量", "stockAdjustment.detail.fromCategory": (props: { category: string }) => `(${props.category} から)`, "stockAdjustment.actions.back": "在庫調整一覧へ戻る", "stockAdjustment.actions.submit": "申請", "stockAdjustment.actions.cancel": "取消", "stockAdjustment.actions.confirm": "承認", "stockAdjustment.actions.reject": "却下", "stockAdjustment.actions.submittedToast": "在庫調整を申請しました", "stockAdjustment.actions.cancelledToast": "在庫調整を取消しました", "stockAdjustment.actions.confirmedToast": "在庫調整を承認しました", "stockAdjustment.actions.rejectedToast": "在庫調整を却下しました", "stockAdjustment.create.typeLabel": "調整種別 *", "stockAdjustment.create.typePlaceholder": "調整種別を選択", "stockAdjustment.create.typeCorrection": "修正 — 棚卸修正(増加 / 減少)", "stockAdjustment.create.typeScrap": "廃棄 — 在庫の除却", "stockAdjustment.create.typeBlock": "保留 — 利用可能 → 保留へ移動", "stockAdjustment.create.typeUnblock": "保留解除 — 保留 → 利用可能へ移動", "stockAdjustment.create.reasonCodeLabel": "理由コード *", "stockAdjustment.create.reasonCodePlaceholder": "例: CYCLE_COUNT, DAMAGE, THEFT", "stockAdjustment.create.adjustmentDateLabel": "調整日", "stockAdjustment.create.linesLabel": "明細 *", "stockAdjustment.create.quantityPlaceholder": "数量", "stockAdjustment.create.directionIncrease": "増加", "stockAdjustment.create.directionDecrease": "減少", "stockAdjustment.create.directionPlaceholder": "方向", "stockAdjustment.create.categoryAvailable": "利用可能", "stockAdjustment.create.categoryBlocked": "保留", "stockAdjustment.create.categoryPlaceholder": "移動元カテゴリ", "stockAdjustment.create.addLine": "明細を追加", "stockAdjustment.create.removeLineAria": "明細を削除", "stockAdjustment.create.submit": "在庫調整を作成", "stockAdjustment.create.createdToast": "在庫調整を作成しました", "stockAdjustment.form.reasonCodeRequired": "理由コードは必須です", "stockAdjustment.form.itemRequired": "品目は必須です", "stockAdjustment.form.storageLocationRequired": "保管場所は必須です", "stockAdjustment.form.quantityMustBePositive": "数量は正の値を入力してください", "stockAdjustment.form.directionRequired": "修正の場合は方向を指定してください", // — 総勘定元帳: 会計期間(詳細・操作・フォーム) — "accountingPeriod.field.name": "名称", "accountingPeriod.field.fiscalYear": "会計年度", "accountingPeriod.field.type": "種別", "accountingPeriod.field.startDate": "開始日", "accountingPeriod.field.endDate": "終了日", "accountingPeriod.field.status": "ステータス", "accountingPeriod.detail.infoTitle": "会計期間情報", "accountingPeriod.actions.title": "操作", "accountingPeriod.actions.back": "会計期間一覧へ戻る", "accountingPeriod.actions.openPeriod": "期間をオープン", "accountingPeriod.actions.closePeriod": "期間をクローズ", "accountingPeriod.actions.openedToast": "会計期間をオープンしました", "accountingPeriod.actions.closedToast": "会計期間をクローズしました", "accountingPeriod.form.fiscalYearLabel": "会計年度", "accountingPeriod.form.fiscalYearPlaceholder": "会計年度を選択", "accountingPeriod.form.nameLabel": "名称", "accountingPeriod.form.namePlaceholder": "例: 2026-07", "accountingPeriod.form.periodTypeLabel": "期間種別", "accountingPeriod.form.periodTypePlaceholder": "期間種別を選択", "accountingPeriod.form.startDateLabel": "開始日", "accountingPeriod.form.endDateLabel": "終了日", "accountingPeriod.form.creating": "作成中...", "accountingPeriod.form.createSubmit": "会計期間を作成", "accountingPeriod.form.cancel": "キャンセル", "accountingPeriod.form.createdToast": "会計期間を作成しました", "accountingPeriod.form.fiscalYearRequired": "会計年度は必須です", "accountingPeriod.form.nameRequired": "名称は必須です", "accountingPeriod.form.startDateRequired": "開始日は必須です", "accountingPeriod.form.endDateRequired": "終了日は必須です", "accountingPeriod.form.periodTypeRequired": "期間種別は必須です", "accountingPeriod.form.typeOperating": "通常", "accountingPeriod.form.typeAdjustment": "調整", "accountingPeriod.table.view": "詳細", // — 総勘定元帳: 会計年度(テーブル・フォーム) — "fiscalYear.field.name": "名称", "fiscalYear.field.startDate": "開始日", "fiscalYear.field.endDate": "終了日", "fiscalYear.field.yearEndClosed": "年度末締め", "fiscalYear.field.yearEndClosedYes": "済", "fiscalYear.field.yearEndClosedNo": "未", "fiscalYear.form.companyLabel": "会社", "fiscalYear.form.companyPlaceholder": "会社を選択", "fiscalYear.form.nameLabel": "名称", "fiscalYear.form.namePlaceholder": "例: FY2026", "fiscalYear.form.startDateLabel": "開始日", "fiscalYear.form.endDateLabel": "終了日", "fiscalYear.form.creating": "作成中...", "fiscalYear.form.createSubmit": "会計年度を作成", "fiscalYear.form.cancel": "キャンセル", "fiscalYear.form.createdToast": "会計年度を作成しました", "fiscalYear.form.companyRequired": "会社は必須です", "fiscalYear.form.nameRequired": "名称は必須です", "fiscalYear.form.startDateRequired": "開始日は必須です", "fiscalYear.form.endDateRequired": "終了日は必須です", // — 総勘定元帳: 仕訳(一覧・詳細・モーダル・操作・フォーム) — "journalEntry.field.account": "勘定科目", "journalEntry.field.description": "説明", "journalEntry.field.debit": "借方", "journalEntry.field.credit": "貸方", "journalEntry.field.entryDate": "仕訳日", "journalEntry.field.postedAt": "計上日時", "journalEntry.field.accountingPeriod": "会計期間", "journalEntry.field.source": "発生源", "journalEntry.field.note": "メモ", "journalEntry.field.amount": "金額", "journalEntry.detail.noLines": "仕訳明細がありません。", "journalEntry.detail.total": "合計", "journalEntry.actions.title": "操作", "journalEntry.actions.back": "仕訳一覧へ戻る", "journalEntry.actions.post": "計上", "journalEntry.actions.cancel": "取消", "journalEntry.actions.reverse": "逆仕訳", "journalEntry.actions.postedToast": "仕訳を計上しました", "journalEntry.actions.cancelledToast": "仕訳を取消しました", "journalEntry.actions.reversedToast": "仕訳を逆仕訳しました", "journalEntry.modal.title": "仕訳", "journalEntry.modal.close": "閉じる", "journalEntry.modal.reverse": "逆仕訳", "journalEntry.modal.loading": "読み込み中…", "journalEntry.modal.notFound": "仕訳が見つかりません。", "journalEntry.modal.reversingCreatedToast": "逆仕訳を作成しました", "journalEntry.form.accountingPeriodLabel": "会計期間 *", "journalEntry.form.accountingPeriodPlaceholder": "オープンな期間を選択", "journalEntry.form.entryDateLabel": "仕訳日", "journalEntry.form.descriptionLabel": "説明", "journalEntry.form.descriptionPlaceholder": "説明(任意)", "journalEntry.form.linesLabel": "明細 *", "journalEntry.form.debitPlaceholder": "借方", "journalEntry.form.creditPlaceholder": "貸方", "journalEntry.form.removeLineAria": "明細を削除", "journalEntry.form.addLine": "明細を追加", "journalEntry.form.debitTotal": (props: { amount: string }) => `借方: ${props.amount}`, "journalEntry.form.creditTotal": (props: { amount: string }) => `貸方: ${props.amount}`, "journalEntry.form.balanced": "バランス済み ✓", "journalEntry.form.notBalanced": "バランス不一致 ✗", "journalEntry.form.creating": "作成中...", "journalEntry.form.createSubmit": "仕訳を作成", "journalEntry.form.cancel": "キャンセル", "journalEntry.form.createdToast": "仕訳を作成しました", "journalEntry.form.accountingPeriodRequired": "会計期間は必須です", "journalEntry.form.atLeastTwoLines": "明細を少なくとも2件入力してください", "journalEntry.form.accountRequired": "勘定科目は必須です", "journalEntry.form.debitOrCreditNotBoth": "明細には借方または貸方のいずれかを入力してください", "journalEntry.form.enterDebitOrCredit": "借方または貸方を入力してください", "journalEntry.list.company": "会社", "journalEntry.list.companyPlaceholder": "会社を選択", "journalEntry.list.status": "ステータス", "journalEntry.list.accountingPeriod": "会計期間", "journalEntry.list.allPeriods": "全期間", "journalEntry.list.entryDate": "仕訳日", "journalEntry.list.account": "勘定科目", "journalEntry.list.source": "発生源", "journalEntry.list.description": "説明", "journalEntry.list.descriptionPlaceholder": "説明で検索 (Enter)", "journalEntry.list.documentNo": "伝票番号", "journalEntry.list.documentNoTooltip": "伝票番号に関連する仕訳を検索します。種別: AP伝票 / AR伝票 / 発注 / 入荷 / 出荷 / 移動指示。発注は、請求書と入荷の仕訳を合算して表示します。(在庫調整と入出金は伝票番号がないため除外されます。)", "journalEntry.list.documentNoTooltipAria": "伝票検索について", "journalEntry.list.numberPlaceholder": "番号 (Enter)", "journalEntry.list.view": "詳細", "journalEntry.list.rowsPerPage": "行/ページ", "journalEntry.list.pageOf": (props: { page: number; total: number }) => `ページ ${props.page} / ${props.total}`, "journalEntry.list.firstPage": "最初のページ", "journalEntry.list.prevPage": "前のページ", "journalEntry.list.nextPage": "次のページ", "journalEntry.list.lastPage": "最後のページ", "journalEntry.list.loadError": "仕訳の読み込みに失敗しました。", "journalEntry.list.empty": "表示する仕訳がありません。", "journalEntry.list.expandAria": "展開", "journalEntry.list.collapseAria": "折りたたむ", "journalEntry.list.viewFlat": "リスト", "journalEntry.list.viewGrouped": "伝票", "journalEntry.list.viewLabel": "表示", "journalEntry.list.statusAll": "すべて", "journalEntry.list.sourceAll": "すべて", "journalEntry.list.accountAll": "すべて", "journalEntry.list.docTypeNone": "(なし)", "journalEntry.list.docTypeAP": "AP伝票", "journalEntry.list.docTypeAR": "AR伝票", "journalEntry.list.docTypePO": "発注", "journalEntry.list.docTypeInbound": "入荷", "journalEntry.list.docTypeOutbound": "出荷", "journalEntry.list.docTypeTransfer": "移動指示", "journalEntry.list.headerDebit": "借方", "journalEntry.list.headerCredit": "貸方", "journalEntry.list.headerAmount": "金額", "journalEntry.list.totalRows": (props: { count: number }) => `${props.count} 件`, // — 総勘定元帳: 試算表 — "trialBalance.field.company": "会社", "trialBalance.field.companyPlaceholder": "会社を選択", "trialBalance.field.accountingPeriod": "会計期間", "trialBalance.field.allPostedEntries": "全計上済み仕訳", "trialBalance.report.title": "試算表", "trialBalance.report.balanced": "バランス済み ✓", "trialBalance.report.notBalanced": "バランス不一致 ✗", "trialBalance.report.noBalances": "表示する残高がありません。", "trialBalance.report.code": "コード", "trialBalance.report.name": "名称", "trialBalance.report.type": "種別", "trialBalance.report.debit": "借方", "trialBalance.report.credit": "貸方", "trialBalance.report.net": "純額", "trialBalance.report.balanceSheet": "貸借対照表(資産 / 負債 / 純資産)", "trialBalance.report.profitLoss": "損益計算書(収益 / 費用)", "trialBalance.report.total": "合計", // — 売掛金:顧客請求書一覧 — "arInvoice.list.title": "顧客請求書一覧", "arInvoice.list.create": "請求書を作成", "arInvoice.field.documentNumber": "伝票番号", "arInvoice.field.customer": "得意先", "arInvoice.field.type": "種別", "arInvoice.field.status": "ステータス", "arInvoice.field.totalAmount": "合計金額", "arInvoice.field.documentDate": "伝票日付", "arInvoice.field.externalDocumentNumber": "顧客請求書番号", "arInvoice.action.view": "詳細", // — 売掛金:顧客請求書詳細 — "arInvoice.detail.title": "顧客請求書詳細", "arInvoice.detail.loadErrorTitle": "請求書の読み込みに失敗しました", "arInvoice.detail.loadErrorMessage": "請求書の詳細を取得中にエラーが発生しました。", "arInvoice.detail.infoTitle": "請求書情報", "arInvoice.field.currency": "通貨", "arInvoice.field.postingDate": "計上日", "arInvoice.field.description": "説明", "arInvoice.field.qty": "数量", "arInvoice.field.unitPrice": "単価", "arInvoice.field.amount": "金額", "arInvoice.field.dueDate": "支払期日", "arInvoice.detail.tabDetails": "詳細", "arInvoice.detail.tabJournal": "仕訳", "arInvoice.detail.lineItems": "明細", "arInvoice.detail.noLineItems": "明細がありません。", "arInvoice.detail.dueSchedule": "支払予定", "arInvoice.detail.relatedDocs": "関連伝票", "arInvoice.detail.salesOrder": "受注", // — 売掛金:顧客請求書アクション — "arInvoice.actions.title": "操作", "arInvoice.actions.back": "請求書一覧へ戻る", "arInvoice.actions.register": "登録", "arInvoice.actions.post": "計上", "arInvoice.actions.cancel": "取消", "arInvoice.actions.createReceipt": "入金を作成", "arInvoice.actions.posting": "計上中...", "arInvoice.actions.confirmPost": "計上を確定", "arInvoice.actions.postDialogTitle": "売掛金として計上", "arInvoice.actions.postDialogDescription": "この請求書を売掛金として計上します。総勘定元帳に仕訳(借方 売掛金 / 貸方 売上)が転記され、売掛金が正式に認識されます(未回収)。実際の入金(現金回収)処理ではありません。", "arInvoice.actions.keep": "保持", "arInvoice.actions.cancelling": "取消中...", "arInvoice.actions.confirmCancel": "取消を確定", "arInvoice.actions.cancelDialogTitle": "請求書を取消", "arInvoice.actions.cancelDialogDescription": "この請求書を取消します。この操作は元に戻せません。", "arInvoice.actions.registeredToast": "請求書を登録しました", "arInvoice.actions.postedToast": "請求書を計上しました", "arInvoice.actions.cancelledToast": "請求書を取消しました", // — 売掛金:顧客請求書作成 — "arInvoice.create.title": "顧客請求書を作成", // — 売掛金:顧客請求書フォーム — "arInvoice.form.invoiceTypeLabel": "この請求書の種別 *", "arInvoice.form.invoiceTypePlaceholder": "請求書種別を選択", "arInvoice.form.invoiceTypeSoName": "受注請求書(受注に紐づける)", "arInvoice.form.invoiceTypeOtherName": "その他の請求書(受注なし — サービス、手数料、調整など)", "arInvoice.form.salesOrderLabel": "受注 *", "arInvoice.form.salesOrderPlaceholder": "確定済みの受注を選択", "arInvoice.form.customerLabel": "得意先 *", "arInvoice.form.receivableControlAccountLabel": "売掛金管理勘定 *", "arInvoice.form.receivableAccountPlaceholder": "売掛金(資産)勘定を選択", "arInvoice.form.revenueAccountLabel": "売上勘定 *", "arInvoice.form.revenueAccountPlaceholder": "売上勘定を選択", "arInvoice.form.distributionAccountLabel": "配賦勘定 *", "arInvoice.form.distributionAccountPlaceholder": "各明細の計上先勘定を選択", "arInvoice.form.documentDateLabel": "伝票日付", "arInvoice.form.customerInvoiceLabel": "顧客請求書番号", "arInvoice.form.externalDocNumPlaceholder": "顧客独自の請求書番号(任意)", "arInvoice.form.previewHeading": "請求明細(受注より)", "arInvoice.form.invoiceLinesLabel": "請求明細 *", "arInvoice.form.descriptionPlaceholder": "説明(例:サービス料)", "arInvoice.form.amountPlaceholder": "金額", "arInvoice.form.removeLineAria": "明細を削除", "arInvoice.form.addLine": "明細を追加", "arInvoice.form.creating": "作成中...", "arInvoice.form.createSubmit": "請求書を作成", "arInvoice.form.cancel": "キャンセル", "arInvoice.form.createdToast": "請求書を作成しました", "arInvoice.form.receivableAccountRequired": "売掛金管理勘定は必須です", "arInvoice.form.salesOrderRequired": "受注は必須です", "arInvoice.form.revenueAccountRequired": "売上勘定は必須です", "arInvoice.form.distributionAccountRequired": "配賦勘定は必須です", "arInvoice.form.customerRequired": "得意先は必須です", "arInvoice.form.atLeastOneLineRequired": "説明と正の金額を持つ明細を少なくとも1件追加してください", "arInvoice.form.colItem": "品目", "arInvoice.form.colQty": "数量", "arInvoice.form.colUnitPrice": "単価", "arInvoice.form.colAmount": "金額", "arInvoice.form.total": "合計", // — 売掛金:顧客請求書仕訳タブ — "arInvoice.journal.draftHint": "この請求書を計上すると、仕訳(借方 売掛金 / 貸方 売上)が転記されます。", "arInvoice.journal.noEntries": "この請求書に紐づく仕訳はありません。", "arInvoice.journal.account": "勘定科目", "arInvoice.journal.debit": "借方", "arInvoice.journal.credit": "貸方", "arInvoice.journal.loading": "読み込み中...", "arInvoice.journal.total": "合計", // — 入金(売掛金消込)一覧 — "receipt.list.title": "入金一覧", "receipt.list.create": "入金を作成", "receipt.field.paymentDate": "入金日", "receipt.field.customer": "得意先", "receipt.field.depositAccount": "入金口座", "receipt.field.amount": "金額", "receipt.field.status": "ステータス", "receipt.action.view": "詳細", // — 入金詳細 — "receipt.detail.title": "入金詳細", "receipt.detail.loadErrorTitle": "入金の読み込みに失敗しました", "receipt.detail.loadErrorMessage": "入金の詳細を取得中にエラーが発生しました。", "receipt.detail.infoTitle": "入金情報", "receipt.field.currency": "通貨", "receipt.field.postedAt": "計上日時", "receipt.detail.tabDetails": "詳細", "receipt.detail.tabJournal": "仕訳", "receipt.detail.settlements": "消込", "receipt.detail.noSettlements": "消込がありません。", "receipt.detail.colInvoice": "請求書", "receipt.detail.colDueDate": "支払期日", "receipt.detail.colScheduled": "予定額", "receipt.detail.colReceived": "入金額", "receipt.detail.total": "合計", "receipt.detail.creditSuffix": "(貸方)", // — 入金アクション — "receipt.actions.title": "操作", "receipt.actions.back": "入金一覧へ戻る", "receipt.actions.post": "計上", "receipt.actions.cancel": "取消", "receipt.actions.reverse": "取消(逆仕訳)", "receipt.actions.posting": "計上中...", "receipt.actions.confirmPost": "計上を確定", "receipt.actions.postDialogTitle": "入金を計上", "receipt.actions.postDialogDescription": "この入金を計上します。総勘定元帳に仕訳(借方 現金 / 貸方 売掛金)が転記され、対象の支払予定明細が消し込まれます。", "receipt.actions.keep": "保持", "receipt.actions.cancelling": "取消中...", "receipt.actions.confirmCancel": "取消を確定", "receipt.actions.cancelDialogTitle": "入金を取消", "receipt.actions.cancelDialogDescription": "この下書き入金を取消します。総勘定元帳には影響しません(未計上のため)。", "receipt.actions.reversing": "取消中...", "receipt.actions.confirmReversal": "取消を確定", "receipt.actions.reverseDialogTitle": "入金を取消(逆仕訳)", "receipt.actions.reverseDialogDescription": "この計上済みの入金を取消(逆仕訳)します。指定日付で逆仕訳が転記され、消込済みの支払予定明細が再びオープンになります。", "receipt.actions.reversalDate": "取消日", "receipt.actions.postedToast": "入金を計上しました", "receipt.actions.cancelledToast": "入金を取消しました", "receipt.actions.reversedToast": "入金を取消(逆仕訳)しました", // — 入金作成 — "receipt.create.title": "入金を作成", // — 入金フォーム — "receipt.form.methodLabel": "方法 *", "receipt.form.modeByCustomer": "得意先別", "receipt.form.modeByInvoice": "請求書別", "receipt.form.customerLabel": "得意先 *", "receipt.form.invoiceLabel": "請求書 *", "receipt.form.customerAuto": "得意先(自動)", "receipt.form.depositAccountLabel": "入金口座(現金) *", "receipt.form.depositAccountPlaceholder": "現金/銀行口座を選択", "receipt.form.receiptDateLabel": "入金日 *", "receipt.form.itemsToSettle": "消込対象(オープン)", "receipt.form.selectCustomerHint": "得意先を選択するとオープンな請求書が表示されます。", "receipt.form.selectInvoiceHint": "請求書を選択すると消込対象が表示されます。", "receipt.form.noOpenReceivables": "オープンな(計上済み)売掛金はありません。", "receipt.form.colInvoice": "請求書", "receipt.form.colDueDate": "支払期日", "receipt.form.colOpenBalance": "未消込残高", "receipt.form.colReceipt": "入金額", "receipt.form.receiptTotal": "入金合計", "receipt.form.settleAria": (props: { doc: string }) => `${props.doc} を消込`, "receipt.form.selectInvoicePlaceholder": "オープンな請求書を選択", "receipt.form.creating": "作成中...", "receipt.form.createSubmit": "入金を作成", "receipt.form.cancel": "キャンセル", "receipt.form.createdToast": "入金を作成しました", "receipt.form.depositAccountRequired": "入金口座は必須です", "receipt.form.receiptDateRequired": "入金日は必須です", "receipt.form.errorSelectCustomerInvoice": "得意先とオープンな請求書を選択してください", "receipt.form.errorSelectItem": "消込対象を少なくとも1件選択してください", // — 入金仕訳タブ — "receipt.journal.draftHint": "この入金を計上すると、仕訳(借方 現金 / 貸方 売掛金)が転記されます。", "receipt.journal.noEntries": "この入金に紐づく仕訳はありません。", "receipt.journal.account": "勘定科目", "receipt.journal.debit": "借方", "receipt.journal.credit": "貸方", "receipt.journal.loading": "読み込み中...", "receipt.journal.total": "合計", // — 共通仕訳ビュー(JournalEntriesView コンポーネント) — "journal.view.list": "リスト", "journal.view.voucher": "伝票", "journal.view.account": "勘定科目", "journal.view.description": "摘要", "journal.view.debit": "借方", "journal.view.credit": "貸方", "journal.view.total": "合計", }, }); // Build once, on first use. `catalogue()` is only ever called from `useT()` (a // hook, so render-time) or from the LocalizedString returned by `labels.t` // (invoked by app-shell at render) — never during module evaluation. That is // what breaks the app-shell dev-proxy circular init described above. type Catalogue = ReturnType; let cached: Catalogue | null = null; const catalogue = (): Catalogue => (cached ??= buildCatalogue()); /** Hook: `const t = useT();` then `t("invoice.list.title")`. Call during render. */ export const useT: Catalogue["useT"] = () => catalogue().useT(); /** * `labels.t("key")` for static config such as a page's `meta.title`. Returns a * LocalizedString whose resolution is deferred: the catalogue is built only when * app-shell invokes it with the active locale (render time), never when the * page module is first evaluated. */ export const labels: Pick = { t: ((key: string, ...args: unknown[]) => (locale: string) => { const resolved = ( catalogue().t as (k: string, ...a: unknown[]) => string | ((l: string) => string) )(key, ...args); return typeof resolved === "function" ? resolved(locale) : resolved; }) as Catalogue["t"], };