---
title: "Widget UI strings"
description: "custom_lang_translations keys: visitor-visible strings, dictionary leftovers, placeholders, and locale differences."
---

# Widget UI strings

Overrides widget UI strings (input placeholder, header buttons, carousel). Scenario texts and the `title` / `subtitle` fields in `kw('init')` are not part of this object.

Launch fields: [Widget settings parameters](/en/channels/how-to/widget/widget-settings.md).

## How to pass them

Shape: **language → group → key**. Pass only what you change: the widget merges the object into the built-in dictionary.

Built-in languages: `uk`, `en`, `ru`, `de`, `vn`. Any other code (for example `pl`) creates a new locale based on Ukrainian.

```javascript
kw('init', {
  bot_id: 1,
  language_code: "en",
  custom_lang_translations: {
    en: {
      common: {
        write_a_message: "Type a message…"
      },
      header: {
        privacy_agree: "I agree"
      }
    },
    uk: {
      common: {
        write_a_message: "Напишіть нам…"
      }
    }
  }
});
```

In `header.privacy_policy_text` keep `{url}` — `privacy_policy_url` is inserted there. In `carousel.goToSlide` keep `{slide}` and `{total}`.

Locale dictionaries **are not identical**: `uk` has no `common.frame_title` and no `language_settings` group; `de` and `vn` have no `header.expand` / `header.minimize`. An override still works if you pass the key.

## Strings on screen

Default text is English, as in the `en` dictionary.

| Key | Where it appears | Default (en) |
|---|---|---|
| `common.write_a_message` | Input placeholder | Write a message |
| `common.send` | Send-button tooltip | Send |
| `common.reopen_dialog` | Restart-dialog control | Restart chat |
| `common.you_offline` | Offline title | You’re Offline |
| `common.check_offline` | Offline hint | Check Your Internet Connection |
| `common.too_many_tries` | Anti-spam title | You are sending messages too often. |
| `common.please_wait` | Anti-spam hint | Please wait and try again later. |
| `common.input_phone_label` | Phone field in the scenario | Enter phone here... |
| `common.input_email_label` | Email field in the scenario | Enter email here... |
| `common.file_sent_message` | After a file is sent | File successfully sent |
| `header.expand` | Expand the window | Expand widget |
| `header.minimize` | Collapse the window | Minimize widget |
| `header.stop_chat_sure` | Close-chat confirmation | Do you really want to close the chat? |
| `header.stop_chat_btn` | Button in that confirmation | Stop chat |
| `header.continue_chat_btn` | Button in that confirmation | Continue chat |
| `header.switch_channel` | Switch to messenger (multi-channel) | Switch to messenger |
| `header.privacy_policy_text` | Privacy consent copy | …`<a href="{url}">Privacy Policy</a>`… |
| `header.privacy_agree` | Consent button | Agree, continue |
| `header.ip_ban` | If there is no `user_block_message` for the language | Chat access from this IP address… |
| `agent.thinking` | “Agent thinking” if the scenario step has no custom text | Agent is thinking... |
| `errors.max_size` | File larger than 10 MB | File size should not exceed 10MB |
| `errors.invalid_file_type` | Unsupported file type | Unsupported file type. |
| `notifications.new_message` | Notification / tab title | New message |
| `weekday_names.mon` | Weekday label | Mon |
| `weekday_names.tue` | Weekday label | Tue |
| `weekday_names.wed` | Weekday label | Wed |
| `weekday_names.thu` | Weekday label | Thu |
| `weekday_names.fri` | Weekday label | Fri |
| `weekday_names.sat` | Weekday label | Sat |
| `weekday_names.sun` | Weekday label | Sun |
| `weekday_names.minutes_age` | “N min ago” | min ago |
| `carousel.previous` | Carousel, accessibility | Previous slide |
| `carousel.next` | Carousel, accessibility | Next slide |
| `carousel.container` | Carousel, accessibility | Carousel with slides |
| `carousel.item` | Carousel, accessibility | Slide |
| `carousel.goToSlide` | Carousel; keep `{slide}` `{total}` | Go to slide {slide} of {total} |
| `product_cards.buy_button` | Product card if there is no custom CTA | Buy |
| `product_cards.show_all_specs` | Card specifications | View all specifications |
| `product_cards.hide_details` | Card specifications | Hide details |

## In the dictionary, almost never on screen

The widget does not show these strings on screen. You can still override them.

| Key | Default (en) |
|---|---|
| `app.access_denied` | Access denied |
| `header.logout` | Logout |
| `common.close` | Close |
| `common.save` | Save |
| `common.success` | Success |
| `common.error` | Error |
| `common.error_permitions` | permissions error |
| `common.error_delete` | removal |
| `common.error_update` | updating |
| `common.error_save` | preservations |
| `common.error_get` | receiving |
| `common.error_exit` | exit |
| `common.error_modify` | receiving |
| `common.remove_the_file` | Remove the file |
| `common.cancel` | Cancel |
| `common.edit` | Edit |
| `common.frame_title` | Switching to Business plat having Personal plan paid |
| `common.frame_subtitle_number` | Number |
| `common.frame_subtitle_status` | Status |
| `common.frame_subtitle_open` | Open |
| `errors.connect` | Connection error |
| `rules.required` | Required field |
| `rules.not_empty` | The field must not be empty |
| `rules.phone` | The phone field must be in the format +380XXXXXXXXX |
| `rules.email` | Please enter a valid email |
| `login.authorization` | Authorization |
| `login.email_field` | Email |
| `login.password_field` | Password |
| `login.login_button` | Entry |
| `login.auth_error` | Authorisation error |
| `language_settings.choose_lang` | Choose language: |
| `language_settings.ru` | Russian |
| `language_settings.en` | English |
| `language_settings.de` | Deutsch |

`common.frame_title` and `language_settings.*` are not in the `uk` dictionary. `language_settings.de` is only in the `de` dictionary.

The widget dictionary does not include `modules.op.access_denied`, `modules.op.lack_rights`, or `modules.op.texts.without_subject`. An override via `custom_lang_translations` can still work; this is not a public string set.

## Related articles

- [Widget settings parameters](/en/channels/how-to/widget/widget-settings.md)
- [How to configure the widget in Settings](/en/channels/how-to/widget/configure-widget-settings.md)
- [How to configure the IP blocking message](/en/channels/how-to/widget/configure-ip-blocking-message.md)
- [JavaScript API](/en/channels/explanation/widget-javascript-api.md)
