Language
Language
The widget has support for localisation via the locale config. You can provide
a locale string, for example, en-GB, where the first two lowercase letters
define the language code (ISO 639-1 format) and the second two capitalised
letters define the country code (ISO 3166-1 alpha-2 standard). This enables the
widget to provide different translations for the same language across different
regions.
The locale can also be derived from the page URL when urlToLocaleMap is defined in config. See Deriving the locale from page URL documentation.
The frontend team manage the default translation files. If you want another
locale to be added please request this in the #talk-to-frontend channel. You
will need to provide translations for all the properties in the object below.
If no locale is provided in the config the widget will default to using en-GB.
Currently supported locales are:
- en-GB // British English
- en-US // American English
- en-LU // English (Luxembourg)
- nl-NL // Dutch
- de-DE // German
- es-ES // Spanish
- fr-FR // French
- ja-JP // Japanese
- sv-SE // Swedish
- pt-PT // Portuguese
- no-NO // Norwegian
- it-IT // Italian
- da-DK // Danish
- pl-PL // Polish
- fi-FI // Finnish
- lt-LT // Lithuanian
- lv-LV // Latvian
- ro-RO // Romanian
- sk-SK // Slovak
- et-EE // Estonian
- cs-CZ // Czech
- ko-KR // Korean
- zh-CN // Simplified Chinese
- zh-TW // Traditional Chinese
{
"metadata": {
"id": "en-GB",
"title": "British English"
},
"dragAndDropTitle": "Drag & Drop",
"dragAndDropMessage": "Upload your file here.",
"header": "",
"chatInputPlaceholder": "Type message here",
"prechatButtonText": "Start Chat",
"prechatFormSelectPlaceholderText": "Select",
"messageLimitErrorText": "Oops, that message is too long",
"endChatHeader": "End Chat",
"endChatQuestion": "Are you sure you want to end this chat?",
"endChatConfirmButton": "End chat",
"endChatCancelButton": "Cancel",
"carouselSelectionButtonText": "Select",
"idleTimeoutPrefixMessage": "Are you still there? Please send a message within",
"idleTimeoutSuffixMessage": "or this chat will time out",
"returnToMainMenu": "Return to main menu",
"userClosedChatMessageToAgent": "*** USER CLOSED CHAT. ***",
"listPopupSubmitButtonText": "Confirm",
"formPopupSubmitButtonText": "Submit",
"signature": {
"placeholder": "Draw your signature",
"disclaimer": "By signing, you agree this is a valid electronic signature.",
"clearButtonText": "Clear",
"submitButtonText": "Submit signature"
},
"carouselMultiSelectButtonText": "Confirm your selection",
"fileUploadButtonText": "Upload file",
"multipleFileUploadButtonText": "Upload files",
"calendarSubmitButtonText": "Submit",
"messageFeedbackHelpful": "Helpful",
"messageFeedbackUnhelpful": "Unhelpful",
"emailValidationAmpersat": "Must include an @ symbol",
"emailValidationDomain": "Must include a domain after the @ symbol (e.g., example.com)",
"emailValidationTld": "Must include a valid domain extension (e.g., .com, .org, .net)",
"messageSentByLabel": "Sent by",
"emailValidationPattern": "Please enter a valid email address",
"botMessageLabel": "AI Agent",
"agentMessageLabel": "Live Agent",
"downloadTranscript": "Download Transcript",
"agent": {
"agentEndedChat": "Agent left the chat",
"agentDisconnected": "The agent disconnected",
"agentJoined": "An agent joined the chat",
"namedAgentEndedChat": "left the chat",
"namedAgentDisconnected": "disconnected",
"namedAgentJoined": "joined the chat",
"agentTransferredChat": "You are being transferred to another agent",
"queueMessageWithPosition": "You are in a queue. Your position is",
"queueMessage": "You are in a queue.",
"agentJoining": "An agent is joining",
"couldNotConnect": "Could not connect to any agents",
"connectingToAnAgent": "Connecting you with an agent",
"reconnectingToAnAgent": "Attempting to reconnect to an agent",
"couldNotUploadFile": "There was a problem uploading your file. Please try again.",
"disconnectedReconnecting": "You were disconnected. Connecting you to another agent",
"automatedAgentMessage": "An agent will assist you shortly",
"chatEndedDueToInactivity": "Chat ended due to inactivity",
"chatConnectionLost": "Chat ended due to loss of connection",
"idleTimeoutWarningAgentMessage": "Are you still there?",
"disconnectedNewConversation": "You were disconnected. A new conversation has been created.",
"switchedDevice": "Chat has been transferred to another device",
"timedOut": "Chat has ended due to timing out",
"connectError": "Failed to connect to an agent, please try again",
"outsideBusinessHours": "Live chat is unavailable as it's currently outside of our business hours",
"highDemand": "Live chat is unavailable due to high demand, please try again later"
},
"flow": {
"defaultErrorMessage": "We were unable to handle your request. Please try again"
},
"server": {
"defaultErrorHeading": "Oops! An error occurred!",
"errorMessageLine1": "Try restarting the chat below.",
"errorMessageLine2": "If the issue persists, please contact our support team.",
"restartButtonText": "Restart"
},
"fileUploadErrors": {
"virus": {
"title": "Possible virus detected",
"descr": "This file may contain a virus or other malware and can't be uploaded. Try another file."
},
"tooLarge": {
"title": "File is too large",
"descr": "Files that are more than 16MB cannot be uploaded. Try another file."
},
"generic": {
"title": "Issue uploading file",
"descr": "There was an issue uploading this file. Try another file."
}
},
"newMessageNotifyText": "New Message",
"poweredByDigitalGenius": {
"poweredBy": "⚡ by",
"logo": {
"digital": "Digital",
"genius": "Genius"
}
},
"csatLang": {
"ai": {
"csatNotice": "Thanks for chatting with us!",
"csatTitle": "### How was your experience?"
},
"agent": {
"csatNotice": "Agent has ended the chat.",
"csatTitle": "### How was your experience?"
},
"customer": {
"csatNotice": "Thanks for chatting with us!",
"csatTitle": "### How was your experience?"
},
"ratingsText": ["Terrible", "Bad", "Okay", "Good", "Excellent"],
"csatFeedbackButtonText": "Send Feedback",
"csatFeedbackCancelButtonText": "Skip",
"csatFeedbackTextareaPlaceholder": "Additional comments (optional)"
},
"npsLang": {
"ai": {
"npsNotice": "",
"npsTitle": "### How likely are you to recommend our service?"
},
"agent": {
"npsNotice": "Agent has ended the chat.",
"npsTitle": "### How likely are you to recommend our service?"
},
"customer": {
"npsNotice": "",
"npsTitle": "### How likely are you to recommend our service?"
},
"npsInfoTextNegative": "Not likely",
"npsInfoTextPositive": "Extremely likely",
"npsConfirmButtonText": "Send Feedback",
"npsCancelButtonText": "Skip"
},
"internetConnectionLost": "Your internet connection appears to have been lost. Please check and try again.",
"internetConnectionRestored": "You're back online!",
"iframeTitles": {
"proactive": "DigitalGenius Chat Proactive App",
"proactiveScript": "DigitalGenius Chat Proactive Script",
"launcher": "DigitalGenius Chat Launcher App",
"launcherScript": "DigitalGenius Chat Launcher Script",
"widget": "DigitalGenius Chat App",
"widgetScript": "DigitalGenius Chat Script",
"attachmentsPreview": "DigitalGenius Attachments Preview"
},
"accessibilityLabels": {
"launcher": "Open chat widget",
"minimiseWidget": "Minimise chat widget",
"closeWidget": "Close chat widget",
"alertMessage": "Alert message with type",
"inputSubmit": "Submit",
"downloadImage": "Download image",
"carousel": "Product carousel",
"carouselPrevious": "Go to previous item",
"carouselNext": "Go to next item",
"chatForm": "Enter a message",
"chatFormSubmit": "Send message",
"chatFormUpload": "Upload a file",
"CSATTextarea": "Enter a comment",
"close": "Close",
"previewImage": "Open image preview",
"messageFeedbackReset": "Feedback provided. Select again to reset your feedback",
"backToBottom": "Back to bottom",
"mobileCallingCode": "Enter Mobile Calling Code",
"addressLine2": "Address Line 2",
"goBackToQuickAddress": "Go back to quick address",
"itemsSelected": "items selected",
"openInNewTab": "Open in new tab",
"agentTyping": "Agent is typing a message",
"botTyping": "Bot is typing a message",
"chatMessages": "Chat messages",
"messageFeedbackHelpful": "Mark this message as helpful",
"messageFeedbackUnhelpful": "Mark this message as unhelpful",
"error": "Error",
"prechatFormContainer": "DigitalGenius chat widget",
"swipeToClosePopup": "Swipe down to close popup",
"closeToggleMenu": "Close menu",
"openToggleMenu": "Open menu"
},
"listPopupUploadDescription": "Please upload a photo of the damaged item. We\"ll review and validate it for damages.",
"listPopupUploadError": "Oops! Your file is over 5MB. Try a smaller one.",
"listPopupUploadButtonText": "Add image",
"listPopupUploadAnotherButtonText": "Add another image",
"listPopupCommentsLabel": "Comments (Specify your reason for return)",
"returnsGenericError": "Oops! An error occurred, please try again.",
"returnsGenericInitialisationError": "We are sorry but your order could not be processed at this time!",
"returnsQuantityLabel": "Qty:",
"returnsColourLabel": "Colour:",
"returnsPriceLabel": "Price:",
"returnsSizeLabel": "Size:",
"returnsPortalLoading": "Getting your order details...",
"newMessagesSystemMessage": "New Messages",
"orderStatus": {
"Ready for Shipment": "Processing",
"Problem with Delivery": "Delivery Problem",
"Ready for Pickup": "Ready for Pickup",
"Returning to Sender": "Returning to Sender",
"In Transit": "In Transit",
"Return Started": "Continue Return",
"Start Return": "Start Return",
"Label Created": "Return Submitted",
"Return Received": "Return Received",
"Delivered": "Delivered!"
},
"orderDetailsStep": {
"heading": "Order Details",
"returnReasonButtonText": "Reason for return",
"orderDateLabel": "Ordered on",
"orderNumberLabel": "Order #",
"returnDeadlineLabel": "Returnable until",
"returnLabel": "Return label",
"shippingInfo": "Shipping info",
"dropOff": "Drop-off"
},
"returnOptionsStep": {
"heading": "Return Options",
"optionsTitle": "Return options",
"storeCreditLabel": "Total store credit:",
"refundLabel": "Total refund:",
"replacementsLabel": "Total replacements:",
"policyAcknowledgement": "I acknowledge that I have read, understand, and agree to the return policy conditions.",
"additionalCreditBadgeText": "Additional credit!",
"additionalCreditFooterLabel": "Additional Credit",
"lowStockLabel": "Low in Stock",
"changeAddress": "Change Address",
"invalidPostcode": "Please enter a valid postcode",
"enterAddressManually": "Enter Address Manually",
"or": "OR",
"quickAddressconfirm": "Confirm",
"deliveryAddress": "Delivery Address"
},
"shippingInfoStep": {
"heading": "Shipping Information",
"subHeading": "How to send us your item(s)",
"successMessage": "Return Submitted! 🎉"
},
"importantInformationStep": {
"heading": "Important Information"
},
"returnDetailsStep": {
"heading": "Return Details",
"orderDateLabel": "Ordered on",
"orderNumberLabel": "Order #",
"returnDeadlineLabel": "Returnable until",
"returnLabel": "Return label",
"shippingInfo": "Shipping information",
"cancelReturnSuccess": "Return Cancelled!",
"returnedProductsLabel": "Returned products",
"returnableProductsLabel": "Returnable products",
"returnableProductsHeading": "More items from this order",
"cancelReturnTitle": "Cancel Return",
"cancelReturnDesc": "Changed your mind or have more items to return? Cancel your return submission here.",
"cancelReturnButtonText": "Cancel Return",
"cancelReturnModalHeading": "Cancel Return?",
"cancelReturnModalDesc": "Are you sure you want to cancel your return? You cannot undo this action.",
"cancelReturnCloseButtonText": "No Thanks",
"cancelReturnConfirmButtonText": "Cancel"
},
"productReturnDetailsStep": {
"heading": "Item Details",
"orderDetailsLabel": "Order details",
"returnOptionLabel": "Chosen return option",
"returnReasonLabel": "Reason for return",
"footerText": "Check out our returns policy for more info"
},
"dropOffLocationsStep": {
"heading": "Drop Off Locations",
"openingHours": "Opening hours",
"locationOpen": "Open",
"locationClosed": "Closed",
"locationClosingSoon": "Closing Soon",
"directionsButtonText": "Get Directions",
"searchPlaceholder": "Look up your postcode, city",
"preciseLocation": "Use precise location",
"miles": "miles",
"km": "km",
"monday": "Monday",
"tuesday": "Tuesday",
"wednesday": "Wednesday",
"thursday": "Thursday",
"friday": "Friday",
"saturday": "Saturday",
"sunday": "Sunday"
},
"addressForm": {
"labels": {
"firstName": "First Name",
"lastName": "Last Name",
"mobile": "Mobile",
"country": "Country",
"address": "Address",
"city": "City",
"county": "County",
"postcode": "Post Code",
"state": "State",
"zipCode": "ZIP Code"
},
"placeholders": {
"firstName": "Enter First Name",
"lastName": "Enter Last Name",
"mobile": "Enter Mobile Number",
"country": "Select Country",
"address": "Enter Address Line 1",
"addressLine2": "Enter Address Line 2",
"city": "Enter City",
"county": "Enter County",
"postcode": "Enter Post Code",
"state": "Enter State",
"zipCode": "Enter ZIP Code"
},
"confirmButtonText": "Confirm",
"errors": {
"firstNameRequired": "First Name is required",
"lastNameRequired": "Last Name is required",
"mobileRequired": "Mobile Number is required",
"mobileInvalid": "Invalid Mobile Number",
"countryRequired": "Country is required",
"addressRequired": "Address is required",
"cityRequired": "City is required",
"countyRequired": "County is required",
"postcodeRequired": "Post Code is required",
"postcodeInvalid": "Invalid Post Code"
}
},
"orderTracker": {
"shipment": "Shipment",
"of": "of",
"at": "at",
"lastUpdatedLabel": "Last Updated:",
"deliveryMethod": "Delivery Method",
"days": "days",
"itemLabel": "Item",
"itemsLabel": "Items",
"sizeLabel": "Size",
"expectedDate": "Estimated Delivery",
"shipmentHandledBy": "Your shipment is handled by ",
"carrier": "Carrier",
"trackingNumber": "Tracking No.",
"viewMore": "More Details",
"orderedItems": "Shipment Items",
"detailedTrackingHistory": "Tracking Details",
"proofOfDeliveryLabel": "Proof of delivery:"
},
"returnOverdue": {
"priceLabel": "Price:",
"itemsLabel": "Items:"
},
"aiThinkingLabels": [
"Thinking",
"Analysing",
"Checking from source",
"Almost there..."
],
"welcomeScreen": {
"title": "Hi there!",
"titleLoggedIn": "Hi {name}",
"subtitle": "How can we help you today?",
"whereIsMyOrder": {
"track": {
"title": "Track your order",
"subtitle": "Enter your order number and email to see live shipping status.",
"namePlaceholder": "Your name",
"orderNumberPlaceholder": "Order number",
"orderNumberValidationMessage": "Please enter a valid order number",
"emailPlaceholder": "Email used for the order",
"submitButtonText": "Find my order",
"submitButtonAriaLabel": "Find my order",
"message": "Where is my order {orderNumber}?"
},
"loggedIn": {
"title": "Track your orders",
"subtitle": "See the latest status and delivery details for your orders.",
"trackMessage": "Where is my order?"
}
},
"popularQuestions": {
"title": "Popular questions"
},
"cartPromotion": {
"title": "Still in your bag",
"itemCount": "{count} items · {total}",
"itemCountSingular": "1 item · {total}",
"progressMessage": "You're {amount} away from unlocking {reward}",
"unlockedTitle": "You did it — {reward} is yours!",
"unlockedSubtitle": "Applied automatically at checkout — nothing to enter.",
"goToCartButtonText": "Go to cart"
},
"buyItAgain": {
"title": "Buy it again",
"itemCount": "{count} items",
"itemCountSingular": "1 item",
"rowButtonText": "Add",
"buttonText": "Buy it again",
"addedButtonText": "Added"
},
"currentProduct": {
"title": "You're viewing",
"buttonText": "Ask anything about the product",
"productMessage": "Tell me more about the {name}"
},
"featuredProducts": {
"title": "Trending now",
"productMessage": "Tell me more about the {name}"
}
}
}Welcome screen text
The welcomeScreen object controls the greeting shown on the initial welcome
screen. Each property is optional — set a property to an empty string to hide
that piece of text.
title— the greeting shown when the user's name is not known.titleLoggedIn— the greeting shown when the user's name is known (from the
pre-chat form or Shopify). The{name}placeholder is replaced with the
user's name.subtitle— the supporting text shown below the greeting.
Current product text
The welcomeScreen.currentProduct object controls the copy of the
"You're viewing" card, shown when welcomeScreen.currentProduct.isEnabled is
set in the widget config — see the
Welcome Screen documentation.
title— the eyebrow label on the product card.buttonText— the label of the ask button.productMessage— the message that starts the conversation when the ask
button is tapped. The{name}placeholder is replaced with the product
title.
Where is my order? (WISMO) text
The welcomeScreen.whereIsMyOrder object controls the copy of the order
tracking section, shown when welcomeScreen.wismo.isEnabled is set in the
widget config — see the
Welcome Screen documentation.
The track group is used when the tracking form has at least one field to
display (see wismo.formFields in the
Welcome Screen documentation):
title,subtitle— the heading and supporting text of the card.namePlaceholder— placeholder of the name input.orderNumberPlaceholder— placeholder of the order number input.orderNumberValidationMessage— shown while the entered order number does
not match the configuredwismo.orderNumberRegexPattern.emailPlaceholder— placeholder of the email input.submitButtonText— visible label of the full-width submit button.submitButtonAriaLabel— accessible label of the submit button.message— the message that starts the conversation when the order number
field is displayed. The{orderNumber}placeholder is replaced with the
entered order number. The entered name and email are passed to the
conversationinitcall separately (not via this message). When the order
number field is not displayed,loggedIn.trackMessageis sent instead.
Email validation copy comes from the shared top-level language keys
(emailValidationAmpersat, emailValidationDomain, emailValidationTld,
emailValidationPattern), not from welcomeScreen.whereIsMyOrder.
The loggedIn group is used when there are no form fields to display (every
configured field is already known):
title,subtitle— the heading and supporting text of the card.trackMessage— the message sent when the card is tapped. Also used as the
opening message of the tracking form when the order number field is not
displayed.
Popular questions text
The welcomeScreen.popularQuestions object controls the copy of the popular
questions section, shown when welcomeScreen.popularQuestions.isEnabled is
set in the widget config.
title— the section heading. Set it to an empty string to hide the
heading.
The questions themselves are configured in the widget config
(welcomeScreen.popularQuestions.questions), not in lang, as they are
customer-defined and not translated — see the
Welcome Screen documentation.
Cart promotion text
The welcomeScreen.cartPromotion object controls the copy of the
"Still in your bag" cart card, shown when
welcomeScreen.cartPromotion.isEnabled is set in the widget config.
title— the card heading.itemCount,itemCountSingular— the cart summary line. The{count}
placeholder is replaced with the number of items and{total}with the
formatted cart total.itemCountSingularis used when the cart contains
exactly one item.progressMessage— shown while the cart total is below the promotion's
minimumCartTotal. The{amount}placeholder is replaced with the
formatted amount still needed and{reward}with the promotion's
rewardText.unlockedTitle,unlockedSubtitle— shown once the promotion is unlocked.
{reward}is replaced as above.goToCartButtonText— the label of the "Go to cart" button shown once the
promotion is unlocked (requires the top-levelcartUrlconfig).
The promotion itself (rewardText, minimumCartTotal, etc.)
is configured in the widget config (welcomeScreen.cartPromotion), not in
lang, as it is promotion-specific — see the
Welcome Screen documentation.
Buy it again text
The welcomeScreen.buyItAgain object controls the copy of the
"Buy it again" card, shown when welcomeScreen.buyItAgain.isEnabled is set in
the widget config.
title— the eyebrow / card heading.itemCount,itemCountSingular— the item count line shown when the last
order contains more than one item. The{count}placeholder is replaced with
the number of items.itemCountSingularis used when there is exactly one
item (and is typically unused in the single-item layout).rowButtonText— the label of the per-item add button shown in the
multi-item layout.buttonText— the label of the primary button that adds the whole order
(or the single item) to the cart.addedButtonText— the label shown on an add button after the item(s) have
been added successfully.
The last-order items themselves come from Shopify
(DG_CAMPAIGNS_VARS.customer.lastOrder), not from lang — see the
Welcome Screen documentation.
Featured products text
The welcomeScreen.featuredProducts object controls the copy of the featured
products carousel, shown when welcomeScreen.featuredProducts.isEnabled is
set in the widget config.
title— the section heading. Set it to an empty string to hide the
heading.productMessage— the message that starts the conversation when a product
is tapped. The{name}placeholder is replaced with the product name. This
message is not used whenwelcomeScreen.featuredProducts.openProductPageis
enabled — in that case tapping a product opens itsurlinstead.
The products themselves (name, price, image, url) are configured in
the widget config (welcomeScreen.featuredProducts.products), not in lang,
as they are customer-defined and not translated — see the
Welcome Screen documentation.
Updated 9 days ago
