*/ public static function get( $script ) { $method = str_replace( '-', '_', (string) $script ); return method_exists( __CLASS__, $method ) ? call_user_func( array( __CLASS__, $method ) ) : array(); } /** * Home screen. * * @return array */ private static function admin_home() { return array( /* translators: %d: number of plannings. */ 'visibleOne' => __( '%d visible on the site', 'ulcine-timetable' ), /* translators: %d: number of plannings. */ 'visibleMany' => __( '%d visible on the site', 'ulcine-timetable' ), 'noPlanning' => __( 'No schedule yet. Create the first one: copy nothing, start empty or import your Excel file.', 'ulcine-timetable' ), 'newPlanning' => __( 'New schedule', 'ulcine-timetable' ), 'schedule' => __( 'Schedule…', 'ulcine-timetable' ), 'emptyHint' => __( 'No schedule is visible: the page shows the message below (it can be changed in Settings).', 'ulcine-timetable' ), 'oneTab' => __( 'One visible schedule: it is shown directly, without tabs.', 'ulcine-timetable' ), /* translators: %d: number of plannings. */ 'manyTabs' => __( '%d visible schedules, shown as tabs.', 'ulcine-timetable' ), 'firstTab' => __( 'Tab shown first', 'ulcine-timetable' ), 'autoCurrent' => __( 'Automatic: the current session', 'ulcine-timetable' ), 'autoNext' => __( 'Automatic: the next session', 'ulcine-timetable' ), 'allGood' => __( 'Nothing to check: no double bookings and no date problems.', 'ulcine-timetable' ), 'view' => __( 'View', 'ulcine-timetable' ), 'fix' => __( 'Fix', 'ulcine-timetable' ), 'ignore' => __( 'Ignore', 'ulcine-timetable' ), 'ignoreHelp' => __( 'Done on purpose: take this line off the list. It comes back if the class changes.', 'ulcine-timetable' ), 'ignored' => __( 'Line ignored.', 'ulcine-timetable' ), 'unignore' => __( 'Show again', 'ulcine-timetable' ), /* translators: %d: number of ignored lines. */ 'ignoredCount' => __( 'Ignored lines (%d)', 'ulcine-timetable' ), ); } /** * New planning wizard. * * @return array */ private static function admin_wizard() { return array( /* translators: %s: planning name. */ 'copyPlanning' => __( 'Copy “%s”', 'ulcine-timetable' ), 'classOne' => __( '1 class', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'classMany' => __( '%d classes', 'ulcine-timetable' ), 'startEmpty' => __( 'Start from an empty schedule', 'ulcine-timetable' ), 'startEmptySub' => __( 'You add the classes one by one', 'ulcine-timetable' ), 'importExcel' => __( 'Import your Excel file', 'ulcine-timetable' ), 'importExcelSub' => __( 'The school’s schedule file, as it is (saved as CSV)', 'ulcine-timetable' ), /* translators: 1: number of classes, 2: planning name. */ 'willCreate' => __( '%1$d classes will be created in “%2$s”:', 'ulcine-timetable' ), /* translators: %s: date. */ 'publishAuto' => __( 'Make it visible automatically on %s', 'ulcine-timetable' ), 'publishAutoSub' => __( 'One month before the first day, for sign-ups. Recommended.', 'ulcine-timetable' ), 'publishNow' => __( 'Make it visible right away', 'ulcine-timetable' ), 'publishNowSub' => __( 'It appears on your timetable page now, as a tab.', 'ulcine-timetable' ), 'publishDraft' => __( 'Keep it hidden', 'ulcine-timetable' ), 'publishDraftSub' => __( 'You will switch it on yourself with “Visible on the site”.', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'recapCopy' => __( '%d classes copied, with their teachers.', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'recapCopyNoTeachers' => __( '%d classes copied, without teachers.', 'ulcine-timetable' ), 'recapCsv' => __( 'Next: import of your file (you will see a preview before anything is saved).', 'ulcine-timetable' ), 'recapEmpty' => __( 'Empty schedule.', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'recapLimited' => __( '%d of them without dates, to add in the schedule.', 'ulcine-timetable' ), /* translators: %s: holiday dates. */ 'recapHolidays' => __( 'Holidays: %s.', 'ulcine-timetable' ), 'recapNoHolidays' => __( 'No holidays.', 'ulcine-timetable' ), 'recapXmas' => __( 'No holidays, although this session runs over Christmas.', 'ulcine-timetable' ), 'recapHidden' => __( 'Hidden: nothing appears on the site.', 'ulcine-timetable' ), /* translators: %s: date. */ 'recapAuto' => __( 'Visible automatically from %s.', 'ulcine-timetable' ), 'recapNow' => __( 'Visible as soon as it is created.', 'ulcine-timetable' ), 'create' => __( 'Create the schedule', 'ulcine-timetable' ), 'next' => __( 'Next', 'ulcine-timetable' ), /* translators: 1: current step, 2: number of steps. */ 'stepOf' => __( 'Step %1$d of %2$d', 'ulcine-timetable' ), /* translators: %d: number of weeks. */ 'weeks' => __( '%d weeks', 'ulcine-timetable' ), 'nameNeeded' => __( 'Please enter a name.', 'ulcine-timetable' ), 'dateNeeded' => __( 'Please enter a date.', 'ulcine-timetable' ), 'endAfterStart' => __( 'The end date must be after the start date.', 'ulcine-timetable' ), 'fixFields' => __( 'Please correct the highlighted fields.', 'ulcine-timetable' ), /* translators: %s: planning name. */ 'suggestion' => __( 'Suggestion: the session that follows “%s”.', 'ulcine-timetable' ), ); } /** * Planner (one planning). * * @return array */ private static function admin_planner() { return array( 'actions' => __( 'Actions', 'ulcine-timetable' ), 'addClass' => __( 'Add a class', 'ulcine-timetable' ), 'editClass' => __( 'Edit class', 'ulcine-timetable' ), 'addOn' => __( 'Add a class on this day', 'ulcine-timetable' ), 'added' => __( 'Class added.', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'addedMany' => __( '%d classes added.', 'ulcine-timetable' ), 'updated' => __( 'Class updated.', 'ulcine-timetable' ), /* translators: %s: course name. */ 'deleted' => __( '“%s” deleted.', 'ulcine-timetable' ), 'restored' => __( 'Class restored.', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'restoredMany' => __( '%d classes restored.', 'ulcine-timetable' ), 'duplicated' => __( 'Class duplicated: adjust it and save.', 'ulcine-timetable' ), 'all' => __( 'All', 'ulcine-timetable' ), 'alsoCreate' => __( 'Also add it to', 'ulcine-timetable' ), 'alsoEdit' => __( 'Also copy it to', 'ulcine-timetable' ), 'pickDance' => __( 'Choose a style: the course is found or created for you.', 'ulcine-timetable' ), /* translators: %s: course name. */ 'courseKnown' => __( 'Course: %s (already in the catalogue)', 'ulcine-timetable' ), /* translators: %s: course name. */ 'courseWillCreate' => __( 'Course: %s (will be added to the catalogue)', 'ulcine-timetable' ), 'courseNeeded' => __( 'Please choose a course, or enter the name of the new one.', 'ulcine-timetable' ), 'chooseCourse' => __( '— Choose a course —', 'ulcine-timetable' ), 'newSpecial' => __( '+ New special course…', 'ulcine-timetable' ), 'noDance' => __( 'Other', 'ulcine-timetable' ), 'noLevel' => __( 'No level', 'ulcine-timetable' ), 'otherDance' => __( '+ Other style', 'ulcine-timetable' ), 'newLevel' => __( '+ New level', 'ulcine-timetable' ), 'newTeacher' => __( '+ New', 'ulcine-timetable' ), 'newDancePrompt' => __( 'Name of the new style:', 'ulcine-timetable' ), 'newLevelPrompt' => __( 'Name of the new level:', 'ulcine-timetable' ), 'teacherCreated' => __( 'Teacher added.', 'ulcine-timetable' ), 'daysHintCreate' => __( 'Choose several days to create the class on each of them.', 'ulcine-timetable' ), /* translators: 1: first day, 2: last day. */ 'everyWeek' => __( 'Every week from %1$s to %2$s.', 'ulcine-timetable' ), /* translators: %s: holiday dates. */ 'exceptHolidays' => __( 'No classes during the holidays (%s).', 'ulcine-timetable' ), 'noDates' => __( 'No date yet.', 'ulcine-timetable' ), /* translators: %s: date. */ 'removeDate' => __( 'Remove %s', 'ulcine-timetable' ), /* translators: %s: dates. */ 'notOnDay' => __( 'Not on the chosen day: %s.', 'ulcine-timetable' ), 'outsideSeason' => __( 'Some dates are outside the schedule: that is allowed, but check it.', 'ulcine-timetable' ), 'fillOneDay' => __( 'Choose exactly one day first.', 'ulcine-timetable' ), 'newAuto' => __( 'Ticked automatically: this course never ran before.', 'ulcine-timetable' ), 'newKnown' => __( 'This course already ran in a previous session, so the badge is not suggested.', 'ulcine-timetable' ), 'newManual' => __( 'Shown on the card and in the details. Not copied to the next session.', 'ulcine-timetable' ), /* translators: %s: link. */ 'linkCourse' => __( 'Link of the course: %s', 'ulcine-timetable' ), /* translators: %s: link. */ 'linkGeneral' => __( 'General link: %s', 'ulcine-timetable' ), 'linkNone' => __( 'No sign-up link: set the general link in Settings.', 'ulcine-timetable' ), 'previewEmpty' => __( 'Choose a day and a time to see what happens at the same time.', 'ulcine-timetable' ), 'thisClass' => __( 'This class', 'ulcine-timetable' ), 'liveTeacher' => __( 'Teacher already busy at that time:', 'ulcine-timetable' ), /* translators: %s: studio name. */ 'liveStudio' => __( 'Another class is in %s at that time:', 'ulcine-timetable' ), 'liveParallel' => __( 'At the same time in another studio:', 'ulcine-timetable' ), 'liveParallelHint' => __( 'That is fine: they are shown side by side on the site.', 'ulcine-timetable' ), 'liveOk' => __( 'No clash with the other classes.', 'ulcine-timetable' ), /* translators: %s: teacher names. */ 'teacherClash' => __( '%s also teaches', 'ulcine-timetable' ), /* translators: %s: studio name. */ 'studioClash' => __( 'Same studio (%s) as', 'ulcine-timetable' ), 'classWord' => __( 'class', 'ulcine-timetable' ), 'classesWord' => __( 'classes', 'ulcine-timetable' ), 'studiosWord' => __( 'studios', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'toFix' => __( '%d to check', 'ulcine-timetable' ), /* translators: %d: number of selected classes. */ 'selected' => __( '%d selected', 'ulcine-timetable' ), 'select' => __( 'Select', 'ulcine-timetable' ), 'selectAll' => __( 'Select all', 'ulcine-timetable' ), 'duplicate' => __( 'Duplicate', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'confirmBulkDelete' => __( 'Delete the %d selected classes? Courses and teachers are kept.', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'hiddenByFilters' => __( '%d of them not shown by the current filters.', 'ulcine-timetable' ), 'emptySeason' => __( 'This schedule is empty.', 'ulcine-timetable' ), 'emptySeasonHelp' => __( 'Add your first class, copy the classes of another schedule, or import your Excel file.', 'ulcine-timetable' ), 'importExcel' => __( 'Import a file', 'ulcine-timetable' ), 'noMatch' => __( 'No class matches these filters.', 'ulcine-timetable' ), 'noTeacher' => __( 'No teacher yet', 'ulcine-timetable' ), 'newWord' => __( 'New', 'ulcine-timetable' ), 'ownLink' => __( 'Own link', 'ulcine-timetable' ), /* translators: %d: number of dates. */ 'dateMany' => __( '%d dates', 'ulcine-timetable' ), 'dateOne' => __( '1 date', 'ulcine-timetable' ), 'noDatesTag' => __( 'No dates yet', 'ulcine-timetable' ), 'finished' => __( 'Finished, off the site', 'ulcine-timetable' ), 'cancelledOne' => __( '1 date cancelled', 'ulcine-timetable' ), /* translators: %d: number of dates. */ 'cancelledMany' => __( '%d dates cancelled', 'ulcine-timetable' ), /* translators: %s: date. */ 'cancelDate' => __( 'Cancel %s', 'ulcine-timetable' ), /* translators: %s: date. */ 'fromDate' => __( 'from %s', 'ulcine-timetable' ), /* translators: %s: date. */ 'untilDate' => __( 'until %s', 'ulcine-timetable' ), 'wholeSession' => __( 'Whole session', 'ulcine-timetable' ), 'holidays' => __( 'Holidays', 'ulcine-timetable' ), 'hiddenHelp' => __( 'Nothing is deleted and your pages stay as they are.', 'ulcine-timetable' ), 'day' => __( 'Day', 'ulcine-timetable' ), 'time' => __( 'Time', 'ulcine-timetable' ), 'course' => __( 'Course', 'ulcine-timetable' ), 'level' => __( 'Level', 'ulcine-timetable' ), 'teachers' => __( 'Teachers', 'ulcine-timetable' ), 'studio' => __( 'Studio', 'ulcine-timetable' ), 'dates' => __( 'Dates', 'ulcine-timetable' ), 'notes' => __( 'Notes', 'ulcine-timetable' ), 'planning' => __( 'Schedule', 'ulcine-timetable' ), 'previewHint' => __( 'This is how visitors will see this schedule (fonts and colours of the theme may differ slightly).', 'ulcine-timetable' ), 'previewHidden' => __( 'This schedule is hidden: visitors do not see it.', 'ulcine-timetable' ), 'copyTo' => __( 'Copy to another schedule', 'ulcine-timetable' ), 'moveTo' => __( 'Move to another schedule', 'ulcine-timetable' ), 'copyFrom' => __( 'Copy classes from another schedule', 'ulcine-timetable' ), 'copyToHelp' => __( 'Independent copies are created: later changes in one schedule never affect the other.', 'ulcine-timetable' ), 'moveToHelp' => __( 'The selected classes leave this schedule.', 'ulcine-timetable' ), 'copyFromHelp' => __( 'Every class of that schedule is copied into this one. Existing classes are kept.', 'ulcine-timetable' ), 'noOtherSeason' => __( 'Create another schedule first.', 'ulcine-timetable' ), 'changeTeacher' => __( 'Change teacher', 'ulcine-timetable' ), /* translators: %d: number of selected classes. */ 'changeTeacherHelp' => __( 'Only in the %d selected classes.', 'ulcine-timetable' ), 'replace' => __( 'Replace', 'ulcine-timetable' ), 'by' => __( 'By', 'ulcine-timetable' ), 'nobody' => __( '— Nobody (remove) —', 'ulcine-timetable' ), 'noTeacherSelected' => __( 'The selected classes have no teacher.', 'ulcine-timetable' ), 'changeStudio' => __( 'Change studio', 'ulcine-timetable' ), 'fixFields' => __( 'Please correct the highlighted fields.', 'ulcine-timetable' ), ); } /** * Catalogue. * * @return array */ private static function admin_catalogue() { return array( 'actions' => __( 'Actions', 'ulcine-timetable' ), 'active' => __( 'Active', 'ulcine-timetable' ), 'add' => __( 'Add', 'ulcine-timetable' ), /* translators: %s: name. */ 'added' => __( '“%s” added.', 'ulcine-timetable' ), /* translators: %s: name. */ 'deleted' => __( '“%s” deleted.', 'ulcine-timetable' ), /* translators: %s: name. */ 'confirmDelete' => __( 'Delete “%s”?', 'ulcine-timetable' ), /* translators: %s: name. */ 'deleteTitle' => __( 'Delete “%s”', 'ulcine-timetable' ), 'replaceWith' => __( 'Replace it with', 'ulcine-timetable' ), 'all' => __( 'All', 'ulcine-timetable' ), 'name' => __( 'Name', 'ulcine-timetable' ), 'nameNeeded' => __( 'Please enter a name.', 'ulcine-timetable' ), 'dance' => __( 'Style', 'ulcine-timetable' ), 'level' => __( 'Level', 'ulcine-timetable' ), 'stage' => __( 'Stage', 'ulcine-timetable' ), 'colour' => __( 'Colour', 'ulcine-timetable' ), 'order' => __( 'Order', 'ulcine-timetable' ), 'address' => __( 'Address or detail', 'ulcine-timetable' ), 'addressHint' => __( 'e.g. 2nd floor, 12 Main Street', 'ulcine-timetable' ), 'used' => __( 'Used', 'ulcine-timetable' ), 'unused' => __( 'Unused', 'ulcine-timetable' ), 'classOne' => __( '1 class', 'ulcine-timetable' ), /* translators: %d: number of classes. */ 'classMany' => __( '%d classes', 'ulcine-timetable' ), 'courseOne' => __( '1 course', 'ulcine-timetable' ), /* translators: %d: number of courses. */ 'courseMany' => __( '%d courses', 'ulcine-timetable' ), 'signupLink' => __( 'Sign-up link', 'ulcine-timetable' ), 'ownLink' => __( 'Own link', 'ulcine-timetable' ), 'generalLink' => __( 'General link', 'ulcine-timetable' ), 'search' => __( 'Search', 'ulcine-timetable' ), 'searchCourse' => __( 'Search a course…', 'ulcine-timetable' ), 'showInactive' => __( 'Show inactive courses', 'ulcine-timetable' ), 'noMatch' => __( 'Nothing matches.', 'ulcine-timetable' ), 'moreDetails' => __( 'Description, colour…', 'ulcine-timetable' ), 'photoBio' => __( 'Photo and biography', 'ulcine-timetable' ), 'photoDone' => __( 'Photo added. Change the photo or biography', 'ulcine-timetable' ), 'newCourseName' => __( 'Name of a new course (empty = the style)', 'ulcine-timetable' ), 'dancesOf' => __( 'Styles of', 'ulcine-timetable' ), 'courseDancesHelp' => __( 'Several styles: the course shows under each of them (filters and style pages). The first one gives the colour, unless another is set as a variant of it.', 'ulcine-timetable' ), 'newCourseHint' => __( 'Courses are also created automatically when you add a class.', 'ulcine-timetable' ), 'newTeacherName' => __( 'First name of a new teacher', 'ulcine-timetable' ), 'newDanceName' => __( 'Name of a new style', 'ulcine-timetable' ), 'newLevelName' => __( 'Name of a new level', 'ulcine-timetable' ), 'newStudioName' => __( 'Name of a new studio', 'ulcine-timetable' ), 'coursesHelp' => __( 'A course has a name (e.g. Yoga for beginners or Hip-hop kids), a style and a level. The name stays as you wrote it. Untick “Active” to hide it from the pickers without touching the schedules.', 'ulcine-timetable' ), 'teachersHelp' => __( 'Teachers still in a schedule cannot be deleted: untick “Active”, or use “Change teacher” in the schedule.', 'ulcine-timetable' ), 'dancesHelp' => __( 'The colour is used on the site. A style page shows only its classes with the code shown here. “Variant of”: a course in both styles takes the colour of the variant. Renaming a style changes neither its courses nor their names.', 'ulcine-timetable' ), 'variantOf' => __( 'Variant of', 'ulcine-timetable' ), 'levelsHelp' => __( 'The order is the progression shown on the site. Each level belongs to a stage (Beginner, Intermediate…). Renaming a level does not change the names of the courses.', 'ulcine-timetable' ), 'stageNames' => __( 'Rename the stages', 'ulcine-timetable' ), 'levelDescription' => __( 'Description', 'ulcine-timetable' ), 'levelDescriptionHint' => __( 'e.g. Basic steps and first figures', 'ulcine-timetable' ), 'studiosHelp' => __( 'The first studio is the default one. When two classes happen at the same time, the site shows them side by side in this order.', 'ulcine-timetable' ), 'defaultStudio' => __( 'default', 'ulcine-timetable' ), 'shortcode' => __( 'Style page', 'ulcine-timetable' ), /* translators: %s: name. */ 'moveUp' => __( 'Move up: %s', 'ulcine-timetable' ), /* translators: %s: name. */ 'moveDown' => __( 'Move down: %s', 'ulcine-timetable' ), ); } /** * Embed screen. * * @return array */ private static function admin_embed() { return array( 'nothingToShow' => __( 'Nothing to show with these options (no visible schedule, or no class for this style).', 'ulcine-timetable' ), ); } }