Localizing text
Localizing text
This page shows you how to localize or customize strings in the SDK UI.
Strings in the Unified SDK are localized into the following 33 languages. They are listed in Supported languages below.
Note: If you change the locale programmatically during the runtime of the application, the change won't be applied to the UI element. The UI element relies solely on the device locale. To change the UI element, you must restart the application to update the locale of the device itself.
Customize existing strings
The Unified SDK provides localizations for all the strings used throughout the UI. You can override them if required.
If your project does not yet have a Localizable.strings file with the different language variants, you can create one by following these steps:
-
In Xcode, select File > New > File, then select Resource in the iOS category in the sidebar.
-
Select Strings File from the files and click Next.
-
Name the file Localizable and click Create.
To then customize the Unified SDK strings with new values:
- Choose the strings to customize and add them to the
Localizable.strings
file as follows.
Make sure to include placeholders in the replacements of any strings that contain them.
```
// add a key and change the value to what you want
"ios.common.ui.title" = "Contact us";
```
- Make sure that the file is in the Copy Bundle Resources section of the Build Phases tab in Xcode.
Add a new localization
If the Unified SDK does not include localized strings for the language you are interested in, you can add new ones.
Select your Localizable.strings file, and in the right pane click Localize. When you select the missing language, a new variant of Localizable.strings will be created for it.
In the new file, add translations for all of the strings in the Unified SDK's Strings.bundle.
List of localized strings
Unified SDK
The Unified SDK component contains the following strings:
/* Status label for a failed message, notifying the user to tap the cell to try resend the message. */
"ios.common.ui.message.action.retry.button.label" = "Tap to retry";
/* Copy label for UIMenuItem in the editing menu for messages in the thread. Indicates a user can copy the text of the message to their clipboard. */
"ios.common.ui.message.edit_menu.copy.button.label" = "Copy";
/* Delete label for UIMenuItem for messages in the thread. Indicates a user can delete a message if it has failed in the thread. */
"ios.common.ui.message.edit_menu.delete.button.label" = "Delete";
/* Descriptive label describing the state of reconnection to the internet. Current state: Connection failed. Appears after the retry failed to connect. */
"ios.common.ui.reconnection.connection_failed.label" = "Connection failed";
/* Descriptive label describing the state of reconnection to the internet. Current state: reconnecting. Appears after the retry button is pressed. */
"ios.common.ui.reconnection.reconnecting.label" = "Reconnecting...";
/* Title label, shown in the navigation bar. */
"ios.common.ui.title" = "Contact us";
/* Label for the button used to retry some operations. */
"ios.common.ui.retry.button.label" = "Retry";
/* Hint for the input field indicating that the user should enter a message. */
"ios.common.ui.type_a_message.input.label" = "Type a message…";
/* Label for button on alert which is shown to decline a request. The button dismisses the alert. */
"ios.common.ui.alert.no.button.label" = "No";
/* Label for button on alert which is shown to accept a request. The button dismisses the alert. */
"ios.common.ui.alert.yes.button.label" = "Yes";
/* Label for button on alert which is shown when an image could not be saved. The button dismisses the alert. */
"ios.common.ui.attachment.error.alert.ok.button.label" = "OK";
/* Title for an alert which is shown when an image could not be saved. */
"ios.common.ui.attachment.error.alert.title.label" = "Failed to save image";
/* Label for button which cancels attachment selection. */
"ios.common.ui.attachment.selection.cancel.button.label" = "Cancel";
/* Label for the source of selecting an attachment via Google Drive or iCloud. Displays as a button to tap. */
"ios.common.ui.attachment.selection.document.button.label" = "Document";
/* Label for the source of selecting an image attachment from the Camera. Displays as a button to tap. */
"ios.common.ui.attachment.selection.camera.button.label" = "Camera";
/* Label for the source of selecting an image attachment. Displays as a button to tap. */
"ios.common.ui.attachment.selection.photo_library.button.label" = "Photo library";
/* Status label for a failed file upload. Reason: Sending attachments is not supported by backend. */
"ios.common.ui.message.status.file.sending_is_not_supported.label" = "Attachments not supported";
/* Status label for a failed upload showing the attachment file size has been exceeded. With the max file size in brackets eg.(20MB). */
"ios.common.ui.message.status.file.size.limit.label" = "Exceeds max file size (%@)";
/* Status label for a failed file upload. Reason: Sending a file of this type is unsupported. */
"ios.common.ui.message.status.file.type_not_supported.label" = "Attachment type not supported";
Answer Bot
The Bot's name is set with a client-side API.
The Answer Bot component contains the following strings:
/* Initial greetings from Answer Bot */
"ios.answer_bot.text.label.hi" = "Hi!";
"ios.answer_bot.text.label.ask_a_question" = "Ask me a question and I'll find the answer for you.";
/* Shown after initial greetings if Support, Chat, or other Messaging engines are configured */
"ios.answer_bot.cell.text.inactivity_get_in_touch_message" = "Or you can get in touch.";
/* Input hint text */
"ios.answer_bot.ui.type_your_question.input.label" = "Type your question…";
/* Shown when a single article was found by Answer Bot */
"ios.common.ui.cell.text.single_article" = "Here's an article that may help:";
/* Shown when multiple articles were found by Answer Bot */
"ios.common.ui.cell.text.many_articles" = "Here are some articles that may help:";
/* Shown when no articles are found by Answer Bot */
"ios.common.ui.cell.text.no_articles" = "I couldn't find any relevant articles.";
"ios.common.ui.cell.text.get_in_touch" = "Would you like to get in touch?";
"ios.answer_bot.cell.text.ask_me_another_question" = "Or you can ask me another question.";
/* Shown at the bottom of an article, above the yes and no labels */
"ios.answer_bot.article_view.label.question" = "Does this article answer your question?";
"ios.answer_bot.resolution_view.question.text.tell_us_why" = "Was the article related to your question?";
/* Quick reply labels shown to ask whether an article was helpful or not */
"ios.answer_bot.article.view.anwser.label.yes" = "Yes";
"ios.answer_bot.resolution_view.button.label.no" = "No";
/* Shown when the end-user marks a question as resolved */
"ios.answer_bot.cell.text.question_resolved" = "Nice. Knowledge is power.";
/* Shown after a successful resolution, asking if there's another question */
"ios.answer_bot.cell.text.type_another_question" = "If there's anything else I can find for you, just type another question.";
/* Shown after an unsuccessful resolution */
"ios.answer_bot.cell.text.question_unresolved" = "I see. Your question is still unresolved.";
/* Shown if the user navigates back to the conversation and they didn't select yes / no on the previous article screen */
"ios.answer_bot.cell.text.article_helpful_question" = "Did the article you viewed help to answer your question?";
"ios.answer_bot.resolution_view.question.text.tell_us_more" = "Please tell us more. Was the article related to your question?";
/* Shown when there is no contact engine like Support or Chat */
"ios.answer_bot.cell.text.ask_me_another_question_no_transfer_options" = "You can try asking me another question.";
/* Labels shown when an end-user can transfer to Support, Chat, and other contact engines */
"ios.conversation.ui.chat.handover.message.selection" = "Chat with an agent";
"ios.ZDKRequests.createRequest.leaveAMessage.title" = "Leave a message";
/* Errors */
"ios.answer_bot.load_article.error" = "Failed to load article";
"ios.answer_bot.text.label.disabled" = "Uh-oh. Sorry, something’s up. I can’t answer questions right now.";
/* Labels shown after the end-user selects the "Leave a message" option */
"ios.SupportEngine.requestCreated.conversationsEnabledMessage" = "Thank you. A message has been sent to the team. You can view this message and add additional details here:";
"ios.SupportEngine.requestCreated.conversationsOff.message" = "Thank you. A message has been sent to the team. If a reply is needed, they will contact you by email.";
"ios.SupportEngine.requestCreated.requestList.button" = "View messages";
Chat
The Chat component contains the following strings:
// MARK: Engine handover
/* Label for button that when tapped on will allow the user to switch to chatting with an agent. */
"ios.conversation.ui.chat.handover.message.selection" = "Chat with an agent";
/* Button action acknowledgement to let the user know they will be connected to an agent */
"ios.conversation.ui.chat.welcome_message.handover" = "OK. I will find someone who can help with your query.";
// MARK: Customer satisfaction (CSAT)
/* CSAT message shown to the user when an agent has requested the user to rate their chat experience. */
"ios.conversation.ui.chat.rating.message" = "Hey, just checking in to see how your chat with %@ has been going?";
/* CSAT button label that the user presses to give a negative chat rating. If the emojis don’t translate well to your language, please remove them. */
"ios.conversation.ui.chat.rating.button_label.bad" = "Bad :thumbs-down-emoji:";
/* CSAT button label that the user presses to give a positive chat rating. If the emojis don’t translate well to your language, please remove them. */
"ios.conversation.ui.chat.rating.button_label.good" = "Good :thumbs-up-emoji:";
/* CSAT message shown to the user inidicating that they have the option to leave a comment about the chat. */
"ios.conversation.ui.chat.rating.comment.prompt.message" = "We value your feedback. If you like, you can also add a comment with more detail.";
/* CSAT button label that the user presses if they would like to leave a comment about their chat experience. */
"ios.conversation.ui.chat.rating.comment.action.button_label" = "Add a comment";
/* Input field placeholder suggesting the user to enter a comment about how the chat is going. Should be kept short to be visible within the input */
"ios.conversation.ui.chat.rating.add.comment.composer.hint" = "Type your comment...";
/* CSAT confirmation message. Shown to the user to let them know that their comment has been received. 'chat' is a noun and must be translated. */
"ios.conversation.ui.chat.rating.acknowledgement.message" = "Thank you for the feedback. You can now get back to your chat.";
// MARK: Email transcript UIAlertAction flow
/* Email transcript UIAlertAction title, shown in the chat menu. User clicks it when they want to receive a chat transcript. */
"ios.conversation.ui.chat.transcript.prompt.request_transcript.title" = "Request transcript";
/* Email transcript UIAlertAction prompt message. Prompts user if they'd like to send the transcript to their email. */
"ios.conversation.ui.chat.transcript.prompt.request_transcript_prompt.label" = "Would you like a transcript of this chat sent to your email?";
/* Email transcript UIAlertAction message to prompt the user to enter their email. */
"ios.conversation.ui.chat.transcript.prompt.ask_email.label" = "What email address should the transcript be sent to?";
/* Email transcript UIAlertAction text field placeholder for the the email address field. */
"ios.conversation.ui.chat.transcript.prompt.email_placeholder" = "Email address.";
/* Email transcript UIAlertAction prompt message to inform user they entered a wrong email, and should try enter a new one. */
"ios.conversation.ui.chat.transcript.prompt.invalid_email.message" = "A valid email address is required.";
/* Email transcript UIAlertAction response message for the user to stop the email transcript prompt flow. */
"ios.conversation.ui.chat.transcript.prompt.no" = "No";
/* Email transcript UIAlertAction response message for the user to continue the email transcript prompt flow. */
"ios.conversation.ui.chat.transcript.prompt.yes" = "Yes";
/* Email transcript UIAlertAction label to cancel the action. */
"ios.conversation.ui.chat.transcript.prompt.cancel" = "Cancel";
/* Email transcript UIAlertAction label to confirm the action, and send the email transcript request. */
"ios.conversation.ui.chat.transcript.prompt.send_email" = "Send";
/* Email transcript banner label displayed after user finishes the flow and sets the email they'd like the chat transcript to be sent to. */
"ios.conversation.ui.chat.transcript.email_set.label" = "Transcript will be sent to %@ when the chat ends";
// MARK: End chat flow
/* End chat UIAlertAction title, shown in the chat menu. User clicks it when they want to end an active chat. */
"ios.conversation.ui.end_chat.button_label" = "End chat";
// MARK: System messages
/* System message shown when the user ended the chat, or the chat was ended by timeout. */
"ios.conversation.ui.end_chat.system_message" = "Chat ended";
/* System message when a user joins the chat. Placeholder gets replaced with the display name of the user. */
"ios.conversation.ui.member.join" = "%@ joined the chat";
/* System message when an agent leaves the chat. Placeholder gets replaced with the display name of the agebt. */
"ios.conversation.ui.member.leave" = "%@ left the chat";
/* System message to show the user their position in the queue. */
"ios.conversation.ui.queue.position" = "Queue position: %lu";
// MARK: Chat form field hints
/* Input field placeholder suggesting the user to enter their name. Should be kept short to be visible within the input field. */
"ios.conversation.ui.pre_chat.form.add.name.composer.hint" = "What is your name?";
/* Input field placeholder suggesting the user to enter their email address. Should be kept short to be visible within the input field. */
"ios.conversation.ui.pre_chat.form.add.email.composer.hint" = "What is your email address?";
/* Input field placeholder suggesting the user to enter their phone number. Should be kept short to be visible within the input field. */
"ios.conversation.ui.pre_chat.form.add.phone.number.composer.hint" = "What is your number?";
// MARK: Pre-chat form flow
/* Pre-chat form welcome message shown when a user starts the flow, asking them for their query. */
"ios.conversation.ui.chat.welcome_message.conversation_start" = "Hi. What can we help you with today?";
/* Pre-chat form statement, informing the user more information is required before reaching out to an agent. */
"ios.conversation.ui.pre_chat.form.information.request.message" = "I will find someone to help you. First I need a few pieces of information.";
/* Pre-chat form question prompting the user to enter their name. */
"ios.conversation.ui.pre_chat.form.name.request.message" = "What is your name?";
/* Pre-chat form question prompting the user to enter their email address. */
"ios.conversation.ui.pre_chat.form.email.request.message" = "What is your email address?";
/* Pre-chat form statement, informing the user they entered an invalid email, and need to try again. */
"ios.conversation.ui.pre_chat.form.email.retry.message" = "The email address you entered is incorrect. Enter a valid email address.";
/* Pre-chat form question prompting the user to enter their phone number. */
"ios.conversation.ui.pre_chat.form.phone.number.request.message" = "What is your phone number?";
/* Pre-chat form question prompting the user to pick the department they'd like to speak to. */
"ios.conversation.ui.pre_chat.form.department.choice.message" = "Which department would best answer your question?";
/* Pre-chat form button label that allows the user to skip an optional form question. */
"ios.conversation.ui.pre_chat.form.skip.button_label" = "Skip";
/* Pre-chat form message to acknowledge a user entering their name. */
"ios.conversation.ui.pre_chat.form.thank_you.message" = "Thank you.";
// MARK: Offline form flow
/* Offline form welcome message informing the user no one is online. This is followed by `offline_form.message_prompt` message asking for more info. */
"ios.conversation.ui.chat.offline_form.welcome_message" = "Hi. Unfortunately nobody is online at the moment.";
/* Offline form statement, informing the user information is needed to get in contact at a later point in time. */
"ios.conversation.ui.chat.offline_form.introduction_message" = "To contact you when someone is available, I need some more information.";
/* Offline form completion message shown to the user when they complete the form. */
"ios.conversation.ui.chat.offline_form.completion_acknowledgement" = "We've received your message and will get back to you as soon as possible.";
/* Offline message informing the user that there is no active agents, and to check back later. Shown when ChatConfiguration.isOfflineFormEnabled is disabled */
"ios.conversation.ui.offline.no_agents_online" = "Unfortunately, nobody is online at the moment. Check back later.";
/* Offline message informing the user that agent availablity cannot be determined */
"ios.conversation.ui.chat.message.unable_to_determine_availability" = "Hi. Unfortunately we are unable to determine if an agent is available.";
/* Offline message asking the user for their details, like name and email */
"ios.conversation.ui.chat.offline_form.message__field_prompt" = "What can we help you with when we are back online?";
Chat push notifications
To localize the received push notification from the Chat SDK, follow these steps:
- Drag the ChatStrings folder into your project. Localized strings can be found under ChatSDK.framework/ChatStrings.
- Make sure that the file is in the Copy Bundle Resources section of the Build Phases tab in Xcode.
List of localized strings for push notifications
/* Push notification message informing that the chat has ended, placeholder is agent name, e.g. 'Your chat with Graham has ended'. */
"ios.ZDCChat.pushChatEndedBody" = "Your chat with %@ has ended";
/* Push notification title informing that the chat has been ended". */
"ios.ZDCChat.pushChatEndedTitle" = "Chat ended";
Supported languages
Strings in the Unified SDK are already localized into the following languages:
Language code | Language |
---|---|
ar | Arabic |
bg | Bulgarian |
cs | Czech |
da | Danish |
de | German |
el | Greek |
en-GB | British English |
en | American English |
es | Spanish |
fi | Finnish |
fil | Filipino |
fr | French |
he | Hebrew |
hi | Hindi |
hu | Hungarian |
id | Indonesian |
it | Italian |
ja | Japanese |
ko | Korean |
ms | Malay |
nb | Norwegian |
nl | Dutch |
pl | Polish |
pt-BR | Brazilian Portuguese |
pt | Portuguese |
ro | Romanian |
ru | Russian |
sv | Swedish |
th | Thai |
tr | Turkish |
vi | Vietnamese |
zh-Hans | Simplified Chinese |
zh-Hant | Traditional Chinese |