Quote Management Dictionary
The Quote Management dictionary contains all user-facing text, labels, and messages displayed by this drop-in. Customize the dictionary to:
- Localize the drop-in for different languages and regions
- Customize labels and messages to match your brand voice
- Override default text without modifying source code for the drop-in
Dictionaries use the i18n (internationalization) pattern, where each text string is identified by a unique key path.
Version: 1.0.0-beta5
How to customize
Override dictionary values during drop-in initialization. The drop-in deep-merges your custom values with the defaults.
import { initialize } from '@dropins/storefront-quote-management';
await initialize({ langDefinitions: { en_US: { "ConfirmationModal": { "cancel": { "0": "Custom value", "1": "Custom value" } } } }});You only need to include the keys you want to change. For multi-language support and advanced patterns, see the Dictionary customization guide.
Default keys and values
Below are the default English (en_US) strings provided by the Quote Management drop-in:
{ "ConfirmationModal": { "cancel": "Cancel", "confirm": "Confirm" }, "NegotiableQuote": { "Request": { "title": "Request a Quote", "comment": "Comment", "commentError": "Please add your comment", "quoteName": "Quote name", "quoteNameError": "Please add a quote name", "attachmentsError": "Error uploading attachments", "maxFilesExceeded": "Maximum {maxFiles} file(s) allowed", "maxFileSizeExceeded": "File size exceeds maximum limit of {maxSize}", "invalidFileType": "File type not accepted", "removeFile": "Remove file", "uploading": "Uploading...", "uploadSuccess": "Upload complete", "uploadError": "Upload failed", "requestCta": "Request a Quote", "saveDraftCta": "Save as draft", "error": { "header": "Error", "unauthenticated": "Please sign in to request a quote.", "unauthorized": "You are not authorized to request a quote.", "missingCart": "Could not find a valid cart." }, "success": { "header": "Success", "submitted": "Quote request submitted successfully!", "draftSaved": "Quote saved as draft successfully!" } }, "Manage": { "createdLabel": "Created:", "salesRepLabel": "Sales Rep:", "expiresLabel": "Expires:", "actionsLabel": "Actions", "actions": { "remove": "Remove" }, "attachFile": "Attach File", "attachFiles": "Attach Files", "fileUploadError": "Failed to upload file. Please try again.", "maxFilesExceeded": "Maximum {maxFiles} file(s) allowed", "maxFileSizeExceeded": "File size exceeds maximum limit of {maxSize}", "invalidFileType": "File type not accepted", "removeFile": "Remove file", "uploading": "Uploading...", "uploadSuccess": "Upload complete", "uploadError": "Upload failed", "bannerTitle": "Alert", "bannerStatusMessages": { "submitted": "This quote is currently locked for editing. It will become available once released by the Merchant.", "pending": "This quote is currently locked for editing. It will become available once released by the Merchant.", "expired": "Your quote has expired and the product prices have been updated as per the latest prices in your catalog. You can either re-submit the quote to seller for further negotiation or go to checkout." }, "actionButtons": { "close": "Close quote", "delete": "Delete quote", "print": "Print quote", "createTemplate": "Create quote template", "createCopy": "Create copy", "sendForReview": "Send for review" }, "confirmationModal": { "cancel": "Cancel", "delete": { "title": "Delete Quote", "message": "Are you sure you want to delete this quote?", "confirm": "Delete", "errorHeading": "Error", "errorFallback": "Failed to delete quote", "successHeading": "Success", "successDescription": "Quote has been successfully deleted" }, "duplicate": { "title": "Duplicate Quote", "message": "Are you sure you want to create a copy of this quote?", "confirm": "Create Copy", "errorHeading": "Error", "errorFallback": "Failed to duplicate quote", "successHeading": "Success", "successDescription": "Quote has been successfully duplicated. You will be redirected to the new quote shortly.", "outOfStockWarningHeading": "Alert", "outOfStockWarningMessage": "Some items were skipped during duplication due to errors." }, "close": { "message": "Are you sure you want to close this quote?", "confirm": "Close", "confirmLoading": "Closing...", "successHeading": "Success", "successDescription": "Quote has been successfully closed" }, "createTemplate": { "message": "Are you sure you want to create a quote template from this quote?", "confirm": "Create Template", "confirmLoading": "Creating...", "successHeading": "Success", "successDescription": "Quote template has been successfully created", "errorHeading": "Error", "errorFallback": "Failed to create quote template" }, "noItemsSelected": { "title": "Please Select Quote Items", "message": "Please select at least one quote item to proceed.", "confirm": "Ok" } }, "shippingInformation": { "title": "Shipping Information" }, "shippingAddress": { "noAddress": "No shipping address has been set for this quote.", "noAddressHeading": "No Shipping Address", "noAddressDescription": "Please select or enter a shipping address." }, "quoteComments": { "title": "Quote Comments", "placeholder": "Add your comment", "emptyState": "No comments yet", "by": "by", "attachments": "Attachments:" }, "productListTable": { "headers": { "productName": "Product name", "sku": "SKU", "price": "Price", "quantity": "Quantity", "discount": "Discount", "subtotal": "Subtotal", "actions": "Actions" }, "submitButton": "Update", "actions": { "editNoteToSeller": "Edit note to seller", "remove": "Remove" }, "notes": { "header": "NOTES", "leftANote": "left a note:", "buyer": "Buyer", "seller": "Seller" }, "outOfStock": "Out of Stock", "outOfStockMessage": "This item is currently out of stock." }, "rename": { "title": "Rename Quote", "quoteNameLabel": "Quote name", "reasonLabel": "Reason for change", "renameButton": "Rename", "cancelButton": "Cancel", "errorHeading": "Error", "quoteNameRequired": "Quote name is required", "errorDefault": "Failed to rename quote. Please try again.", "successHeading": "Success", "successMessage": "Quote renamed successfully!" }, "lineItemNote": { "title": "Leave a note to seller", "productLabel": "Name & SKU", "skuLabel": "SKU", "priceLabel": "Price", "stockLabel": "Stock", "quantityLabel": "Qty", "discountLabel": "Discount", "subtotalLabel": "Subtotal", "noteLabel": "Note to seller", "notePlaceholder": "Can I get a discount on this?", "noteHelper": "The seller will see the note when you send the quote back.", "confirmButton": "Confirm", "cancelButton": "Cancel", "noteError": "Please enter a note", "quantityError": "Quantity must be greater than 0" }, "tabbedContent": { "itemsQuoted": "Items quoted", "comments": "Comments", "historyLog": "History log" }, "quotePricesSummary": { "subtotal": { "excludingTax": "Quote Subtotal (excluding tax)" }, "appliedTaxes": "Applied Taxes", "grandTotal": { "includingTax": "Quote Grand Total (including tax)" } }, "updateQuantitiesModal": { "title": "Change Quote Items", "description": "Making changes to any quote item changes the terms of the quote. After you update the quote, return it to the seller for review and approval.", "cancelButton": "Cancel", "updateButton": "Apply Changes", "successHeading": "Success", "successMessage": "Quote quantities have been successfully updated.", "errorHeading": "Error", "errorMessage": "Failed to update quote quantities. Please try again." }, "removeItemsModal": { "title": "Change Quote Items", "description": "Making changes to any quote item changes the terms of the quote. After you update the quote, return it to the seller for review and approval.", "cancelButton": "Cancel", "confirmButton": "Remove", "confirmButtonRemoving": "Removing...", "successHeading": "Success", "successMessage": "Quote items have been successfully removed.", "errorHeading": "Error", "errorMessage": "Failed to remove quote items. Please try again." } }, "PriceSummary": { "taxToBeDetermined": "TBD", "orderSummary": "Order Summary", "giftOptionsTax": { "printedCard": { "title": "Printed card", "inclTax": "Including taxes", "exclTax": "excluding taxes" }, "itemGiftWrapping": { "title": "Item gift wrapping", "inclTax": "Including taxes", "exclTax": "excluding taxes" }, "orderGiftWrapping": { "title": "Order gift wrapping", "inclTax": "Including taxes", "exclTax": "excluding taxes" } }, "subTotal": { "label": "Subtotal", "withTaxes": "Including taxes", "withoutTaxes": "excluding taxes" }, "shipping": { "label": "Shipping", "withTaxes": "Including taxes", "withoutTaxes": "excluding taxes" }, "taxes": { "total": "Tax Total", "totalOnly": "Tax", "breakdown": "Taxes", "showBreakdown": "Show Tax Breakdown", "hideBreakdown": "Hide Tax Breakdown" }, "total": { "free": "Free", "label": "Total", "withoutTax": "Total excluding taxes", "saved": "Total saved" } }, "QuoteSummaryList": { "discountedPrice": "Discounted Price", "discountPercentage": "{discount}% off", "editQuote": "Edit", "file": "{count} file", "files": "{count} files", "heading": "Negotiable Quote ({count})", "listOfQuoteItems": "List of Quote Items", "regularPrice": "Regular Price", "savingsAmount": "Savings", "viewMore": "View more" } }, "NegotiableQuoteTemplate": { "Manage": { "createdLabel": "Created:", "salesRepLabel": "Sales Rep:", "expiresLabel": "Expires:", "templateIdLabel": "Template ID:", "referenceDocuments": { "title": "Reference Documents", "add": "Add", "edit": "Edit", "remove": "Remove", "noReferenceDocuments": "No reference documents", "form": { "title": "Document Information", "documentNameLabel": "Document name", "documentIdentifierLabel": "Document identifier", "referenceUrlLabel": "Reference URL", "addButton": "Add to Quote Template", "updateButton": "Update Document", "cancelButton": "Cancel", "documentNameRequired": "Document name is required", "documentIdentifierRequired": "Document identifier is required", "referenceUrlRequired": "Reference URL is required", "invalidUrl": "Please enter a valid URL", "errorHeading": "Error", "duplicateUidError": "A document with this identifier already exists in the template. Please use a different identifier." } }, "shippingInformation": { "title": "Shipping Information" }, "comments": { "title": "Comments" }, "historyLog": { "title": "History Log" }, "tabs": { "itemsQuoted": "Items Quoted", "comments": "Comments", "historyLog": "History Log" }, "templateComments": { "title": "Template Comments", "placeholder": "Add your comment" }, "actionsLabel": "Actions", "actionButtons": { "sendForReview": "Send for review", "delete": "Delete template", "cancel": "Cancel template", "accept": "Accept", "generateQuote": "Generate quote" }, "removeItemsModal": { "title": "Change Quote Template Items", "description": "Making changes to any quote template item changes the terms of the template. After you update the template, return it to the seller for review and approval.", "cancelButton": "Cancel", "confirmButton": "Remove", "confirmButtonRemoving": "Removing...", "successHeading": "Success", "successMessage": "Quote template items have been successfully removed.", "errorHeading": "Error", "errorMessage": "Failed to remove quote template items. Please try again." }, "updateQuantitiesModal": { "title": "Change Quote Template Items", "description": "Making changes to any quote template item changes the terms of the template. After you update the template, return it to the seller for review and approval.", "cancelButton": "Cancel", "updateButton": "Apply Changes", "successHeading": "Success", "successMessage": "Quote template quantities have been successfully updated.", "errorHeading": "Error", "errorMessage": "Failed to update quote template quantities. Please try again." }, "confirmationModal": { "cancel": "Cancel", "delete": { "title": "Delete Quote Template", "message": "Are you sure you want to delete this quote template?", "confirm": "Delete", "errorHeading": "Error", "errorFallback": "Failed to delete quote template", "successHeading": "Success", "successDescription": "Quote template has been successfully deleted" }, "cancelTemplate": { "title": "Cancel Quote Template", "message": "Are you sure you want to cancel this quote template?", "confirm": "Cancel Template", "errorHeading": "Error", "errorFallback": "Failed to cancel quote template", "successHeading": "Success", "successDescription": "Quote template has been successfully cancelled" }, "accept": { "title": "Accept Quote Template", "message": "Are you sure you want to accept this quote template?", "confirm": "Accept", "confirmLoading": "Accepting...", "successHeading": "Quote Template Accepted", "successDescription": "Quote template has been successfully accepted.", "errorHeading": "Error", "errorFallback": "Failed to accept quote template. Please try again." }, "generateQuote": { "message": "Are you sure you want to generate a quote from this template?", "confirm": "Generate Quote", "confirmLoading": "Generating...", "successHeading": "Quote Generated", "successDescription": "Quote has been successfully generated from the template.", "errorHeading": "Error", "errorFallback": "Failed to generate quote from template. Please try again." } }, "quotePricesSummary": { "subtotal": { "excludingTax": "Quote Template Subtotal (excluding tax)" }, "appliedTaxes": "Applied Taxes", "grandTotal": { "includingTax": "Quote Template Grand Total (including tax)" } }, "lineItemNoteModal": { "errorHeading": "Error" }, "rename": { "title": "Rename Quote Template", "templateNameLabel": "Template name", "reasonLabel": "Reason for change", "renameButton": "Rename", "cancelButton": "Cancel", "errorHeading": "Error", "templateNameRequired": "Template name is required", "errorDefault": "Failed to rename quote template. Please try again.", "successHeading": "Success", "successMessage": "Quote template renamed successfully!" }, "unsavedChangesWarningHeading": "Unsaved Changes", "unsavedChangesWarningMessage": "The quote template must be submitted for review to save the changes.", "shippingAddressWarningHeading": "No Shipping Address", "shippingAddressWarningMessage": "No shipping address has been set for this quote template." } }, "historyLog": { "changeTypes": { "created": "Quote Created", "updated": "Quote Updated", "statusChanged": "Status Changed", "commentAdded": "Comment Added", "expirationChanged": "Expiration Changed" }, "noteTypes": { "buyerNoteAdded": "Buyer Note Added", "sellerNoteAdded": "Seller Note Added" }, "authorLabels": { "buyer": "(Buyer)", "seller": "(Seller)" }, "changeDetails": { "comment": "Comment: \"{comment}\"", "statusChangedFromTo": "Status changed from {oldStatus} to {newStatus}", "statusSetTo": "Status set to {newStatus}", "expirationChangedFromTo": "Expiration changed from {oldExpiration} to {newExpiration}", "expirationSetTo": "Expiration set to {newExpiration}", "totalChangedFromTo": "Total changed from {oldTotal} to {newTotal}", "customChange": "{title}: changed from \"{oldValue}\" to \"{newValue}\"", "productsRemovedFromCatalog": "Products removed from catalog: {products}", "productsRemovedFromQuote": "Products removed from quote: {products}", "noDetailsAvailable": "No details available" }, "emptyState": "No history available for this quote." }, "QuoteManagement": { "QuotesListTable": { "quoteName": "Quote Name", "created": "Created", "createdBy": "Created By", "status": "Status", "lastUpdated": "Last Updated", "quoteTemplate": "Quote Template", "quoteTotal": "Quote Total", "actions": "Action" }, "QuoteTemplatesListTable": { "name": "Template Name", "state": "State", "status": "Status", "validUntil": "Valid Until", "minQuoteTotal": "Min. Quote Total (Negotiated)", "ordersPlaced": "Orders Placed", "lastOrdered": "Last Ordered", "actions": "Action", "view": "View" } }}