Skip to content

Настройка языковой локализации

edna-publisher edited this page Nov 29, 2023 · 47 revisions

Содержание

Языковая локализация виджета

Поддерживается настройка надписей для соответствия виджета локализации ваших сайтов. В поставку включены локализации для всех надписей виджета на языках: русский (ru), английский (en), индонезийский (id), азербайджанский (az). Они включены в код виджета. Вы можете добавить любое количество дополнительных локалей или переопределить настройки существующих. Управление локализациями выполняется в файле настроек settings.json. Для конфигурирования укажите в ветке locales файла settings.json ключ надписи, код языка и значение для этого языка. В этом примере вы можете посмотреть вариант настроек, в котором несколько надписей были изменены.

Параметры файла конфигурации, отвечающие за локализацию

Управление языковыми локализациями осуществляется в файле настроек settings.json.

Параметр Значения По умолчанию Описание
locale строка "en" Предпочтительная локаль - языковой код в формате ISO 639-1
locales JSON-объект {} Объект, с ключами для переопределения локализаций. Указываются только те ключи и языковые коды, значения которых требуется переопределить

Логика применения локализации

При настройке локализации в settings.json вы можете указать предпочтительную локаль. Для смены локали виджета на лету используется метод setLocale

Локаль надписей в виджете определяется по следующей логике:

  1. Текущая локаль: заданная при инициализации виджета или заданная методом смены локали ссылка. Если текущая не задана, то:
  2. Предпочтительная: выбранная в settings.json. Если предпочтительная не задана, то:
  3. Дефолтная: локаль en

Приоритет отображения надписей:

  1. Переопределенные в файле setting.json. Если не заданы, то:
  2. Дефолтные

Структура раздела 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
14 ChatMessage.document.quoteInfo Название документа
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 Эмоджи - вкладка "Символы"

Локализация окна emoji

Пример переопределения некоторых локалей

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"
        },
        "document": {
            "quoteInfo": {
                "ru": "документ",
                "en": "document",
                "id": "dokumen",
                "az": "sənəd"
            }
        },
        "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"
        }
    }
}
Clone this wiki locally