Newer
Older
gnexus-tasks / frontend / src / locales / en.ts
// English locale — typed as typeof ru so missing/extra keys fail vue-tsc.
import type ru from './ru'

export default {
  common: {
    any: '— any —',
    anyStatus: '— any status —',
    noProject: '— no project —',
    none: '— none —',
    choose: '— choose —',
    error: 'Request failed',
    save: 'Save',
    cancel: 'Cancel',
    edit: 'Edit',
    preview: 'Preview',
    confirmTitle: 'Confirmation',
    delete: 'Delete',
    open: 'Open',
    deleteConfirmTask: 'Delete task "{title}"? This cannot be undone.',
    deleteConfirmProject: 'Delete project "{name}"? Tasks will remain, but without a project.',
    saved: 'Saved',
    created: 'Created',
    create: 'Create',
    taskDeleted: 'Task deleted',
    projectDeleted: 'Project deleted',
    taskApproved: 'Task approved',
    taskTaken: 'Task started',
    taskFinished: 'Task finished',
  },
  nav: {
    sections: 'Sections',
    subtitle: 'GNexus Tasks — personal tasks',
    signIn: 'Sign in',
    account: 'Account',
    signOut: 'Sign out',
    task: 'Task',
    home: 'Home',
    stack: 'Inbox stack',
    list: 'Task list',
    garden: 'Garden',
    stats: 'Statistics',
    projects: 'Projects',
    options: '3 options',
    settings: 'Settings',
  },
  garden: {
    title: 'Garden',
    level: 'Level {n}',
    xpTotal: '{n} XP',
    plants: 'plants: {n}',
    levelProgress: 'To next level: {xp} / {span} XP',
    aboutOpen: 'How it works',
    aboutTitle: 'How the garden works',
    about: [
      'Every completed task leaves a plant on the bed — the garden only grows and never shrinks.',
      'Completing a task earns XP: base 10 + a priority bonus (up to 15) + a size bonus from the time estimate (up to 15). Bigger and more urgent work is worth more.',
      'Earned XP raises your level — from Sprout to Garden Legend. Levels never drop: XP does not expire and is not taken away, even if a task is deleted.',
      'Sometimes a task yields a rare plant — the chance grows with the task weight. Epic plants only come from the biggest completions.',
      'Achievements mark milestones: tasks completed, levels, different projects, hours of work, strict deadlines. Each has steps I, II, III with always-visible progress.',
      'A task completed from the “3 options” mode earns the “chose and did” mark. Nothing expires, no streaks or penalties — only pleasant rewards.',
    ],
    lastPlant: 'Latest sprout: {title} — {date}',
    history: 'History: tasks completed by month',
    emptyTitle: 'The garden is empty',
    emptyText: 'Complete your first task — a plant will grow on the bed.',
    levels: [
      'Sprout',
      'Seedling',
      'Gardener',
      'Grower',
      'Arborist',
      'Forester',
      'Garden master',
      'Garden keeper',
      'Royal gardener',
      'Garden legend',
    ],
    achievements: 'Achievements',
    ach: {
      firstDone: 'First sprout',
      done10: 'Dozen',
      level5: 'Heights',
      sprinter: 'Sprinter',
      explorer: 'All-rounder',
      marathon: 'Marathoner',
      deadlineBoss: 'Deadline boss',
      chooser: 'Chose and did',
      recurring: 'Rhythm of life',
      projectDone: 'Project delivered',
    },
  },
  gamify: {
    praise: [
      'Well done!',
      'Done — halfway there!',
      'Another step forward.',
      'Beautiful!',
      'Keep it up!',
      'One task down, mood up.',
    ],
    rarePlant: 'A rare plant has grown on your bed!',
    epicPlant: 'A legendary plant in your garden!',
    chosen: 'chose and did',
  },
  stats: {
    title: 'Statistics',
    modeDay: 'Day',
    modeWeek: 'Week',
    modeMonth: 'Month',
    today: 'Today, {date}',
    prevPeriod: 'Previous period',
    nextPeriod: 'Next period',
    ofDays: 'of {n} days',
    totalVs: 'Completed this period: {n} · previous period: {m}',
    chartTitle: 'Completed tasks',
    emptyTitle: 'No data yet',
    emptyText: 'Complete a couple of tasks — dynamics with comparisons will appear here.',
    metric: {
      closed: 'Tasks completed',
      xp: 'XP earned',
      created: 'Tasks created',
      hours: 'Hours worked',
      activeDays: 'Productive days',
    },
  },
  home: {
    title: 'Home',
    stackCount: 'in stack: {n}',
    activeCount: 'active: {n}',
    inProgress: 'In progress',
    overdue: 'Overdue',
    deadlines: 'Deadlines this week',
    next: 'Up next',
    overview: 'Overview',
    projects: 'Active projects',
    totalTasks: 'Total tasks',
    doneMonth: 'Done this month',
    doneAll: 'Done all time',
    clearTitle: 'All clear',
    clearText: 'No active tasks — a good moment to work through the stack.',
  },
  stack: {
    title: 'Inbox stack',
    count: 'Tasks in stack: {n}',
    quickPlaceholder: 'Throw in a task — just the text, details later…',
    quickAdd: 'Throw in',
    newTask: 'New task',
    added: 'Task added to the stack',
    detailTitle: 'Task details',
    emptyTitle: 'Stack is empty',
    emptyText: 'Throw in your first task — detailing is picked automatically.',
    inStack: 'in stack',
    uploading: 'uploading…',
    proposal: 'AI proposal:',
    proposalPending: 'Detailing in progress…',
    proposalNewProject: '+ project "{name}"',
    proposalPriority: 'priority {n}',
    approveProposal: 'Yes, looks right',
    detail: 'Detail it',
    redetail: 'Ask AI again',
    deleteTask: 'Delete task',
    deleteAttachment: 'Delete attachment',
    promptProject: 'Name of the new project:',
    promptTag: 'Name of the new tag:',
    newProject: 'New project',
    newTag: 'New tag',
    approve: 'Approve',
    form: {
      title: 'Title',
      description: 'Description (Markdown, Ctrl+V for image)',
      preview: 'Markdown preview',
      project: 'Project',
      tagsPlaceholder: 'Add a tag…',
      tags: 'Tags',
      priority: 'Priority',
      estimate: 'Time estimate, minutes',
      budget: 'Budget (in settings currency)',
      cost: 'Cost estimate (in settings currency)',
    },
    deadline: {
      legend: 'Deadline',
      date: 'Strict — date',
      period: 'Soft — period',
    },
    recur: {
      legend: 'Task type',
      oneTime: 'One-time',
      recurring: 'Recurring (repeats)',
      kind: 'Repeat rule',
      interval: 'Interval, days',
      weekdays: 'Days of week',
      monthlyDay: 'Day of month (1–31, empty — last)',
    },
  },
  tree: {
    addSubtask: 'Add subtask',
    promptSubtask: 'Subtask:',
  },
  task: {
    notFoundTitle: 'Task not found',
    notFoundText: 'The task may have been deleted or the link is stale.',
    proposalTitle: 'AI proposal',
    proposalHint: 'Review the details and approve — the task joins the list.',
    description: 'Description',
    descriptionEmpty: 'No description yet — detail the task.',
    attachments: 'Attachments',
    fields: 'Details',
    dates: 'Dates',
    field: {
      project: 'Project',
      taskType: 'Task type',
      priority: 'Priority',
      estimate: 'Time estimate',
      actual: 'Actual',
      money: 'Money',
      deadline: 'Deadline',
      recurrence: 'Recurrence',
      created: 'Created',
      approved: 'Approved',
      done: 'Done',
    },
    subtasks: 'Subtasks',
    noSubtasks: 'No subtasks',
    statusTitle: 'Status',
    changeStatus: 'Change status',
    subtaskCreated: 'Subtask created — it went to the stack for detailing',
    createdRaw: 'Task went to the stack — detail it there',
    actions: 'Actions',
    addTag: 'Add a tag…',
  },
  projectPage: {
    notFoundTitle: 'Project not found',
    notFoundText: 'The project may have been deleted or the link is stale.',
    note: 'Note',
    noteEmpty: 'No note yet — add one via "Edit".',
    progress: 'Project tasks: {done}/{total}',
    newTask: 'New task',
    taskCreated: 'Task created — it went to the stack for detailing',
    promptTask: 'New project task:',
    emptyTitle: 'No tasks',
    emptyText: 'Create the first project task or relax the filters.',
    tree: 'Project tree',
    stats: 'Statistics',
    total: 'Total tasks',
    doneN: 'Done',
    inProgress: 'In progress',
    toDo: 'To do',
    overdue: 'Overdue',
    taskCount: '{n} tasks',
  },
  list: {
    title: 'Task list',
    count: 'Found: {n}',
    emptyTitle: 'Nothing found',
    emptyText: 'Try relaxing the filters or throw a new task into the stack.',
    filterStatus: 'Status',
    filterProject: 'Project',
    filterTag: 'Tag',
  },
  options: {
    title: '3 options',
    done: 'Done',
    notNow: 'Not now — other options',
    available: 'Available time, minutes',
    suggest: 'Suggest',
    choose: 'Do it now',
    emptyTitle: 'No options',
    emptyText: 'No free tasks fit this time — throw something into the stack or lower the time.',
  },
  projects: {
    title: 'Projects',
    count: 'Projects: {n}',
    new: 'New project',
    emptyTitle: 'No projects',
    emptyText:
      'Create a project — tasks can be grouped and get notes with resources.',
    prompt: 'Name of the new project:',
    edit: 'Edit',
    delete: 'Delete project',
    form: {
      name: 'Name',
      relevance: 'Relevance',
      priority: 'Priority',
      note: 'Note (Markdown: links, context)',
      preview: 'Preview',
    },
  },
  settings: {
    title: 'Settings',
    currencyTitle: 'Budget currency',
    currencyHint:
      'The unit is chosen once and applies to all amounts: task budget, cost estimate.',
    currencyUnit: 'Unit',
    saved: 'Saved — applied in all views.',
    languageTitle: 'Interface language',
    languageHint:
      'The chosen language applies immediately. "Same as account" takes it from gnexus auth.',
    languageUnit: 'Language',
    languageAuto: 'Same as account (SSO)',
    langRu: 'Русский',
    langEn: 'English',
    langUk: 'Українська',
  },
  md: {
    bold: 'Bold',
    boldText: 'bold text',
    italic: 'Italic',
    italicText: 'italic text',
    heading: 'Heading',
    list: 'List',
    checklist: 'Checklist',
    link: 'Link',
    linkText: 'link text',
    code: 'Code',
  },
  taskui: {
    priority: {
      very_low: 'Very low',
      low: 'Low',
      medium: 'Medium',
      high: 'High',
      urgent: 'Urgent',
    },
    status: {
      to_do: 'To do',
      in_progress: 'In progress',
      done: 'Done',
      cancelled: 'Cancelled',
      deferred: 'Deferred',
    },
    relevance: {
      active: 'Active',
      paused: 'Paused',
      archived: 'Archived',
    },
    time: {
      hm: '{h} h {m} m',
      h: '{h} h',
      m: '{m} m',
    },
    money: {
      budget: 'budget {amount}',
      estimate: 'estimate {amount}',
    },
    currency: {
      UAH: '₴ Hryvnia (UAH)',
      USD: '$ Dollar (USD)',
      EUR: '€ Euro (EUR)',
      GBP: '£ Pound (GBP)',
      PLN: 'zł Zloty (PLN)',
    },
    deadline: {
      day: 'within a day',
      week: 'within a week',
      month: 'within a month',
      year: 'within a year',
      until: 'by {date}',
    },
    recur: {
      kind: {
        interval: 'Every N days',
        weekdays: 'Days of week',
        monthly: 'Day of month',
      },
      daily: 'daily',
      weekly: 'weekly',
      everyN: 'every {n} d',
      byWeekdays: 'by days of week',
      monthlyDay: 'monthly on day {day}',
      recurring: 'recurring',
    },
  },
} satisfies typeof ru