export default {
  sessionInitialization: {
    OIDC_AUTH: 'Loading user data',
    STEERING_INITIALIZATION: 'Initializing content management session',
    TANK_INITIALIZATION: 'Initializing file storage session',
  },

  loginScreen: {
    intro:
      'AURA is radio automation software for the special needs of community radios. AURA has been developed in several Austrian community radios and it is open source.',
  },

  showManager: {
    title: 'Radio shows',
    generalSettings: 'General settings for show',
  },

  myShows: {
    title: 'My Shows',
    itemsPerPage: 'Shows per page',
    searchLabel: 'Search by name',
    searchPlaceholder: 'Name of the show...',
    showCount: 'Showing %{count} of %{total} shows.',
    showOrder: 'Order of Shows',
    sortShows: 'Order Shows',
  },

  showListGrid: {
    otherShows: 'Other Shows',
  },

  show: {
    singular: 'Show',
    plural: 'Shows',
    fields: {
      categoryIds: 'Categories',
      cbaSeriesId: 'CBA ID',
      description: 'Description',
      email: 'Email',
      fundingCategoryId: 'Funding category',
      hostIds: 'Editorial staff',
      id: 'ID',
      imageId: 'Image',
      internalNote: 'Internal note',
      isActive: 'Active',
      isOwner: 'Administrated by me',
      languageIds: 'Languages',
      links: 'Links',
      logoId: 'Logo',
      musicFocusIds: 'Music genres',
      name: 'Title',
      ownerIds: 'Administrators',
      predecessorId: 'Predecessor',
      shortDescription: 'Subtitle / short description',
      slug: 'Slug',
      topicIds: 'Topics',
      typeId: 'Type',
      updatedAt: 'Last modification',
      updatedBy: 'Modified by',
    },
    slugDetail: {
      title: 'Slug',
      editRemark:
        'The show slug can be modified in the <a href="#%{dangerZoneId}">%{dangerZone}</a>.',
    },
    housekeeping: {
      title: 'Danger Zone',
      flows: {
        archival: 'Archiving',
        deletion: 'Deletion',
        slugRenaming: 'Renaming the URL slug',
      },
    },
    section: {
      basic: { title: 'Basic information' },
      content: { title: 'Content information' },
      contact: { title: 'Editors & Contact' },
      administrative: { title: 'Administration' },
      media: { title: 'Default media sources' },
    },
    editor: {
      deactivation: {
        label: 'Deactivate show',
        description: 'Archives the show and removes all planned broadcasts.',
        confirm: {
          text:
            'All future <strong>timeslots</strong> and related information <strong>will be removed</strong>. ' +
            'Are you sure you want to deactivate <strong>%{show}</strong>?',
          prompt: 'Please enter <code>%{challenge}</code> in order to confirm.',
          confirmLabel: 'Deactivate <strong>%{show}</strong>',
        },
      },
      activation: {
        label: 'Activate show',
        description: 'Dearchives the show. New broadcast schedules must be created.',
      },
      deletion: {
        label: 'Delete show',
        description:
          'Removes the show and all related information including schedules and broadcasts.',
        confirm: {
          text: 'All information on this series will be <strong>irretrievably deleted</strong>. It is not possible to restore it later. Are you sure you want to delete <strong>%{show}</strong>?',
          prompt: 'Please enter <code>%{challenge}</code> in order to confirm.',
          confirmLabel: 'Delete <strong>%{show}</strong>',
        },
      },
      slugRenaming: {
        dialogTitle: 'Renaming the URL slug',
        label: 'Rename',
        description:
          'Renames the URL slug of the show. The slug is used in website links. A change will therefore destroy existing links to the show and should be carefully considered.',
        confirm: {
          text: 'The URL slug will be renamed. This will most likely destroy existing web links to this show. Are you sure you want to rename the slug for <strong>%{show}</strong>?',
          prompt: 'Please enter <code>%{challenge}</code> in order to confirm.',
          confirmLabel: 'Rename URL slug for <strong>%{show}</strong>',
        },
      },
    },
  },

  showFilter: {
    order: {
      choices: {
        id: { name: 'ID', directions: { asc: '0 - 9', desc: '9 - 0' } },
        slug: { name: 'Name', directions: { asc: 'A - Z', desc: 'Z - A' } },
        is_active: { name: 'Active', directions: { asc: 'No - Yes', desc: 'Yes - No' } },
        is_owner: {
          name: 'Administrated by me',
          directions: { asc: 'No - Yes', desc: 'Yes - No' },
        },
        updated_at: {
          name: 'Last modification',
          directions: { asc: 'Oldest first', desc: 'Newest first' },
        },
        updated_by: { name: 'Modified by', directions: { asc: 'A - Z', desc: 'Z - A' } },
      },
    },
  },

  showEpisode: {
    title: 'Episode from %{start}',
  },

  filePlaylistManager: {
    title: 'Media',
    files: 'Files',
    playlists: 'Playlists',
  },

  credits: {
    title: 'Credits',
    intro: 'AURA is developed under the GNU Affero General Public License v3.',
    contributors: 'Contributors',
    contributorLabel: 'Current and former developers are:',
    moreInfo:
      'For more infos visit the <a href="https://gitlab.servus.at/aura/dashboard">Dashboard repository</a>.<br>To get started with AURA, visit <a href="https://aura.radio">aura.radio</a>.<br>All AURA repositories can be found at <a href="https://code.aura.radio">https://code.aura.radio</a>.',
  },

  generalDocumentation: 'Help & Documentation',

  // Layout
  loadMoreItems: 'Load more %{items}',
  loadingData: 'Loading %{items}',
  loading: 'Loading..',
  cancel: 'Cancel',
  delete: 'Delete',
  new: 'New',
  add: 'Add',
  save: 'Save',
  goBack: 'Go back to previous page',
  ok: 'OK',
  browse: 'Browse',
  drop: 'Drop file here',
  edit: 'Edit',
  slug: 'Slug',
  unimplemented:
    'By the mighty witchcraftry of the mother of time!\n\nThis feature is not implemented yet.',
  noneSetMasculine: '(none set)',
  noneSetFeminine: '(none set)',
  noneSetNeuter: '(none set)',
  noAssignedShows:
    'You have not been assigned any shows yet.<br>They can be assigned in the <a href="%{adminUrl}">administration interface</a>.',
  by: 'by',

  auth: {
    signOut: 'Sign out',
    signIn: 'Sign in',
    permissionError: 'You are not permitted to view this page',
  },

  construction: {
    label: 'Construction Site',
  },

  navigation: {
    _title: 'Navigation',
    home: 'Home',
    shows: 'Shows',
    show: {
      episodes: 'Episodes & Schedules',
      basicData: 'Basic Settings',
    },
    episode: {
      _title: 'Episode from %{start}',
      details: 'Description',
    },
    filesPlaylists: 'Media',
    calendar: 'Calendar',
    settings: 'Settings',
    profile: 'Profile',
    help: 'Help',
  },

  footer: {
    tagline: 'All the UI you need to run a community radio',
  },

  // Specific components
  header: {
    showMoreDesktop: 'Hit menu button for more',
    showMoreMobile: 'For more options tap the menu button on the right',
  },

  emissionTable: {
    title: 'Title of emission',
    start: 'Broadcast date',
    duration: 'Duration',
    playlist: 'Media sources',
    actions: 'Actions',
    missingPlaylistData:
      'Information for this playlist is currently not available. Switch to the show of this emission.',
  },

  input: {
    unknown: 'Unknown Input',
  },

  file: {
    url: 'URL',
    unnamed: 'Unnamed file',
    duration: 'Duration',
    durationUnknown: 'Unknown duration',
    durationPlaceholder: 'e.g. 2m6s',
    uploadProgress: 'Progress of the file upload',
    uploadError: 'Error during upload',
    retryUpload: 'Retry upload',
    metadata: {
      _title: 'Metadata',
      album: 'Album',
      artist: 'Artist',
      title: 'Title',
      fromAlbum: 'From the album <em>%{album}</em>.',
      byArtist: 'By <em>%{artist}</em>.',
      byArtistFromAlbum: 'By <em>%{artist}</em> from their album <em>%{album}</em>.',
    },
    importLog: {
      title: 'File import logs',
      showImportLog: 'Show import logs',
      start: '# %{title} started at %{time}',
      type: { fetch: 'Fetch log', normalize: 'Normalization log' },
    },
  },

  playlist: {
    duration: 'Duration',
    editor: {
      title: 'Media sources',
      expertMode: 'Expert mode',
      isSaving: 'Media sources are being saved',
      editPlaylistEntry: 'Edit media sources',
      deletePlaylistEntry: 'Delete media source',
      noEntries: 'No media sources have been assigned.',
      entriesAdd: {
        retry: 'Try again',
        discard: 'Discard',
        error: 'Some of the media sources could not be added.',
      },
      upload: {
        pending: 'Pending uploads',
        step: {
          fetching: 'Importing',
          normalizing: 'Normalizing',
          unknown: 'Processing',
        },
      },
      control: {
        _or: '- or -',
        dropFiles: 'Drag files on this area',
        selectFiles: 'Select local file',
        importFile: 'Import file from URL',
        addStream: 'Add stream',
        addInput: 'Add input',
      },
      importFileDialog: {
        title: 'Import file from URL',
        saveLabel: 'Add file',
      },
      addInputDialog: {
        title: 'Add input as media source',
        saveLabel: 'Add input',
      },
      addStreamDialog: {
        title: 'Add stream as media source',
        saveLabel: 'Add stream',
      },
    },
    state: {
      ok: { title: 'Perfect' },
      missing: { title: 'Missing' },
      indeterminate: {
        title: 'Unknown duration',
        description: `At least one of the media sources does not have a fixed duration.
          It is therefore not possible to check whether your sources exceed or fall short of the broadcast duration.
          The media you have provided should have a total length of <strong>%{totalTime}</strong>.
          The current sources are deviating from this by <strong>%{offset}</strong>.`,
      },
      tooShort: {
        title: 'Too short',
        description: `The media sources you have provided fall short of the duration of the broadcast by <strong>%{offset}</strong>.
          <br>Please add further content to your episode.`,
      },
      tooLong: {
        title: 'Too long',
        description: `The media sources you have provided exceed the duration of the broadcast by <strong>%{offset}</strong>.
          <br>Please shorten your episode content accordingly.`,
      },
    },
  },

  playlistTable: {
    // Our translation framework automatically picks singular/plural
    items: '%{smart_count} item |||| %{smart_count} items',
    assign: 'Assign',
    unset: 'Unset',

    index: 'Nr',
    description: 'Description',
    entries: 'Entries',
    duration: 'Duration',
    lastEdit: 'Last edited',
    type: 'Type',
    source: 'Source',
    actions: 'Actions',
  },

  linkType: {
    inactive: 'Obsolete',
  },

  link: {
    urlExample: 'i.e. https://aura.radio',
    fields: {
      typeId: 'Link type',
      url: 'Web Address',
    },
  },

  showSelector: {
    keyboardShortcut: 'Alt + K',
    selectShowMany: 'Select show:',
    selectShow: 'Select a radio show',
    noData: 'No shows have been created yet.',
    noDataMatch: 'There are no shows that match your search criteria.',
    showState: {
      label: 'Show status',
      active: 'Active',
      inactive: 'Inactive',
    },
  },

  showSchedules: {
    title: 'Schedules',
    times: 'Airtime',
    rhythm: 'Rhythm',
    firstBroadcast: 'Start date',
    lastBroadcast: 'End date',
    noSchedulesAvailable: 'There currently is no active schedule for this show.',
    showAll: 'Show All',
    hide: 'Hide',
    scheduleDescription:
      '%{rhythm} beginning %{startDate} from %{startTime} to %{endTime} respectively.',
    scheduleDescriptionFinite:
      '%{rhythm} beginning %{startDate} through %{endDate} from %{startTime} to %{endTime} respectively.',
    selection: {
      all: 'All',
      relevant: 'Current',
    },
  },

  showTimeslots: {
    title: 'Episodes',
    noTimeslotsScheduled: 'No episodes are scheduled within the given timeframe.',

    editDescription: 'Edit description',
    editPlaylist: 'Edit playlist',
    openPlayer: 'Open player',
    downloadRecording: 'Download recording',
    uploadToCba: 'Upload recording to CBA',

    numberOfSlots: 'Episodes per page',
    start: 'From',
    direction: {
      past: 'Past',
      future: 'Future',
    },
  },

  languageSelector: {
    label: 'Choose a language',
  },

  user: {
    username: 'Username',
    name: 'Name',
    email: 'Email',
  },

  noteEditor: {
    _title: 'Episode description',
    title: 'Title',
    titlePlaceholder: 'Enter a title',
    summary: 'Summary',
    summaryPlaceholder: 'Enter a summary',
    content: 'Content',
    contentPlaceholder: 'Describe the content of the show',
    image: 'Image',
    tags: 'Tags',
    contributors: 'Contributors',
    languages: 'Languages',
    topics: 'Topics',
    links: 'Platform & Social Media Links',
  },

  error: {
    server: {
      unknown: 'An unknown error occurred.',
      exception: 'An unknown server error occurred.',
      permission_denied: 'You have insufficient permissions.',
      invalid: 'This field value is invalid.',
      null: 'This field cannot be empty.',
      blank: 'This field cannot be empty.',
      unique: 'The value of this field must be unique.',
      connection:
        'Unable to save your changes because the server cannot be reached. ' +
        'This may be caused by a temporary issue with your internet connection or a problem with the server.',
    },
  },

  imagePicker: {
    title: 'Pick an Image',
    browseImages: 'Browse Images',
    editCurrentImage: 'Edit the current image',
    saveChanges: 'Save changes',
    useImage: 'Use this image',
    chooseAnImage: 'Choose image',
    uploadImage: 'Upload new image',
    abort: 'Abort',
    reset: 'Reset Image',
    error: {
      default: 'Could not upload image.',
      tooLarge: 'The image you’ve selected is too large in filesize.',
    },
  },

  image: {
    altText: 'Alternative Text (for screen readers)',
    license: 'License',
    credits: 'Credits / Author',
    isUseExplicitlyGrantedByAuthor: 'Use was explicitly granted by author',
  },

  license: {
    validation: {
      requiresExpressPermissionForPublication:
        'The license requires explicit consent for publication on the part of the author.',
      requiresCredits:
        'The license requires attribution of the author. Please indicate their name.',
    },
  },

  saveIndicator: {
    label: {
      pending: 'Saving',
      success: 'Saved successfully',
      failure: 'Error on save',
    },
  },

  showCreator: {
    title: 'Create new show',
    missingShowTypes:
      'No show types have been created yet. You can add them in the <a href="%{adminUrl}/program/type/add/" target="_blank">administration interface</a>.',
    missingShowFundingCategories:
      'No funding categories have been created yet. You can add them in the <a href="%{adminUrl}/program/fundingcategory/add/" target="_blank">administration interface</a>.',
  },

  conflictResolution: {
    title: 'Conflict resolution for new schedule',
    titleModal: 'Resolve a timeslot conflict',

    titleNoConflict: 'No conflict to resolve',
    noConflict: 'This timeslot does not have a conflict. Great!',

    conflictingSlot: 'New Timeslot',
    projectedSlot:
      'The new timeslot runs on <b>%{firstDate}</b> from <b>%{startTime}</b> to <b>%{endTime}</b>',
    conflictsWith: 'It conflicts with the following timeslots',

    newSchedule: 'from <b>%{firstDate}, %{startTime}</b> to <b>%{endTime}</b>',
    recurringSchedule: 'This schedule repeats <b>%{rrule}</b> until <b>%{lastDate}</b>',
    recurringScheduleNoEnd: 'This schedule repeats <b>%{rrule}</b>.',
    leftToResolve:
      '%{smart_count} conflicts left to resolve |||| %{smart_count} conflict left to resolve',
    noneLeftToResolve: 'No more conflicts to resolve!',
    applySolution: 'Apply solution',

    from: 'From',
    to: 'To',
    showName: 'Show name',

    whichStrategy: 'Which solution should be applied?',
    strategies: {
      ours: 'Insert new timeslot, delete old one',
      theirs: 'Delete new timeslot, keep old one',
      theirsStart: 'Insert new timeslot after old timeslot',
      theirsEnd: 'Insert new timeslot before old timeslot',
      theirsBoth: 'Insert new timeslot with interruption by old timeslot',
      oursStart: 'ours-start (TODO: Better description)',
      oursEnd: 'ours-end (TODO: Better description)',
      oursBoth: 'ours-both (TODO: Better description)',
    },
  },

  paginator: {
    itemsPerPage: 'Items per Page',
    gotoFirst: 'Go to first page',
    gotoPrev: 'Go to previous page',
    goto: 'Go to page %{page}',
    gotoNext: 'Go to next page',
    gotoLast: 'Go to last page',
    range: 'Showing %{start} to %{end} of %{count} entries.',
  },

  scheduleEditor: {
    titleCreate: 'Create new schedule for "%{show}"',
    titleEdit: 'Edit schedule for "%{show}"',

    timeslotRuns:
      'This timeslot runs on <b>%{firstDate}</b> from <b>%{startTime}</b> to <b>%{endTime}</b>',
    recurringSchedule: 'This schedule repeats from <b>%{rrule}</b> to <b>%{lastDate}</b>',

    singleEmission: 'This timeslot is a one-time emission.',
    coexistingTimeslot:
      'But due to a conflict resolution there is another timeslot on <b>%{firstDate}</b> from <b>%{startTime}</b> to <b>%{endTime}</b>',

    addFallbackTitle: 'Add fallback for schedule',
    currentlySelectedPlaylist: 'Currently selected playlist',
    assignPlaylist: 'Assign playlist',

    start: 'Start',
    end: 'End',
    projectedDuration: '<b>Projected duration:</b> %{duration}',

    pastEventWarning:
      'Past events will be ignored. Start date was set to today!<br>Try again or change the start date to something in the future.',
    from: 'From',
    to: 'To',
    fromDate: 'Starting',
    toDate: 'Until <span class="tw-font-normal tw-text-gray-500">(Date)</span>',

    addRepetition: 'Add repetition schedule',
    whenToRepeat: 'When to repeat?',
    useSameTime: 'Use same start and end time',
    repeatAt: 'Repeat at',
    addNoOfDays: 'How many days later?',
    onlyBusinessDays: 'Only count business days',

    delete: {
      delete: 'Delete',
      timeslotsTitle: 'Deleting timeslots',
      both: 'Delete both',
      scheduleTimeslots: 'Delete schedule and all timeslots',
      timeslot: 'Delete timeslot',
      allTimeslots: 'Delete all future timeslots',
    },

    repetition: {
      followingDay: 'On the following day',
      followingBusinessDay: 'On the following business day',
      numberOfDaysLater: 'A number of days later',
    },
  },

  editingMetadata: {
    timeSpecific: 'on %{date} at %{time}',
    lastModified: 'Last modified %{time} by %{author}.',
    created: 'Created %{time} by %{author}.',
  },

  calendar: {
    today: 'Today',
    empty: 'No playlist',
    fallback: 'Fallback playlist',
    repetition: 'Repetition',
    view: {
      day: 'Day view',
      week: 'Week view',
    },
    switchShow: 'Switch to “%{show}” show',
    editTimeslot: 'Sendung bearbeiten',
    intermission: 'Program intermission',
    mismatchedLength: 'wrong duration',
    playing: 'Currently playing',
  },

  // Etc
  metadata: {
    artist: 'Artist',
    album: 'Album',
    title: 'Title',
    source: 'Source',
    size: 'File size',
  },

  humanJoin: {
    default: ', ',
    and: ', and ',
    or: ', or ',
  },

  rrule: {
    rrule: 'Repetition rule',
    unknown:
      'Unable to create an automated description of the repetition rule. Please file an issue for the aura/dashboard project.',
    once: 'once',
    daily: 'every day |||| every %{smart_count} days',
    weekly: 'every week |||| every %{smart_count} weeks',
    monthly: 'every month |||| every %{smart_count} months',
    yearly: 'every year |||| every %{smart_count} years',
    businessDay: 'business day |||| business days',
    onDays: 'on %{days}',
    position: {
      '-1': 'on the last',
      1: 'on the first',
      2: 'on the second',
      3: 'on the third',
      4: 'on the fourth',
      5: 'on the fifth',
    },
  },

  steeringErrorCodes: {
    'no-start-after-end': 'The start date cannot be after the end date.',
    'no-same-day-start-and-end': 'The start and end date cannot be on the same day.',
    'one-solution-per-conflict':
      'Exactly one solution is required per conflict. You either submitted no or more than one solution.',
  },
}