Introduce client-side localization helper and en/fr locale bundles. Route admin control, picks, movies, stats, winners and settings UIs through i18n keys instead of hardcoded text. Remove French text from the English UI and standardize shared messages (saving, network errors, confirmations). Update .gitignore to ignore editor metadata and localization helper artifacts.
585 lines
30 KiB
JSON
585 lines
30 KiB
JSON
{
|
|
"nav.films": "Movies",
|
|
"nav.checklist": "Checklist",
|
|
"nav.stats": "Stats",
|
|
"nav.myPicks": "My picks",
|
|
"nav.admin": "Admin",
|
|
"nav.logout": "Log out",
|
|
"nav.viewAllPicks": "View All Picks",
|
|
|
|
"common.loading": "Loading…",
|
|
"common.preparingPage": "Preparing page…",
|
|
"common.errorLoading": "Error loading.",
|
|
"common.save": "Save",
|
|
"common.cancel": "Cancel",
|
|
"common.delete": "Delete",
|
|
"common.confirm": "Confirm",
|
|
"common.refresh": "Refresh",
|
|
"common.close": "Close",
|
|
"common.copy": "Copy",
|
|
"common.reset": "Reset",
|
|
"common.add": "Add",
|
|
"common.edit": "Edit",
|
|
"common.remove": "Remove",
|
|
"common.create": "Create",
|
|
"common.actions": "Actions",
|
|
"common.yes": "Yes",
|
|
"common.no": "No",
|
|
"common.all": "All",
|
|
"common.none": "None",
|
|
"common.search": "Search",
|
|
"common.filter": "Filter",
|
|
"common.year": "Year",
|
|
"common.name": "Name",
|
|
"common.email": "Email",
|
|
"common.status": "Status",
|
|
"common.date": "Date",
|
|
"common.title": "Title",
|
|
"common.description": "Description",
|
|
"common.networkError": "Network error",
|
|
"common.errorOccurred": "An error occurred",
|
|
"common.errorPrefix": "Error:",
|
|
"common.saving": "Saving...",
|
|
"common.success": "Success",
|
|
"common.toggleDarkMode": "Toggle dark mode",
|
|
"common.details": "Details",
|
|
"common.oscarPool": "Oscar Pool",
|
|
|
|
"auth.login": "Login",
|
|
"auth.register": "Register",
|
|
"auth.email": "Email",
|
|
"auth.password": "Password",
|
|
"auth.name": "Name",
|
|
"auth.noAccount": "No account?",
|
|
"auth.hasAccount": "Already have an account?",
|
|
"auth.signUp": "Sign up",
|
|
"auth.signIn": "Sign in",
|
|
"auth.forgotPassword": "Forgot password?",
|
|
"auth.emailPlaceholder": "[email protected]",
|
|
"auth.namePlaceholder": "Your name",
|
|
"auth.passwordMin": "Minimum {min} characters",
|
|
"auth.passwordsDoNotMatch": "Passwords do not match",
|
|
"auth.confirmPassword": "Confirm password",
|
|
"auth.createAdminAccount": "Create admin account",
|
|
"auth.firstTimeSetup": "First time setup",
|
|
"auth.noAdminExists": "No administrator exists. Create the first admin account to get started.",
|
|
"auth.registrationStatus": "Registration status",
|
|
"auth.returnToHome": "Return to home page",
|
|
"auth.setupRequired": "Setup required",
|
|
"auth.appMustBeConfigured": "The application must first be configured by an administrator.",
|
|
"auth.goToSetup": "Go to setup page",
|
|
"auth.dogQuestion": "What is Cath & Nath's dog's name?",
|
|
"auth.errorCreatingAccount": "Error creating account",
|
|
"auth.networkErrorRetry": "Network error. Please try again.",
|
|
"auth.userNotFound": "User not found",
|
|
"auth.dogAnswerIncorrect": "Incorrect dog name.",
|
|
"auth.registrationSuccess": "User registered successfully!",
|
|
"auth.tempPasswordExpired": "Temporary password expired. Ask an admin to reset your password.",
|
|
"auth.passwordMinLength": "Password must be at least 8 characters.",
|
|
"auth.loginFailed": "Login failed",
|
|
"auth.invalidCredentials": "Invalid credentials",
|
|
"auth.tempPasswordExpired": "Temporary password expired. Ask an admin to reset your password.",
|
|
|
|
"changePassword.title": "Change Password",
|
|
"changePassword.tempPassword": "Your account uses a temporary password. Please set a new password to continue.",
|
|
"changePassword.newPassword": "New password",
|
|
"changePassword.minChars": "Minimum 8 characters.",
|
|
"changePassword.passwordTooShort": "Password must be at least 8 characters.",
|
|
|
|
"movies.title": "Movies",
|
|
"movies.lastUpdated": "Last movie update:",
|
|
"movies.watchedRatio": "Watched: {watched} / {total} ({percent}%)",
|
|
"movies.timeUntilOscars": "Time until the Oscars ({date} {year}) — {timeLeft}",
|
|
"movies.timeUntilOscarsLabel": "Time until the Oscars",
|
|
"movies.daysLeft": "{days} days",
|
|
"movies.hoursLeft": "{hours} hours",
|
|
"movies.unwatchedOnly": "Unwatched movies only",
|
|
"movies.clickToPlay": "Click the poster or title to open the player.",
|
|
"movies.watched": "WATCHED",
|
|
"movies.noSource": "No source",
|
|
"movies.nominatedCategories": "Nominated categories",
|
|
"movies.resumeAt": "Resume at {time}",
|
|
"movies.userRating": "User rating {rating}",
|
|
"movies.errorLoading": "Error loading.",
|
|
"movies.errorLoadingList": "Unable to load movie list. Try again in a moment.",
|
|
"movies.errorLoading": "Unable to load movies. Check your connection and try again.",
|
|
"movies.unableToLoadMovies": "Unable to load movies. Please try again later.",
|
|
"movies.unableToLoadMoviesNetwork": "Unable to load movies. Check your connection and try again.",
|
|
"movies.loadingMovies": "Loading movies",
|
|
"movies.fetchingData": "Fetching data…",
|
|
"movies.viewOnImdb": "View on IMDb",
|
|
|
|
"checklist.title": "Checklist",
|
|
"checklist.seen": "Seen",
|
|
"checklist.filmTitle": "Title",
|
|
"checklist.date": "Date",
|
|
"checklist.watchedOn": "Watched on:",
|
|
"checklist.confirmRemoval": "Confirm removal",
|
|
"checklist.removeConfirmText": "Are you sure you want to remove {title} from your list?",
|
|
"checklist.moviesToWatchPerDay": "Movies to watch per day: {count} films",
|
|
"checklist.congratulations": "Congratulations! very nice 🎉🎉🎉",
|
|
"checklist.browserNoVideo": "Your browser does not support video.",
|
|
"checklist.loadingChecklist": "Loading checklist",
|
|
"checklist.errorLoading": "Error loading.",
|
|
"checklist.unableToLoad": "Unable to load checklist. Please try again later.",
|
|
"checklist.unableToLoadNetwork": "Unable to load checklist. Check your connection and try again.",
|
|
"checklist.march15": "March 15",
|
|
"checklist.loadingMovies": "Loading movies…",
|
|
|
|
"picks.title": "My picks",
|
|
"picks.myPicks": "My picks",
|
|
"picks.pageTitleWithYear": "Oscar Pool ({year}) - My picks",
|
|
"picks.pageTitleChoicesWithYear": "Oscar Pool ({year}) - My picks",
|
|
"picks.scores": "Scores",
|
|
"picks.winners": "Winners",
|
|
"picks.adminBadge": "Admin",
|
|
"picks.year": "Year:",
|
|
"picks.progress": "Progress:",
|
|
"picks.reload": "Reload",
|
|
"picks.loadingCategories": "Loading categories…",
|
|
"picks.scoresCalculatedAfterWinners": "Scores will be calculated after marking winners.",
|
|
"picks.winnersMarked": "winners marked",
|
|
"picks.noCategory": "No category",
|
|
"picks.noChoice": "No choice",
|
|
"picks.category": "Category",
|
|
"picks.choice": "Choice",
|
|
"picks.nominees": "Nominees",
|
|
"picks.noCategoriesFound": "No categories found for year {year}",
|
|
"picks.adminMustImportCategories": "An administrator must first import the categories.",
|
|
"picks.selectionHeader": "Selection",
|
|
"picks.winnerHeader": "Winner",
|
|
"picks.noCategoriesAvailable": "No categories available",
|
|
"picks.winnerMarkedSuccess": "Winner marked successfully",
|
|
"picks.winnerRemoved": "Winner removed",
|
|
"picks.noWinnerMarked": "No winner marked. Scores will be calculated once winners are set.",
|
|
"picks.scoresCalculated": "Scores calculated! {count} user(s) evaluated.",
|
|
"picks.scoresRefreshed": "Scores refreshed",
|
|
"picks.calculatingScores": "Calculating scores…",
|
|
"picks.calculateScores": "Calculate scores",
|
|
"picks.dataRefreshed": "Data refreshed",
|
|
"picks.noScoresAvailable": "No scores available. Users must first submit their picks.",
|
|
"picks.details": "Details",
|
|
"picks.choicesOf": "Choices of {name}",
|
|
"picks.noDetailsAvailable": "No details available.",
|
|
"picks.summary": "Summary",
|
|
"picks.correct": "{count} correct",
|
|
"picks.incorrect": "{count} incorrect",
|
|
"picks.correctPicks": "Correct ({count})",
|
|
"picks.errorLoadingCategories": "Error loading categories: {error}",
|
|
"picks.preparingPage": "Preparing page…",
|
|
"picks.errorAutoSaving": "Error auto-saving: {error}",
|
|
"picks.incompleteSelection": "You have selected only {selected} out of {total} categories. Do you want to save anyway?",
|
|
"picks.successSaved": "Your picks have been saved successfully!",
|
|
"picks.errorSubmitting": "Error submitting picks: {error}",
|
|
"picks.reloaded": "Picks reloaded",
|
|
"picks.categoryHeader": "Category",
|
|
"picks.userHeader": "User",
|
|
"picks.winnerMarked": "Winner marked successfully",
|
|
"picks.winnerDeleted": "Winner deleted",
|
|
"picks.errorUpdatingWinner": "Error: {error}",
|
|
"picks.noWinnersMarked": "No winners marked. Scores will be calculated once winners are defined.",
|
|
"picks.scoresCalculated": "Scores calculated successfully! {count} user(s) evaluated.",
|
|
"picks.errorCalculatingScores": "Error: {error}",
|
|
"picks.errorLoadingScores": "Error loading scores.",
|
|
"picks.incorrectPicks": "Incorrect ({count})",
|
|
"picks.detailsButton": "Details",
|
|
"picks.userChoicesTitle": "Picks for {user}",
|
|
"picks.noDetailsAvailable": "No details available.",
|
|
"picks.summaryTitle": "Summary",
|
|
"picks.correctCountLabel": "correct",
|
|
"picks.incorrectCountLabel": "incorrect",
|
|
"picks.totalCountLabel": "total",
|
|
"picks.correctSectionTitle": "Correct ({count})",
|
|
"picks.incorrectSectionTitle": "Incorrect ({count})",
|
|
"picks.choiceLabel": "Choice",
|
|
"picks.winnerLabel": "Winner",
|
|
"picks.noWinnerMarkedShort": "No winner marked",
|
|
"picks.noChoicesToShow": "No picks to show.",
|
|
"picks.loadingTitle": "Loading picks",
|
|
"picks.loadingSubtitle": "Fetching data…",
|
|
"picks.yourChoice": "Choice: {choice}",
|
|
"picks.winner": "Winner: {winner}",
|
|
"picks.noWinnerMarkedYet": "No winner marked",
|
|
"picks.noPicksToShow": "No picks to show.",
|
|
"picks.partialSaveConfirm": "You have only selected {selected} out of {total} categories. Do you want to save anyway?",
|
|
"picks.savedSuccessfully": "Your picks have been saved successfully!",
|
|
"picks.errorSaving": "Error saving: {error}",
|
|
"picks.errorLoadingCategories": "Error loading categories: {error}",
|
|
"picks.autoSaveError": "Auto-save error: {error}",
|
|
"picks.picksReloaded": "Picks reloaded",
|
|
"picks.choiceDetails": "Choice details",
|
|
"picks.loadingPicks": "Loading picks",
|
|
|
|
"viewPicks.title": "View All Picks",
|
|
"viewPicks.overview": "Overview of all user picks",
|
|
"viewPicks.usersSubmitted": "{count} user(s) have submitted their picks",
|
|
"viewPicks.loadingPicks": "Loading picks…",
|
|
"viewPicks.noPicks": "No user has submitted picks for year {year} yet.",
|
|
"viewPicks.picksRefreshed": "Picks refreshed",
|
|
"viewPicks.errorLoading": "Error loading picks: {error}",
|
|
"viewPicks.unknownUser": "Unknown user",
|
|
"viewPicks.categoriesCount": "{count} / {total} categories",
|
|
"viewPicks.noPicks2": "No picks recorded",
|
|
"viewPicks.submittedOn": "Submitted on: {date}",
|
|
"viewPicks.winnerBadge": "Winner",
|
|
|
|
"player.title": "Player",
|
|
"player.loading": "Loading…",
|
|
"player.quality": "Quality",
|
|
"player.high": "High",
|
|
"player.low": "Low",
|
|
"player.rateThisFilm": "Rate this film",
|
|
"player.star": "{count} star",
|
|
"player.stars": "{count} stars",
|
|
"player.source": "Source",
|
|
"player.progress": "Progress",
|
|
"player.noVodLink": "No VOD link configured for this movie.",
|
|
"player.missingMovieId": "Missing movie id.",
|
|
"player.noPlayableSource": "No playable source configured for this movie.",
|
|
"player.beginning": "Start",
|
|
"player.resuming": "Resuming",
|
|
"player.resumingAt": "Resuming at {time}",
|
|
"player.preparingResume": "Preparing resume…",
|
|
"player.connectionRequired": "Connection required for saving.",
|
|
"player.connection": "Connection",
|
|
"player.playFromBeginning": "Playing from the beginning",
|
|
"player.sessionExpired": "Session expired. Please reconnect to continue saving progress.",
|
|
"player.saving": "Saving…",
|
|
"player.saved": "Saved at {time}.",
|
|
"player.loadingPlayer": "Loading player…",
|
|
"player.unableToIdentifyUser": "Unable to identify user for saving progress.",
|
|
|
|
"common.continueQuestion": "Continue?",
|
|
|
|
"stats.title": "Statistics",
|
|
"stats.pageTitle": "User Statistics",
|
|
"stats.ranking": "Ranking",
|
|
"stats.winners": "Winners 🏆",
|
|
"stats.completers": "100%",
|
|
"stats.rank": "#",
|
|
"stats.name": "Name",
|
|
"stats.films": "Movies",
|
|
"stats.correctPicks": "Correct picks",
|
|
"stats.points": "Points",
|
|
"stats.year": "Year",
|
|
"stats.winnersColumn": "Winner(s)",
|
|
"stats.completersHelp": "Users who have watched 100% (by year)",
|
|
"stats.noWinnersDefined": "No winners defined.",
|
|
"stats.noYearsFound": "No years found.",
|
|
"stats.unableToLoadRanking": "Unable to load the ranking right now.",
|
|
"stats.totalFilms": "Total movies",
|
|
"stats.names": "Names",
|
|
"stats.moviesWatched": "Movies watched",
|
|
"stats.noMoviesToShow": "No movies to show.",
|
|
|
|
"stats.loading": "Loading…",
|
|
"stats.preparingPage": "Preparing page…",
|
|
"stats.loadingStats": "Loading statistics",
|
|
"stats.fetchingData": "Fetching data…",
|
|
"stats.deletedUser": "(deleted user)",
|
|
"stats.tie": "tie",
|
|
"stats.unableToLoadCompleters": "Unable to load 100% completers.",
|
|
"stats.unnamed": "(unnamed)",
|
|
"stats.openLink": "Open link",
|
|
"stats.openPlayer": "Open player",
|
|
"stats.watchedOn": "Watched on {date}",
|
|
"stats.watchedMoviesUser": "Watched movies — {user} ({count})",
|
|
"stats.watchedMovies": "Watched movies ({count})",
|
|
"stats.filmCount": "{count} movie{plural}",
|
|
"stats.noFilms": "0 movies",
|
|
|
|
"admin.movies.noMovies": "No movies.",
|
|
|
|
"admin.title": "Oscar Pool - Admin",
|
|
|
|
"admin.tabs.settings": "Settings",
|
|
"admin.tabs.users": "Users",
|
|
"admin.tabs.modal100": "Modal 100%",
|
|
"admin.tabs.winners": "Winners",
|
|
"admin.tabs.oscarCategories": "Oscar Categories",
|
|
"admin.tabs.backupRestore": "Backup / Restore",
|
|
"admin.tabs.version": "Version",
|
|
|
|
"admin.settings.info": "Global site settings (year, dates, player options).",
|
|
"admin.settings.oscarDate": "Oscar Date",
|
|
"admin.settings.visibility": "Visibility",
|
|
"admin.settings.language": "Language",
|
|
"admin.settings.oscarDateDesc": "Configure the ceremony date for the countdown (Films & Checklist). Default: March 15.",
|
|
"admin.settings.oscarDateDefaultShort": "— (default: 03-15)",
|
|
"admin.settings.year": "Year",
|
|
"admin.settings.applyActiveYear": "Apply active year",
|
|
"admin.settings.yearBasedOnMovies": "Based on years present in movies.",
|
|
"admin.settings.date": "Date",
|
|
"admin.settings.dateFormat": "Format: YYYY-MM-DD.",
|
|
"admin.settings.configuredDates": "Configured dates",
|
|
"admin.settings.pointsDesc": "Configure points awarded for watched movies and correct Oscar picks.",
|
|
"admin.settings.pointsPerMovie": "Points per movie watched",
|
|
"admin.settings.pointsPerMovieDesc": "Points awarded for each completed movie.",
|
|
"admin.settings.pointsPerCorrectPick": "Points per correct pick",
|
|
"admin.settings.pointsPerCorrectPickDesc": "Points awarded for each correct Oscar pick.",
|
|
"admin.settings.reload": "Reload",
|
|
"admin.settings.pointsCalculation": "Points calculation",
|
|
"admin.settings.total": "Total",
|
|
"admin.settings.moviesWatched": "Movies watched",
|
|
"admin.settings.correctPicks": "Correct picks",
|
|
"admin.settings.pointsSaved": "Configuration saved: {p} pts/movie, {q} pts/correct pick",
|
|
"admin.settings.noYearAddMovie": "No year (add a movie)",
|
|
"admin.settings.defaultBadge": "Default",
|
|
"admin.settings.pointsMustBeNonNegative": "Points must be zero or positive",
|
|
|
|
"admin.visibility.showPicksFeatures": "Show \"Picks\" features",
|
|
"admin.visibility.showPicksFeaturesDesc": "Controls display of \"My picks\" button in navigation and \"Correct picks\" column in statistics.",
|
|
"admin.visibility.showSourceProgress": "Show \"Source\" + \"Progress\" (admins)",
|
|
"admin.visibility.showSourceProgressDesc": "Controls display of debug block in player.html (admins only).",
|
|
"admin.visibility.showVersionTab": "Show \"Version\" tab",
|
|
"admin.visibility.showVersionTabDesc": "Controls display of the \"Version\" tab in the admin panel.",
|
|
"admin.visibility.saved": "Configuration saved",
|
|
"admin.visibility.saveError": "Error saving configuration: {error}",
|
|
|
|
"admin.language.siteLanguage": "Site language",
|
|
"admin.language.siteLanguageDesc": "Changes the language for all users. Page refresh required.",
|
|
|
|
"admin.version.info": "Controls the version displayed in the footer (stored in DB). Click ✓ to activate a version, then check the preview.",
|
|
"admin.version.createNew": "Create a new version",
|
|
"admin.version.createNewDesc": "Adds an entry to the history (you can activate it immediately).",
|
|
"admin.version.version": "Version",
|
|
"admin.version.versionPlaceholder": "e.g.: 1.0.1",
|
|
"admin.version.versionExample": "E.g.: 1.2.3",
|
|
"admin.version.messageOptional": "Message (optional)",
|
|
"admin.version.messagePlaceholder": "e.g.: Hotfix login",
|
|
"admin.version.messageDesc": "Short & readable (shown in footer).",
|
|
"admin.version.create": "Create",
|
|
"admin.version.createAndActivate": "Create & activate",
|
|
"admin.version.created": "Version created.",
|
|
"admin.version.createdAndActivated": "Version created & activated.",
|
|
"admin.version.confirmDelete": "Delete this version?",
|
|
|
|
"admin.backup.chooseFile": "Choose a backup file (.ndjson.gz).",
|
|
"admin.backup.restoreWithDrop": "RESTORE with DROP: all restored collections will be replaced.",
|
|
"admin.backup.restoreWithoutDrop": "RESTORE without DROP: high risk of duplicates/errors if the DB already contains data.",
|
|
|
|
"admin.modal100.info": "Content displayed when a user has watched 100% of films.",
|
|
"admin.modal100.content": "Content",
|
|
"admin.modal100.contentDesc": "Edit the content then save. Preview is live (not saved until you save).",
|
|
"admin.modal100.titleLabel": "Title",
|
|
"admin.modal100.titlePlaceholder": "Congratulations! ...",
|
|
"admin.modal100.textOptional": "Text (optional)",
|
|
"admin.modal100.textPlaceholder": "Text displayed in the modal (line breaks preserved)",
|
|
"admin.modal100.textDesc": "Displayed as plain text (safe). Leave empty if not needed.",
|
|
"admin.modal100.htmlOptional": "HTML (optional)",
|
|
"admin.modal100.htmlDesc": "Displayed as HTML (server removes script tags and on* handlers).",
|
|
"admin.modal100.videoSrc": "Video src (optional)",
|
|
"admin.modal100.videoSrcDesc": "Relative path (e.g.: video/reward.mp4) or full URL. Empty = no video.",
|
|
"admin.modal100.browserNoVideo": "Your browser does not support video.",
|
|
"admin.modal100.textLabel": "Text",
|
|
"admin.modal100.textInfoShort": "displayed as-is (safe), line breaks preserved.",
|
|
"admin.modal100.htmlInfoShort": "server removes script tags and on* attributes.",
|
|
"admin.modal100.videoLabel": "Video",
|
|
"admin.modal100.videoInfoShort": "accepts relative path (e.g.: video/reward.mp4) or full URL.",
|
|
|
|
"admin.users.usersCount": "user(s)",
|
|
"admin.users.addUser": "Add user",
|
|
"admin.users.name": "Name",
|
|
"admin.users.status": "Status",
|
|
"admin.users.actions": "Actions",
|
|
"admin.users.loading": "Loading list…",
|
|
"admin.users.resetPassword": "Reset password",
|
|
"admin.users.resetPasswordDesc": "Generates a temporary password. The user will need to change it on next login.",
|
|
"admin.users.tempPasswordOnce": "Temporary password (shown once)",
|
|
"admin.users.generate": "Generate",
|
|
"admin.users.deleteUser": "Delete user",
|
|
"admin.users.aboutToDelete": "You are about to delete:",
|
|
"admin.users.actionIrreversible": "This action is irreversible.",
|
|
"admin.users.typeEmailToConfirm": "To confirm, type the exact email:",
|
|
"admin.users.emailPlaceholder": "[email protected]",
|
|
"admin.users.deleteButtonActivates": "The \"Delete\" button will activate only if the email matches.",
|
|
"admin.users.addUserDesc": "Create an account with a temporary password (shown once). The user will need to change it on next login.",
|
|
"admin.users.namePlaceholder": "First name / nickname",
|
|
"admin.users.reset": "Reset",
|
|
"admin.users.cannotDeleteSelf": "You cannot delete your own account from here.",
|
|
"admin.users.adminDeleteDisabled": "Deleting admin accounts is disabled via this interface.",
|
|
"admin.users.creating": "Creating…",
|
|
"admin.users.nameRequired": "Name required.",
|
|
"admin.users.emailRequired": "Email required.",
|
|
"admin.users.userCreated": "User created. Temporary password generated.",
|
|
"admin.users.tempPasswordExpires": "Expires: {expiresAt}",
|
|
"admin.users.tempPasswordGenerating": "Generating temporary password…",
|
|
"admin.users.tempPasswordGenerated": "Temporary password generated. Copy it and send it to the user.",
|
|
"admin.users.tempPasswordGeneratedOnReset": "Temporary password generated. The user must change it on next login.",
|
|
"admin.users.cannotCopyAuto": "Unable to copy automatically. Copy manually.",
|
|
"admin.users.copied": "Copied.",
|
|
"admin.users.userDeleted": "User deleted.",
|
|
"admin.movies.idCopied": "Movie ID copied.",
|
|
"admin.movies.addedWithSubtitles": "Movie added with subtitles.",
|
|
"admin.movies.addedSuccessfully": "Movie added successfully.",
|
|
"admin.movies.addedNoSubtitles": "Movie added, but subtitles were not uploaded: {error}",
|
|
"admin.movies.updatedSuccessfully": "Movie updated successfully.",
|
|
"admin.movies.updatedNoSubtitles": "Movie updated, but subtitles were not uploaded: {error}",
|
|
"admin.language.saved": "Language saved",
|
|
|
|
"admin.movies.addInfo": "Add movies: this section auto-fetches movie info via imdb_id (OMDb).",
|
|
"admin.movies.oscarYear": "Oscar year",
|
|
"admin.movies.oscarYearDesc": "Separates movies & stats by year.",
|
|
"admin.movies.category": "Category",
|
|
"admin.movies.allYears": "All",
|
|
"admin.movies.refreshOmdb": "Refresh OMDb",
|
|
"admin.movies.selectAll": "Select all",
|
|
"admin.movies.selected": "selected",
|
|
"admin.movies.sel": "Sel.",
|
|
"admin.movies.titleCol": "Title",
|
|
"admin.movies.player": "Player",
|
|
"admin.movies.year": "Year",
|
|
"admin.movies.editMovie": "Edit movie",
|
|
"admin.movies.info": "Info",
|
|
"admin.movies.playerVideo": "Player / Video",
|
|
"admin.movies.imdbIdLabel": "IMDB ID (e.g.: tt1234567)",
|
|
"admin.movies.rating": "Rating (imdbRating)",
|
|
"admin.movies.runtime": "Runtime",
|
|
"admin.movies.runtimeExample": "E.g.: 142 min",
|
|
"admin.movies.camTag": "CAM tag",
|
|
"admin.movies.refreshFromOmdb": "Refresh from OMDb (overwrites title / plot / rating / runtime / poster)",
|
|
"admin.movies.refreshFromOmdbDesc": "If checked, the server makes a new OMDb call via IMDB ID when saving.",
|
|
"admin.movies.posterUrl": "Poster URL",
|
|
"admin.movies.description": "Description (Plot)",
|
|
"admin.movies.playerSource": "Player (source)",
|
|
"admin.movies.mode": "Mode",
|
|
"admin.movies.modeDesc": "Auto = video_src → embed_src → vod_link.",
|
|
"admin.movies.videoUrl": "Video URL (mp4/webm/m3u8)",
|
|
"admin.movies.videoUrlDesc": "If you use a server file (below) and leave this empty, it will auto-use /api/video/<movieId>.",
|
|
"admin.movies.serverVideoFile": "Server video file (optional)",
|
|
"admin.movies.serverVideoFileDesc": "Relative path under VIDEO_FILES_DIR (default: public/video).",
|
|
"admin.movies.serverVideoFileLow": "Server video file (low quality, optional)",
|
|
"admin.movies.serverVideoFileLowDesc": "Relative path under VIDEO_FILES_DIR. Example: LOW/123.LOW.mp4.",
|
|
"admin.movies.subtitles": "Subtitles (SRT, optional)",
|
|
"admin.movies.existingSubtitles": "Existing subtitles:",
|
|
"admin.movies.subtitlesNote": "Add one file per language; repeat upload for multiple subtitles.",
|
|
"admin.movies.removeAllSubtitles": "Remove all subtitles",
|
|
"admin.movies.removeAllSubtitlesDesc": "Deletes VTT/SRT files and resets language/label fields.",
|
|
"admin.movies.confirmRemoveSubtitle": "Delete this subtitle?",
|
|
"admin.movies.confirmDeleteSelected": "Delete {count} movie(s)? This action is irreversible.",
|
|
"admin.movies.subtitleLang": "Language (e.g.: fr, en)",
|
|
"admin.movies.subtitleLabel": "Label (displayed)",
|
|
"admin.movies.subtitleDefault": "Default",
|
|
"admin.movies.embedUrl": "Embed URL or iframe code",
|
|
"admin.movies.legacyVodLink": "Legacy VOD link (optional)",
|
|
"admin.movies.confirmRefreshOmdb": "Refresh {count} movie(s){yearLabel} from OMDb? This operation may overwrite info (title, plot, rating, poster, runtime).",
|
|
|
|
"admin.backup.info": "MongoDB database backup and restore.",
|
|
"admin.backup.backup": "Backup",
|
|
"admin.backup.restore": "Restore",
|
|
"admin.backup.help": "Help",
|
|
"admin.backup.backups": "Backups",
|
|
"admin.backup.backupsDesc": "Format .ndjson.gz, stored on server.",
|
|
"admin.backup.createBackup": "Create backup",
|
|
"admin.backup.file": "File",
|
|
"admin.backup.size": "Size",
|
|
"admin.backup.modified": "Modified",
|
|
"admin.backup.openTabToLoad": "Open tab to load list…",
|
|
"admin.backup.restoreBackup": "Restore a backup",
|
|
"admin.backup.restoreDesc": "Restore a .ndjson.gz file. The drop option is recommended.",
|
|
"admin.backup.restoreWarning": "Restore can overwrite data. Make a backup first if needed.",
|
|
"admin.backup.backupFile": "Backup file",
|
|
"admin.backup.dropBeforeRestore": "Drop collections before restore (recommended)",
|
|
"admin.backup.tip": "Tip",
|
|
"admin.backup.tipDesc": "Use drop unless you know exactly what you're doing (otherwise risk of duplicates/errors).",
|
|
"admin.backup.howItWorks": "How it works",
|
|
"admin.backup.backupHowDesc": "creates a .ndjson.gz file (MongoDB export) and keeps it on the server.",
|
|
"admin.backup.download": "Download",
|
|
"admin.backup.downloadDesc": "retrieves the file locally (useful before a risky operation).",
|
|
"admin.backup.restoreHowDesc": "imports the file. With drop, restored collections are deleted first.",
|
|
"admin.backup.quickCheck": "Quick check",
|
|
"admin.backup.quickCheckDesc": "After restore, reload the page and check \"Films\", \"Checklist\" and \"Stats\".",
|
|
"admin.backup.confirmDelete": "Delete backup \"{name}\"?",
|
|
"admin.backup.creating": "Creating…",
|
|
"admin.backup.created": "Backup created: {name}",
|
|
"admin.backup.noDocumentsInserted": "No documents inserted (or empty backup).",
|
|
"admin.backup.noDocumentsInserted": "No documents inserted (or empty backup).",
|
|
|
|
"admin.categories.info": "Create and manage categories manually.",
|
|
"admin.categories.manualCreation": "Manual creation",
|
|
"admin.categories.categoryCreated": "Category created successfully.",
|
|
"admin.categories.list": "List",
|
|
"admin.categories.createManually": "Create a category manually",
|
|
"admin.categories.createManuallyDesc": "Add a category and its nominees one by one.",
|
|
"admin.categories.categoryNumber": "Category number",
|
|
"admin.categories.categoryName": "Category name",
|
|
"admin.categories.nomineesOnePerLine": "Nominees (one per line)",
|
|
"admin.categories.nomineesDesc": "Enter one nominee per line.",
|
|
"admin.categories.note": "Note",
|
|
"admin.categories.noteDesc": "You can create multiple categories for the same year. The category number must be unique per year.",
|
|
"admin.categories.importedCategories": "Imported categories",
|
|
"admin.categories.manageExisting": "Manage existing categories",
|
|
"admin.categories.allYears": "All years",
|
|
"admin.categories.categoriesSelected": "category(ies) selected",
|
|
"admin.categories.editCategory": "Edit category",
|
|
"admin.categories.selectAllTitle": "Select all",
|
|
"admin.categories.table.number": "#",
|
|
"admin.categories.table.name": "Name",
|
|
"admin.categories.table.nominees": "Nominees",
|
|
"admin.categories.table.actions": "Actions",
|
|
"admin.categories.confirmDelete": "Are you sure you want to delete this category?",
|
|
"admin.categories.confirmDeleteMultiple": "Are you sure you want to delete {count} category(ies)?\n\n{names}\n\nThis action is irreversible.",
|
|
"admin.categories.noneFound": "No categories found.",
|
|
"admin.categories.noneFoundYear": "No categories found for year {year}.",
|
|
"admin.categories.fillAllFields": "Please fill in all fields",
|
|
"admin.categories.enterAtLeastOneNominee": "Please enter at least one nominee",
|
|
"admin.categories.numberBetween1And50": "Category number must be between 1 and 50",
|
|
"admin.categories.bulkDeleteConfirm": "Are you sure you want to delete {count} category(ies)?\n\n{names}\n\nThis action is irreversible.",
|
|
|
|
"admin.winners.info": "Define one or more winners per year (tie possible).",
|
|
"admin.winners.manage": "Manage",
|
|
"admin.winners.addWinner": "Add a winner",
|
|
"admin.winners.addWinnerDesc": "You can add multiple winners for the same year (tie).",
|
|
"admin.winners.user": "User",
|
|
"admin.winners.removeNote": "To remove: use the list below.",
|
|
"admin.winners.pointsOptional": "Points (optional)",
|
|
"admin.winners.pointsPlaceholder": "e.g.: 42",
|
|
"admin.winners.pointsDesc": "Leave empty if not applicable.",
|
|
"admin.winners.deleteAll": "Delete all",
|
|
"admin.winners.currentWinners": "Current winners",
|
|
"admin.winners.globalView": "Global view (all years).",
|
|
"admin.winners.howItWorks": "How it works",
|
|
"admin.winners.multipleWinners": "A year can have multiple winners (tie).",
|
|
"admin.winners.tieLabel": "(tie)",
|
|
"admin.winners.tie": "(tie)",
|
|
"admin.winners.chooseUser": "Choose a user.",
|
|
"admin.winners.confirmDeleteAll": "Delete all winners for {year}?",
|
|
"admin.player.errorLoading": "Unable to load player settings.",
|
|
"admin.versions.updated": "Version updated.",
|
|
"admin.versions.deleted": "Version deleted.",
|
|
"admin.winners.pointsOptionalInfo": "Points are optional (display only).",
|
|
"admin.winners.removeInfo": "To remove a winner, use the \"Remove\" button in the \"Current winners\" list.",
|
|
"admin.winners.tipDesc": "If you change the site's active year, also check the winners for that year.",
|
|
"admin.winners.removedFor": "Winner removed for {year}.",
|
|
"admin.winners.reloaded": "Winners reloaded.",
|
|
"admin.winners.deletedFor": "Winner deleted for {year}.",
|
|
"admin.winners.addedFor": "Winner added for {year}.",
|
|
"admin.backup.deleted": "Backup deleted.",
|
|
"admin.backup.restoreComplete": "Restore complete.",
|
|
"admin.movies.deletedSuccessfully": "Movie(s) deleted successfully.",
|
|
"admin.movies.updatedFromOmdb": "{count} movie(s) updated from OMDb.",
|
|
"admin.movies.omdbResults": "{success} success, {errors} error(s). {details}",
|
|
"admin.movies.subtitleDeleted": "Subtitle deleted.",
|
|
"admin.modal100.saved": "100% modal saved.",
|
|
"admin.content.reloaded": "Content reloaded.",
|
|
"admin.oscars.invalidYear": "Invalid year. Expected: 2026",
|
|
"admin.oscars.dateSaved": "Oscars date saved for {year}: {date}",
|
|
"admin.oscars.dateCleared": "Oscars date cleared for {year} (reverted to default: March 15).",
|
|
"admin.player.settingsSaved": "Player settings saved.",
|
|
"admin.player.settingsReloaded": "Player settings reloaded.",
|
|
"admin.activeYear.applied": "Active year applied: {year}",
|
|
"admin.configuration.reloaded": "Configuration reloaded.",
|
|
"admin.categories.categoryNotFound": "Category not found.",
|
|
"admin.categories.categoryDeleted": "Category deleted.",
|
|
"admin.categories.categoryUpdated": "Category updated successfully.",
|
|
"admin.categories.deletedCount": "{count} category/categories deleted{errors}",
|
|
"admin.oscars.invalidYearShort": "Invalid year.",
|
|
"admin.movies.subtitleDeleted": "Subtitle deleted.",
|
|
"admin.categories.categoryInvalid": "Invalid category.",
|
|
|
|
"footer.oscarPool": "Oscar Pool",
|
|
"footer.by": "by",
|
|
"footer.versionNotConfigured": "Now in full HD",
|
|
"footer.versionUnavailable": "Version unavailable (DB)."
|
|
}
|