Files
PTSRaiAgent/web/src/content/ru.ts
T
2026-10-31 15:47:34 +03:00

291 lines
18 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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;