Files
huly-platform/plugins/tracker-assets/lang/ru.json
T
63e28dc964 feat(tracker): Gantt chart for the issue tracker (#10992)
* feat(tracker): Gantt chart for the issue tracker

Builds on the merged search/filter rework (#10998). Introduces @hcengineering/gantt, a dependency-free scheduling/zoom/drag/viewport engine package (with a neutral GanttDependency contract), and wires the tracker-specific adapter, Svelte UI, model schema, dependency-shift notifications and sanity coverage in tracker-resources.

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* fix(tracker): source Gantt holidays from HR and scope confirm-gate per view

Follow-up to review feedback on #10992:

- Confirm-gate: the module-global flag is replaced by a createConfirmGate()
  factory - one instance per mounted GanttView, so two Gantt views mounted at
  once in the same JS context no longer block each other's pointer input. A
  two-instance independence test guards the regression.

- Sidebar sorting: the stale deadline cast is dropped and issue.deadline is
  read directly (the field was added to the Issue model in this PR).

- HR holidays: the per-project WorkingDaysConfig.holidays field duplicated the
  workspace-wide hr.class.PublicHoliday concept and could drift from the real
  HR calendar. It is removed. WorkingDaysConfig now carries only the weekday
  mask and an optional holidayDepartment. The tracker adapter resolves holidays
  for the selected department plus all ancestors up to hr.ids.Head, matching
  HR's existing inheritance semantics (hr-resources ScheduleView). A missing or
  invalid reference falls back to company-wide (root) holidays; unrelated
  departments are never included. The ancestor walk is cycle/missing-parent
  safe.

  A small WorkingDaysEditor in the existing project create/edit dialog lets
  users with the existing project permission enable the mode, choose weekdays,
  and select an HR department (default: Company-wide). It persists through the
  existing project create/update transaction paths (createDoc on create,
  client.update on edit) and uses $unset when the mode is disabled. At least
  one working day must stay active.

  Calendar loading is explicit via a CalendarStateMachine: project-scoped drag,
  resize, cascade, keyboard-shift and auto-schedule mutations stay disabled
  until both the project config and the holiday data have loaded. A monotonic
  generation ticket (bumped synchronously on project switch) is re-checked
  immediately before every calendar-dependent date commit, so work started in
  one project can never persist after a switch to another. The all-projects
  view has no single project calendar, so calendar-dependent edits are
  read-only there; display, selection, the context menu and the manual
  date-picker (which does no calendar arithmetic and takes no mutation ticket)
  stay available.

  This depends on the lightweight @hcengineering/hr model package, but not on
  hr-resources; the tracker adapter uses hr.class.* and hr.ids.Head at runtime,
  and actual HR model presence is checked through the hierarchy - without the
  HR model, holidays resolve to an empty set. The @hcengineering/gantt engine
  package stays domain-neutral (no @hcengineering imports, no runtime deps).

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

* fix(gantt): measure FS gap-preservation floor in working days

The finish-to-start gap-preservation floor in the cascade scheduler mixed
two time measures: the FS snap anchor is working-calendar aware, but the
floor added a raw calendar-millisecond start-side delta. With an active
working calendar the two diverge, so dragging a predecessor over a weekend
over-shifted the successor across non-working days (a Fri->Mon body drag is
3 calendar days but only 1 working day, and could even land a successor on
a Saturday).

Measure the floor on the DUE side in working days instead: translate the
predecessor's shift via the new workingDayDelta helper and advance the
floor base with addWorkingDays over the calendar. A day-granular resize
gate (utcMidnight comparison, not a raw === 0 test) arms the floor only on
a start-DAY move, so a pure due-resize stays a pure snap even when the
stored issue carries a time-of-day on the cascade-commit path. The floor
base is normalized via utcMidnight(targetAnchor). The legacy path
(cfg === undefined) stays byte-identical to today's raw-ms floor. A
left-resize in working-days mode now correctly no-ops the floor (the due,
and thus the FS gap, did not move) instead of shifting on the raw start
delta.

Engine: add workingDayDelta (signed, half-open from-exclusive/to-inclusive
working-day step count) and export the previously-private utcMidnight from
packages/gantt/src/working-days.ts. The engine stays domain-neutral (no
@hcengineering imports, empty dependencies).

Adds engine and adapter test coverage: workingDayDelta cases and the full
FS floor matrix (right-resize no-push, weekend-spanner body drag, floor
wins over snap, holiday in the floor path, floor-dominant multi-hop chain,
negative delta, legacy no-cfg, SS pure-snap, raw time-of-day right-resize,
direct left-resize).

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>

---------

Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Co-authored-by: Michael Uray <michaeluray@users.noreply.github.com>
2026-08-27 20:24:38 +07:00

568 lines
38 KiB
JSON
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.
{
"string": {
"TrackerApplication": "Трекер",
"Projects": "Проекты",
"More": "Больше",
"Default": "По умолчанию",
"MakeDefault": "Установить по умолчанию",
"Delete": "Удалить",
"Open": "Открыть",
"Members": "Участники",
"Inbox": "Входящие",
"ViewIssue": "Открыть задачу",
"IssueCreated": "Задача создана",
"MyIssues": "Мои задачи",
"Issues": "Задачи",
"Views": "Отображения",
"Active": "Активные",
"AllIssues": "Все задачи",
"ActiveIssues": "Активные задачи",
"BacklogIssues": "Пул задач",
"Backlog": "Пул задач",
"Board": "Канбан",
"Components": "Компоненты",
"AllComponents": "Все",
"BacklogComponents": "Пул задач",
"ActiveComponents": "Активные",
"ClosedComponents": "Закрытые",
"NewComponent": "Новый компонент",
"CreateComponent": "Создать компонент",
"ComponentNamePlaceholder": "Название компонента",
"ComponentDescriptionPlaceholder": "Описание (необязательно)",
"ComponentLead": "Руководитель",
"ComponentMembers": "Участники",
"StartDate": "Дата начала",
"TargetDate": "Дата завершения",
"Planned": "Запланирован",
"InProgress": "В работе",
"Paused": "Приостановлен",
"Completed": "Завершен",
"Canceled": "Отменено",
"CreateProject": "Новый проект",
"NewProject": "Новый проект",
"ProjectTitle": "Название проекта",
"ProjectTitlePlaceholder": "Новый проект",
"UsedInIssueIDs": "Используется в идентификаторах задач",
"Identifier": "Идентификатор",
"Import": "Импорт",
"ProjectIdentifier": "Идентификатор проекта",
"IdentifierExists": "Идентификатор уже существует проекта",
"ProjectIdentifierPlaceholder": "ПКТ",
"ChooseIcon": "Выбрать иконку",
"AddIssue": "Добавить задачу",
"NewIssue": "Новая задача",
"NewIssuePlaceholder": "Новая",
"ResumeDraft": "Восстановить черновик",
"SaveIssue": "Создать задачу",
"SetPriority": "Установить приоритет\u2026",
"SetStatus": "Установить статус\u2026",
"SelectIssue": "Выбрать задачу",
"Priority": "Приоритет",
"NoPriority": "Нет приоритета",
"Urgent": "Наивысший",
"High": "Высокий",
"Medium": "Средний",
"Low": "Низкий",
"Unassigned": "Не назначен",
"Back": "Назад",
"List": "Список",
"NumberLabels": "{count, plural, =0 {нет меток} one {# метка} few {# метки} other {# меток}}",
"CategoryBacklog": "Пул",
"CategoryUnstarted": "Не запущенные",
"CategoryStarted": "Запущенный",
"CategoryCompleted": "Завершенные",
"CategoryCanceled": "Отменённые",
"Title": "Заголовок",
"Name": "Имя",
"Description": "Описание",
"Status": "Статус",
"Number": "Номер",
"Assignee": "Исполнитель",
"AssignTo": "Назначить...",
"AssignedTo": "Назначен на {value}",
"Parent": "Родительская задача",
"SetParent": "Задать родительскую задачу\u2026",
"ChangeParent": "Изменить родительскую задачу\u2026",
"RemoveParent": "Удалить родительскую задачу",
"OpenParent": "Открыть родительскую задачу",
"SubIssues": "Подзадачи",
"SubIssuesList": "Подзадачи ({subIssues})",
"OpenSubIssues": "Открыть подзадачи",
"AddSubIssues": "Добавить подзадачу",
"BlockedBy": "Блокируется",
"RelatedTo": "Связано",
"Comments": "Комментарии",
"Attachments": "Вложения",
"Labels": "Метки",
"Component": "Компонент",
"Space": "",
"SetDueDate": "Указать срок выполнения\u2026",
"ChangeDueDate": "Изменить срок выполнения\u2026",
"ModificationDate": "Изменено {value}",
"Project": "Проект",
"Issue": "Задача",
"SubIssue": "Подзадача",
"Document": "",
"DocumentIcon": "",
"DocumentColor": "",
"Rank": "Ранг",
"TypeIssuePriority": "Приоритет задачи",
"IssueTitlePlaceholder": "Имя задачи",
"SubIssueTitlePlaceholder": "Имя подзадачи",
"IssueDescriptionPlaceholder": "Добавить описание\u2026",
"SubIssueDescriptionPlaceholder": "Описание подзадачи",
"AddIssueTooltip": "Добавить задачу\u2026",
"NewIssueDialogClose": "Вы действительно хотите закрыть окно?",
"NewIssueDialogCloseNote": "Все внесенные изменения будут потеряны",
"RemoveComponentDialogClose": "Удалить компонент?",
"RemoveComponentDialogCloseNote": "Уверены, что хотите удалить этот компонент? Эта операция не может быть отменена.",
"Grouping": "Группировка",
"Ordering": "Сортировка",
"CompletedIssues": "Завершённые задачи",
"NoGrouping": "Нет группировки",
"NoAssignee": "Нет исполнителя",
"LastUpdated": "Последнее обновление",
"DueDate": "Срок",
"IssueStartDate": "Дата начала",
"GanttDependency": "Dependency",
"GanttLag": "Lag",
"WorkingDaysConfig": "Рабочие дни",
"WorkingDaysTitle": "Рабочие дни",
"WorkingDaysDescription": "Укажите, какие дни недели считаются рабочими. Если настроено, задержка и резерв рассчитываются в рабочих днях, а выходные и праздники затеняются на диаграмме Ганта.",
"WorkingDaysWeekday": "Рабочие дни недели",
"WorkingDaysHolidays": "Праздники",
"WorkingDaysNotConfigured": "Не настроено — используются календарные дни",
"WorkingDaysEnable": "Режим рабочих дней",
"WorkingDaysDepartment": "Календарь праздников",
"WorkingDaysCompanyWide": "Для всей компании",
"WorkingDaysAtLeastOneDay": "Хотя бы один рабочий день должен оставаться активным",
"WorkingDayMon": "Пн",
"WorkingDayTue": "Вт",
"WorkingDayWed": "Ср",
"WorkingDayThu": "Чт",
"WorkingDayFri": "Пт",
"WorkingDaySat": "Сб",
"WorkingDaySun": "Вс",
"Manual": "Пользовательский",
"All": "Все",
"PastWeek": "Предыдущая неделя",
"PastMonth": "Предыдущий месяц",
"CopyIssueUrl": "Копировать URL-адрес задачи в буфер обмена",
"CopyIssueId": "Копировать ID задачи в буфер обмена",
"CopyIssueBranch": "Копировать имя ветки Git в буфер обмена",
"CopyIssueTitle": "Копировать имя задачи в буфер обмена",
"AssetLabel": "Asset",
"AddToComponent": "Добавить в компонент\u2026",
"MoveToComponent": "Переместить в компонент\u2026",
"NoComponent": "Без компонента",
"ComponentLeadTitle": "Руководитель компонента",
"ComponentMembersTitle": "Участники компонента",
"ComponentLeadSearchPlaceholder": "Назначьте руководителя компонента\u2026",
"ComponentMembersSearchPlaceholder": "Изменить участников компонента\u2026",
"MoveToProject": "Изменить проект",
"Duplicate": "Дублировать",
"GotoIssues": "Перейти к задачам",
"GotoActive": "Перейти к активным задачам",
"GotoBacklog": "Перейти к пулу задач",
"GotoComponents": "Перейти к компоненту",
"GotoMyIssues": "Перейти к моим задачам",
"GotoTrackerApplication": "Перейти к приложению Трекер",
"CreatedOne": "Создана",
"MoveIssues": "Переместить задачи",
"MoveIssuesDescription": "Выберите проект, в который вы хотите переместить задачи",
"ManageAttributes": "Управление атрибутами",
"KeepOriginalAttributes": "Оставить оригинальные аттрибуты",
"KeepOriginalAttributesTooltip": "Оригинальные статусы и компоненты будут сохранены в новом проекте",
"SelectReplacement": "Следующие элементы не доступны в новом проекте. Выберите замену.",
"MissingItem": "ОТСУТСТВУЮЩИЙ ЭЛЕМЕНТ",
"Replacement": "ЗАМЕНА",
"Original": "ОРИГИНАЛ",
"OriginalDescription": "Элементы из этой секции будут созданы в новом проекте",
"Relations": "Зависимости",
"RemoveRelation": "Удалить зависимость...",
"AddBlockedBy": "Отметить как блокируемую...",
"AddIsBlocking": "Отметить как блокирующую...",
"AddRelatedIssue": "Связать с задачей...",
"RelatedIssue": "Связанная задача {id} - {title}",
"BlockedIssue": "Блокируемая задача {id} - {title}",
"BlockingIssue": "Блокирующая {id} - {title}",
"BlockedBySearchPlaceholder": "Поиск блокирующей задачи...",
"IsBlockingSearchPlaceholder": "Поиск блокируемой задачи...",
"RelatedIssueSearchPlaceholder": "Поиск связанной задачи...",
"Blocks": "Блокирует",
"Related": "Связан",
"RelatedIssues": "Связанные задачи",
"EditIssue": "Редактирование {title}",
"EditWorkflowStatuses": "Редактировать статусы задач",
"EditProject": "Редактировать проект",
"DeleteProject": "Удалить проект",
"ArchiveProjectName": "Архивировать проект {name}?",
"ArchiveProjectConfirm": "Вы действительно хотите заархивировать этот проект?",
"DeleteProjectConfirm": "Вы действительно хотите удалить этот проект со всем содержимым?",
"ProjectHasIssues": "Для данного проекта существуют задачи, уверены, что хотите заархивировать?",
"ManageWorkflowStatuses": "Управлять типами проекта",
"AddWorkflowStatus": "Добавить статус задачи",
"EditWorkflowStatus": "Редактировать статус задачи",
"DeleteWorkflowStatus": "Удалить статус задачи",
"DeleteWorkflowStatusConfirm": "Вы действительно хотите удалить \"{status}\" статус?",
"DeleteWorkflowStatusErrorDescription": "Статус \"{status}\" {count, plural, one {имеет # задача} few {имеет $ задачи} other {имеют # задач}}. Пожалуйста, выберите статус для перемещения.",
"Save": "Сохранить",
"IncludeItemsThatMatch": "Включить элементы, которые соответствуют",
"AnyFilter": "любому фильтру",
"AllFilters": "всем фильтрам",
"NoDescription": "Нет описания",
"SearchIssue": "Поиск задачи...",
"StatusHistory": "История состояний",
"NewSubIssue": "Добавить подзадачу...",
"AddLabel": "Добавить метку",
"DeleteIssue": "Удалить {issueCount, plural, =1 {задачу} one {# задачу} few {# задачи} other {задач}}",
"DeleteIssueConfirm": "Вы действительно хотите удалить {issueCount, plural, =1 {задачу} one {# задачу} few {# задачи} other {задач}}{subIssueCount, plural, =0 {?} =1 { и подзадачу?} one { и # подзадачу?} other { и # подзадач?}}",
"Milestone": "Этап",
"NoMilestone": "Без Этапа",
"MoveToMilestone": "Выбрать Этап",
"Milestones": "Этапы",
"AllMilestones": "Все",
"PlannedMilestones": "Запланировано",
"ActiveMilestones": "Активно",
"ClosedMilestones": "Завершено",
"AddToMilestone": "Добавить в Этап",
"MilestoneNamePlaceholder": "Название Этапа",
"NewMilestone": "Новый Этап",
"CreateMilestone": "Создать",
"MoveAndDeleteMilestone": "Переместить Задачи в {newMilestone} и Удалить {deleteMilestone}",
"MoveAndDeleteMilestoneConfirm": "Вы действительно хотите удалить этап и перенести задачи в другой?",
"Estimation": "Оценка",
"ReportedTime": "Потраченное времени",
"RemainingTime": "Осталось времени",
"TimeSpendReports": "Отчеты по времени",
"TimeSpendReport": "Время",
"TimeSpendReportAdd": "Добавить затраченное время",
"TimeSpendReportDate": "Дата",
"TimeSpendReportValue": "Затраченное время",
"TimeSpendReportValueTooltip": "Затраченное время в человеко днях",
"TimeSpendReportDescription": "Описание",
"TimeSpendDays": "{value} д",
"TimeSpendHours": "{value} ч",
"TimeSpendMinutes": "{value} м",
"ChildEstimation": "Оценка подзадач",
"ChildReportedTime": "Время подзадач",
"CapacityValue": "из {value} д",
"NewRelatedIssue": "Завести связанную задачу",
"RelatedIssuesNotFound": "Связанные задачи не найдены",
"AddedReference": "Добавлена зависимость",
"AddedAsBlocked": "Отмечено как заблокировано",
"AddedAsBlocking": "Отмечено как блокирующее",
"IssueTemplate": "Шаблон",
"IssueTemplates": "Шаблоны",
"NewProcess": "Новый шаблон",
"SaveProcess": "Сохранить шаблон",
"NoIssueTemplate": "Шаблон не задан",
"TemplateReplace": "Вы хотите применить выбранный шаблон?",
"TemplateReplaceConfirm": "Все внесенные изменения в будут заменены значениями из нового шаблона",
"Apply": "Применить",
"CurrentWorkDay": "Текущий Рабочий День",
"PreviousWorkDay": "Предыдущий Рабочий День",
"TimeReportDayTypeLabel": "Выберите тип дня для временного отчета",
"DefaultAssignee": "Исполнитель задачи по умолчанию",
"SevenHoursLength": "Семь Часов",
"EightHoursLength": "Восемь Часов",
"HourLabel": "ч",
"MinuteLabel": "м",
"Saved": "Сохранено...",
"CreatedIssue": "Создал(а) задачу",
"CreatedSubIssue": "Создал(а) подзадачу",
"ChangeStatus": "Изменение статуса",
"ConfigLabel": "Трекер",
"ConfigDescription": "Расширение по управлению задачами, чтобы все было в срок.",
"NoStatusFound": "Статус не найдет",
"CreateMissingStatus": "Создать отсутствующий статус",
"UnsetParent": "Родительская задача будет убрана",
"AllProjects": "Все проекты",
"IssueNotificationTitle": "{issueTitle}",
"IssueNotificationBody": "Обновлено {senderName}",
"IssueNotificationChanged": "{senderName} изменил {property}",
"IssueNotificationChangedProperty": "{senderName} изменил {property} на \"{newValue}\"",
"IssueNotificationMessage": "{senderName}: {message}",
"PreviousAssigned": "Ранее назначенные",
"IssueAssignedToYou": "Назначено вам",
"RelatedIssueTargetDescription": "Настройка проекта по умолчанию для Класса или пространства",
"MapRelatedIssues": "Настроить проекты по умолчанию для связанных задач",
"DefaultIssueStatus": "Статус по умолчанию",
"IssueStatus": "Статус",
"Extensions": "Дополнительно",
"UnsetParentIssue": "Снять родительскую задачу",
"ForbidCreateProjectPermission": "Запретить создание проекта",
"ForbidCreateProjectPermissionDescription": "Запрещает пользователям создавать новые проекты",
"Deadline": "Крайний срок",
"BarLabelNone": "Нет",
"BarLabelTitle": "Заголовок",
"BarLabelIdentifier": "Идентификатор",
"BarLabelAssignee": "Исполнитель",
"BarLabelPriority": "Приоритет",
"BarLabelStatus": "Статус",
"BarLabelEstimation": "Оценка",
"BarLabelProgress": "Прогресс",
"GanttBarLabelLeft": "Подпись полосы (слева)",
"GanttBarLabelInside": "Подпись полосы (внутри)",
"GanttBarLabelRight": "Подпись полосы (справа)",
"GanttQuickInfoOnClick": "Одиночный клик открывает окно быстрого просмотра",
"QuickInfoOpenFullEditor": "Открыть полный редактор",
"DependencyShifted": "Зависимость сдвинута",
"DependencyShiftedHeader": "{sender} сдвинул(а) {trigger}",
"DependencyShiftedMessage": "{count, plural, one {перемещена # зависимая задача} few {перемещены # зависимые задачи} other {перемещено # зависимых задач}}",
"DependencyShiftedSubject": "Сдвиг зависимостей",
"Color": "Цвет",
"AllowCreatingIssues": "Разрешить создание задач",
"Day": "День",
"Week": "Неделя",
"Month": "Месяц",
"Quarter": "Квартал",
"Gantt": "Диаграмма Ганта",
"GanttShowIssueCode": "Показать код задачи",
"GanttShowTitle": "Показать заголовок",
"GanttShowStatus": "Показать статус",
"GanttToday": "Сегодня",
"GanttJumpToStart": "Перейти к началу",
"GanttJumpToEnd": "Перейти к концу",
"GanttJumpToDate": "Перейти к дате",
"GanttZoomDay": "День",
"GanttZoomWeek": "Неделя",
"GanttZoomMonth": "Месяц",
"GanttZoomQuarter": "Квартал",
"GanttZoomCustom": "Другой",
"GanttZoomLabel": "Масштаб",
"GanttZoomVisibleDays": "{days, plural, one {# день} few {# дня} other {# дней}}",
"GanttZoomDaysSuffix": "дн.",
"GanttZoomDaysAria": "Видимых дней в области просмотра",
"GanttPreviousPeriod": "Предыдущий период",
"GanttNextPeriod": "Следующий период",
"GanttScrollLeftToBar": "Прокрутить влево к полосе",
"GanttScrollRightToBar": "Прокрутить вправо к полосе",
"GanttExpand": "Развернуть",
"GanttCollapse": "Свернуть",
"GanttExpandAll": "Развернуть все",
"GanttCollapseAll": "Свернуть все",
"GanttCornerNoOpInSwimlane": "Не действует в режиме группировки",
"ModeSelectorDisabledByFilter": "Статус задаётся активным фильтром. Уберите фильтр по статусу, чтобы воспользоваться этим переключателем.",
"ShowQuickModeSelector": "Быстрый фильтр: Все / Активные / Пул задач",
"SearchScopeLabel": "Искать в…",
"SearchScopeTitle": "Только заголовок",
"SearchScopeTitleDescription": "Заголовок + описание",
"SearchScopeAll": "Заголовок + описание + комментарии",
"SearchHighlight": "Подсвечивать совпадения",
"GanttTreeBreadcrumb": "Родитель найденной задачи",
"GanttArrowIndicatorSourceAbove": "Исходная строка выше области просмотра — нажмите для прокрутки",
"GanttArrowIndicatorSourceBelow": "Исходная строка ниже области просмотра — нажмите для прокрутки",
"GanttArrowIndicatorTargetAbove": "Целевая строка выше области просмотра — нажмите для прокрутки",
"GanttArrowIndicatorTargetBelow": "Целевая строка ниже области просмотра — нажмите для прокрутки",
"GanttDragConflict": "Задача была изменена другим пользователем, повторите попытку",
"GanttDragFailed": "Не удалось применить изменение на диаграмме Ганта",
"GanttDragNoPermission": "У вас нет прав на редактирование этой задачи",
"GanttDragValidation": "Недопустимая дата: {reason}",
"GanttResizingTooltip": "{from} дн. → {to} дн. ({delta} дн.)",
"SetStartDate": "Указать дату начала…",
"Hierarchy": "Иерархия",
"LinkExistingSubIssue": "Связать существующую как подзадачу…",
"LinkExistingParentIssue": "Связать существующую как родительскую задачу…",
"CreateNewSubIssue": "Создать подзадачу",
"CreateNewParentIssue": "Создать родительскую задачу",
"AddParentIssue": "Добавить родительскую задачу",
"AddSubIssue": "Добавить подзадачу",
"AddDependency": "Добавить зависимость",
"AddPredecessor": "Добавить предшественника",
"AddSuccessor": "Добавить последователя",
"AddPredecessorHint": "Эта задача зависит от выбранной",
"AddSuccessorHint": "Выбранная задача зависит от этой",
"SetParentIssueLabel": "Указать родительскую задачу…",
"GanttDragToSchedule": "Перетащите, чтобы задать сроки",
"GanttDurationTooltip": "Длительность: {days} дн.",
"GanttConfirmMove": "Подтверждать перемещение задачи",
"GanttConfirmResize": "Подтверждать изменение длительности задачи",
"GanttConfirmMoveTitle": "Переместить задачу?",
"GanttConfirmResizeTitle": "Изменить сроки задачи?",
"GanttConfirmMoveBody": "Переместить {title} на {start} – {due}?",
"GanttConfirmResizeBody": "Изменить {title} на {start} – {due}?",
"GanttConfirmApply": "Применить",
"GanttAriaResizeStart": "Изменить дату начала",
"GanttAriaResizeEnd": "Изменить срок выполнения",
"DependencyKindFS": "Окончание → Начало",
"DependencyKindSS": "Начало → Начало",
"DependencyKindFF": "Окончание → Окончание",
"DependencyKindSF": "Начало → Окончание",
"DependencyLag": "Задержка (дни)",
"DependencyKind": "Тип",
"DependencyDelete": "Удалить зависимость",
"DependencyDeleteConfirm": "Удалить эту зависимость?",
"DependencyCycle": "Это создаст циклическую зависимость",
"DependencyEditTitle": "Изменить зависимость",
"DependencyKindHintFS": "Окончание-Начало: последователь начинается после окончания предшественника",
"DependencyKindHintSS": "Начало-Начало: последователь начинается вместе с предшественником",
"DependencyKindHintFF": "Окончание-Окончание: последователь завершается вместе с предшественником",
"DependencyKindHintSF": "Начало-Окончание: последователь завершается после начала предшественника",
"DependencyPickKind": "Выберите тип зависимости",
"DependencyChangeKind": "Изменить тип",
"GanttShowPredecessors": "Показать столбец предшественников",
"Predecessors": "Предшественники",
"NoPredecessors": "—",
"CascadeConfirmTitle": "{count, plural, one {будет сдвинута # задача} few {будут сдвинуты # задачи} other {будет сдвинуто # задач}}",
"CascadeConfirmConfirm": "Подтвердить",
"CascadeConfirmCancel": "Отменить",
"CascadeBannerCycle": "Обнаружен цикл зависимостей — каскадный сдвиг невозможен. Сначала устраните цикл.",
"CascadeBannerOverflow": "Каскадный сдвиг не сошёлся за {max} итераций — изменение отклонено.",
"CascadeBannerBypass": "Последователей, которые могут нарушать ограничения: {count} — перетаскивание с Alt обошло каскадный сдвиг.",
"CascadeLockedSuccessors": "{count, plural, one {# последователь заблокирован} few {# последователя заблокированы} other {# последователей заблокировано}} — вы не можете их изменить. Отмените действие и обратитесь к владельцу.",
"CascadeSkippedUnscheduled": "{count, plural, one {ещё у # последователя нет дат, он не был сдвинут} few {ещё у # последователей нет дат, они не были сдвинуты} other {ещё у # последователей нет дат, они не были сдвинуты}}",
"CascadeLegendPrimary": "Основная (перемещена вами)",
"CascadeLegendPush": "Сдвиг последователя",
"CascadeLegendPull": "Подтягивание предшественника",
"CascadeLegendOldNew": "Светлая = исходная / Сплошная = новая",
"Dependencies": "Зависимости",
"GanttSuccessors": "Последователи",
"CriticalPath": "Критический путь",
"CriticalPathOn": "Показать критический путь",
"SlackColumn": "Столбец резерва",
"Slack": "Резерв",
"CriticalPathCycle": "Обнаружен цикл зависимостей — критический путь недоступен, пока он не устранён.",
"CriticalPathBadge": "КП",
"GanttHelpTitle": "Сочетания клавиш",
"GanttHelpEsc": "Нажмите Esc или ?, чтобы закрыть",
"GanttExport": "Экспорт в PNG",
"GanttExportFailed": "Не удалось выполнить экспорт",
"GanttSidebarColumnsExtended": "Расширенные столбцы боковой панели",
"GanttSidebarShowStatus": "Боковая панель: показать статус",
"GanttSidebarShowPriority": "Боковая панель: показать приоритет",
"GanttSidebarShowAssignee": "Боковая панель: показать исполнителя",
"GanttSidebarShowEstimation": "Боковая панель: показать оценку",
"GanttSidebarShowStartDate": "Боковая панель: показать дату начала",
"GanttSidebarShowDueDate": "Боковая панель: показать срок",
"GanttSidebarShowDeadline": "Боковая панель: показать крайний срок",
"GanttSidebarShowProgress": "Боковая панель: показать прогресс",
"GanttSortBreaksHierarchy": "Сортировка нарушает иерархию — подзадачи отделяются от родительской задачи.",
"GanttSidebarColIdentifier": "ID",
"GanttSidebarColTitle": "Заголовок",
"GanttSidebarColStatus": "Статус",
"GanttSidebarColPriority": "Приоритет",
"GanttSidebarColAssignee": "Исполнитель",
"GanttSidebarColEstimation": "Оценка",
"GanttSidebarColComponent": "Компонент",
"GanttSidebarColMilestone": "Этап",
"GanttSidebarColPredecessors": "Предшественники",
"GanttSidebarColSlack": "Резерв",
"GanttSidebarColStartDate": "Начало",
"GanttSidebarColDueDate": "Срок",
"GanttSidebarColDeadline": "Крайний срок",
"GanttSidebarColProgress": "Прогресс",
"GanttSidebarColModifiedOn": "Изменено",
"GanttSidebarColCreatedOn": "Создано",
"GanttGroupBy": "Группировать по",
"GanttGroupByNone": "Нет",
"GanttGroupByStatus": "Статус",
"GanttGroupByPriority": "Приоритет",
"GanttGroupByAssignee": "Исполнитель",
"GanttGroupByComponent": "Компонент",
"GanttGroupByMilestone": "Этап",
"GanttGroupByLabel": "Метка",
"GanttColorBy": "Цвет по",
"GanttColorByStatus": "Статус",
"GanttColorByPriority": "Приоритет",
"GanttColorByAssignee": "Исполнитель",
"GanttColorByComponent": "Компонент",
"GanttColorByMilestone": "Этап",
"GanttColorByNone": "Однотонный",
"GanttGroupOverridesHierarchy": "Группировка заменяет отступы иерархии. Установите «Группировать по» в «Нет», чтобы увидеть дерево родителей и подзадач.",
"GanttUnassigned": "Не назначен",
"GanttNoComponent": "Без компонента",
"GanttNoMilestone": "Без этапа",
"GanttNoLabel": "Без метки",
"GanttUnknownGroup": "(неизвестно)",
"GanttAllIssues": "Все задачи",
"GanttFilter": "Фильтр",
"GanttFilterClear": "Очистить фильтр",
"GanttFilterByStatus": "Статус",
"GanttFilterByPriority": "Приоритет",
"GanttFilterByAssignee": "Исполнитель",
"GanttFilterEmpty": "Нет задач, соответствующих активному фильтру",
"GanttUndo": "Отменить",
"GanttRedo": "Повторить",
"GanttUndoTooltip": "Отменить: {description}",
"GanttRedoTooltip": "Повторить: {description}",
"GanttUndoEmpty": "Нечего отменять",
"GanttRedoEmpty": "Нечего повторять",
"GanttUndoConflict": "Отмена невозможна: данные были изменены извне после этого действия",
"GanttUndoConflictHint": "Конфликтующее изменение сохранено; этот шаг отмены пропущен, чтобы избежать бесконечного цикла.",
"GanttUndoFailed": "Не удалось отменить действие",
"GanttUndoDescMove": "Перемещение {title} на {days} дн.",
"GanttUndoDescResize": "Изменение длительности {title}",
"GanttUndoDescCascade": "Каскадный сдвиг: сдвинуто задач — {count}",
"GanttUndoDescCreateDep": "Создание зависимости {source} → {target}",
"GanttUndoDescDeleteDep": "Удаление зависимости {source} → {target}",
"GanttUndoDescEditDep": "Изменение зависимости {source} → {target}",
"SchedulingMode": "Планирование",
"SchedulingModeAuto": "Авто",
"SchedulingModeManual": "Вручную",
"SchedulingModeHint": "Ручное планирование закрепляет даты этой задачи. Каскадный планировщик никогда не будет её перемещать при перетаскивании предшественника или последователя. Переключитесь обратно на «Авто», чтобы вернуть задачу в каскад.",
"SchedulingModeTooltipAuto": "Автоматическое планирование — каскад может сдвинуть эту задачу",
"SchedulingModeTooltipManual": "Ручное планирование — защищено от каскада",
"GanttBarManualPinTooltip": "Ручное планирование — защищено от каскада",
"GanttBulkSelectedCount": "Выбрано задач: {count}",
"GanttBulkBoundaryHit": "Перетаскивание остановлено: выбранная задача достигла границы предшественника",
"GanttBulkClearSelection": "Нажмите Esc, чтобы снять выделение",
"AddedRelation": "добавил(а) зависимость",
"RemovedRelation": "удалил(а) зависимость",
"UpdatedRelation": "обновил(а) зависимость",
"GanttFullscreen": "Полноэкранный режим",
"GanttExportPng": "Экспортировать в PNG",
"GanttExportPdf": "Экспортировать в PDF",
"GanttMoreActions": "Ещё действия",
"GanttToolbarMore": "Другие элементы панели",
"GanttSavedViewLoad": "Загрузить отображение…",
"GanttSavedViewLoadGroup": "Загрузить сохранённое отображение",
"GanttSavedViewLoadDefault": "По умолчанию (без сохранённого отображения)",
"GanttSavedViewMine": "Мои отображения",
"GanttSavedViewShared": "Общие",
"GanttSavedViews": "Сохранённые отображения",
"GanttSavedView": "Сохранённое отображение",
"GanttSavedViewNew": "Сохранить текущее отображение…",
"GanttSavedViewNamePlaceholder": "Название отображения",
"GanttSavedViewFixTimeWindow": "Зафиксировать период",
"GanttSavedViewFixTimeWindowHint": "Сохранить текущий видимый диапазон дат, чтобы отображение всегда открывалось на той же позиции",
"GanttSavedViewPublic": "Поделиться с рабочим пространством",
"GanttSavedViewSave": "Сохранить отображение",
"GanttSavedViewUpdate": "Обновить отображение",
"GanttSavedViewModified": "Изменено",
"GanttSavedViewDelete": "Удалить отображение",
"GanttSavedViewEmpty": "Сохранённых отображений пока нет",
"GanttSavedViewSelect": "Отображение",
"GanttSavedViewDefault": "По умолчанию (нет)",
"GanttMobileMenu": "Меню",
"GanttMobileOpenSidebar": "Открыть список задач",
"GanttMobileCloseSidebar": "Закрыть список задач",
"GanttMobileReadOnly": "Мобильная версия доступна только для чтения — откройте на экране большего размера, чтобы редактировать",
"GanttShowPastDueOverlay": "Показывать просроченные",
"GanttShowBlockedOverlay": "Показывать заблокированные",
"GanttShowSubIssueProgress": "Показывать прогресс подзадач",
"SearchEmptyTitle": "Не найдено задач по запросу «{query}»",
"SearchEmptyActiveFilters": "Активные фильтры: {filters}",
"SearchEmptyClearFilters": "Искать без фильтров",
"SearchEmptyAllProjects": "Искать во всех проектах"
},
"status": {}
}