| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497 |
- {
- "page": {
- "notFound": "Запись обслуживания не найдена",
- "updated": "Запись обслуживания обновлена",
- "failedUpdate": "Не удалось обновить запись обслуживания",
- "deleteTitle": "Удалить запись обслуживания",
- "deleteDescription": "Это безвозвратно удалит запись обслуживания и все связанные данные. Это действие необратимо.",
- "deleted": "Запись обслуживания удалена",
- "failedDelete": "Не удалось удалить",
- "datesExpiredTitle": "Даты счёта истекли",
- "datesExpiredDescription": "Дата счёта или срок оплаты истёк. Хотите обновить даты перед продолжением?",
- "datesExpiredUpdate": "Обновить даты и продолжить",
- "datesExpiredProceed": "Продолжить без изменений",
- "datesExpiredUseToday": "Обновить до сегодняшней даты",
- "datesExpiredCustomize": "Выбрать даты вручную",
- "datesExpiredBack": "Назад",
- "datesExpiredSetToday": "Установить на сегодня",
- "customFieldsInvalid": "Заполните все обязательные пользовательские поля",
- "customFieldsSaveFailed": "Не удалось сохранить пользовательские поля",
- "problems": {
- "title": "Заказу нужно название, прежде чем его можно сохранить.",
- "negative": "Количество, часы, цены и затраты не могут быть отрицательными.",
- "partName": "У каждой детали с ценой должно быть название.",
- "laborDescription": "У каждой строки работ с часами или ставкой должно быть описание."
- }
- },
- "header": {
- "tabs": {
- "details": "Детали",
- "images": "Изображения",
- "video": "Видео",
- "documents": "Документы",
- "statusReports": "Отчёты о состоянии"
- },
- "save": "Сохранить",
- "pdf": "PDF",
- "email": "Эл. почта",
- "share": "Поделиться",
- "notify": "Уведомить",
- "delete": "Удалить",
- "unpaid": "Не оплачено",
- "unsavedChanges": "Несохранённые изменения",
- "saved": "Сохранено",
- "joinCall": "Присоединиться к видеозвонку",
- "moreActions": "Другие действия",
- "designMenu": "Дизайн счёта",
- "designMenuLoading": "Проверяем, с каким дизайном печатается этот счёт...",
- "designMenuExplain": "Ушёл клиенту {date}, поэтому печатается с тем дизайном, с которым был отправлен. Выбор другого меняет только внешний вид. То, что написано в счёте, останется как при отправке, а прежний вид не сохраняется.",
- "designSentWith": "Дизайн на момент отправки",
- "designFollow": "Как текущий по умолчанию",
- "designFollowNamed": "Как текущий по умолчанию ({name})",
- "designDefaultName": "текущий дизайн по умолчанию",
- "designPickConfirmTitle": "Перевести этот счёт на {name}?",
- "designPickConfirmBody": "Меняется только внешний вид. Данные сервиса, клиент, условия оплаты и суммы останутся ровно такими, какими были отправлены. Нынешний дизайн не сохраняется, поэтому отменить это не получится.",
- "designPickConfirm": "Изменить дизайн",
- "designPickDone": "Счёт теперь печатается с дизайном {name}",
- "designPickFailed": "Не удалось изменить дизайн"
- },
- "basicInfo": {
- "title": "Основная информация",
- "invoiceDetails": "Детали счёта",
- "customerInfo": "Клиент и транспорт",
- "paid": "Оплачено",
- "markPaid": "Отметить как оплачено",
- "markUnpaid": "Отметить как неоплачено",
- "vehicle": "Транспортное средство",
- "open": "Открыть",
- "customer": "Клиент",
- "titleLabel": "Название *",
- "titlePlaceholder": "Замена масла",
- "date": "Дата",
- "type": "Тип",
- "mileage": "Пробег",
- "mileageMarine": "Моточасы",
- "status": "Статус",
- "technician": "Механик",
- "invoiceNumber": "Номер счёта",
- "invoiceDate": "Дата счёта",
- "invoiceDueDate": "Срок оплаты",
- "typeOptions": {
- "maintenance": "Техобслуживание",
- "repair": "Ремонт",
- "upgrade": "Модернизация",
- "inspection": "Осмотр"
- },
- "statusOptions": {
- "pending": "Ожидает",
- "in_progress": "В работе",
- "waiting_parts": "Ожидание запчастей",
- "completed": "Завершено"
- },
- "searchVehicles": "Поиск транспортных средств...",
- "noVehicleFound": "Транспортное средство не найдено.",
- "techPicker": {
- "placeholder": "Выберите или введите имя...",
- "searchPlaceholder": "Поиск или ввод имени...",
- "useCustom": "Использовать \"{search}\"",
- "typePrompt": "Введите имя...",
- "boardTechnicians": "Механики доски",
- "teamMembers": "Участники команды"
- },
- "design": "Дизайн счёта",
- "designDefault": "По умолчанию для мастерской",
- "designFollowing": "По умолчанию ({name})",
- "designPinned": "Этот счёт дошёл до клиента {date}, поэтому сохраняет дизайн, с которым ушёл. Выбор здесь сработает только после разблокировки и повторной отправки. Владелец может изменить дизайн сейчас через Дизайн счёта в меню ⋮ наверху.",
- "designSaved": "Дизайн счёта обновлён",
- "designSavedPinned": "Сохранено. Этот счёт сохранит дизайн, с которым был отправлен, пока его не разблокируют и не отправят снова.",
- "designFollowingRule": "По умолчанию ({name}, {rule})",
- "designRule": {
- "parts_sale": "Продажа только запчастей"
- },
- "designSaveFailed": "Не удалось изменить дизайн счёта"
- },
- "parts": {
- "title": "Запчасти",
- "fromInventory": "Со склада",
- "addPart": "Добавить запчасть",
- "partNumber": "Арт. №",
- "name": "Название",
- "qty": "Кол-во",
- "unitCost": "Себестоимость",
- "unitCostHint": "Закупочная цена (внутренняя — клиенту не показывается)",
- "markupPercent": "Наценка %",
- "markupPercentHint": "Наценка к себестоимости (внутренняя — клиенту не показывается)",
- "applyMarkup": "Применить {percent}%",
- "applyMarkupHint": "Повторно применить наценку {percent}% к себестоимости в каждой строке",
- "unitPrice": "Цена за ед.",
- "total": "Итого",
- "namePlaceholder": "Название *",
- "subtotal": "Подитог запчастей: {amount}",
- "inventoryTitle": "Выбор запчасти со склада",
- "searchInventory": "Поиск на складе...",
- "inStock": "{quantity} в наличии",
- "noInventory": "Запчасти на складе не найдены.",
- "scanBarcode": "Сканировать",
- "scanTitle": "Сканировать штрихкод",
- "partFound": "\"{name}\" добавлено из склада",
- "partNotFound": "Деталь для штрихкода \"{barcode}\" не найдена",
- "deleteRow": "Удалить строку",
- "outOfStock": "Нет в наличии",
- "onBackorder": "Под заказ ({count})",
- "nameMissingHint": "Строки без названия детали не сохраняются."
- },
- "labor": {
- "title": "Работа",
- "addLabor": "Добавить работу",
- "fromPresets": "Из шаблонов",
- "description": "Описание",
- "hours": "Часы",
- "rate": "Ставка ({currency}/ч)",
- "total": "Итого",
- "descriptionPlaceholder": "Описание *",
- "subtotal": "Подитог работ: {amount}",
- "addService": "Добавить услугу",
- "addFinding": "Наблюдение",
- "newObservation": "Новое наблюдение",
- "addExisting": "Показать существующие ({count})",
- "qty": "Кол-во",
- "qtyOrHours": "Услуга / Часы",
- "hourlyTag": "н/ч",
- "serviceTag": "усл.",
- "switchToHourlyHint": "Почасовая: оценка по нормо-часам (часы × ставка/час). Нажмите для изменения.",
- "switchToServiceHint": "Услуга: фиксированная цена за единицу. Нажмите для изменения.",
- "deleteRow": "Удалить строку",
- "descriptionMissingHint": "Строки без описания не сохраняются."
- },
- "totals": {
- "title": "Итоги",
- "parts": "Запчасти",
- "labor": "Работа",
- "subtotal": "Подитог",
- "subtotalInclTax": "Подитог (с НДС)",
- "discount": "Скидка",
- "discountNone": "Нет",
- "discountPercentage": "Процент",
- "discountFixed": "Фиксированная",
- "tax": "Налог",
- "taxIncluded": "Налог (вкл.)",
- "total": "Итого",
- "inclusiveModeHint": "Цены позиций вводятся с НДС. Итоги показывают разбивку: без НДС + НДС.",
- "partsCost": "Себестоимость запчастей (внутр.)"
- },
- "notes": {
- "title": "Заметки",
- "public": "Публичные",
- "internal": "Внутренние",
- "publicPlaceholder": "Заметки, видимые на счёте...",
- "internalPlaceholder": "Внутренние заметки (не показываются на счёте)...",
- "publicHelper": "Отображаются на счёте и в общих документах",
- "internalHelper": "Видно только вашей команде",
- "aiWrite": "ИИ-генерация",
- "aiGenerated": "ИИ-заметки успешно сгенерированы",
- "aiGenerateFailed": "Не удалось сгенерировать ИИ-заметки",
- "aiDialogTitle": "ИИ-генерация",
- "aiDialogDescription": "ИИ проанализирует запчасти и работы в этой записи обслуживания и создаст профессиональное описание. Результат будет записан в текущий выбранный тип заметки.",
- "aiGenerate": "Сгенерировать",
- "aiOverwriteDescription": "Текущая заметка уже содержит текст. Вы можете заменить его или добавить сгенерированный ИИ текст ниже.",
- "aiOverwriteReplace": "Заменить",
- "aiOverwriteAppend": "Добавить",
- "aiOverwriteCancel": "Отмена",
- "aiDontShowAgain": "Больше не показывать"
- },
- "invoice": {
- "title": "Итоги по счёту",
- "parts": "Запчасти",
- "labor": "Работа",
- "subtotal": "Подитог",
- "subtotalInclTax": "Подитог (с НДС)",
- "discount": "Скидка",
- "tax": "Налог ({rate}%)",
- "taxIncluded": "Налог (вкл., {rate}%)",
- "total": "Итого",
- "paid": "Оплачено",
- "balanceDue": "К оплате",
- "paidBadge": "ОПЛАЧЕНО",
- "entityLabel": "Счёт",
- "emailSubject": "Подтверждение оплаты",
- "statusEmailSubject": "Обновление статуса обслуживания",
- "markCompletedTitle": "Отметить этот счёт как завершённый?",
- "markCompletedDescription": "Он уже отправлен клиенту, но всё ещё помечен как незавершённый, поэтому останется на доске работ.",
- "markCompletedConfirm": "Отметить завершённым",
- "lockedFieldsetLabel": "Счёт заблокирован, редактирование отключено"
- },
- "payments": {
- "title": "Платежи",
- "markUnpaid": "Отметить как неоплаченный",
- "markPaid": "Отметить как оплаченный",
- "recordPayment": "Записать платёж",
- "totalPaid": "Всего оплачено",
- "amount": "Сумма",
- "date": "Дата",
- "method": "Способ",
- "note": "Примечание",
- "notePlaceholder": "Необязательное примечание",
- "savePayment": "Сохранить платёж",
- "methodOptions": {
- "cash": "Наличные",
- "card": "Карта",
- "transfer": "Перевод",
- "other": "Другое"
- },
- "recorded": "Платёж записан",
- "markedPaid": "Отмечено как оплаченный",
- "markedUnpaid": "Отмечено как неоплаченный",
- "deleted": "Платёж удалён",
- "failedRecord": "Не удалось записать платёж",
- "failedStatus": "Не удалось обновить статус оплаты",
- "failedDelete": "Не удалось удалить платёж",
- "deleteTitle": "Удалить платёж",
- "deleteDescription": "Эта запись платежа будет удалена.",
- "failedPdf": "Не удалось сгенерировать PDF-счёт"
- },
- "attachments": {
- "deleteTitle": "Удалить вложение",
- "deleteDescription": "Это вложение будет безвозвратно удалено. Это действие необратимо.",
- "deleted": "Вложение удалено",
- "failedDelete": "Не удалось удалить",
- "images": "Изображения ({count})",
- "videos": "Видео ({count})",
- "diagnostics": "Диагностические отчёты ({count})",
- "documents": "Документы ({count})",
- "download": "Скачать",
- "close": "Закрыть"
- },
- "share": {
- "title": "Поделиться счётом",
- "description": "Создайте публичную ссылку, по которой любой сможет просмотреть и скачать этот счёт без входа в систему.",
- "notifyTitle": "Уведомить {name}",
- "email": "Эл. почта",
- "noEmail": "(эл. почта не указана)",
- "sms": "SMS",
- "noPhone": "(телефон не указан)",
- "sendNotification": "Отправить уведомление",
- "revokeLink": "Отозвать ссылку",
- "generateLink": "Создать публичную ссылку",
- "emailSent": "Письмо отправлено",
- "failedEmail": "Не удалось отправить письмо",
- "smsSent": "SMS отправлено",
- "failedSms": "Не удалось отправить SMS",
- "copyLink": "Копировать ссылку"
- },
- "sidebar": {
- "vehicle": "Транспортное средство",
- "customer": "Клиент",
- "vin": "VIN: {vin}",
- "mileageAtService": "Пробег при обслуживании: {mileage} {unit}",
- "engineHoursAtService": "Моточасы при обслуживании: {mileage} {unit}",
- "sharedLink": {
- "title": "Общая ссылка",
- "sharedOn": "Опубликовано {date}",
- "notViewed": "Ещё не просмотрено",
- "viewedTimes": "Просмотрено {count, plural, one {# раз} few {# раза} other {# раз}}",
- "lastViewed": "Последний раз {date}",
- "copyLink": "Копировать ссылку",
- "linkCopied": "Ссылка скопирована"
- }
- },
- "images": {
- "title": "Фотографии обслуживания",
- "dropzone": "Перетащите изображения сюда или нажмите для выбора",
- "uploading": "Загрузка...",
- "formats": "JPG, PNG, WebP — макс. 10МБ каждое",
- "uploadingImages": "Загрузка изображений...",
- "limitReached": "Лимит изображений достигнут ({count}/{max})",
- "upgradePrompt": "Обновите тариф для загрузки дополнительных изображений.",
- "onlyAllowed": "Допускаются только изображения JPG, PNG и WebP. {names} пропущены.",
- "onlyUploading": "Загружается только {count} изображений для соблюдения лимита.",
- "uploadingCount": "Загрузка изображений: {count}...",
- "uploadedCount": "Загружено изображений: {count}",
- "uploadFailed": "Загрузка не удалась",
- "deleted": "Изображение удалено",
- "failedDelete": "Не удалось удалить изображение",
- "failedUpdate": "Не удалось обновить",
- "description": "Описание...",
- "invoice": "Счёт"
- },
- "videos": {
- "title": "Видео обслуживания",
- "dropzone": "Перетащите видео сюда или нажмите для выбора",
- "uploading": "Загрузка...",
- "formats": "MP4, WebM, MOV — макс. 10МБ каждое",
- "uploadingVideos": "Загрузка видео...",
- "uploadingCount": "Загрузка видео: {count}...",
- "uploadedCount": "Загружено видео: {count}",
- "uploadFailed": "Загрузка не удалась",
- "deleted": "Видео удалено",
- "failedDelete": "Не удалось удалить видео",
- "failedUpdate": "Не удалось обновить",
- "invoice": "Счёт"
- },
- "documents": {
- "diagnosticTitle": "Диагностические отчёты",
- "documentsTitle": "Документы",
- "dropzone": "Перетащите файлы сюда или нажмите для выбора",
- "uploading": "Загрузка...",
- "diagnosticFormats": "PDF, CSV, TXT — макс. 10МБ каждый",
- "documentFormats": "PDF, DOCX, XLSX, CSV, TXT — макс. 10МБ каждый",
- "uploadingReports": "Загрузка отчётов...",
- "uploadingDocuments": "Загрузка документов...",
- "diagnosticLimitReached": "Лимит диагностических отчётов достигнут ({count}/{max})",
- "documentLimitReached": "Лимит документов достигнут ({count}/{max})",
- "upgradePrompt": "Обновите тариф для загрузки дополнительных файлов.",
- "diagnosticLabel": "Диагностический отчёт",
- "documentLabel": "Документ",
- "limitReachedToast": "Лимит {label} достигнут ({count}/{max}). Обновите тариф для увеличения.",
- "onlyUploading": "Загружается только {count} файлов для соблюдения лимита.",
- "uploadingCount": "Загрузка файлов: {count}...",
- "uploadedCount": "Загружено файлов: {count}",
- "uploadFailed": "Загрузка не удалась",
- "deleted": "Файл удалён",
- "failedDelete": "Не удалось удалить файл",
- "failedUpdate": "Не удалось обновить",
- "invoice": "Счёт"
- },
- "schedule": {
- "title": "Расписание",
- "date": "Дата",
- "startTime": "Время начала",
- "endTime": "Время окончания",
- "technician": "Механик",
- "selectTechnician": "Выберите механика...",
- "searchOrCreate": "Поиск или создание механика...",
- "createTechnician": "Создать \"{name}\"",
- "creating": "Создание...",
- "failedCreate": "Не удалось создать механика",
- "addNew": "+ Добавить нового",
- "add": "Добавить",
- "newTechPlaceholder": "Имя механика...",
- "assign": "Назначить на доску",
- "assigned": "Назначено на доску работ",
- "failedAssign": "Не удалось назначить",
- "endBeforeStart": "Время окончания должно быть позже времени начала",
- "failedUpdate": "Не удалось обновить время в расписании",
- "splitCreated": "Работа занимает несколько дней — создано продолжение на следующий день",
- "customTechnicians": "Свои",
- "readMore": "Подробнее",
- "setDefaults": "Настройки по умолчанию",
- "workBay": "Пост",
- "selectWorkBay": "Выберите пост…",
- "noWorkBay": "Без поста",
- "noTechnician": "Без механика",
- "technicians": "Механики",
- "otherTeamMembers": "Другие участники",
- "makeTechnician": "Сделает механиком",
- "addSomeoneNew": "Добавить человека",
- "notOnBoard": "Ещё не на доске",
- "putOnBoard": "Добавить на доску",
- "slotTaken": "{count, plural, one {Это время уже занято} other {На это время приходится # пересечений}}",
- "anotherJob": "другая работа",
- "clashTechnician": "техник занят",
- "clashBay": "пост занят",
- "clashBoth": "заняты оба",
- "bookedAnyway": "Всё равно сохранено. Измените время или выберите ближайшее свободное.",
- "pickNextAvailable": "Выбрать ближайшее свободное время",
- "findingSlot": "Поиск времени…",
- "slotPicked": "Назначено на ближайшее свободное время",
- "noSlotFound": "В ближайшие недели свободного времени не найдено"
- },
- "notifications": {
- "title": "Уведомления клиента",
- "viaSms": "через SMS",
- "viaEmail": "по эл. почте",
- "justNow": "Только что",
- "minutesAgo": "{count}м назад",
- "hoursAgo": "{count}ч назад",
- "daysAgo": "{count}д назад"
- },
- "table": {
- "warranty": "Гарантия"
- },
- "warranty": {
- "title": "Гарантия",
- "months": "Срок (месяцев)",
- "notes": "Условия гарантии",
- "notesPlaceholder": "напр. 12-месячная гарантия на все запчасти и работу...",
- "expiresAt": "Истекает",
- "presets": {
- "3months": "3 мес",
- "6months": "6 мес",
- "12months": "12 мес",
- "24months": "24 мес"
- },
- "status": {
- "active": "Активна",
- "expiring": "Истекает",
- "expired": "Истекла",
- "none": "Нет"
- },
- "statementLabel": "Что клиенту сообщается о гарантии",
- "statement": {
- "none": "Не указано",
- "included": "Предоставляется",
- "not_included": "Не предоставляется"
- },
- "noneHint": "В этом документе о гарантии ничего не печатается.",
- "mileageWithUnit": "Лимит пробега ({unit})",
- "notIncludedNotes": "Заявление для клиента",
- "notIncludedPlaceholder": "напр. Мастерская не даёт гарантию на запчасти, предоставленные клиентом.",
- "printedHint": "Печатается под гарантией в документе.",
- "notIncludedHint": "Оставьте пустым, и в документе будет указано, что законные права не затрагиваются.",
- "summaryMonths": "{count} мес."
- },
- "concerns": {
- "title": "Обращения клиента",
- "hint": "Почему клиент обратился, своими словами. Отдельная строка для каждого названного пункта.",
- "add": "Добавить ещё",
- "placeholder": "При торможении сзади слышен шум",
- "remove": "Удалить этот пункт",
- "notAnswered": "По этому пункту пока ничего не найдено",
- "answered": "Найдено по этому пункту: {count}"
- },
- "videoCall": {
- "title": "Видеозвонок",
- "none": "У этого заказ-наряда нет видеозвонка.",
- "needsSchedule": "Сначала укажите время начала. Встреча следует расписанию.",
- "add": "Добавить встречу {provider}",
- "addedHere": "добавлен из этого заказ-наряда",
- "fromCalendar": "из события календаря",
- "join": "Присоединиться",
- "copy": "Копировать ссылку",
- "copied": "Ссылка скопирована",
- "remove": "Удалить",
- "removeTitle": "Удалить видеозвонок?",
- "removeDescription": "Встреча удаляется у провайдера. Те, у кого уже есть ссылка, больше не смогут присоединиться.",
- "created": "Встреча создана. Ссылка на заказ-наряде.",
- "removed": "Встреча удалена",
- "failed": "Что-то пошло не так",
- "shareHint": "Клиент получает эту ссылку, только когда вы её отправите.",
- "shareHintNoChannel": "Клиент получает эту ссылку, только когда вы её отправите. Канал сообщений не настроен, поэтому скопируйте её в сообщение сами.",
- "send": {
- "button": "Отправить клиенту",
- "title": "Отправить ссылку на видеозвонок",
- "description": "Отправить ссылку для подключения клиенту {name}.",
- "messageLabel": "Примечание (необязательно)",
- "messagePlaceholder": "Что клиенту стоит знать до звонка...",
- "linkAlwaysIncluded": "Ссылка для подключения всегда добавляется под вашим примечанием.",
- "sms": "SMS",
- "email": "Эл. почта",
- "telegram": "Telegram",
- "noPhone": "(нет телефона)",
- "noEmail": "(нет эл. почты)",
- "noTelegram": "(чат не привязан)",
- "notAvailable": "(не настроено)",
- "cancel": "Отмена",
- "send": "Отправить",
- "sent": "Ссылка на видеозвонок отправлена",
- "partlySent": "Отправлено через {sent}; не отправлено через {failed}",
- "failed": "Не удалось отправить ссылку"
- },
- "notify": {
- "invitation": "Здравствуйте, {name}! Видеозвонок по поводу {vehicle} состоится {when}. Подключайтесь здесь: {url}",
- "invitationNoTime": "Здравствуйте, {name}! Вот ссылка на видеозвонок по поводу {vehicle}: {url}",
- "joinLine": "Подключиться к видеозвонку: {url}",
- "emailSubject": "Видеозвонок по поводу вашего {vehicle}"
- }
- }
- }
|