/* * All interface texts of the patient app (copy from docs/mock). Dialog content — consent, questions, scales, * reminders — comes from the engine (config/texts/) and is NOT duplicated here. */ export const ru = { product: { name: "Сопровождение пациента", tagline: "между визитами к врачу", workspace: "Личный кабинет", supportTitle: "Рядом между визитами", supportText: "Наблюдение за самочувствием и поддержка назначенного лечения.", }, nav: { today: "Сегодня", meds: "Лекарства", doctor: "Врач", profile: "Профиль", messages: "Сообщения", chat: "Чат", signIn: "Вход", help: "Помощь", }, help: { block: "Экстренная помощь", title: "Экстренная помощь", lead: "Если вам нужна срочная помощь, позвоните сразу.", call: "Позвонить", close: "Закрыть", alwaysNote: "Вы не одни. Помощь доступна круглосуточно.", fallbackName: "Единый номер экстренных служб", fallbackNote: "", }, common: { back: "Назад", next: "Далее", skip: "Пропустить", send: "Отправить", retry: "Повторить", toToday: "Вернуться на сегодня", recommended: "Рекомендуем", networkError: "Не удалось подключиться к сервису. Проверьте интернет и повторите.", }, welcome: { title: "Вход", demo: { title: "Демо: войти как Андрей", text: "Ветеран СВО, 34 года, сертралин. Назначения и карта ЕМИАС уже подключены — сразу в чат.", busy: "Готовим демо…", error: "Не удалось открыть демо. Попробуйте ещё раз.", }, emias: { title: "Войти через ЕМИАС", perks: [ "Назначения врача подгружаются автоматически", "Врач видит ответы и получает сигнал при ухудшении", "История доступна с любого устройства", ], }, or: "или", anonymous: { title: "Войти анонимно", text: "Без имени, СНИЛС и полиса. Первичный опрос и связь с врачом — по обезличенному профилю.", }, disclaimer: "Сервис не ставит диагнозы и не назначает лечение — решения принимает врач.", }, emias: { title: "Введите код от врача", lead: "Это одноразовый код. Он нужен, чтобы безопасно подключить ваши назначения и план наблюдения.", demoNotice: "Демонстрационный режим: авторизация в ЕМИАС не выполняется, вход подтверждается кодом от врача.", codeLabel: "Код подключения", codePlaceholder: "Код из памятки", submit: "Продолжить", submitting: "Проверяем код…", codeError: "Код не подошёл — проверьте написание или попросите врача выдать новый.", or: "или", demoTitle: "Демо-пациенты", demoLead: "Нет кода? Войдите под синтетической учётной записью.", demoDay: (day: number) => `${day}-й день терапии`, }, anonymous: { title: "Помощь без личных данных", note: "Врач видит ваши ответы и результаты под условным номером, без имени, СНИЛС и полиса. Ответы хранятся на сервере, ключ доступа к профилю — на этом устройстве.", start: "Начать первичный опрос", continue: "Продолжить без личных данных", lead: "Пройдите единый первичный опрос: заранее выбирать предполагаемый диагноз не нужно.", unavailable: "Первичный опрос сейчас отключён на сервере. Кабинет и подключение врача доступны без личных данных.", submitting: "Создаём профиль…", }, garden: { eyebrow: "Ваш сад", lead: "Растёт от ваших отметок", next: "Новый росток", of: (a: number, b: number) => `${a} из ${b}`, today: "Сегодня", noPressure: "Сад не вянет от пропусков. Честное «Пропущу» по лекарству тоже растит сад", grew: "Сад подрос", label: (title: string, bloom: number, growing: number) => `${title}. Цветов: ${bloom}, растёт: ${growing}.`, }, today: { title: "Сегодня", takeMed: "Принять лекарство", now: "Сейчас", checkin: "Отметка самочувствия", checkinHint: "меньше минуты", done: "Уже выполнено", medTaken: "Лекарство", medTakenAt: (time: string) => `принято, ${time}`, checkinDone: "Самочувствие отмечено", allDoneTitle: "На сегодня всё сделано", allDoneNext: (time: string) => `Следующее напоминание о лекарстве — ${time}`, allDoneNoMeds: "Следующая отметка самочувствия — завтра", viewMeds: "Посмотреть лекарства", visit: "Следующий визит к врачу", medQuestion: "Вопрос о лекарстве", medQuestionHint: "Ответ по официальной инструкции", messageDoctor: "Связаться с врачом", messageDoctorHint: "Запрос появится в кабинете врача", week: "Приём на этой неделе", weekTaken: (taken: number, total: number) => (total ? `Принято ${taken} из ${total}` : "Отметок пока нет"), noDoctor: "Врач пока не подключён. Подключите его без личных данных, чтобы передавать ответы и получать сопровождение.", newMessage: "Новое сообщение", open: "Открыть", continue: "Продолжить", intakeStart: "Первичный опрос", intakeStartHint: "15–20 минут, можно прерваться и продолжить позже", intakeResume: "Продолжить первичный опрос", intakeResumeHint: "Ответы сохранены, можно продолжить", intakeReview: "Опрос приостановлен: продолжить можно после оценки специалиста, врач уже получил уведомление. Если нужна помощь сейчас — 112.", intakeDone: "Первичный опрос пройден", diary: "Дневник самочувствия", diaryHint: "2–3 минуты: настроение, сон, лекарства", diaryPart: { morning: "Дневник — утро", evening: "Дневник — вечер" }, diaryPartHint: { morning: "3 вопроса: сон и алкоголь", evening: "Настроение, лекарства и модули по результату опроса" }, results: "Мой результат", diaryDone: "Дневник заполнен", therapyDay: (day: number) => `День ${day} лечения`, effectHint: "Когда ждать эффекта и что важно знать", }, meds: { title: "Моя схема приёма", lead: "По назначению врача. Отмечайте приём препаратов, чтобы не пропускать.", byDoctor: "По назначению врача", tablet: "1 приём", week: ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], onlyDoctor: "Схему меняет только врач. Не изменяйте дозировку самостоятельно.", empty: "Здесь появятся назначения вашего врача.", question: "Вопрос о лекарстве", reminderTitle: "Время принять препарат", reminderLead: "По назначению врача", taken: "Принял(а)", skip: "Пропущу", sideEffects: "Есть побочные эффекты", about: "О препарате", reportSideEffect: "Сообщить о побочном эффекте", therapyDay: (day: number) => `День лечения: ${day}`, card: { back: "К схеме приёма", prescribed: "Назначено", effect: "Когда ждать эффекта", effectAt: (when: string) => `Эффект оценивают через ${when}`, progress: (day: number) => `Вы принимаете препарат ${day} ${day % 10 === 1 && day % 100 !== 11 ? "день" : [2, 3, 4].includes(day % 10) && ![12, 13, 14].includes(day % 100) ? "дня" : "дней"}`, course: "Сколько принимать", courseShort: (days: number) => `Обычно не дольше ${Math.round(days / 7)} недель — срок определяет врач`, sideEffects: "Что может беспокоить", sideEffectsHint: "Побочные эффекты часто ослабевают в первые недели. Если они мешают жить, сообщите врачу — он может изменить дозу или подобрать другой препарат. Не меняйте схему сами.", sideEffectsNone: "Частые побочные эффекты в клинических рекомендациях не описаны — спросите врача.", redFlags: "Когда срочно к врачу", important: "Важно", withdrawal: "Резкая отмена этого препарата может вызвать неприятные ощущения: головокружение, раздражительность, нарушения сна. Отменяют его постепенно и только с врачом.", overdose: "Храните препарат в недоступном для других месте и принимайте строго в назначенной дозе.", monitoring: "Врач может назначить обследования", instruction: "Как принимать, что делать при пропуске, алкоголь и вождение", ask: "Задать вопрос о лекарстве", source: (sources: string) => `Источник: ${sources}. Черновик справочника, проверяется врачом-психиатром.`, offLabel: "Назначение вне зарегистрированных показаний — так бывает, решение принимает врач.", unknown: "Справки по этому препарату пока нет. Уточните у врача или в инструкции к препарату.", }, }, doctor: { title: "Врач", visit: "Следующий визит", visitNone: "Дата следующего визита пока не назначена", attending: "Ваш лечащий врач", connect: "Подключить врача без личных данных", connecting: "Подключаем врача…", write: "Попросить врача связаться", writeNote: "Запрос на связь появится в кабинете врача. Если срочно — 112.", earlier: "Записаться к врачу раньше", plan: "Мой план безопасности", noDoctor: "Врач пока не подключён. Можно подключить его без имени, СНИЛС и полиса: он увидит обезличенные ответы и результаты.", }, profile: { title: "Профиль", signInMode: "Способ входа", emias: "ЕМИАС", anonymous: "Анонимно", connectEmias: "Подключить ЕМИАС", data: "Мои данные", revoke: "Отозвать согласие", revokeTitle: "Отозвать согласие?", revokeText: "Ваши ответы больше не будут обрабатываться в приложении.", revokeConfirm: "Да, отозвать", cancel: "Отмена", wipe: "Удалить данные с устройства", wipeNote: "Удалятся ключ доступа и локальная копия переписки. Обезличенные ответы останутся на сервере; без ключа восстановить доступ к этому профилю не получится.", logout: "Выйти", messages: "Сообщения", result: "Предварительный результат", resultNone: "Появится после первичного опроса.", history: "История опросов", historySub: "Все опросы и дневники с датами и результатами", }, results: { title: "Мои результаты", conclusion: "Предварительный результат", conclusionDay: (d: string) => `Первичный опрос от ${d}`, modules: { depression: "Модуль «Депрессия»", veteran: "Модуль «ПТСР»" }, history: "История опросов", empty: "Здесь появятся пройденные опросы.", noResult: "Пройдите первичный опрос — после него здесь будет результат.", toIntake: "Пройти первичный опрос", }, flow: { home: "На главный экран", question: (n: number, total: number) => `Вопрос ${n} из ${total}`, period: "За последний месяц", textPlaceholder: "Напишите несколько слов", sending: "Отправляем…", doneTitle: "Готово", resultTitle: "Результат", sendEmpty: "Отправить без комментария", doneLead: "Врач увидит отметку.", breathe: "Вдох на 4 — выдох на 6", breatheIn: "Вдох", breatheOut: "Выдох", openPlan: "Открыть мой план безопасности", supportTitle: "Вы не одни", exit: "К главной", planTitle: "Мой план безопасности", consentTitle: "Согласие на обработку данных о здоровье", sections: { safety: "Безопасность", mood: "Настроение", trauma: "Пережитый опыт", alcohol: "Алкоголь", about: "О вас", diary: "Дневник", scale: "Опросник", }, questionN: (n: number) => `Вопрос ${n}`, recall: (period: string) => `Период: ${period}`, hoursLabel: "Сколько часов", hoursUnit: "ч", hoursHint: "От 0 до 24, можно с половиной: 6,5", portionsLabel: "Сколько порций", portionsUnit: "порц.", portionsHint: "Если не пили — 0. Можно дробное: 1,5", drinks: "Таблица стандартных порций", drinksLead: "Посчитайте, сколько порций выходит в обычный день, когда вы выпиваете.", noticeTitle: "Опрос приостановлен", }, voice: { start: "Сказать голосом", stop: "Остановить запись", cancel: "Отменить", recording: "Говорите — запись идёт", transcribing: "Распознаём речь…", check: "Проверьте распознанный текст — его можно исправить перед отправкой.", privacy: "Запись не сохраняется: её видит только система распознавания, текст — специалисты вашей программы.", noMic: "Нет доступа к микрофону. Разрешите его в настройках браузера или напишите текстом.", noSpeech: "Не удалось разобрать речь. Попробуйте ещё раз или напишите текстом.", failed: "Распознавание сейчас недоступно. Напишите, пожалуйста, текстом.", tooLong: "Запись слишком длинная — до минуты за раз.", }, messages: { typing: "Помощник печатает", title: "Сообщения", inputLabel: "Сообщение", inputPlaceholder: "Напишите сообщение", you: "Вы", empty: "Здесь будут сообщения помощника.", }, footer: { law: "Обработка данных о здоровье — только с вашего согласия (152‑ФЗ).", prototype: "Прототип для хакатона MedITron. Используются только синтетические данные.", }, } as const;