Локализация
В СДК по-умолчанию поддерживаются русская и английская локализации.
Для добавления поддержки нового языка или изменения текущего перевода, необходимо:
- Добавить свой файл с переводом в бандл (приложения/фреймворка)
- Указать его в
ChatLocalizationConfig
при инициализации СДК
Пример настройки:
// Инициализация СДК
let chatCenterSdk = ChatCenterUISDK(providerUid: "providerUid",
chatConfig: chatConfig,
loggerConfig: ChatLoggerConfig(logLevel: .all))
// Настройка локализации
chatCenterSdk.localizationConfig = ChatLocalizationConfig(bundle: Bundle.main, tableName: "Locale.strings")
📋 Ключи локализации
Категория | Ключ | Значение по умолчанию | Описание | Пример использования / Примечания |
---|---|---|---|---|
Кнопки | action.title_ok | OK | Подтверждение действия | Используется в диалогах подтверждения (например, “Вы уверены?” → OK/Отмена) |
action.title_yes | Да | Положительный ответ | В вопросах типа “Продолжить? Да/Нет” | |
action.title_no | Нет | Отрицательный ответ | — | |
action.title_cancel | Отмена | Отмена действия | В модальных окнах, загрузках, отправке сообщений | |
action.title_repeat | Повторить | Повторить действие | При ошибке отправки: “Повторить отправку” | |
action.title_connect | Подключиться | Подключение к серверу или оператору | На кнопке “Подключиться к чату” | |
action.alert_send | Отправить | Отправка сообщения | В форме отправки сообщения | |
Чат | chat.available_readonly_text | Данный чат доступен только для просмотра | Информация о режиме чтения | Отображается, если пользователь не может писать |
chat.client_name | Вы | Обращение к клиенту в цитатах, своих сообщениях | В истории: “Вы: Привет”, “Оператор: Здравствуйте” | |
chat.title.waiting | Пожалуйста, подождите... | Ожидание подключения оператора | Отображается при ожидании соединения | |
chat.title.connecting | Подключение... | Процесс подключения к серверу | Анимированный индикатор + текст | |
chat.title.opened | Контакт центр | Заголовок открытого чата | В шапке навигации после открытия чата | |
chat.title.waiting_for_specialist | Поиск оператора... | Ожидание подключения специалиста | После нажатия “Начать чат” | |
chat.title.working | Оператор | Заголовок при активном общении с оператором | Отображается в шапке во время диалога | |
chat.title.typing | оператор набирает | Индикатор набора текста оператором | Отображается под заголовком при наборе | |
Роли оператора | operator.bot | Бот | Роль бота | В шапке: “Бот: Здравствуйте!” |
operator.external.bot | Бот | Внешний бот | — | |
operator.operator | Оператор | Роль обычного оператора | — | |
operator.supervisor | Оператор | Роль супервайзера | Может отличаться в будущем | |
operator.system | Оператор | Системное сообщение (от имени оператора) | — | |
operator.integration | Оператор | Интеграционный оператор | — | |
Загрузка | loading.title | Загрузка | Текст индикатора загрузки | В скролле, при загрузке истории |
Ввод | input.placeholder | Сообщение | Плейсхолдер в поле ввода сообщения | Когда поле пустое |
input.voice_recording_hint | Удерживайте, чтобы начать запись | Подсказка для записи голосового сообщения | При долгом нажатии на микрофон | |
Пустой чат | empty_chat.placeholder_title | Добро пожаловать в контакт центр | Заголовок заглушки в пустом чате | Отображается при первом открытии чата |
empty_chat.placeholder_desc | Отправьте ваш вопрос, первый освободившийся оператор на него ответит. | Описание заглушки | — | |
Ошибки отправки | alert.resend_failed_message.title | "" | Заголовок алерта об ошибке отправки | Может быть пустым, зависит от реализации |
alert.resend_failed_message.desc | Сообщение не было отправлено. Нажмите «повторить отправку», чтобы отправить | Описание ошибки | — | |
alert.resend_failed_message.retry_btn | Повторить отправку | Кнопка повторной отправки | — | |
alert.resend_failed_message.delete_btn | Удалить | Кнопка удаления сообщения | — | |
Доступ / Разрешения | alert.access_denied_title | Нет доступа | Заголовок при отказе в доступе | — |
alert.file_sending_denied_desc | Отправка файлов отключена на сервере | Ошибка при попытке отправить файл | — | |
alert.unlock_photos_access | Разблокируйте доступ к фотографиям в настройках приложения, чтобы продолжить | Подсказка при отсутствии доступа к фотоальбому | — | |
alert.send_selected_file_to_chat | Отправить выбранный файл "%@" в чат? | Подтверждение отправки файла | %@ — имя файла | |
alert.picker_files_btn | Файлы | Кнопка выбора файлов | — | |
alert.camera_not_found | На Вашем устройстве не найдена камера | Ошибка при отсутствии камеры | — | |
alert.unlock_camera_access | Разблокируйте доступ к камере в настройках приложения, чтобы продолжить | Подсказка при отсутствии доступа к камере | — | |
alert.cant_take_photo | Не удалось сделать фотографию | Ошибка при съёмке | — | |
alert.app_settings | Настройки | Кнопка перехода в настройки приложения | — | |
alert.voice_recording_denied | Доступ к микрофону запрещен, для записи голосовых сообщений разрешите доступ в настройках | Ошибка при отсутствии доступа к микрофону | — | |
alert.text_copied_message | Текст скопирован в буфер обмена | Уведомление о копировании текста | — | |
Статусы сообщений | message.status.not_delivered | Не доставлено | Статус недоставленного сообщения | Отображается рядом с сообщением |
message.status.validation_error | Не доставлено | Ошибка валидации (например, неверный формат) | — | |
Сообщения | message.deleted_text | Сообщение удалено | Текст вместо удалённого сообщения | — |
message.send_file_limit_alert_title | Размер файла | Заголовок алерта превышения размера файла | — | |
message.send_file_limit_alert_message | Превышен максимально допустимый для отправки размера файла (%.0f Мб) | Сообщение об ограничении размера файла | %.0f — подставляется число (например, 25 Мб) | |
message.incorrect_url_for_opening | Не удалось открыть ссылку | Ошибка при открытии URL | — | |
message.photo_title | ФОТО | Заголовок для вложенного фото | — | |
message.voice_title | ГОЛОСОВОЕ СООБЩЕНИЕ | Заголовок для голосового сообщения | — | |
message.voice_play_error | Ошибка при воспроизведении | Ошибка при проигрывании голосового сообщения | — | |
message.unsupported_file_format | Неподдерживаемый формат | Ошибка при отправке файла с неподдерживаемым расширением | — | |
Системные сообщения | message.system.join_chat_unknown | подключился(-ась) к диалогу в %@ | Системное сообщение о подключении (неизвестный пол) | %@ — время подключения (например, “в 14:30”) |
message.system.join_chat_male | подключился к диалогу в %@ | Подключение мужского оператора | — | |
message.system.join_chat_female | подключилась к диалогу в %@ | Подключение женского оператора | — | |
message.system.leave_chat_unknown | покинул(а) диалог в %@ | Покидание диалога (неизвестный пол) | — | |
message.system.leave_chat_male | покинул диалог в %@ | Покидание мужским оператором | — | |
message.system.leave_chat_female | покинула диалог в %@ | Покидание женским оператором | — | |
Меню цитирования | menu.response_title | Ответить | Кнопка ответа на сообщение | — |
menu.copy_title | Копировать | Кнопка копирования текста сообщения | — | |
Поиск | search.placeholder_title | Поиск | Плейсхолдер в строке поиска | — |
search.not_found_title | Результатов не найдено | Сообщение при отсутствии результатов | — | |
search.more_btn | Искать еще | Кнопка для дополнительного поиска | — | |
search.image_attachment_title | изображение | Описание вложения (изображение) в результатах поиска | — | |
search.audio_attachment_title | аудио файл | Описание вложения (аудио) в результатах поиска | — | |
Опросы | survey.message_vote_from_title | из | Часть фразы “Оцените от 1 до 5: 3 из 5” | — |
survey.message_thanks.title | Спасибо за вашу оценку | Сообщение после отправки отзыва | — | |
survey.request_close_thread_message | Специалист ответил на все ваши вопросы, продолжить консультацию? | Запрос завершения диалога | — | |
Ошибки SDK | errors.init_failed_title | Возникла проблема во время инициализации чата: | Заголовок ошибки инициализации | — |
errors.connection_timeout | Истекло время ожидания подключения к серверу | Ошибка таймаута соединения | — | |
errors.load_config | Не удалось загрузить настройки чата | Ошибка загрузки конфигурации | — | |
errors.voice_message | Не удалось завершить загрузку файла | Ошибка при загрузке голосового сообщения | — | |
errors.code_from_400_to_500_title | Извините за неудобства, чат в данный момент недоступен. Пожалуйста, попробуйте позднее. | Общая ошибка сервера (HTTP 4xx–5xx) | — | |
errors.code_from_400_to_500_desc | "" | Дополнительное описание (может быть пустым) | — | |
errors.disallowed_file_loading | Загрузка файла не выполнена.\nНе удалось проверить файл | Ошибка проверки файла | — | |
errors.timeout_during_load_file | Не удалось завершить загрузку файла, истек таймаут.\nПопробуйте загрузить файл позже | Таймаут при загрузке файла | — | |
errors.unexpected_error_during_load_file | Не удалось завершить загрузку файла.\nПопробуйте отправить файл позже | Неожиданная ошибка загрузки | — | |
errors.during_load_file | Произошла ошибка при загрузке или проверке файла | Общая ошибка загрузки файла | — | |
Меню вложений | attachments.menu.my_albums | Мои альбомы | Кнопка выбора файла из фотоальбома | — |
attachments.menu.take_photo | Сделать снимок | Кнопка для съёмки фото | — |
Полный файл (.strings) для копирования
// Кнопки
"action.title_ok" = "OK";
"action.title_yes" = "Да";
"action.title_no" = "Нет";
"action.title_cancel" = "Отмена";
"action.title_repeat" = "Повторить";
"action.title_connect" = "Подключиться";
"action.alert_send" = "Отправить";
"chat.available_readonly_text" = "Данный чат доступен только для просмотра";
"chat.client_name" = "Вы"; // Обращение к клиенту (цитаты, собственные сообщения в поиске и т.д)
"chat.title.waiting" = "Пожалуйста, подождите..."; // Ожидание подключения оператора
"chat.title.connecting" = "Подключение..."; // Подключение к серверу
"chat.title.opened" = "Контакт центр"; // Открыт чат
"chat.title.waiting_for_specialist" = "Поиск оператора..."; // Ожидание подключения оператора
"chat.title.working" = "Оператор"; // Оператор подключился к диалогу
"chat.title.typing" = "оператор набирает";
// Заголовок специалиста (Роль)
"operator.bot" = "Бот";
"operator.external.bot" = "Бот";
"operator.operator" = "Оператор";
"operator.supervisor" = "Оператор";
"operator.system" = "Оператор";
"operator.integration" = "Оператор";
"loading.title" = "Загрузка"; // Индикатор загрузки чата
"input.placeholder" = "Сообщение"; // Плэйсхолдер в панели ввода
"input.voice_recording_hint" = "Удерживайте, чтобы начать запись"; // Подсказка о записи голосового
"empty_chat.placeholder_title" = "Добро пожаловать в контакт центр"; // Заглушка в пустом чате
"empty_chat.placeholder_desc" = "Отправьте ваш вопрос, первый освободившийся оператор на него ответит."; // Описание заглушки в пустом чате
"alert.resend_failed_message.title" = "";
"alert.resend_failed_message.desc" = "Сообщение не было отправлено. Нажмите «повторить отправку», чтобы отправить";
"alert.resend_failed_message.retry_btn" = "Повторить отправку";
"alert.resend_failed_message.delete_btn" = "Удалить";
"alert.access_denied_title" = "Нет доступа";
"alert.file_sending_denied_desc" = "Отправка файлов отключена на сервере";
"alert.unlock_photos_access" = "Разблокируйте доступ к фотографиям в настройках приложения, чтобы продолжить";
"alert.send_selected_file_to_chat" = "Отправить выбранный файл \"%@\" в чат?";
"alert.picker_files_btn" = "Файлы";
"alert.camera_not_found" = "На Вашем устройстве не найдена камера";
"alert.unlock_camera_access" = "Разблокируйте доступ к камере в настройках приложения, чтобы продолжить";
"alert.cant_take_photo" = "Не удалось сделать фотографию";
"alert.app_settings" = "Настройки";
"alert.voice_recording_denied" = "Доступ к микрофону запрещен, для записи голосовых сообщений разрешите доступ в настройках";
"alert.text_copied_message" = "Текст скопирован в буфер обмена";
// Статусы сообщений
"message.status.not_delivered" = "Не доставлено";
"message.status.validation_error" = "Не доставлено";
// Сообщения
"message.deleted_text" = "Сообщение удалено";
"message.send_file_limit_alert_title" = "Размер файла";
"message.send_file_limit_alert_message" = "Превышен максимально допустимый для отправки размера файла (%.0f Мб)";
"message.incorrect_url_for_opening" = "Не удалось открыть ссылку";
"message.photo_title" = "ФОТО";
"message.voice_title" = "ГОЛОСОВОЕ СООБЩЕНИЕ";
"message.voice_play_error" = "Ошибка при воспроизведении";
"message.unsupported_file_format" = "Неподдерживаемый формат";
// Системные сообщения
"message.system.join_chat_unknown" = "подключился(-ась) к диалогу в %@";
"message.system.join_chat_male" = "подключился к диалогу в %@";
"message.system.join_chat_female" = "подключилась к диалогу в %@";
"message.system.leave_chat_unknown" = "покинул(а) диалог в %@";
"message.system.leave_chat_male" = "покинул диалог в %@";
"message.system.leave_chat_female" = "покинула диалог в %@";
// Меню цитирования
"menu.response_title" = "Ответить";
"menu.copy_title" = "Копировать";
// Поиск
"search.placeholder_title" = "Поиск"; // Плэйсхолдер в строке поиска
"search.not_found_title" = "Результатов не найдено";
"search.more_btn" = "Искать еще";
"search.image_attachment_title" = "изображение";
"search.audio_attachment_title" = "аудио файл";
// Опросы
"survey.message_vote_from_title" = "из";
"survey.message_thanks.title" = "Спасибо за вашу оценку";
"survey.request_close_thread_message" = "Специалист ответил на все ваши вопросы, продолжить консультацию?";
// Ошибки в СДК
"errors.init_failed_title" = "Возникла проблема во время инициализации чата:";
"errors.connection_timeout" = "Истекло время ожидания подключения к серверу";
"errors.load_config" = "Не удалось загрузить настройки чата";
"errors.voice_message" = "Не удалось завершить загрузку файла"; // Ошибка при загрузке голосового сообщения
"errors.code_from_400_to_500_title" = "Извините за неудобства, чат в данный момент недоступен. Пожалуйста, попробуйте позднее.";
"errors.code_from_400_to_500_desc" = "";
"errors.disallowed_file_loading" = "Загрузка файла не выполнена.\nНе удалось проверить файл";
"errors.timeout_during_load_file" = "Не удалось завершить загрузку файла, истек таймаут.\nПопробуйте загрузить файл позже";
"errors.unexpected_error_during_load_file" = "Не удалось завершить загрузку файла.\nПопробуйте отправить файл позже";
"errors.during_load_file" = "Произошла ошибка при загрузке или проверке файла";
// Меню вложений
"attachments.menu.my_albums" = "Мои альбомы";
"attachments.menu.take_photo" = "Сделать снимок";