Skip to content
Snippets Groups Projects
en.js 23.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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: {
          id: 'ID',
          name: 'Name',
          slug: 'Slug',
          updatedAt: 'Last modification',
          updatedBy: 'Modified by',
          isActive: 'Active',
          isOwner: 'Administrated by me',
    
          shortDescription: 'Short description',
          typeId: 'Type',
          fundingCategoryId: 'Funding category',
    
        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',
    
        editor: {
          deactivation: {
            label: 'Deactivate show',
    
            description: 'Archives the show and removes all planned broadcasts.',
    
              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: 'Broadcast from %{start}',
      },
    
    
      filePlaylistManager: {
    
        title: 'Media',
    
        files: 'Files',
        playlists: 'Playlists',
      },
    
      credits: {
        title: 'Credits',
        intro:
          'AURA is developed under the GNU Affero General Public License v3. Current and former developers are',
    
        graphicsIcons: 'Graphics & Icons',
    
        loadingIcon: 'Animated loading icon',
        otherIcons: 'All other icons',
    
        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>.',
      },
    
      help: {
        title: 'Help',
        generalDocumentation: 'You can find the general AURA documentation here: ',
      },
    
      // Layout
    
      loadMoreItems: 'Load more %{items}',
      loadingData: 'Loading %{items}',
    
      loading: 'Loading..',
      cancel: 'Cancel',
      delete: 'Delete',
      new: 'New',
      add: 'Add',
      save: 'Save',
    
      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: 'Broadcasts & Schedules',
          basicData: 'Basic Settings',
        },
    
        episode: {
          _title: 'Broadcast 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: 'Emission start',
        duration: 'Duration',
    
        playlist: 'Media sources',
    
        actions: 'Actions',
    
        missingPlaylistData:
          'Information for this playlist is currently not available. Switch to the show of this emission.',
    
      },
    
      fileManager: {
        noFilesAvailable: 'There are no files for this show yet',
        upload: 'Add or upload file',
        error: 'Error',
    
        importAborted: 'The import was aborted',
        importLogTooltip: 'Show import log',
      },
    
      fileAdder: {
        title: 'Add or upload file',
    
        link: 'Link',
        linkPlaceholder: 'Enter a HTTP(S) URL',
        download: 'Download from remote source instead of uploading file',
    
        editMeta: 'Edit metadata',
      },
    
      importLog: {
        title: 'File import log',
        availableLogs: 'Available logs',
    
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        fetchError: 'Error: Could not fetch import log from Tank. Check browser console for more info',
    
        fetchLog: 'Fetch log',
        normalizeLog: 'Normalization Log',
      },
    
      playlistSelector: {
        title: 'Assign playlist',
    
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        noPlaylistsAvailable: 'No playlists available. Use the buttons below to create some!',
    
        currentPlaylistLabel: 'Currently selected playlist ID',
    
        upload: 'Upload',
        uploadAudio: 'Upload audio file',
        goToFiles: "Switch to 'Files & Playlists'",
    
        mismatchedLength: 'The playlist and the timeslot have different durations',
        mismatchedLengthConfirmation:
          'You are about to assign a playlist with a mismatched duration. Are you sure?',
      },
    
      playlistManager: {
        noPlaylistsAvailable: 'There are no playlists for this show yet',
        create: 'Create playlist',
      },
    
      playlistEditor: {
        titleExisting: 'Editing playlist %{id} for show "%{show}"',
        titleNew: 'Add new playlist for show "%{show}"',
    
        noEntriesAvailable: 'There are no entries yet. Go ahead and add some!',
        saved: 'The playlist has been saved',
    
        unknownDuration: '(Unkown)',
        tooManyUnknowns:
          'There are two or more entries that have an unknown duration. Please fix this by clicking on the duration field in the table and entering one manually. A playlist may only contains one entry with an unknown duration.',
    
        types: {
          file: 'File',
          lineIn: 'Line-in',
          stream: 'Stream',
          other: 'Other',
    
        addStream: 'Add stream to playlist',
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        invalidDurationFormat: 'Please enter a duration in format mm:ss or hh:mm:ss',
    
      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',
        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',
          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',
      },
    
      showSelector: {
    
        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',
        },
    
        title: 'Schedules',
        times: 'Airtime',
        rhythm: 'Rhythm',
        firstBroadcast: 'First airing',
        lastBroadcast: 'Last airing',
    
        noSchedulesAvailable: 'There are currently no schedules 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: 'Relevant',
        },
    
        title: 'Broadcasts',
        noTimeslotsScheduled: 'No broadcasts are scheduled within the given timeframe.',
    
    
        editDescription: 'Edit description',
        editPlaylist: 'Edit playlist',
        openPlayer: 'Open player',
        downloadRecording: 'Download recording',
        uploadToCba: 'Upload recording to CBA',
    
    
        numberOfSlots: 'Timeslots per page',
        start: 'From',
    
        direction: {
          past: 'Past',
          future: 'Future',
        },
    
      },
    
      showMeta: {
        email: 'Email',
        emailPlaceholder: 'Enter a contact address for this show',
        editEmail: 'Edit email',
        invalidEmail: 'Please enter a valid email',
    
        showName: 'Show name',
        showNamePlaceholder: 'Enter the name of the show',
        editShowName: 'Edit show name',
    
        description: 'Description',
        descriptionPlaceholder: 'Enter a description',
        editDescription: 'Edit description',
    
        shortDescription: 'Short description',
        shortDescriptionPlaceholder: 'Enter a short description of this show',
        editShortDescription: 'Edit short description',
    
    
        internalNote: 'Internal note',
    
    
        website: 'Website',
        websitePlaceholder: 'Enter a website for this show',
        editWebsite: 'Edit website',
        invalidWebsite: 'Please enter a valid URL',
    
        type: 'Show type',
        editType: 'Edit show type',
    
        fundingCategory: 'Funding category',
        fundingCategoryRtr: '(e.g. for RTR)',
        editFundingCategory: 'Edit funding category',
    
        predecessor: 'Predecessor',
        noPredecessor: 'This show has no predecessor',
        editPredecessor: 'Edit predecessor',
        noPredecessorName: 'The name of the predecessor is unavailable',
    
        cbaSeriesId: 'CBA Series ID',
        cbaSeriesIdPlaceholder: 'Enter a CBA Series ID for this show',
        editCbaSeriesId: 'Edit CBA Series ID',
        invalidCbaSeriesId: 'Please enter a valid integer as series ID',
    
    
        defaultPlaylist: 'Default show playlist ID',
        editDefaultPlaylist: 'Edit default show playlist ID',
    
    
        // Meta arrays
        categories: 'Categories',
        categoriesLabel: 'Select one or more categories',
        editCategories: 'Edit categories',
    
        topics: 'Topics',
        topicsLabel: 'Select one or more topics',
        editTopics: 'Edit topics',
    
        genres: 'Genres',
        genresLabel: 'Select one or more genres',
        editGenres: 'Edit genres',
    
        languages: 'Languages',
        languagesLabel: 'Select one or more languages',
        editLanguages: 'Edit languages',
    
        hosts: 'Hosts',
        hostsLabel: 'Select one or more hosts',
        editHosts: 'Edit hosts',
    
        owners: 'Owners',
        editOwners: 'Edit owners',
    
        accessAlreadyGiven: 'This user already has access for this show',
        usersWithAccess: 'Users with access to <b>%{show}</b>',
        addNewUsers: 'You can add new users using the table below',
    
        name: 'Name',
        username: 'Username',
        options: 'Options',
    
        logo: 'Logo',
        image: 'Image',
    
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        multiselect: '<b>Hint:</b> use <code>CTRL+click</code> for multiple selection',
    
      user: {
        username: 'Username',
        name: 'Name',
        email: 'Email',
      },
    
    
      noteEditor: {
    
        _title: 'Broadcast 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',
    
      error: {
        server: {
          unknown: 'An unknown error server error occurred.',
          null: 'This field cannot be empty.',
          blank: 'This field cannot be empty.',
    
          unique: 'The value of this field must be unique.',
    
      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: {
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        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.',
        },
      },
    
    
      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>',
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        recurringSchedule: 'This schedule repeats <b>%{rrule}</b> until <b>%{lastDate}</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: {
        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>',
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        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.',
    
    Konrad Mohrfeldt's avatar
    Konrad Mohrfeldt committed
        '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.',
      },