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: 'gntodo — personal tasks',
    signIn: 'Sign in',
    account: 'Account',
    signOut: 'Sign out',
    task: 'Task',
    home: 'Home',
    stack: 'Inbox stack',
    list: 'Task list',
    projects: 'Projects',
    options: '3 options',
    settings: 'Settings',
  },
  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',
    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