Настройка языковой локализации
Языковая локализация виджета
Поддерживается настройка надписей для соответствия виджета локализации ваших сайтов.
В поставку включены локализации для всех надписей виджета на языках: русский (ru
), английский (en
), индонезийский (id
), азербайджанский (az
). Они включены в код виджета.
Вы можете добавить любое количество дополнительных локалей или переопределить настройки существующих.
Управление локализациями выполняется в файле настроек settings.json
.
Для конфигурирования укажите в ветке locales
файла settings.json
ключ надписи, код языка и значение для этого языка. В этом примере вы можете посмотреть вариант настроек, в котором несколько надписей были изменены.
Параметры файла конфигурации, отвечающие за локализацию
Управление языковыми локализациями осуществляется в файле настроек settings.json
.
Параметр | Значения | По умолчанию | Описание |
---|---|---|---|
locale | строка | "en" | Предпочтительная локаль - языковой код в формате ISO 639-1 |
locales | JSON-объект | {} | Объект, с ключами для переопределения локализаций. Указываются только те ключи и языковые коды, значения которых требуется переопределить |
Логика применения локализации
При настройке локализации в settings.json
вы можете указать предпочтительную локаль.
Для смены локали виджета на лету используется метод setLocale
Локаль надписей в виджете определяется по следующей логике:
- Текущая локаль: заданная при инициализации виджета или заданная методом смены локали ссылка. Если текущая не задана, то:
- Предпочтительная: выбранная в
settings.json
. Если предпочтительная не задана, то: - Дефолтная: локаль
en
Приоритет отображения надписей:
- Переопределенные в файле
setting.json
. Если не заданы, то: - Дефолтные
Структура раздела locales
файла конфигурации settings.json
{
"раздел": {
"подраздел": {
"элемент1": {
"язык1": "значение для языка 1",
"язык2": "значение для языка 2"
}
}
}
}
Описание ключей локализации
Конечным значением ключа является обьект содержащий в свойствах пары код языка
: значения для языка
(см. структуру)
Тексты ошибок
Ключ | Описание | |
---|---|---|
1 | errors.file.restricted.type | Текст ошибки прикрепления файла некорректного типа |
2 | errors.file.restricted.size | Текст ошибки прикрепления файла некорректного размера |
3 | errors.file.restricted.not-found | Текст ошибки прикрепления отсутствующего файла |
4 | errors.file.disallowed | Текст ошибки файла непрошедшего проверку |
5 | errors.file.timeout | Текст ошибки загрузки файла по таймауту |
6 | errors.file.unexpected-error | Текст непредвиденной ошибки загрузки файла |
Предупреждение о неполной поддержке браузера
Ключ | Описание | |
---|---|---|
1 | BadBrowser.headerPartial | Шапка чата. Предупреждение о неполной поддержке браузера |
Область диалога виджета
Ключ | Описание | |
---|---|---|
1 | common.time.today | Плавающая метка даты - сегодня |
2 | common.time.yesterday | Плавающая метка даты - вчера |
3 | common.typing | Идентификатор набора текста оператором |
4 | RateIndicator.of | Предлог, используется в сообщении с результатами пройденного опроса CSI - проставленная оценка из максимально возможной. Пример: "ChatMessage": { "of": "из" } , при оценке 4 в 5-балльном опросе будет указано "4 из 5" |
5 | ChatMessage.yourself | Местоимение "Вы" в заголовке сообщения. Указывает клиенту, что отправитель сообщения - он |
6 | ChatMessage.youWrote | Метка "вы" |
7 | ChatMessage.operatorWrote | Метка "оператор" |
8 | ChatMessage.audio.compatibility | Сообщение в случае если браузер не поддерживает аудио контент |
8 | SocialLinks.text | Название панели со ссылками на социальные сети и мессенджеры |
9 | ChatMessage.audio.errorPlayback | Сообщение об ошибке воспроизведения аудио-файла |
10 | ChatMessage.audio.errorSpeech | Сообщение об ошибке распознавания |
11 | ChatMessage.audio.quoteInfo | Название аудио сообщения в цитатах |
12 | ChatMessage.downloadError | Сообщение об ошибке сохранения вложения |
13 | ChatMessage.sendError | undefined |
15 | ChatMessage.messageDeleted | undefined |
16 | ChatMessage.messageEdited | undefined |
Форма приветствия и форма обратной связи
Ключ | Описание | |
---|---|---|
1 | LimitedTextarea.chars | Поле ввода формы обратной связи, индикатор оставшихся для ввода символов "N символ(ов)" |
2 | ChatWelcome.sendWelcome | Форма приветствия - текст на кнопке отправки формы |
3 | ChatWelcome.identification.pre.text | Форма приветствия - заголовок приветственного сообщения |
4 | ChatWelcome.identification.pre.notice | Форма приветствия - подзаголовок приветственного сообщения |
5 | ChatWelcome.identification.post.text | Экран чата после представления клиента: заголовок приветственной фразы |
6 | ChatWelcome.identification.post.notice | Экран чата после представления клиента: подзаголовок приветственной фразы |
7 | ChatWelcome.form.phone.placeholder | Форма приветствия - подсказка для ввода телефона, если маска не задана |
8 | ChatWelcome.form.email.placeholder | Подсказка для ввода электронной почты |
9 | ChatWelcome.form.name.placeholder | Подсказка для ввода имени |
10 | ChatWelcome.inactivityForm.sent | Форма обратной связи - уведомление после отправки сообщения |
11 | ChatWelcome.inactivityForm.sendMessage | Форма обратной связи - кнопка отправки |
Заголовок чата
Ключ | Описание | |
---|---|---|
1 | ChatHeader.empty | Заголовок чата. Виджет в процессе инициализации и установки подключения |
2 | ChatHeader.title | Заголовок чата. У клиента нет активного обращения, чат доступен |
3 | ChatHeader.search | Заголовок чата. У клиента есть активное обращение, оператор или бот еще не подключился: выполняется поиск |
4 | ChatHeader.operatorSubTitle | Заголовок чата, у клиента есть активное обращение, бот или оператор назначен: название должности или другая информация |
5 | ChatHeader.inactive | Заголовок чата, чат недоступен |
Опросы и запросы клиенту
Ключ | Описание | |
---|---|---|
1 | ChatPoll.post.text | Текст после оценки |
2 | ChatEndPoll.text | Текст запроса клиенту - предложение завершить диалог |
3 | ChatEndPoll.continue | Текст ответа клиента на запрос - продолжить диалог |
4 | ChatEndPoll.close | Текст ответа клиента на запрос - завершить диалог |
Поле ввода сообщения
Ключ | Описание | |
---|---|---|
1 | ChatInput.errorSize | Поле ввода сообщения - cсообщение о превышении допустимого размера прикрепляемого файла |
2 | ChatInput.errorFormat | Ошибка недопустимого формата прикрепляемого файла |
3 | ChatInput.errorBroken | Ошибка поврежденного файла |
3 | ChatInput.placeholder | Подсказка для ввода сообщения (плейсхолдер) |
4 | ChatInput.attachments.uploading | Сообщение о процессе загрузки вложения |
5 | ChatInput.attachments.uploaded | Сообщение о готовности вложения к отправке |
6 | ChatInput.attachments.error | Ошибка загрузки вложения |
Нотификации для клиента
Ключ | Описание | |
---|---|---|
1 | Offline.down.text | Сообщение о потере связи с сервером - заголовок |
2 | Offline.down.notice | Сообщение о потере связи с сервером - подзаголовок |
3 | Offline.reconnect | Текст на кнопке переподключения |
4 | WebNotifications.new | Веб-уведомление о новом сообщении |
5 | WebNotifications.attachments | Веб-уведомление о новом вложении |
Предупреждение о доступе к микрофону
Ключ | Описание | |
---|---|---|
1 | MicrophoneAccessModal.title | Предупреждение о доступе к микрофону - заголовок |
2 | MicrophoneAccessModal.text | Предупреждение о доступе к микрофону - текст |
3 | MicrophoneAccessModal.button | Предупреждение о доступе к микрофону - кнопка |
Локализация окна emoji
Ключ | Описание | |
---|---|---|
1 | Emoji.recent | Эмоджи - вкладка "Недавние" |
2 | Emoji.people | Эмоджи - вкладка "Смайлики и люди" |
3 | Emoji.nature | Эмоджи - вкладка "Животные и природа" |
4 | Emoji.foods | Эмоджи - вкладка "Еда и напитки" |
5 | Emoji.activity | Эмоджи - вкладка "Активности" |
6 | Emoji.places | Эмоджи - вкладка "Путешествия и места" |
7 | Emoji.objects | Эмоджи - вкладка "Предметы" |
8 | Emoji.symbols | Эмоджи - вкладка "Символы" |
undefined
Ключ | Описание | |
---|---|---|
1 | ButtonsSurvey.thanks | Текст благодарности за отклик на кнопочный опрос |
Пример переопределения некоторых локалей
settings.json
:
{
"locale": "ru",
... // прочие настройки
"locales": {
"ChatWelcome": {
"remained": {
"ru": "Осталось"
},
"identification": {
"pre": {
"notice": {
"ru": "Представьтесь, пожалуйста, и начнём.",
"en": "Please, tell us something about yourself."
}
}
}
},
"ChatInput": {
"placeholder": {
"en": "Type your message here..."
}
}
}
}
Структура и значения по умолчанию
{
"errors": {
"file": {
"restricted": {
"type": {
"ru": "Неверный тип файла. Файл не может быть загружен",
"en": "Invalid file type. The file cannot be uploaded",
"az": "Invalid file type. The file cannot be uploaded",
"id": "Invalid file type. The file cannot be uploaded"
},
"size": {
"ru": "Файл не может быть загружен, невалидный размер файла",
"en": "Invalid file size. The file cannot be uploaded",
"az": "Invalid file size. The file cannot be uploaded",
"id": "Invalid file size. The file cannot be uploaded"
},
"not-found": {
"ru": "Файл не найден",
"en": "File not found",
"az": "File not found",
"id": "File not found"
}
},
"disallowed": {
"ru": "Файл не прошел проверку",
"en": "The file has failed verification",
"az": "The file has failed verification",
"id": "The file has failed verification"
},
"timeout": {
"ru": "Попытка загрузки файла завершена по таймауту",
"en": "The attempt to upload the file is completed by timeout",
"az": "The attempt to upload the file is completed by timeout",
"id": "The attempt to upload the file is completed by timeout"
},
"unexpected-error": {
"ru": "Непредвиденная ошибка загрузки файла",
"en": "Unexpected file upload error",
"az": "Unexpected file upload error",
"id": "Unexpected file upload error"
}
}
},
"BadBrowser": {
"headerPartial": {
"ru": "Возможна некорректная работа виджета в вашем браузере. Рекомендуемые браузеры – [Safari](https://www.apple.com/safari/) и [Chrome](https://www.google.com/chrome/)",
"en": "The widget may work incorrectly in your browser. Recommended browsers are [Safari](https://www.apple.com/safari/) and [Chrome](https://www.google.com/chrome/)",
"az": "The widget may work incorrectly in your browser. Recommended browsers are [Safari](https://www.apple.com/safari/) and [Chrome](https://www.google.com/chrome/)",
"id": "The widget may work incorrectly in your browser. Recommended browsers are [Safari](https://www.apple.com/safari/) and [Chrome](https://www.google.com/chrome/)"
}
},
"common": {
"time": {
"today": {
"ru": "сегодня",
"en": "today",
"az": "today",
"id": "hari ini"
},
"yesterday": {
"ru": "вчера",
"en": "yesterday",
"az": "yesterday",
"id": "kemarin"
}
},
"typing": {
"ru": "печатает...",
"en": "typing...",
"az": "typing...",
"id": "typing..."
}
},
"LimitedTextarea": {
"chars": {
"ru": "осталось символов",
"en": "characters left",
"az": "qalan işarələr",
"id": "simbol kiri"
}
},
"ChatHeader": {
"empty": {
"ru": "Чат",
"en": "Chat"
},
"title": {
"ru": "Добро пожаловать в чат!",
"en": "Welcome to chat"
},
"search": {
"ru": "Поиск оператора",
"en": "Looking for operator"
},
"operatorSubTitle": {
"ru": "оператор",
"en": "operator"
},
"inactive": {
"ru": "Чат временно недоступен",
"en": "Chat temporarily unavailable"
}
},
"ChatWelcome": {
"sendWelcome": {
"ru": "Представиться",
"en": "Start chat",
"az": "Çata başlamaq",
"id": "Start chat"
},
"identification": {
"pre": {
"text": {
"ru": "Появились вопросы к нам? Давайте обсудим здесь",
"en": "Can we help you? Let's discuss it in chat.",
"az": "Sizə necə kömək edə bilərik?",
"id": "Bisakah kami membantu Anda? Mari kita bahas dalam obrolan"
},
"notice": {
"ru": "Представьтесь, пожалуйста, и начнём",
"en": "Please, tell us something about yourself",
"az": "Zəhmət olmasa, özünüz barədə məlumat verin",
"id": "Tolong, beri tahu kami sesuatu tentang diri Anda"
}
},
"post": {
"text": {
"ru": "Спасибо за то, что представились",
"en": "Thank you for sharing",
"az": "Bölüşdüyünz üçün təşəkkür edirik",
"id": "Terima kasih sudah berbagi"
},
"notice": {
"ru": "Это необходимо для идентификации",
"en": "It will help us to support you later",
"az": "Bu bizə sizə daha sonra xidmət göstərməyə kömək edəcək",
"id": "Ini akan membantu kami untuk mendukung Anda nanti"
}
}
},
"form": {
"phone": {
"placeholder": {
"ru": "Номер телефона",
"en": "Phone number",
"az": "Phone number",
"id": "Phone number"
}
},
"email": {
"placeholder": {
"ru": "Электронная почта",
"en": "Email",
"az": "Email",
"id": "Email"
}
},
"name": {
"placeholder": {
"ru": "Ваше имя",
"en": "Name",
"az": "Name",
"id": "Name"
}
}
},
"inactivityForm": {
"sent": {
"ru": "Ваше сообщение отправлено в контактный центр. С Вами свяжется оператор",
"en": "Your message was sent to the contact center. Wait for the reply"
},
"sendMessage": {
"ru": "Отправить",
"en": "Send",
"az": "Göndərmək",
"id": "Send"
}
}
},
"ChatPoll": {
"post": {
"text": {
"ru": "Спасибо за вашу оценку",
"en": "We appreciate your choice",
"az": "Seçiminiz üçün təşəkkür edirik!",
"id": "Kami menghargai pilihan Anda"
}
}
},
"ChatEndPoll": {
"text": {
"ru": "Вы получили ответы на все вопросы, завершить консультацию?",
"en": "Do you have any other questions for us?",
"az": "Əlavə sualınız olacaqmı?",
"id": "Apakah Anda memiliki pertanyaan lain untuk kami?"
},
"continue": {
"ru": "Продолжить",
"en": "Yes",
"az": "Bəli",
"id": "Ya"
},
"close": {
"ru": "Завершить",
"en": "No",
"az": "Xeyr",
"id": "Tidak"
}
},
"ChatInput": {
"errorSize": {
"ru": "превышен максимальный размер",
"en": "the uploaded file exceeds the",
"az": "Yüklədiyiniz fayl ….. aşır",
"id": "the uploaded file exceeds the"
},
"errorFormat": {
"ru": "недопустимый формат файла",
"en": "invalid file format",
"az": "Yanlış fayl formatı",
"id": "invalid file format"
},
"errorBroken": {
"ru": "Файл поврежден",
"en": "The file is corrupted",
"az": "The file is corrupted",
"id": "The file is corrupted"
},
"placeholder": {
"ru": "Ваше сообщение...",
"en": "Type your message here...",
"az": "Mesajınızı burada yazın...",
"id": "Masukan pesan anda disini..."
},
"attachments": {
"uploading": {
"ru": "Загрузка вложения...",
"en": "Uploading...",
"az": "Yüklənir...",
"id": "Uploading..."
},
"uploaded": {
"ru": "Готов. Отправить – Enter",
"en": "uploaded. Press Enter",
"az": "Yükləndi. Enter-i tıklayın",
"id": "uploaded. Press Enter"
},
"error": {
"ru": "Не удалось загрузить вложение",
"en": "Upload failed",
"az": "Yükləmə baş tutmadı",
"id": "Upload failed"
}
}
},
"RateIndicator": {
"of": {
"ru": "из",
"en": "of",
"az": "of",
"id": "of"
}
},
"ChatMessage": {
"yourself": {
"ru": "Вы",
"en": "You"
},
"youWrote": {
"ru": "Вы",
"en": "You"
},
"operatorWrote": {
"ru": "Оператор {{name}}",
"en": "Operator {{name}}"
},
"audio": {
"compatibility": {
"ru": "Ваш браузер не поддерживает аудио контент",
"en": "Your browser does not support audio playback",
"id": "Your browser does not support audio playback",
"az": "Your browser does not support audio playback"
},
"errorPlayback": {
"ru": "Аудио сообщение не может быть воспроизведено",
"en": "Audio message can't be played",
"id": "Audio message can't be played",
"az": "Audio message can't be played"
},
"errorSpeech": {
"ru": "Ошибка распознавания",
"en": "Recognition error",
"id": "Recognition error",
"az": "Recognition error"
},
"quoteInfo": {
"ru": "аудиосообщение",
"en": "audio message",
"id": "audio message",
"az": "audio message"
}
},
"downloadError": {
"ru": "Ошибка загрузки",
"en": "Download error"
},
"sendError": {
"ru": "Сообщение не отправлено",
"en": "The message has not been sent"
},
"messageDeleted": {
"ru": "Сообщение удалено",
"en": "Deleted message"
},
"messageEdited": {
"ru": "ред.",
"en": "ed."
}
},
"Offline": {
"down": {
"text": {
"ru": "Потеряна связь с сервером",
"en": "Connection is dropped",
"az": "Bağlantı kəsildi",
"id": "Connection is dropped"
},
"notice": {
"ru": "проверьте ваше подключение к сети интернет",
"en": "check your internet connection",
"az": "İnternetlə bağlantınızı yoxlayın",
"id": "check your internet connection"
}
},
"reconnect": {
"ru": "Подключиться снова",
"en": "Reconnect",
"az": "Təkrar bağlan",
"id": "Reconnect"
}
},
"WebNotifications": {
"new": {
"ru": "Новое сообщение: ",
"en": "New message: ",
"az": "Yeni mesaj: ",
"id": "New message: "
},
"attachments": {
"ru": "Новое вложение",
"en": "New attachment",
"az": "New attachment",
"id": "New attachment"
}
},
"SocialLinks": {
"text": {
"ru": "Спросить в мессенджере",
"en": "Ask in the messenger",
"id": "Bertanya the messenger"
}
},
"MicrophoneAccessModal": {
"title": {
"ru": "Нет доступа к микрофону",
"en": "No access to your microphone"
},
"text": {
"ru": "Чтобы записать голосовое сообщение, разрешите доступ к микрофону в настройках браузера",
"en": "To be able to record voice messages, you need to allow access to your microphone in the browser settings"
},
"button": {
"ru": "Понятно",
"en": "Ok"
}
},
"Emoji": {
"recent": {
"ru": "Недавние",
"en": "Frequently Used",
"id": "Sering digunakan",
"az": "Son istifadə olunmuş"
},
"people": {
"ru": "Смайлики и люди",
"en": "Smileys & People",
"id": "Smiley & Orang",
"az": "Smayllar və insanlar"
},
"nature": {
"ru": "Животные и природа",
"en": "Animals & Nature",
"id": "Hewan & Alam",
"az": "Heyvanlar və təbiət"
},
"foods": {
"ru": "Еда и напитки",
"en": "Food & Drink",
"id": "Makanan Minuman",
"az": "Qida və içkilər"
},
"activity": {
"ru": "Активности",
"en": "Activity",
"id": "Aktivitas",
"az": "Fəallıq"
},
"places": {
"ru": "Путешествия и места",
"en": "Travel & Places",
"id": "Travel & Places",
"az": "Səyahət və yerlər"
},
"objects": {
"ru": "Предметы",
"en": "Objects",
"id": "Benda",
"az": "Əşyalar"
},
"symbols": {
"ru": "Символы",
"en": "Symbols",
"id": "Simbol",
"az": "Simvollar"
}
},
"ButtonsSurvey": {
"thanks": {
"ru": "Спасибо за участие в опросе!",
"en": "Thank you for participating in our survey!",
"id": "Thank you for participating in our survey!",
"az": "Thank you for participating in our survey!"
}
}
}