Skip to content
js
import {
	EngineRoutingSchemaType,
	WebitelMediaExporterExportStatus,
} from '@webitel/api-services/gen/models';
import {
	AgentStatus,
	CallDirection,
	ChannelState,
	ChannelType,
} from 'webitel-sdk';

import {
	AdminSections,
	AuditorSections,
	ChatGatewayProvider,
	CrmSections,
	CrmSections as CrmSectionsNew,
	IconAction,
	QueueType,
	RelativeDatetimeValue,
	SupervisorSections,
	WtApplication,
} from '../../enums';
import { AccessMode } from '../../modules/ObjectPermissions/enums/AccessMode.enum';
import { snakeToCamel } from '../../scripts';
import { SortSymbols } from '../../scripts/sortQueryAdapters.js';

export default {
	// describes reusable buttons, actions, default titles, and other ui elements
	reusable: {
		comment: 'Коментарий',
		replace: 'Заменить',
		download: 'Скачать',
		history: 'История',
		filter: 'Фильтр | Фильтры',
		total: 'Всего',
		ok: 'Ок',
		object: 'Объект',
		save: 'Сохранить',
		saveAs: 'Сохранить как',
		saved: 'Сохранено',
		send: 'Отправить',
		sendMessage: 'Отправить сообщение',
		start: 'Начать',
		close: 'Закрыть',
		add: 'Добавить',
		cancel: 'Отменить',
		import: 'Импорт',
		export: 'Экспорт',
		true: 'Да',
		title: 'Заголовок',
		position: 'Позиция',
		delete: 'Удалить',
		search: 'Поиск',
		open: 'Открыть',
		openInHistory: 'Открыть в History',
		name: 'Название',
		expand: 'Развернуть',
		collapse: 'Свернуть',
		generate: 'Сгенерировать',
		from: 'От',
		to: 'До',
		today: 'Сегодня',
		clear: 'Очистить',
		tts: 'Text-to-Speech',
		state: 'Состояние',
		status: 'Статус',
		refresh: 'Обновить',
		retry: 'Повторить',
		downloadAll: 'Скачать всё',
		warning: 'Предупреждение',
		doNotSave: 'Не сохранять',
		required: 'Обязательное',
		copy: 'Скопировать',
		new: 'Новый',
		createdAt: 'Создано',
		createdBy: 'Кем создано',
		modifiedAt: 'Изменено',
		modifiedBy: 'Кем изменено',
		general: 'Общее',
		generalInfo: 'Общая информация',
		all: 'Все {entity}',
		upload: 'Загрузить',
		edit: 'Редактировать',
		back: 'Назад',
		step: 'Шаг { count }',
		more: 'Больше',
		read: 'Читать',
		create: 'Создать',
		update: 'Обновить',
		draggable: 'Перетащить',
		empty: 'Пустые',
		unassigned: 'Неназначенные',
		showUnassigned: 'Показать неназначенные',
		group: 'Группа',
		dateTime: 'Дата и время',
		updatedBy: (/*{ named }*/) => {
			return 'Редактировано';
		},
		check: 'Проверить',
	},
	vocabulary: {
		apply: 'Применить',
		language: 'Язык',
		column: 'Колонка',
		voice: 'Голос',
		format: 'Формат',
		text: 'Текст',
		yes: 'Да',
		no: 'Нет',
		description: 'Описание',
		login: 'Логин',
		host: 'Хост',
		time: 'Время',
		channel: 'Канал | Каналы',
		file: 'Файл | Файлы',
		logout: 'Выйти',
		priority: 'Приоритет | Приоритеты',
		color: 'Цвет',
		variables: 'Переменная | Переменные',
		type: 'Тип',
		tag: 'Тег | Теги',
		output: 'Выход | Выходы',
		values: 'Значение | Значения',
		keys: 'Ключ | Ключи',
		duration: 'Длительность',
		reset: 'Сбросить',
		errors: 'Ошибка | Ошибки',
		labels: 'Метка | Метки',
		permissions: 'Разрешение | Разрешения',
		options: 'Опция | Опции',
		emails: 'Электронный адрес | Электронные адреса',
		phones: 'Телефон | Телефоны',
		messaging: 'Сообщения',
		emptyResultSearch: 'Поиск не дал результатов',
		contact: 'Контакт | Контакты',
		notification: 'Уведомление | Уведомления',
		screencast: 'Запись экрана',
		password: 'Пароль',
		number: 'Номер',
		expireAt: 'Срок действия',
		destination: 'Назначение',
		utilizationProgress: 'Прогресс использования',
		settings: 'Настройки',
	},
	// date-related texts
	date: {
		sec: 'Сек',
		timezone: 'Часовая зона | Часовые зоны',
	},
	// locales, related to user access, permissions, etc.
	access: {
		ObAC: 'Управление действиями',
		RbAC: 'Управление записями',
		operations: 'Действия',
		rbacDefault: 'Права доступа по записям по умолчанию',
		accessMode: {
			[AccessMode.Forbidden]: 'Запрещено',
			[AccessMode.Allow]: 'Разрешено',
			[AccessMode.Manage]: 'Управление',
		},
	},
	// describes Webitel system entities
	objects: {
		team: 'Команда | Команды',
		supervisor: 'Супервизор | Супервизоры',
		auditor: 'Аудитор | Аудиторы',
		region: 'Регион | Регионы',
		communicationType: 'Тип связи | Типы связи',
		grantee: 'Владелец прав | Владельцы прав',
		grantor: 'Праводатель | Праводатели',
		user: 'Пользователь | Пользователи',
		list: 'Список | Списки',
		contact: 'Контакт | Контакты',
		case: 'Обращение | Обращения',
		role: 'Роль | Роли',
		calendar: 'Календарь | Календари',
		direction: 'Направление',
		gateway: 'Шлюз | Шлюзы',
		hangupCause: 'Причина окончания',
		hasOption: 'Has option',
		hasRecording: 'Запись разговора',
		amdResult: 'AMD результат',
		ratedBy: 'Оценено кем',
		talkDuration: 'Длительность разговора',
		totalDuration: 'Общая длительность',
		transcription: 'Транскрипция',
		attachment: 'Вложение | Вложения',
		owner: 'Владелец | Владельцы',
		skill: 'Навык | Навыки',
		customization: {
			customization: 'Персонализация | Персонализации',
		},
		customLookup: {
			customLookup:
				'Пользовательский справочник | Пользовательские справочники',
		},
		chatGateway: 'Текстовый шлюз | Текстовые шлюзы',
		chat: {
			chat: 'Чат | Чаты',
			draftPlaceholder: 'Напишите сообщение...',
		},
		queue: {
			progressiveCount: 'Количество одновременных звонков',
			queue: 'Очередь | Очереди',
			queueType: 'Тип очереди | Типы очередей',
			type: {
				[QueueType.INBOUND_QUEUE]: 'Входящая очередь',
				[QueueType.OFFLINE_QUEUE]: 'Оффлайн очередь',
				[QueueType.OUTBOUND_IVR_QUEUE]: 'Исходящий IVR',
				[QueueType.PREDICTIVE_DIALER]: 'Предиктивный обзвон',
				[QueueType.PROGRESSIVE_DIALER]: 'Прогрессивный обзвон',
				[QueueType.PREVIEW_DIALER]: 'Превью обзвон',
				[QueueType.CHAT_INBOUND_QUEUE]: 'Очередь чатов',
				[QueueType.INBOUND_JOB_QUEUE]: 'Входящая очередь заданий',
				[QueueType.OUTBOUND_JOB_QUEUE]: 'Исходящая очередь заданий',
			},
		},
		agent: {
			agent: 'Оператор | Операторы',
			status: {
				[AgentStatus.Online]: 'Онлайн',
				[AgentStatus.Pause]: 'Пауза',
				[AgentStatus.Offline]: 'Оффлайн',
				[snakeToCamel(AgentStatus.BreakOut)]: 'Принудительный перерыв',
			},
		},
		bucket: 'Корзина | Корзины',
		joinedAt: 'Присоединено',
		leavingAt: 'Покинуто',
		offeringAt: 'Предложено',
		stopCause: {
			stopCause: 'Причина прекращения',
			abandoned: 'Потерянный',
			timeout: 'Тайм-аут',
			cancel: 'Отменённый',
			success: 'Успешный',
			failed: 'Неудачный',
			missed: 'Пропущенный',
			expired: 'Истекший',
			canceledByTimeout: 'Отменен по тайм-ауту',
		},
		memberPriority: 'Приоритет',
		attempts: 'Попыток',
		callReportingResult: {
			result: 'Результат',
			abandoned: 'Потерянный',
			cancel: 'Отменённый',
			success: 'Успешный',
			failed: 'Неудачный',
			missed: 'Пропущенный',
			timeout: 'Тайм-аут',
			endless: 'Бесконечный',
			transferred: 'Переведен',
		},
		flow: {
			name: 'Схема | Схемы',
			type: {
				[EngineRoutingSchemaType.Chat]: 'Текстовая',
				[EngineRoutingSchemaType.Voice]: 'Голосовая',
				[EngineRoutingSchemaType.Service]: 'Служебная',
				[EngineRoutingSchemaType.Processing]: 'Формы',
				[EngineRoutingSchemaType.Default]: 'Нет типа',
			},
		},
		messengers: {
			[ChatGatewayProvider.TELEGRAM_BOT]: 'Telegram Бот',
			[ChatGatewayProvider.TELEGRAM_APP]: 'Telegram Приложение',
			[ChatGatewayProvider.MESSENGER]: 'Meta',
			[ChatGatewayProvider.VIBER]: 'Viber',
			[ChatGatewayProvider.WEBCHAT]: 'Web chat',
			[ChatGatewayProvider.INFOBIP]: 'Infobip',
			[ChatGatewayProvider.CUSTOM]: 'Custom Chat Gateway',
			[ChatGatewayProvider.PORTAL]: 'Портал',
		},
		quickReplies: {
			quickReplies: 'Быстрый ответ | Быстрые ответы',
			quickRepliesEmpty: 'Еще нет быстрых ответов',
		},
		screenRecordings: 'Запись экрана | Записи экрана',
		screenshots: 'Снимок экрана | Снимки экрана',
		agentPdfs: {
			pdfs: 'PDF | PDFs',
			status: {
				[WebitelMediaExporterExportStatus.Pending]: 'Ожидание',
				[WebitelMediaExporterExportStatus.Processing]: 'Обработка',
				[WebitelMediaExporterExportStatus.Done]: 'Завершено',
				[WebitelMediaExporterExportStatus.Failed]: 'Ошибка',
			},
		},
		importCSV: 'Импорт CSV',
		CSV: {
			skipHeaders: 'Пропустить заголовки',
			charSet: 'Кодировка',
			separator: 'Разделитель',
			CSVColumn: 'Столбец CSV',
			fieldName: 'Имя поля',
			clearMember: 'Очистить участника',
		},
	},
	channel: {
		state: {
			[ChannelState.Waiting]: 'Ожидание',
			[ChannelState.Distribute]: 'Зарезервирован',
			[ChannelState.Offering]: 'Распределение',
			[ChannelState.Answered]: 'Отвечен',
			[ChannelState.Active]: 'Активный',
			[ChannelState.Bridged]: 'Соединён',
			[ChannelState.Hold]: 'Удержание',
			[ChannelState.Missed]: 'Пропущен',
			[snakeToCamel(ChannelState.WrapTime)]: 'Постобработка',
			[ChannelState.Processing]: 'Обработка',
			[ChannelState.Transfer]: 'Перевод',
		},
		type: {
			[ChannelType.Call]: 'Звонок',
			[ChannelType.Email]: 'Почта',
			[ChannelType.Chat]: 'Чат',
			[ChannelType.Job]: 'Задача',
			[ChannelType.OutCall]: 'Исходящий звонок',
		},
	},
	cases: {
		status: 'Статус',
		source: 'Источник',
		author: 'Автор',
		reporter: 'Инициатор',
		impacted: 'Влияет на',
		assignee: 'Исполнитель',
		groupPerformers: 'Группа исполнителей',
		reason: 'Причина | Причины',
		rating: 'Оценка',
		service: 'Сервисы | Сервисы',
		selectAService: 'Выбрать сервис',
		appliedSLA: 'Примененный SLA',
		appliedCondition: 'Примененное условие',
		reactionTime: 'Плановое время реакции',
		resolutionTime: 'Плановое время решения',
		actualReactionTime: 'Фактическое время реакции',
		actualResolutionTime: 'Фактическое время решения',
	},
	calls: {
		direction: {
			[CallDirection.Inbound]: 'Входящий | Входящие',
			[CallDirection.Outbound]: 'Исходящий | Исходящие',
		},
		connectionQuality: {
			high: 'Отличное качество сети',
			medium: 'Нестабильное качество сети',
			low: 'Плохое качество сети',
		},
	},
	// describes Webitel FRONTEND applications + their navs
	WtApplication: {
		overrideApplicationsAccess: {
			[WtApplication.Crm]: {
				sections: {
					[CrmSectionsNew.CasesExtensions]: ({ linked }) =>
						linked('objects.customization.customization') +
						': ' +
						linked('objects.case'),
					[CrmSectionsNew.ContactsExtensions]: ({ linked }) =>
						linked('objects.customization.customization') +
						': ' +
						linked('objects.contact'),
					[CrmSectionsNew.CustomLookups]: ({ linked }) =>
						linked('objects.customization.customization') +
						': ' +
						'Пользовательские справочники', // dont use linked: objects.customLookup.customLookup, coz "linked" doesnt support pluralization
				},
			},
		},
		[WtApplication.Agent]: {
			name: 'Agent Workspace',
		},
		[WtApplication.Audit]: {
			name: 'Audit',
			sections: {
				[AuditorSections.Scorecards]: 'Анкеты',
			},
		},
		[WtApplication.Crm]: {
			name: 'CRM',
			sections: {
				[CrmSections.Contacts]: 'Контакты',
				[CrmSections.Cases]: 'Обращения',
				[CrmSections.Priorities]: 'Приоритеты',
				[CrmSections.CloseReasonGroups]: 'Причины закрытия',
				[CrmSections.Statuses]: 'Статусы',
				[CrmSections.Slas]: 'SLA',
				[CrmSections.ServiceCatalogs]: 'Каталоги сервисов',
				[CrmSections.Sources]: 'Источники обращений',
				[CrmSections.ContactGroups]: 'Группы контактов',
			},
		},
		[WtApplication.History]: {
			name: 'Call History',
		},
		[WtApplication.Analytics]: {
			name: 'Data Visualisation Tool',
		},
		[WtApplication.Supervisor]: {
			name: 'Supervisor Workspace',
			sections: {
				[SupervisorSections.Queues]: 'Очереди',
				[SupervisorSections.Agents]: 'Операторы',
				[SupervisorSections.ActiveCalls]: 'Активные звонки',
			},
		},
		[WtApplication.Admin]: {
			name: 'Admin',
			sections: {
				[AdminSections.Users]: 'Пользователи',
				[AdminSections.License]: 'Лицензии',
				[AdminSections.Devices]: 'Устройства',
				[AdminSections.Flow]: 'Схемы',
				[AdminSections.Dialplan]: 'Исходящая маршрутизация',
				[AdminSections.Gateways]: 'Шлюзы',
				[AdminSections.Chatplan]: 'Правила маршрутизации текстовых сообщений',
				[AdminSections.ChatGateways]: 'Текстовые шлюзы',
				[AdminSections.Skills]: 'Навыки оператора',
				[AdminSections.Buckets]: 'Корзины',
				[AdminSections.Media]: 'Медиафайлы',
				[AdminSections.ShiftTemplates]: 'Шаблон смен',
				[AdminSections.PauseTemplates]: 'Шаблон пауз',
				[AdminSections.WorkingConditions]: 'Условия работы',
				[AdminSections.Blacklist]: 'Cписки',
				[AdminSections.Calendars]: 'Календари',
				[AdminSections.Communications]: 'Типы связи',
				[AdminSections.Regions]: 'Площадки',
				[AdminSections.PauseCause]: 'Статусы оператора',
				[AdminSections.Agents]: 'Операторы',
				[AdminSections.Teams]: 'Команды',
				[AdminSections.Resources]: 'Ресурсы',
				[AdminSections.ResourceGroups]: 'Группы ресурсов',
				[AdminSections.Queues]: 'Очереди',
				[AdminSections.Storage]: 'Хранилища',
				[AdminSections.StoragePolicies]: 'Политики хранения файлов',
				[AdminSections.CognitiveProfiles]: 'Голосовые профили',
				[AdminSections.EmailProfiles]: 'Email профили',
				[AdminSections.SingleSignOn]: 'SSO',
				[AdminSections.ImportCsv]: 'Импорт данных из CSV файлов',
				[AdminSections.Triggers]: 'Триггеры',
				[AdminSections.Roles]: 'Роли',
				[AdminSections.Objects]: 'Разделы',
				[AdminSections.Changelogs]: 'Журнал изменений',
				[AdminSections.Configuration]: 'Конфигурация',
				[AdminSections.GlobalVariables]: 'Глобальные переменные',
				[AdminSections.QuickReplies]: 'Быстрые ответы',
				[AdminSections.ActivityTypes]: 'Типы активности',
			},
		},
		[WtApplication.Wfm]: {
			name: 'WFM',
		},
		[WtApplication.Meet]: {
			theCameraIsTurnedOff: 'Камера выключена',
			theCallIsOnHold: 'На удержании',
		},
	},
	validation: {
		hourRange: 'Часы должны быть от 00 до 23',
		timerangeStartLessThanEnd: 'Время От не может быть больше чем До',
		timerangeNotIntersect:
			'Временные интервалы в один день не могут пересекаться',
		required: 'Обязательное поле',
		numeric: 'Необходимо ввести цифровое значение',
		email: 'Необходимо ввести адрес электронной почты',
		gatewayHostValidator: 'Необходимо ввести IPv4 или FQDN',
		sipAccountValidator: 'Необходимо ввести SIP-аккаунт',
		ipValidator: 'Необходимо ввести IPv4',
		macValidator: 'Необходимо ввести MAC-адрес',
		minValue: ({ named }) => {
			let text = 'Значение должно быть не меньше';
			if (named('min') != null) {
				text += ` ${named('min')}`;
			}
			return text;
		},
		maxValue: ({ named }) => {
			let text = 'Значение должно быть не больше';
			if (named('max') != null) {
				text += ` ${named('max')}`;
			}
			return text;
		},
		maxLength: ({ named }) => {
			let text = 'Длина не должна быть больше, чем';
			if (named('max')) {
				text += ` ${named('max')}`;
			}
			return text;
		},
		sameAs: 'Неверный пароль',
		requiredArrayValue: 'Поле не должно быть пустым',
		minLength: ({ named }) => {
			let text = 'Количество символов не должно быть меньше, чем';
			if (named('min')) {
				text += ` ${named('min')}`;
			}
			return text;
		},
		url: 'Необходимо ввести корректный URL-адрес',
		websocketValidator: 'Необходимо ввести корректный WebSocket url-адрес',
		isRegExpMatched: 'Пароль должен соответствовать регулярному выражению:',
		regExpValidator: 'Не правильное регулярное выражение',
		domainValidator: 'Неправильный домен',
		decimalValidator:
			'Количество десятичных знаков не должно быть больше { count }',
		latinWithNumber:
			'Код должен содержать только буквы (A-Z, a-z) и цифры (0-9) и начинатся с буквы',
		integer: 'Поле должно содержать только целые числа',
		nameAlreadyInUse: 'Это название уже используется',
		phoneNumberSymbolsValidator:
			"Номер может содержать только буквы (a-z, A-Z), цифры (0-9) и символы: +, -, _, ., !, ~, *, ', (, )",
		sipPasswordSymbolsValidator:
			'Пароль не может содержать спецсимволы и пробелы',
		loginValidator: () => `Введите логин в формате имя${'@'}домен`,
	},
	webitelUI: {
		searchBar: {
			placeholder: 'Поиск',
			settingsHint: 'Настройки поиска',
			variableSearchHint: 'Формат запроса: "ключ=значение"',
		},
		timepicker: {
			day: 'День:',
			hour: 'Час:',
			min: 'Мин:',
			sec: 'Сек:',
		},
		datetimepicker: {
			lastHour: 'Последний час',
			lastDay: 'Последний день',
		},
		pagination: {
			sizeText: 'Записей на странице:',
			prev: 'Назад',
			next: 'Далее',
		},
		appNavigator: {
			title: 'Приложения Webitel',
			admin: 'Admin',
			agent: 'Agent',
			supervisor: 'Supervisor',
			audit: 'Audit',
			history: 'History',
			grafana: 'Grafana',
			crm: 'CRM',
		},
		headerActions: {
			account: 'Аккаунт',
			docs: 'Документация',
			settings: 'Настройки',
			logout: 'Выйти',
			buildVersion: 'Версия сборки',
		},
		tableActions: {
			filterReset: 'Сбросить фильтры',
			columnSelect: 'Добавить колонки',
			refreshTable: 'Обновить',
			expandFilters: 'Раскрыть фильтры',
		},
		tableColumnSelect: {
			title: 'Выберите отображаемые колонки',
		},
		statusSelect: {
			online: 'Онлайн',
			pause: 'Пауза',
			offline: 'Оффлайн',
			breakOut: 'Принудительный перерыв',
		},
		iconAction: {
			hints: {
				[IconAction.DELETE]: ({ linked }) => linked('reusable.delete'),
				[IconAction.EDIT]: ({ linked }) => linked('reusable.edit'),
				[IconAction.ADD]: ({ linked }) => linked('reusable.add'),
				[IconAction.HISTORY]: ({ linked }) => linked('reusable.history'),
				[IconAction.DOWNLOAD]: ({ linked }) => linked('reusable.download'),
				[IconAction.DOWNLOAD_PDF]: 'Скачать PDF',
				[IconAction.FILTERS]: ({ linked }) => linked('reusable.filter', 2),
				[IconAction.COLUMNS]: 'Добавить колонки',
				[IconAction.VARIABLES]: 'Выбрать колонки с переменными',
				[IconAction.REFRESH]: ({ linked }) => linked('reusable.refresh'),
				[IconAction.EXPAND]: ({ linked }) => linked('reusable.expand'),
				[IconAction.COLLAPSE]: ({ linked }) => linked('reusable.collapse'),
				[IconAction.CLOSE]: ({ linked }) => linked('reusable.close'),
				[IconAction.CLEAR]: ({ linked }) =>
					linked('webitelUI.tableActions.filterReset'),
				[IconAction.ADD_FILTER]: ({ linked }) => linked('reusable.add'),
				[IconAction.SAVE]: ({ linked }) => linked('reusable.save'),
				[IconAction.CANCEL]: ({ linked }) => linked('reusable.cancel'),
				[IconAction.SAVE_PRESET]: ({ linked }) => {
					return `${linked('reusable.save')} ${linked('webitelUI.filters.presets.preset').toLowerCase()}`;
				},
				[IconAction.APPLY_PRESET]: ({ linked }) => {
					return `${linked('vocabulary.apply')} ${linked('webitelUI.filters.presets.preset').toLowerCase()}`;
				},
				[IconAction.ADD_CONTACT]: ({ linked }) => {
					return `${linked('reusable.add')} контакты`;
				},
				[IconAction.CHAT]: ({ linked }) => linked('objects.chat.chat'),
				[IconAction.SORT]: ({ named }) => {
					const order = named('order');
					if (order === SortSymbols.ASC) return 'Сортировка по возрастанию';
					if (order === SortSymbols.DESC) return 'Сортировка по убыванию';
					return 'Сортировка';
				},
				[IconAction.UPLOAD]: ({ linked }) => linked('reusable.upload'),
				[IconAction.LOGOUT]: 'Завершить сеансы',
			},
		},
		errorPages: {
			goBack: 'Вернуться назад',
			page403: {
				title: 'Нет доступа',
				text: 'Извините, у вас недостаточно прав доступа для просмотра этой страницы.',
			},
			page404: {
				title: 'Похоже, вы потерялись',
				text: 'Извините, мы не можем найти то, что вы ищете',
			},
		},
		copyAction: {
			copy: 'Копировать',
			copied: 'Скопировано!',
		},
		auditForm: {
			question: 'Критерий',
			option: 'Вариант | Варианты',
			score: 'Бал | Балы',
			addQuestion: 'Добавить критерий',
			answerType: 'Тип ответа',
			type: {
				options: 'Вариант',
				score: 'Бал',
				yes: 'Выбор "Да"',
			},
			criticalViolation: 'Критическое нарушение',
			clearSelection: 'Очистить выбор',
		},
		deleteConfirmationPopup: {
			title: 'Подтвердите удаление',
			askingAlert:
				'Вы уверены, что хотите удалить {subject}? Это действие не может быть отменено.',
			tableAskingAlert:
				'Вы уверенны, что хотите\n удалить {count} запись? | Вы уверенны, что хотите\n удалить {count} записей?',
			deleteAll: 'ВСЕ',
		},
		dummy: {
			text: 'Записи в разделе еще не созданы',
		},
		empty: {
			text: {
				empty: 'Записи еще не созданы',
				filters: 'К сожалению, ни одна запись не соответствует вашим критериям',
			},
		},
		agentStatusSelect: {
			pauseCausePopup: {
				title: 'Выберите причину паузы',
				min: 'Мин',
				unlimited: 'Безлимит',
			},
			statusSelectErrorPopup: {
				title: 'Внимание',
				message:
					'Лимит операторов в паузе превышен. Перерыв сейчас недоступен.',
			},
			activityTypePopup: {
				title: 'Пожалуйста, выберите тип статуса',
				defaultOption: 'Обычный онлайн',
			},
		},
		pdfGeneration: {
			generationStarted: 'Ваш PDF-файл генерируется…',
		},
		saveFailedPopup: {
			title: 'Ошибка сохранения',
			label: 'Что-то пошло не так. Пожалуйста, попробуйте еще раз',
			exportToJson: 'Экспортировать в JSON',
		},
		filters: {
			datetime: {
				[RelativeDatetimeValue.Today]: 'Сегодня',
				[RelativeDatetimeValue.ThisWeek]: 'Эта неделя',
				[RelativeDatetimeValue.ThisMonth]: 'Этот месяц',
				[RelativeDatetimeValue.Custom]: 'Выбранный диапазон дат',
			},
			andMore: 'и ещё {count}',
			addFilter: ({ linked }) => {
				return `${linked('reusable.add')} ${linked(
					'reusable.filter',
				).toLowerCase()}`;
			},
			filterName: ({ linked }) => {
				// because filter select has a 'column' label now
				return linked('vocabulary.column');
			},
			filterValue: ({ linked }) => {
				return linked('vocabulary.values');
			},
			filterValueFrom: ({ linked }) => {
				const from = linked('reusable.from').toLowerCase();
				return `${linked('vocabulary.values')} ${from}`;
			},
			filterLabel: ({ linked }) => {
				return linked('vocabulary.labels');
			},
			actualReactionTime: ({ linked }) => {
				return linked('cases.actualReactionTime');
			},
			actualResolutionTime: ({ linked }) => {
				return linked('cases.actualResolutionTime');
			},
			agent: ({ linked }) => {
				return linked('objects.agent.agent');
			},
			amdResult: ({ linked }) => {
				return linked('objects.amdResult');
			},
			assignee: ({ linked }) => {
				return linked('cases.assignee');
			},
			author: ({ linked }) => {
				return linked('cases.author');
			},
			bucket: ({ linked }) => {
				return linked('objects.bucket');
			},
			cause: ({ linked }) => {
				return linked('objects.hangupCause');
			},
			closeReasonGroups: ({ linked }) => {
				return linked('cases.reason');
			},
			contact: ({ linked }) => {
				return linked('vocabulary.contact');
			},
			contactGroup: ({ linked }) => {
				return linked('cases.groupPerformers');
			},
			createdAt: ({ linked }) => {
				return linked('reusable.createdAt');
			},
			createdAtFrom: ({ linked }) => {
				return linked('reusable.from');
			},
			createdAtTo: ({ linked }) => {
				return linked('reusable.to');
			},
			direction: ({ linked }) => {
				return linked('objects.direction');
			},
			gateway: ({ linked }) => {
				return linked('objects.gateway');
			},
			grantee: ({ linked }) => {
				return linked('objects.grantee');
			},
			hasAttachment: ({ linked }) => {
				return linked('objects.attachment');
			},
			hasFile: ({ linked }) => {
				return linked('objects.hasRecording');
			},
			hasTranscription: ({ linked }) => {
				return linked('objects.transcription');
			},
			hasUser: ({ linked }) => {
				return linked('objects.user');
			},
			joinedAt: ({ linked }) => {
				return linked('objects.joinedAt');
			},
			leavingAt: ({ linked }) => {
				return linked('objects.leavingAt');
			},
			offeringAt: ({ linked }) => {
				return linked('objects.offeringAt');
			},
			stopCause: ({ linked }) => {
				return linked('objects.stopCause.stopCause');
			},
			memberPriority: ({ linked }) => {
				return linked('objects.memberPriority');
			},
			attempts: ({ linked }) => {
				return linked('objects.attempts');
			},
			name: ({ linked }) => {
				return linked('reusable.name');
			},
			destination: ({ linked }) => {
				return linked('vocabulary.destination');
			},
			duration: ({ linked }) => {
				return linked('vocabulary.duration');
			},
			result: ({ linked }) => {
				return linked('objects.callReportingResult.result');
			},
			tags: ({ linked }) => {
				return linked('vocabulary.tag');
			},
			impacted: ({ linked }) => {
				return linked('cases.impacted');
			},
			contactLabel: ({ linked }) => {
				return linked('vocabulary.labels');
			},
			contactOwner: ({ linked }) => {
				return linked('objects.owner');
			},
			priority: ({ linked }) => {
				return linked('vocabulary.priority');
			},
			queue: ({ linked }) => {
				return linked('objects.queue.queue');
			},
			rated: 'Оценены',
			ratedBy: ({ linked }) => {
				return linked('objects.ratedBy');
			},
			rating: ({ linked }) => {
				return linked('cases.rating');
			},
			reactionTime: ({ linked }) => {
				return linked('cases.reactionTime');
			},
			reporter: ({ linked }) => {
				return linked('cases.reporter');
			},
			resolutionTime: ({ linked }) => {
				return linked('cases.resolutionTime');
			},
			score: ({ linked }) => {
				return linked('webitelUI.auditForm.score');
			},
			service: ({ linked }) => {
				return linked('cases.service');
			},
			showEmptyAmdResult: 'Показать пустые',
			sla: ({ linked }) => {
				return linked('cases.appliedSLA');
			},
			slaCondition: ({ linked }) => {
				return linked('cases.appliedCondition');
			},
			source: ({ linked }) => {
				return linked('cases.source');
			},
			status: ({ linked }) => {
				return linked('cases.status');
			},
			tag: ({ linked }) => {
				return linked('vocabulary.tag');
			},
			talkDuration: ({ linked }) => {
				return linked('objects.talkDuration');
			},
			team: ({ linked }) => {
				return linked('objects.team');
			},
			totalDuration: ({ linked }) => {
				return linked('objects.totalDuration');
			},
			user: ({ linked }) => {
				return linked('objects.user');
			},
			variable: ({ linked }) => {
				return linked('vocabulary.variables');
			},
			queueType: ({ linked }) => {
				return linked('objects.queue.queueType');
			},
			queuePeriod: ({ linked }) => {
				return linked('vocabulary.time');
			},
			agentStatus: ({ linked }) => {
				return linked('cases.status');
			},
			auditor: ({ linked }) => {
				return linked('objects.auditor');
			},
			skill: ({ linked }) => {
				return linked('objects.skill');
			},
			supervisor: ({ linked }) => {
				return linked('objects.supervisor');
			},
			utilizationProgress: ({ linked }) => {
				return linked('vocabulary.utilizationProgress');
			},
			region: ({ linked }) => {
				return linked('objects.region');
			},
			presets: {
				preset: 'Пресет | Пресеты',
				overwritePresetTitle: 'Пресет с таким названием уже существует.',
				overwritePresetText: 'Хотите его заменить?',
				notifications: {
					success: {
						update: ({ linked }) => {
							return linked('systemNotifications.success.update', {
								entity: linked('filters.presets.preset'),
							});
						},
						create: ({ linked }) => {
							return linked('systemNotifications.success.create', {
								entity: linked('filters.presets.preset'),
							});
						},
						delete: ({ linked }) => {
							return linked('systemNotifications.success.delete', {
								entity: linked('filters.presets.preset'),
							});
						},
					},
				},
			},
		},
		select: {
			selectedItemsLabel: 'элементов выбрано',
		},
	},
	systemNotifications: {
		success: {
			update: ({ named }) => `${named('entity')} был обновлён`,
			create: ({ named }) => `${named('entity')} был сохранён`,
			delete: ({ named }) => `${named('entity')} был удалён`,
		},
		warnings: {
			passwordExpirationMessageDays:
				'Ваш пароль истечёт через {amount} дн(я/ей)',
			passwordExpirationMessageHours:
				'До истечения пароля осталось менее {amount} часов.',
			licenseExpirationSoonMessage:
				'Ваша лицензия {name}  завершится через {amount} дней',
			licenseExpirationMessage: 'Ваша лицензия {name} завершилась',
		},
	},
	errorNotifications: {
		websocketDisconnect:
			'Соединение WebSocket потеряно. Перезагрузите страницу.',
		chatHistoryApi: 'Произошла ошибка загрузки истории чата',
		markChatProcessed: 'Не удалось переместить чат в “Закрытые”',
	},
	connectionQuality: {
		high: 'Отличное качество сети.',
		medium: 'Возможны задержки, проверьте сеть.',
		low: 'Плохое качество сети, проверьте сеть.',
	},
};