// Українська локаль — типізована як typeof ru, щоб пропущені ключі ловив vue-tsc.
import type ru from './ru'
export default {
common: {
all: 'Усі',
noProject: '— без проєкту —',
none: '— немає —',
choose: '— оберіть —',
notSet: '— не вказано —',
error: 'Помилка запиту',
save: 'Зберегти',
cancel: 'Скасувати',
edit: 'Редагувати',
preview: 'Попередній перегляд',
confirmTitle: 'Підтвердження',
delete: 'Видалити',
open: 'Відкрити',
move: 'Перемістити',
actions: 'Дії',
expand: 'Розгорнути',
collapse: 'Згорнути',
deleteConfirmTask: 'Видалити задачу «{title}»? Дію не можна скасувати.',
deleteConfirmProject: 'Видалити проєкт «{name}»? Задачі залишаться, але без проєкту.',
archive: 'До архіву',
archiveTitle: 'Надіслати до архіву',
saved: 'Збережено',
created: 'Створено',
create: 'Створити',
taskDeleted: 'Задачу видалено',
loading: 'Завантаження…',
projectDeleted: 'Проєкт видалено',
taskApproved: 'Задачу затверджено',
taskTaken: 'Задачу взято в роботу',
taskFinished: 'Задачу завершено',
yes: 'Так',
no: 'Ні',
back: 'Назад',
},
nav: {
sections: 'Розділи',
subtitle: 'GNexus Tasks — особисті задачі',
signIn: 'Увійти',
account: 'Акаунт',
signOut: 'Вийти',
task: 'Завдання',
home: 'Головна',
stack: 'Вхідний стек',
list: 'Список задач',
achievements: 'Досягнення',
stats: 'Статистика',
projects: 'Проєкти',
archive: 'Архів',
journal: 'Журнал',
options: 'Видача завдання',
settings: 'Налаштування',
extension: 'Розширення',
},
// Прогрес: спільний для сторінки «Досягнення» та саду (сад вимкнено в 0.58,
// повернеться пізніше — тексти нейтральні, без рослин і «садівника»)
progress: {
title: 'Досягнення',
level: 'Рівень {n}',
xpTotal: '{n} XP',
levelProgress: 'До наступного рівня: {xp} / {span} XP',
aboutOpen: 'Як це працює',
aboutTitle: 'Як це працює',
levelsTitle: 'Дерево звань',
levelsHint:
'Пороги XP та звання кожного рівня. Рівень росте з досвіду за завдання — нічого не згорає й не віднімається.',
levelCurrent: 'поточний',
achievements: 'Досягнення',
coins: 'монет: {n}',
coinsHint: 'Монети за виконані завдання, створення завдань і проєктів, нові рівні — накопичуються',
achDone: 'Усі щаблі пройдено (вищий — {r})',
achStep: 'Щабель: римська — номер, дріб — прогрес до наступного',
about: [
'Кожне виконане завдання приносить досвід і монети — прогрес лише зростає і ніколи не зменшується.',
'За виконання нараховується XP: база 10 + бонус за пріоритет (до 15) + бонус за обсяг за оцінкою часу (до 15) + 10 за «ментально складне» — чесна нагорода за силу волі. Великі й термінові справи цінніші.',
'Накопичений XP підвищує рівень — від «Паростка» до «Легенди саду». Рівень не падає: XP не згорає і не віднімається, навіть якщо завдання видалити.',
'Монети надходять за виконані завдання (стільки ж, скільки XP), за створення завдань і проєктів та за нові рівні. Поки що вони накопичуються — стануть у пригоді, коли сад повернеться.',
'Досягнення відзначають віхи: виконані завдання, рівні, різні проєкти, години роботи, строгі дедлайни, «ментально складні» завдання. У кожного ступені I, II, III — прогрес видно завжди.',
'Завдання, виконане з режиму «3 варіанти», відзначається меткою «обрав і зробив». Закриття «не хочеться робити» завжди святкується золотом — сила волі того варта. Нічого не згорає, серій і покарань немає — лише приємні нагороди.',
],
levels: [
'Паросток',
'Сіянець',
'Садівник',
'Городник',
'Дендролог',
'Лісничий',
'Садовий майстер',
'Хранитель саду',
'Королівський садівник',
'Магістр садівництва',
'Ландшафтний архітектор',
'Хранитель легенд',
'Легенда саду',
],
ach: {
firstDone: 'Перший паросток',
done10: 'Десятка',
level5: 'Висоти',
sprinter: 'Спринтер',
explorer: 'Різнобічний',
marathon: 'Марафонець',
deadlineBoss: 'Дедлайн-бос',
chooser: 'Обрав і зробив',
willpower: 'Подолання',
recurring: 'Ритм життя',
projectDone: 'Проєкт під ключ',
},
achHint: {
firstDone: 'Закрийте перше завдання — віху відкрито.',
done10: 'Закрийте 10, 50 і 100 завдань — по ступені за кожну віху.',
level5: 'Досягніть 5, 10 і 15 рівня.',
sprinter: 'Закрийте 3, 10 і 25 завдань за один день.',
explorer: 'Майте закриті завдання в 3, 5 і 8 різних проєктах.',
marathon: 'Накопичите 10, 50 і 100 годин роботи над завданнями — за фактом або оцінкою.',
deadlineBoss: 'Закрийте 5, 15 і 30 завдань із суворим дедлайном-датою.',
chooser: 'Закрийте 5, 25 і 50 завдань, узятих із режиму «3 варіанти».',
willpower: 'Закрийте 5, 25 і 50 завдань із міткою «не хочеться робити».',
recurring: 'Закрийте регулярне завдання.',
projectDone: 'Завершіть проєкт повністю: усі його завдання (від трьох) закриті.',
},
},
garden: {
title: 'Сад',
plants: 'рослин: {n}',
levelsHint:
'Пороги XP та нагороди кожного рівня: нові види рослин (ціна насіння) й розширення мапи. Рівень росте з досвіду за завдання — нічого не згорає.',
rewardCreateTask: 'створення завдання',
rewardCreateProject: 'створення проєкту',
lastReward: 'Остання нагорода за: {title} — {date}',
emptyTitle: 'Сад поки порожній',
emptyText: 'Закрийте перше завдання — на грядці зросте рослина.',
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: 'Альтанка',
},
},
gamify: {
praise: [
'Чудово зроблено!',
'Готово — півсправи!',
'Ще один крок уперед.',
'Красота!',
'Так тримати!',
'Мінус одне завдання, плюс настрій.',
],
chosen: 'обрав і зробив',
willpower: 'сила волі',
willpowerText: 'Сила волі! Того варто було.',
coins: 'монет',
createdReward: 'Створено — краплина досвіду вже ваша',
daily: 'Щоденна нагорода за візит',
// Мандат ШІ-агента (ТЗ 3.20): події приходять по SSE з іншої сесії —
// агент взяв завдання або закрив його й чекає на приймання
claimed: 'Агент узяв завдання в роботу',
claimedText: '{name} взялася до справи — не чіпайте завдання, поки вона працює',
review: 'Робота чекає на приймання',
reviewText: '«{title}» — подивіться, що зроблено, і прийміть або поверніть',
},
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: 'Перевірте деталі та затвердіть — задача потрапить до списку.',
proposalNotRight: 'Не те',
description: 'Опис',
editTitle: 'Змінити назву',
editDescription: 'Редагувати опис',
deadlineConflict: 'Дедлайн: або дата, або період — не обидва',
descriptionEmpty: 'Опис порожній — деталізуйте задачу.',
readmeFrom: 'README.md з репозиторію',
attachments: 'Вкладення',
fields: 'Параметри',
dates: 'Дати',
field: {
project: 'Проєкт',
taskType: 'Тип задачі',
priority: 'Пріоритет',
estimate: 'Оцінка часу',
actual: 'Фактично',
money: 'Гроші',
deadline: 'Дедлайн',
recurrence: 'Повторення',
created: 'Створено',
approved: 'Затверджено',
done: 'Завершено',
},
subtasks: 'Підзадачі',
noSubtasks: 'Підзадач немає',
statusTitle: 'Статус',
changeStatus: 'Змінити статус',
takeWork: 'Взяти в роботу',
finishWork: 'Завершено',
finishTitle: 'Завершити завдання?',
finishComment: 'Коментар до закриття (необовʼязково)',
mentallyHard: {
set: 'Не хочеться робити',
unset: 'Зняти «ментально складне»',
badge: 'ментально складне',
},
// Мандат ШІ-агента (ТЗ 3.20): позначки завдання й плашка оренди
mandate: {
eligible: 'Доступне для ШІ-агента',
eligibleHint: 'Завдання зможе взяти Наві — ШІ-агент. Без позначки вона його не чіпає.',
shortBadge: 'ШІ',
createdBadge: 'створено агентом',
createdBy: 'Завдання створив агент «{name}»',
agent: 'агент',
claimedUntil: 'Взято {name} · до {time}',
},
// Приймання роботи агента (ТЗ 3.20): закрито, але ще не прийнято
accept: {
title: 'Приймання роботи',
pendingBadge: 'чекає приймання',
pendingHint: 'Завдання закрив агент — роботу треба прийняти або повернути',
hint: 'Завдання закрив {name}. Подивіться, що зроблено, і прийміть роботу або поверніть її.',
report: 'Звіт агента',
accept: 'Прийняти',
reject: 'Повернути в роботу',
accepted: 'Роботу прийнято',
rejected: 'Завдання повернулося в роботу',
rejectTitle: 'Повернути завдання в роботу?',
rejectComment: 'Що не так (необовʼязково)',
},
subtaskCreated: 'Підзадачу створено — потрапила у стек на деталізацію',
createdRaw: 'Завдання потрапило у стек — деталізуйте його там',
// Промпт для ШІ-агента (0.87): текст завдання, який власник копіює та передає
// своєму агенту. Лише факти про завдання — що з ним робити, вирішує власник
ai: {
menu: 'Промпт для ШІ',
title: 'Промпт для ШІ-агента',
hint: 'Текст завдання для передачі ШІ-агенту. За потреби відредагуйте та скопіюйте.',
copy: 'Копіювати промпт',
close: 'Закрити',
intro: 'Завдання з GNexus Tasks.',
taskSection: 'Завдання',
descriptionSection: 'Опис',
proposalSection: 'Деталізація (пропозиція ШІ, не затверджено)',
subtasksSection: 'Підзадачі',
linkSection: 'Посилання',
id: 'ID',
titleField: 'Заголовок',
status: 'Статус',
tags: 'Теги',
parentTask: 'Батьківське завдання',
eligible: 'Доступне для ШІ-агента',
eligibleYes: 'так',
eligibleNo: 'ні',
claimed: 'Взято в роботу',
descriptionEmpty: 'Опис порожній.',
},
actions: 'Дії',
addTag: 'Додати теґ…',
// Проєкт задачі в меню картки (0.82): перейти до проєкту й перенести
// в інший — сусідні пункти, це одне питання «у якому проєкті задача»
goToProject: 'Перейти до проєкту',
moveToProject: 'Перемістити до проєкту',
// Пункт меню картки (0.83): «Перемістити до проєкту» в китовому меню (220px)
// рвалося на два рядки, а в меню питання звучить як «до якого проєкту»
moveToOther: 'До іншого проєкту',
moveHint: 'Завдання «{title}» переїде до вибраного проєкту',
moved: 'Завдання перенесено до «{project}»',
movedOut: 'Завдання вилучено з проєкту',
},
projectPage: {
notFoundTitle: 'Проєкт не знайдено',
notFoundText: 'Можливо, проєкт видалено або посилання застаріло.',
note: 'Нотатка',
editNote: 'Редагувати нотатку',
noteEmpty: 'Нотатки ще немає — додайте її через «Редагувати».',
readmeTitle: 'README з репозиторію',
readmeMissing: 'README у репозиторії не знайдено — перевірте посилання в параметрах проєкту.',
readmeError: 'Не вдалося прочитати README — репозиторій не відповів.',
noteCollapsedHint: 'Нотатка велика — показано початок',
noteExpand: 'Розгорнути',
noteCollapse: 'Згорнути',
progress: 'Задачі проєкту: {done}/{total}',
newTask: 'Нова задача',
taskCreated: 'Задачу створено — потрапила у стек на деталізацію',
promptTask: 'Нова задача проєкту:',
emptyTitle: 'Задач немає',
emptyText: 'Створіть першу задачу проєкту або послабте фільтри.',
tree: 'Дерево проєкту',
stats: 'Статистика',
total: 'Всього задач',
doneN: 'Завершено',
inProgress: 'У роботі',
toDo: 'До виконання',
overdue: 'Прострочено',
taskCount: '{n} задач',
openSite: 'Відкрити сайт',
// Активність проєкту (0.83): та сама сітка «як у GitHub», що в статистиці,
// але за завданнями одного проєкту; півроку, картка в сайдбарі сторінки проєкту
activity: 'Активність',
heatCell: '{date} — закрито {done}, створено {created}',
// Хмара теґів (0.83): клік по теґу ставить підрядковий фільтр за його іменем
tagShow: 'Показати завдання з теґом «{name}»',
tagHide: 'Зняти фільтр за теґом «{name}»',
tagCount: 'Завдань із цим теґом: {n}',
},
list: {
title: 'Список задач',
count: 'Знайдено: {n}',
emptyTitle: 'Нічого не знайдено',
emptyText: 'Спробуйте послабити фільтри або киньте нову задачу у стек.',
filterStatus: 'Статус',
filterTag: 'Теґ',
filterTagSearch: 'Пошук за теґом',
filterTagHint: 'Почніть вводити назву теґу',
filterTagClear: 'Скинути фільтр за теґом',
filterPrioritized: 'Пріоритетні',
// Другий перемикач (0.91, ТЗ 3.5): лишити в списку тільки регулярні
filterRecurring: 'Регулярні',
noTagsFound: 'Теґів не знайдено',
// Приймання (0.85, ТЗ 3.20): не статус, а окрема вкладка-площина
tabReview: 'Чекає на приймання',
filterCreated: 'Хто створив',
createdAll: 'Усі завдання',
createdMe: 'Створені мною',
createdAgent: 'Створені агентом',
},
// Журнал дій (ТЗ 3.20): хто, що і коли робив із завданнями
journal: {
title: 'Журнал',
count: 'Записів: {n}',
empty: 'Записів немає — тут зʼявляться дії із завданнями',
filterKind: 'Тип події',
filterKindAll: 'Усі події',
filterActor: 'Актор',
filterActorAll: 'Усі актори',
filterProject: 'Проєкт',
filterProjectAll: 'Усі проєкти',
actorUser: 'Я',
actorAgent: 'Агент',
col: {
when: 'Коли',
event: 'Подія',
task: 'Завдання',
project: 'Проєкт',
actor: 'Актор',
comment: 'Коментар',
},
// Види записів — значення з tasklog.py, читаються людськими словами
kind: {
created: 'Завдання створено',
eligible_changed: 'Доступність агенту',
claimed: 'Взяте агентом',
released: 'Повернуте агентом',
status_changed: 'Зміна статусу',
completed: 'Завдання закрито',
accepted: 'Роботу прийнято',
rejected: 'Роботу повернуто',
deleted: 'Завдання видалено',
},
// Машинні коди коментаря для зміни прапорця (on/off) і видалений проєкт
eligibleOn: 'Відкрите для агента',
eligibleOff: 'Закрите для агента',
projectGone: 'Проєкт видалено',
taskDeleted: 'Завдання видалено — заголовок збережено в записі',
via: {
ui: 'з інтерфейсу',
api: 'через API',
mcp: 'через MCP',
},
},
options: {
title: 'Видача завдання',
done: 'Готово',
notNow: 'Не зараз — інші варіанти',
availableHours: 'Доступний час, годин',
suggest: 'Запропонувати',
choose: 'Робимо зараз',
emptyTitle: 'Варіантів немає',
emptyText: 'Вільних задач під цей час не знайшлося — киньте щось у стек або зменште час.',
},
projects: {
title: 'Проєкти',
count: 'Проєктів: {n}',
new: 'Новий проєкт',
emptyTitle: 'Проєктів немає',
emptyText:
'Створіть проєкт — задачі можна буде групувати й додавати нотатки з ресурсами.',
prompt: 'Назва нового проєкту:',
promptLabel: 'Назва проєкту',
taskCounts: 'Задач закрито {done}/{total}',
noTasksYet: 'Завдань у проєкті поки немає',
progressLabel: 'Закрито {done} з {total}',
inProgress: '{n} у роботі',
overdue: 'прострочено {n}',
nextDeadline: 'Найближчий дедлайн: {date}',
lastActivity: 'Остання активність за задачами: {date}',
noActivity: 'без активності',
colorNone: 'Без кольору',
sitePlaceholder: 'https://example.com',
repositoryPlaceholder: 'https://git.example.com/owner/repo',
withTasks: 'Із завданнями',
withoutTasks: 'Без завдань',
pinned: 'Закріплені',
pinnedLabel: 'Закріплено',
pin: 'Закріпити проєкт',
unpin: 'Відкріпити проєкт',
archived: 'Проєкт надіслано до архіву',
archiveConfirm:
'Надіслати проєкт «{name}» і його задачі ({n}) до архіву? Все можна буде відновити.',
edit: 'Редагувати',
delete: 'Видалити проєкт',
form: {
name: 'Назва',
relevance: 'Актуальність',
priority: 'Пріоритет',
note: 'Нотатка (Markdown: посилання, контекст)',
preview: 'Попередній перегляд',
color: 'Колір',
siteUrl: 'Сайт',
repositoryUrl: 'Репозиторій',
},
},
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: 'Українська',
mcpTokenTitle: 'Токени MCP',
mcpTokenHint:
'Токен для ІІ-агента (наприклад, Claude): агент діє від вашого імені та бачить лише ваші дані. Значення показується один раз під час створення — одразу скопіюйте його в конфіг агента.',
mcpTokenCreated: 'Токен створено. Він більше не буде показаний — скопіюйте зараз.',
mcpTokenShown: 'Я зберіг токен',
mcpTokenCopyFailed: 'Не вдалося скопіювати — виділіть і скопіюйте вручну',
mcpTokenUnnamed: 'Без назви',
mcpTokenDelete: 'Відкликати',
mcpTokenNone: 'Токенів поки немає — створіть перший, щоб підключити агента.',
mcpTokenLabel: 'Назва (наприклад, «ноутбук»)',
mcpTokenLabelPlaceholder: 'для чого цей агент',
mcpTokenCreate: 'Згенерувати',
mcpOpen: 'Як підключити',
// Системні сповіщення (ТЗ 3.21)
pushTitle: 'Сповіщення',
pushHint:
'Системні сповіщення на пристрій — вони надходять, навіть коли застосунок закрито: агент узяв завдання, робота чекає на приймання, настав строк або час за ритмом.',
pushSwitch: 'Надсилати сповіщення на цей пристрій',
pushDevices: 'Підключених пристроїв: {n}',
pushOn: 'Сповіщення увімкнено на цьому пристрої.',
pushOff: 'Сповіщення вимкнено на цьому пристрої.',
pushDenied:
'Браузер заборонив сповіщення для цього сайту. Дозвіл повертають у налаштуваннях браузера — тут його не запитують.',
pushUnsupported:
'Цей браузер не вміє системних сповіщень або сторінка відкрита без HTTPS. Встановлений на телефон застосунок підходить: на iPhone — з iOS 16.4.',
pushUnconfigured:
'Сервер не налаштований на надсилання сповіщень — потрібні ключі VAPID у його середовищі.',
pushRequestDenied:
'Браузер не показав запит. Увімкніть сповіщення для сайту в налаштуваннях браузера і спробуйте ще раз.',
pushFailed: 'Не вдалося увімкнути сповіщення',
quietSwitch: 'Не турбувати з 22:00 до 09:00',
quietHint:
'У цьому вікні нагадування мовчать і в чергу не стають: щойно вікно скінчиться, прийде нагадування за станом справ на той день. Про роботу агента повідомляємо і в тихі години — вона чекає на ваше рішення.',
},
ext: {
title: 'Розширення швидкого захоплення',
whatTitle: 'Що це таке',
whatText:
'Клік по іконці розширення в треї браузера — і задача в стеку, не відкриваючи сервіс. У попапі дві вкладки: «Додати» (перший рядок — назва, решта — опис; можна вибрати проєкт) і «Активні» — лише перегляд, клік по задачі відкриває її в сервісі.',
tokenTitle: 'Крок 1. Токен доступу',
tokenText:
'Розширення підключається персональним MCP-токеном (як ІІІ-агенти): створіть його в «Налаштуваннях → Токени MCP» — значення показується один раз.',
tokenButton: 'Відкрити Налаштування',
downloadTitle: 'Крок 2. Завантажити та розпакувати',
downloadButton: 'Завантажити ZIP',
downloadHint: 'Розпакуйте архів у будь-яку папку.',
installTitle: 'Крок 3. Завантажити розширення в браузер',
chromeText:
'Chrome/Chromium: відкрийте chrome://extensions, увімкніть «Developer mode» → «Load unpacked» → виберіть розпаковану папку.',
firefoxText:
'Firefox: відкрийте about:debugging#/runtime/this-firefox → «Load Temporary Add-on…» → файл manifest.json з архіву.',
connectTitle: 'Крок 4. Підключити',
connectText:
'Клікніть по іконці розширення, вставте токен із кроку 1 і натисніть «Підключити». Відкликання токена в «Налаштуваннях» вимикає розширення.',
pwaTitle: 'Доступно з веб-версії',
pwaNote:
'Сторінка прихована у встановленому застосунку (PWA) — відкрийте сервіс у звичайній вкладці браузера.',
},
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:
'Агент діє від вашого імені. Створіть персональний токен у Налаштуваннях — розділ «Токени MCP» — і вставте його сюди.',
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: 'Код',
},
login: {
signIn: 'Увійти через GNEXUS',
subtitle: 'Ваші завдання, проєкти та сад — в одному місці',
},
duration: {
hours: 'Години',
minutes: 'Хвилини',
h: 'год',
min: 'хв',
},
taskui: {
openProject: 'Відкрити проєкт',
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}',
},
countdown: {
today: 'Сьогодні',
tomorrow: 'Завтра',
inDays: 'Через {n} день | Через {n} дні | Через {n} днів',
overdueDays: 'Прострочено на {n} день | Прострочено на {n} дні | Прострочено на {n} днів',
},
ago: {
today: 'Сьогодні',
yesterday: 'Вчора',
days: '{n} день тому | {n} дні тому | {n} днів тому',
weeks: '{n} тиждень тому | {n} тижні тому | {n} тижнів тому',
weeksOne: 'тиждень тому',
months: '{n} місяць тому | {n} місяці тому | {n} місяців тому',
monthsOne: 'місяць тому',
years: '{n} рік тому | {n} роки тому | {n} років тому',
yearsOne: 'рік тому',
},
recur: {
kind: {
interval: 'Кожні N днів',
weekdays: 'Дні тижня',
monthly: 'День місяця',
},
daily: 'щодня',
weekly: 'щотижня',
everyN: 'кожні {n} дн.',
byWeekdays: 'за днями тижня',
monthlyDay: 'щомісяця {day}-го',
recurring: 'регулярна',
// Дата регулярної читається як «коли пора» (0.91)
next: 'наст. {date}',
// Підказка до мітки в списку (0.91, ТЗ 3.5)
hintNext: 'Регулярна: {rule}. Наступний екземпляр — {date}',
hint: 'Регулярна: {rule}. Після закриття з’явиться наступний екземпляр',
},
},
} satisfies typeof ru