Newer
Older
gnexus-tasks / frontend / src / locales / uk.ts
// Українська локаль — типізована як typeof ru, щоб пропущені ключі ловив vue-tsc.
import type ru from './ru'

export default {
  common: {
    any: '— будь-який —',
    anyStatus: '— будь-який статус —',
    noProject: '— без проєкту —',
    none: '— немає —',
    choose: '— оберіть —',
    notSet: '— не вказано —',
    error: 'Помилка запиту',
    save: 'Зберегти',
    cancel: 'Скасувати',
    edit: 'Редагувати',
    preview: 'Попередній перегляд',
    confirmTitle: 'Підтвердження',
    delete: 'Видалити',
    open: 'Відкрити',
    expand: 'Розгорнути',
    collapse: 'Згорнути',
    deleteConfirmTask: 'Видалити задачу «{title}»? Дію не можна скасувати.',
    deleteConfirmProject: 'Видалити проєкт «{name}»? Задачі залишаться, але без проєкту.',
    archive: 'До архіву',
    archiveTitle: 'Надіслати до архіву',
    saved: 'Збережено',
    created: 'Створено',
    create: 'Створити',
    taskDeleted: 'Задачу видалено',
    projectDeleted: 'Проєкт видалено',
    taskApproved: 'Задачу затверджено',
    taskTaken: 'Задачу взято в роботу',
    taskFinished: 'Задачу завершено',
  },
  nav: {
    sections: 'Розділи',
    subtitle: 'GNexus Tasks — особисті задачі',
    signIn: 'Увійти',
    account: 'Акаунт',
    signOut: 'Вийти',
    task: 'Завдання',
    home: 'Головна',
    stack: 'Вхідний стек',
    list: 'Список задач',
    garden: 'Сад',
    stats: 'Статистика',
    projects: 'Проєкти',
    archive: 'Архів',
    options: 'Видача завдання',
    settings: 'Налаштування',
  },
  garden: {
    title: 'Сад',
    level: 'Рівень {n}',
    xpTotal: '{n} XP',
    plants: 'рослин: {n}',
    levelProgress: 'До наступного рівня: {xp} / {span} XP',
    aboutOpen: 'Як це працює',
    aboutTitle: 'Як влаштований сад',
    levelsTitle: 'Дерево рівнів',
    levelsHint:
      'Пороги XP та нагороди кожного рівня: нові види рослин (ціна насіння) й розширення мапи. Рівень росте з досвіду за завдання — нічого не згорає.',
    levelCurrent: 'поточний',
    achDone: 'Усі щаблі пройдено (вищий — {r})',
    achStep: 'Щабель: римська — номер, дріб — прогрес до наступного',
    rewardCreateTask: 'створення завдання',
    rewardCreateProject: 'створення проєкту',
    about: [
      'Кожне виконане завдання залишає на грядці рослину — сад лише зростає і ніколи не зменшується.',
      'За виконання нараховується XP: база 10 + бонус за пріоритет (до 15) + бонус за обсяг за оцінкою часу (до 15) + 10 за «ментально складне» — чесна нагорода за силу волі. Великі й термінові справи цінніші.',
      'Накопичений XP підвищує рівень — від «Паростка» до «Легенди саду». Рівень не падає: XP не згорає і не віднімається, навіть якщо завдання видалити.',
      'Іноді завдання приносить рідкісну рослину — шанс тим вищий, що «важче» завдання. Епічні рослини дістаються лише великим завершенням.',
      'Загальний принцип: досвід відкриває, монети купують. Досвід (рівень) відкриває нові види рослин і землю; монети витрачаються на ріст рослин, декорації та розширення карти. Монети надходять за виконані завдання (половина XP) та за нові рівні.',
      'Досягнення відзначають віхи: виконані завдання, рівні, різні проєкти, години роботи, строгі дедлайни, «ментально складні» завдання. У кожного ступені I, II, III — прогрес видно завжди.',
      'Завдання, виконане з режиму «3 варіанти», відзначається меткою «обрав і зробив». Закриття «не хочеться робити» завжди святкується золотом — сила волі того варта. Нічого не згорає, серій і покарань немає — лише приємні нагороди.',
    ],
    lastReward: 'Остання нагорода за: {title} — {date}',
    emptyTitle: 'Сад поки порожній',
    emptyText: 'Закрийте перше завдання — на грядці зросте рослина.',
    levels: [
      'Паросток',
      'Сіянець',
      'Садівник',
      'Городник',
      'Дендролог',
      'Лісничий',
      'Садовий майстер',
      'Хранитель саду',
      'Королівський садівник',
      'Магістр садівництва',
      'Ландшафтний архітектор',
      'Хранитель легенд',
      'Легенда саду',
    ],
    achievements: 'Досягнення',
    coins: 'монет: {n}',
    coinsHint: 'Валюта саду: витрачається на ріст рослин і декорації',
    shop: 'Маркет',
    shopTitle: 'Маркет саду',
    buy: 'Купити',
    notEnoughCoins: 'Не вистачає {n} монет',
    lockedUntil: 'Відкриється на рівні {n}',
    expansion: 'Розширення саду',
    expansionHint: 'Більше землі — {n} клітинок до периметра карти',
    expansionCurrent: 'Поточна карта: {cols}×{rows}',
    expansionMax: 'Вся земля відкрита',
    inventory: 'Інвентар',
    inventoryHint: 'Перетягніть декорацію або насіння на карту; декорацію можна повернути назад',
    inventoryEmpty: 'Поки порожньо: куплені декорації чекають тут — перетягніть їх на карту',
    zoomIn: 'Наблизити',
    zoomOut: 'Віддалити',
    zoomReset: 'Скинути вид',
    fullscreen: 'На весь екран',
    fullscreenExit: 'Вийти з повного екрана',
    boughtHint: 'Куплено: {name} — перетягніть її з інвентаря під картою на сад',
    decorations: 'Декорації',
    decorationsHint: 'Прикрасьте сад — декорації не дають бонусів, лише настрій',
    unique: 'унікальна',
    rareOnly: 'лише рідкісні рослини',
    seeds: 'Насіння рослин',
    seedsHint:
      'Види, відкриті рівнем, можна купити: насіння потрапляє в інвентар — перетягніть його на вільну клітинку. Рідкісні/епік народжуються лише із завдань.',
    seedBought: 'Насіння куплено — перетягніть його з інвентаря на грядку',
    speciesHint:
      'Досвід відкриває нові види й землю, монети купують насіння, ріст та прикраси. Вид фіксується за рослиною в момент народження.',
    upgrade: 'Виростити — {n} монет',
    maxStage: 'Повністю виросло',
    stage: { sprout: 'Паросток', bush: 'Кущ', bloom: 'Цвітіння' },
    speciesNames: {
      'ph-flower': 'Квітка',
      'ph-leaf': 'Зелень',
      'ph-tree-evergreen': 'Ялина',
      'ph-flower-lotus': 'Лотос',
      'ph-cactus': 'Кактус',
      'ph-tree': 'Дуб',
      'ph-drop': 'Роса',
      'ph-sun': 'Соняшник',
      'ph-tree-structure': 'Бонсай',
      'ph-butterfly': 'Метеликів кущ',
      'ph-campfire': 'Горобина',
      'ph-sparkle': 'Зорецвіт',
      'ph-fire': 'Вогнецвіт',
    },
    decorNames: {
      fence: 'Огорожа',
      bush: 'Кущ',
      flowerbed: 'Клумба',
      lantern: 'Фонар',
      bench: 'Лавка',
      birdbath: 'Поїлка для птахів',
      flag: 'Флюгер',
      birdhouse: 'Шпаківня',
      gem: 'Садове самоцвіт',
      pond: 'Ставок',
      greenhouse: 'Теплиця',
      gazebo: 'Альтанка',
    },
    ach: {
      firstDone: 'Перший паросток',
      done10: 'Десятка',
      level5: 'Висоти',
      sprinter: 'Спринтер',
      explorer: 'Різнобічний',
      marathon: 'Марафонець',
      deadlineBoss: 'Дедлайн-бос',
      chooser: 'Обрав і зробив',
      willpower: 'Подолання',
      recurring: 'Ритм життя',
      projectDone: 'Проєкт під ключ',
    },
  },
  gamify: {
    praise: [
      'Чудово зроблено!',
      'Готово — півсправи!',
      'Ще один крок уперед.',
      'Красота!',
      'Так тримати!',
      'Мінус одне завдання, плюс настрій.',
    ],
    rarePlant: 'На грядці зросла рідкісна рослина!',
    epicPlant: 'Легендарна рослина в саду!',
    chosen: 'обрав і зробив',
    willpower: 'сила волі',
    willpowerText: 'Сила волі! Того варто було.',
    coins: 'монет',
    createdReward: 'Створено — краплина досвіду вже ваша',
    daily: 'Щоденна нагорода за візит',
  },
  stats: {
    title: 'Статистика',
    modeDay: 'День',
    modeWeek: 'Тиждень',
    modeMonth: 'Місяць',
    today: 'Сьогодні, {date}',
    prevPeriod: 'Попередній період',
    nextPeriod: 'Наступний період',
    ofDays: 'з {n} дн.',
    totalVs: 'За період виконано: {n} · минулого разу: {m}',
    chartTitle: 'Виконані завдання',
    legendNow: 'Зараз',
    legendPrev: 'Попередній період',
    heatmapHalf: 'Активність за півроку',
    heatmapYear: 'Активність за рік',
    heatTasks: 'Завдання',
    heatXp: 'XP',
    heatLess: 'менше',
    heatMore: 'більше',
    heatHalf: 'Півроку',
    heatYear: 'Рік',
    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}»',
    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: 'Оцінка витрат (у валюті налаштувань)',
      estimateLegend: 'Оцінка',
      extra: 'Додатково',
    },
    deadline: {
      legend: 'Дедлайн',
      date: 'Строгий — дата',
      period: 'Нестрогий — період',
    },
    recur: {
      legend: 'Тип задачі',
      oneTime: 'Одноразова',
      recurring: 'Регулярна (повторюється)',
      kind: 'Правило повторення',
      interval: 'Інтервал, днів',
      weekdays: 'Дні тижня',
      monthlyDay: 'День місяця (1–31, без дня — останній)',
    },
  },
  tree: {
    addSubtask: 'Додати підзадачу',
    promptSubtask: 'Підзадача:',
  },
  task: {
    notFoundTitle: 'Задачу не знайдено',
    notFoundText: 'Можливо, задачу видалено або посилання застаріло.',
    proposalNewTitle: 'Новий заголовок',
    proposalNewDescription: 'Опис із кроками',
    proposalTitle: 'Пропозиція ШІ',
    proposalHint: 'Перевірте деталі та затвердіть — задача потрапить до списку.',
    proposalMyself: 'Я сам',
    description: 'Опис',
    editTitle: 'Змінити назву',
    editDescription: 'Редагувати опис',
    deadlineConflict: 'Дедлайн: або дата, або період — не обидва',
    descriptionEmpty: 'Опис порожній — деталізуйте задачу.',
    attachments: 'Вкладення',
    fields: 'Параметри',
    dates: 'Дати',
    field: {
      project: 'Проєкт',
      taskType: 'Тип задачі',
      priority: 'Пріоритет',
      estimate: 'Оцінка часу',
      actual: 'Фактично',
      money: 'Гроші',
      deadline: 'Дедлайн',
      recurrence: 'Повторення',
      created: 'Створено',
      approved: 'Затверджено',
      done: 'Завершено',
    },
    subtasks: 'Підзадачі',
    noSubtasks: 'Підзадач немає',
    statusTitle: 'Статус',
    changeStatus: 'Змінити статус',
    takeWork: 'Взяти в роботу',
    mentallyHard: {
      set: 'Не хочеться робити',
      unset: 'Зняти «ментально складне»',
      badge: 'ментально складне',
    },
    subtaskCreated: 'Підзадачу створено — потрапила у стек на деталізацію',
    createdRaw: 'Завдання потрапило у стек — деталізуйте його там',
    actions: 'Дії',
    addTag: 'Додати теґ…',
  },
  projectPage: {
    notFoundTitle: 'Проєкт не знайдено',
    notFoundText: 'Можливо, проєкт видалено або посилання застаріло.',
    note: 'Нотатка',
    editNote: 'Редагувати нотатку',
    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: 'Теґ',
    filterPriority: 'Пріоритет',
  },
  options: {
    title: 'Видача завдання',
    done: 'Готово',
    notNow: 'Не зараз — інші варіанти',
    availableHours: 'Доступний час, годин',
    suggest: 'Запропонувати',
    choose: 'Робимо зараз',
    emptyTitle: 'Варіантів немає',
    emptyText: 'Вільних задач під цей час не знайшлося — киньте щось у стек або зменште час.',
  },
  projects: {
    title: 'Проєкти',
    count: 'Проєктів: {n}',
    new: 'Новий проєкт',
    emptyTitle: 'Проєктів немає',
    emptyText:
      'Створіть проєкт — задачі можна буде групувати й додавати нотатки з ресурсами.',
    prompt: 'Назва нового проєкту:',
    promptLabel: 'Назва проєкту',
    taskCounts: 'Задач закрито {done}/{total}',
    archived: 'Проєкт надіслано до архіву',
    archiveConfirm:
      'Надіслати проєкт «{name}» і його задачі ({n}) до архіву? Все можна буде відновити.',
    edit: 'Редагувати',
    delete: 'Видалити проєкт',
    form: {
      name: 'Назва',
      relevance: 'Актуальність',
      priority: 'Пріоритет',
      note: 'Нотатка (Markdown: посилання, контекст)',
      preview: 'Попередній перегляд',
    },
  },
  pagination: {
    prev: 'Назад',
    next: 'Вперед',
    pageOf: 'Сторінка {n} з {m}',
    aria: 'Посторінкова навігація',
  },
  archive: {
    title: 'Архів',
    count: 'Проєктів: {n}',
    emptyTitle: 'Архів порожній',
    emptyText: 'Сюди потрапляють проєкти, надіслані до архіву, — разом із усіма задачами та історією.',
    restore: 'Відновити',
    restored: '«{name}» відновлено з архіву',
    deleteForever: 'Видалити назавжди',
    deleteConfirm:
      'Видалити «{name}» назавжди? Проєкт і всі його задачі буде втрачено безповоротно.',
    banner: 'Проєкт в архіві — історія доступна лише для перегляду. Відновіть його, щоб продовжити роботу.',
  },
  settings: {
    title: 'Налаштування',
    currencyTitle: 'Валюта бюджетів',
    currencyHint:
      'Одиниця обирається один раз і застосовується в усіх сумах: бюджет задачі, оцінка витрат.',
    currencyUnit: 'Одиниця вимірювання',
    saved: 'Збережено — застосовується в усіх видах.',
    languageTitle: 'Мова інтерфейсу',
    languageHint:
      'Обрана мова застосовується одразу. «Як в акаунті» — мова береться з gnexus auth.',
    languageUnit: 'Мова',
    languageAuto: 'Як в акаунті (SSO)',
    langRu: 'Русский',
    langEn: 'English',
    langUk: 'Українська',
    mcpHint: "ІІ-агенти (наприклад, Claude) можуть працювати з вашими задачами через MCP.",
    mcpOpen: 'Як підключити',
  },
  mcp: {
    title: 'MCP для ІІ-агентів',
    whatTitle: 'Що це таке',
    whatText:
      'У застосунок вбудовано MCP-сервер (Model Context Protocol): ІІ-агенти підключаються до нього й працюють з вашими задачами від вашого імені — створюють, шукають, оновлюють і закривають їх. Закриття задачі агентом дає ті самі нагороди, що й у застосунку: XP, монети, рослину в саду; у регулярної задачі наступний екземпляр створюється автоматично.',
    toolsTitle: 'Інструменти',
    toolsHint:
      'Сервер сам пояснює агенту порядок роботи: починати з проєктів, привʼязувати задачі до проєкту, не вигадувати ідентифікатори та слідувати підказкам у помилках.',
    toolListProjects: 'список проєктів: нотатки, статус, кількість відкритих задач',
    toolGetProject: 'контекст проєкту: нотатка і відкриті задачі',
    toolCreateTask: 'створити задачу (досить заголовка, бажано з проєктом)',
    toolUpdateTask: 'оновити поля задачі; закриття — status="done"',
    toolCompleteTask: 'завершити задачу (можна вказати фактичний час)',
    toolListTasks: 'пошук і фільтри: проєкт, тег, статус, підрядок',
    toolGetTask: 'повні дані задачі, включно з вкладеннями',
    toolListTags: 'довідник тегів',
    connectTitle: 'Як підключити агента',
    connectText:
      'Транспорт — Streamable HTTP. Адреса збігається з адресою цього застосунку. Для підключення потрібен токен доступу.',
    connectUrlLabel: 'Адреса сервера',
    connectTokenLabel: 'Токен доступу',
    connectTokenText:
      'Авторизація — bearer-токен: значення налаштування MCP_TOKEN у конфізі backend (змінна середовища, у .env; до репозиторію не потрапляє). Один токен для всіх агентів — зберігайте його як пароль: будь-хто, хто ним володіє, може керувати задачами.',
    connectClaudeLabel: 'Claude Code — одна команда',
    connectJsonLabel: 'Універсальний JSON (Claude Desktop та інші клієнти)',
    copy: 'Копіювати',
    copied: 'Адресу скопійовано',
    copyFailed: 'Не вдалося скопіювати',
    projectTitle: 'Контекст проєкту',
    projectText:
      'Агент бачить ваші проєкти з нотатками та їхні відкриті задачі. Сервер інструктує агента починати роботу з проєктів (list_projects → get_project), привʼязувати створювані задачі до проєкту й перечитувати get_project, повертаючись до розмови після перерви, — так задачі не губляться поза контекстом свого проєкту.',
  },
  md: {
    bold: 'Жирний',
    boldText: 'жирний текст',
    italic: 'Курсив',
    italicText: 'курсивний текст',
    heading: 'Заголовок',
    list: 'Список',
    checklist: 'Чек-ліст',
    link: 'Посилання',
    linkText: 'текст посилання',
    code: 'Код',
  },
  duration: {
    hours: 'Години',
    minutes: 'Хвилини',
    h: 'год',
    min: 'хв',
  },
  taskui: {
    priority: {
      very_low: 'Дуже низький',
      low: 'Низький',
      medium: 'Середній',
      high: 'Високий',
      urgent: 'Терміново',
    },
    status: {
      to_do: 'До виконання',
      in_progress: 'У роботі',
      done: 'Завершено',
      cancelled: 'Скасовано',
      deferred: 'Відкладено',
    },
    relevance: {
      active: 'Активний',
      paused: 'Призупинено',
    },
    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: 'регулярна',
    },
  },
} satisfies typeof ru