Newer
Older
gnexus-tasks / frontend / src / locales / ru.ts
// Русская локаль — источник правды ключей; en.ts/uk.ts типизируются как typeof ru.
// Namespaces по областям UI (см. план i18n): common, nav, stack, tree, list,
// options, projects, settings, taskui.

export default {
  common: {
    any: '— любой —',
    anyStatus: '— любой статус —',
    noProject: '— без проекта —',
    none: '— нет —',
    choose: '— выберите —',
    error: 'Ошибка запроса',
    save: 'Сохранить',
    cancel: 'Отмена',
    edit: 'Редактировать',
    preview: 'Предпросмотр',
    confirmTitle: 'Подтверждение',
    delete: 'Удалить',
    open: 'Открыть',
    deleteConfirmTask: 'Удалить задачу «{title}»? Действие необратимо.',
    deleteConfirmProject: 'Удалить проект «{name}»? Задачи останутся, но без проекта.',
    saved: 'Сохранено',
    created: 'Создано',
    create: 'Создать',
    taskDeleted: 'Задача удалена',
    projectDeleted: 'Проект удалён',
    taskApproved: 'Задача утверждена',
    taskTaken: 'Задача взята в работу',
    taskFinished: 'Задача завершена',
  },
  nav: {
    sections: 'Разделы',
    subtitle: 'GNexus Tasks — личные задачи',
    signIn: 'Войти',
    account: 'Аккаунт',
    signOut: 'Выйти',
    task: 'Задача',
    home: 'Главная',
    stack: 'Стек входящих',
    list: 'Список задач',
    garden: 'Сад',
    stats: 'Статистика',
    projects: 'Проекты',
    options: '3 варианта',
    settings: 'Настройки',
  },
  garden: {
    title: 'Сад',
    level: 'Уровень {n}',
    xpTotal: '{n} XP',
    plants: 'растений: {n}',
    levelProgress: 'До уровня: {xp} / {span} XP',
    aboutOpen: 'Как это работает',
    aboutTitle: 'Как устроен сад',
    about: [
      'Каждая закрытая задача оставляет на грядке растение — сад только растёт и никогда не уменьшается.',
      'За закрытие начисляется XP: база 10 + бонус за приоритет задачи (до 15) + бонус за объём работы по оценке времени (до 15). Крупные и срочные дела ценнее.',
      'Накопленный XP повышает уровень — от «Ростка» до «Легенды сада». Уровень не падает: XP не сгорает и не отнимается, даже если задачу удалить.',
      'Иногда задача приносит редкое растение — шанс тем выше, чем «весомее» задача. Эпические растения достаются только крупным закрытиям.',
      'Достижения отмечают вехи: закрытые задачи, уровни, разные проекты, часы работы, строгие дедлайны. У каждой ступени I, II, III — прогресс виден всегда.',
      'Задача, закрытая из режима «3 вариантов», отмечается меткой «выбрал и сделал». Ничего не сгорает, серий и наказаний нет — только приятные награды.',
    ],
    lastPlant: 'Последний росток: {title} — {date}',
    history: 'История: закрытых задач по месяцам',
    emptyTitle: 'Сад пока пуст',
    emptyText: 'Закройте первую задачу — на грядке появится растение.',
    levels: [
      'Росток',
      'Сеянцев',
      'Садовник',
      'Огородник',
      'Дендролог',
      'Лесничий',
      'Садовый мастер',
      'Хранитель сада',
      'Королевский садовник',
      'Легенда сада',
    ],
    achievements: 'Достижения',
    ach: {
      firstDone: 'Первый росток',
      done10: 'Десяток',
      level5: 'Высоты',
      sprinter: 'Спринтер',
      explorer: 'Разносторонний',
      marathon: 'Марафонец',
      deadlineBoss: 'Дедлайн-босс',
      chooser: 'Выбрал и сделал',
      recurring: 'Ритм жизни',
      projectDone: 'Проект под ключ',
    },
  },
  gamify: {
    praise: [
      'Отлично сделано!',
      'Готово — полдела!',
      'Ещё один шаг впереди.',
      'Красота!',
      'Так держать!',
      'Минус одна задача, плюс настроение.',
    ],
    rarePlant: 'На грядке редкое растение!',
    epicPlant: 'Легендарное растение в саду!',
    chosen: 'выбрал и сделал',
  },
  stats: {
    title: 'Статистика',
    modeDay: 'День',
    modeWeek: 'Неделя',
    modeMonth: 'Месяц',
    today: 'Сегодня, {date}',
    prevPeriod: 'Предыдущий период',
    nextPeriod: 'Следующий период',
    ofDays: 'из {n} дн.',
    totalVs: 'За период закрыто: {n} · в предыдущий раз: {m}',
    chartTitle: 'Закрытые задачи',
    legendNow: 'Сейчас',
    legendPrev: 'Предыдущий период',
    heatmapTitle: 'Активность за полгода',
    heatTasks: 'Задачи',
    heatXp: 'XP',
    heatLess: 'меньше',
    heatMore: 'больше',
    emptyTitle: 'Пока нет данных',
    emptyText: 'Закройте пару задач — и здесь появится динамика со сравнением.',
    metric: {
      closed: 'Закрыто задач',
      xp: 'XP получено',
      created: 'Создано задач',
      hours: 'Часы работы',
      activeDays: 'Дни с результатом',
    },
  },
  home: {
    title: 'Главное',
    stackCount: 'в стеке: {n}',
    activeCount: 'активных: {n}',
    inProgress: 'В работе',
    overdue: 'Просрочено',
    deadlines: 'Дедлайны на неделю',
    next: 'Следующие',
    overview: 'Обзор',
    projects: 'Активные проекты',
    totalTasks: 'Всего задач',
    doneMonth: 'Выполнено за месяц',
    doneAll: 'Выполнено всего',
    clearTitle: 'Всё спокойно',
    clearText: 'Нет активных задач — самое время закрыть что-то из стека.',
  },
  stack: {
    title: 'Стек входящих',
    count: 'Задач в стеке: {n}',
    quickPlaceholder: 'Закинуть задачу — только текст, остальное потом…',
    quickAdd: 'Закинуть',
    newTask: 'Новая задача',
    added: 'Задача закинута в стек',
    detailTitle: 'Детализация задачи',
    emptyTitle: 'Стек пуст',
    emptyText: 'Закиньте первую задачу — детализация подберётся автоматически.',
    inStack: 'в стеке',
    uploading: 'загрузка…',
    proposal: 'Предложение ИИ:',
    proposalPending: 'Детализация подбирается…',
    proposalNewProject: '+ проект «{name}»',
    proposalPriority: 'приоритет {n}',
    approveProposal: 'Да, всё верно',
    detail: 'Детализировать',
    redetail: 'Переспросить ИИ',
    deleteTask: 'Удалить задачу',
    deleteAttachment: 'Удалить вложение',
    promptProject: 'Название нового проекта:',
    promptTag: 'Название нового тега:',
    newProject: 'Новый проект',
    newTag: 'Новый тег',
    approve: 'Утвердить',
    form: {
      title: 'Заголовок',
      description: 'Описание (Markdown, Ctrl+V — картинка)',
      preview: 'Предпросмотр Markdown',
      project: 'Проект',
      tagsPlaceholder: 'Добавить тег…',
      tags: 'Теги',
      priority: 'Приоритет',
      estimate: 'Оценка времени, минут',
      budget: 'Бюджет (в валюте настроек)',
      cost: 'Оценка затрат (в валюте настроек)',
    },
    deadline: {
      legend: 'Дедлайн',
      date: 'Строгий — дата',
      period: 'Нестрогий — период',
    },
    recur: {
      legend: 'Тип задачи',
      oneTime: 'Разовая',
      recurring: 'Регулярная (повторяется)',
      kind: 'Правило повторения',
      interval: 'Интервал, дней',
      weekdays: 'Дни недели',
      monthlyDay: 'День месяца (1–31, без дня — последний)',
    },
  },
  tree: {
    addSubtask: 'Добавить подзадачу',
    promptSubtask: 'Подзадача:',
  },
  task: {
    notFoundTitle: 'Задача не найдена',
    notFoundText: 'Возможно, задача удалена или ссылка устарела.',
    proposalTitle: 'Предложение ИИ',
    proposalHint: 'Проверьте детали и утвердите — задача попадёт в список.',
    description: 'Описание',
    descriptionEmpty: 'Описание пусто — детализируйте задачу.',
    attachments: 'Вложения',
    fields: 'Параметры',
    dates: 'Даты',
    field: {
      project: 'Проект',
      taskType: 'Тип задачи',
      priority: 'Приоритет',
      estimate: 'Оценка времени',
      actual: 'Фактически',
      money: 'Деньги',
      deadline: 'Дедлайн',
      recurrence: 'Повторение',
      created: 'Создана',
      approved: 'Утверждена',
      done: 'Завершена',
    },
    subtasks: 'Подзадачи',
    noSubtasks: 'Подзадач нет',
    statusTitle: 'Статус',
    changeStatus: 'Изменить статус',
    subtaskCreated: 'Подзадача создана — попала в стек на детализацию',
    createdRaw: 'Задача попала в стек — детализируйте её там',
    actions: 'Действия',
    addTag: 'Добавить тег…',
  },
  projectPage: {
    notFoundTitle: 'Проект не найден',
    notFoundText: 'Возможно, проект удалён или ссылка устарела.',
    note: 'Заметка',
    noteEmpty: 'Заметки пока нет — добавьте её через «Редактировать».',
    progress: 'Задачи проекта: {done}/{total}',
    newTask: 'Новая задача',
    taskCreated: 'Задача создана — попала в стек на детализацию',
    promptTask: 'Новая задача проекта:',
    emptyTitle: 'Задач нет',
    emptyText: 'Создайте первую задачу проекта или ослабьте фильтры.',
    tree: 'Дерево проекта',
    stats: 'Статистика',
    total: 'Всего задач',
    doneN: 'Завершено',
    inProgress: 'В работе',
    toDo: 'К выполнению',
    overdue: 'Просрочено',
    taskCount: '{n} задач',
  },
  list: {
    title: 'Список задач',
    count: 'Найдено: {n}',
    emptyTitle: 'Ничего не найдено',
    emptyText: 'Попробуйте ослабить фильтры или закиньте новую задачу в стек.',
    filterStatus: 'Статус',
    filterProject: 'Проект',
    filterTag: 'Тег',
  },
  options: {
    title: '3 варианта',
    done: 'Готово',
    notNow: 'Не сейчас — другие варианты',
    available: 'Доступное время, минут',
    suggest: 'Предложить',
    choose: 'Делаем сейчас',
    emptyTitle: 'Вариантов нет',
    emptyText:
      'Свободных задач под это время не нашлось — закиньте что-нибудь в стек или уменьшите время.',
  },
  projects: {
    title: 'Проекты',
    count: 'Проектов: {n}',
    new: 'Новый проект',
    emptyTitle: 'Проектов нет',
    emptyText:
      'Создайте проект — задачи можно будет группировать и добавлять заметки с ресурсами.',
    prompt: 'Название нового проекта:',
    edit: 'Редактировать',
    delete: 'Удалить проект',
    form: {
      name: 'Название',
      relevance: 'Актуальность',
      priority: 'Приоритет',
      note: 'Заметка (Markdown: ссылки, контекст)',
      preview: 'Предпросмотр',
    },
  },
  settings: {
    title: 'Настройки',
    currencyTitle: 'Валюта бюджетов',
    currencyHint:
      'Единица выбирается один раз и применяется во всех суммах: бюджет задачи, оценка затрат.',
    currencyUnit: 'Единица измерения',
    saved: 'Сохранено — применяется во всех видах.',
    languageTitle: 'Язык интерфейса',
    languageHint:
      'Выбранный язык применяется сразу. «Как в аккаунте» — язык берётся из gnexus auth.',
    languageUnit: 'Язык',
    languageAuto: 'Как в аккаунте (SSO)',
    langRu: 'Русский',
    langEn: 'English',
    langUk: 'Українська',
  },
  md: {
    bold: 'Жирный',
    boldText: 'жирный текст',
    italic: 'Курсив',
    italicText: 'курсивный текст',
    heading: 'Заголовок',
    list: 'Список',
    checklist: 'Чек-лист',
    link: 'Ссылка',
    linkText: 'текст ссылки',
    code: 'Код',
  },
  taskui: {
    priority: {
      very_low: 'Очень низкий',
      low: 'Низкий',
      medium: 'Средний',
      high: 'Высокий',
      urgent: 'Срочно',
    },
    status: {
      to_do: 'К выполнению',
      in_progress: 'В работе',
      done: 'Завершено',
      cancelled: 'Отменено',
      deferred: 'Отложено',
    },
    relevance: {
      active: 'Активен',
      paused: 'Приостановлен',
      archived: 'Закрыт',
    },
    time: {
      hm: '{h} ч {m} м',
      h: '{h} ч',
      m: '{m} м',
    },
    money: {
      budget: 'бюджет {amount}',
      estimate: 'оценка {amount}',
    },
    currency: {
      UAH: '₴ Гривна (UAH)',
      USD: '$ Доллар (USD)',
      EUR: '€ Евро (EUR)',
      GBP: '£ Фунт (GBP)',
      PLN: 'zł Злотый (PLN)',
    },
    deadline: {
      day: 'в течение дня',
      week: 'в течение недели',
      month: 'в течение месяца',
      year: 'в течение года',
      until: 'до {date}',
    },
    recur: {
      kind: {
        interval: 'Каждые N дней',
        weekdays: 'Дни недели',
        monthly: 'День месяца',
      },
      daily: 'ежедневно',
      weekly: 'еженедельно',
      everyN: 'каждые {n} дн.',
      byWeekdays: 'по дням недели',
      monthlyDay: 'ежемесячно {day}-го',
      recurring: 'регулярная',
    },
  },
}