nerdware/apps/web/src/i18n/en.ts
AyoubBenziza 1727b84644 feat: rebus game mode
New "Rébus" mode: guess the geek work from an emoji puzzle (free-text answer,
tolerant matching). Implemented as a quiz format `rebus` — reuses the whole quiz
machinery (pool, anti-repeat, speed scoring, recap, bots, back-office):

- shared: QuizFormat/GameType/MixMode + RoundConfig.pool gain "rebus"
- server: rebus is a text format; pool composes a rebus sub-pool (not filtered by
  category); ~9 seeded emoji rebus in the in-code bank; admin accepts the format
- client: lobby tile + sub-mode + count; big centered emoji display in the round;
  dedicated transition theme (🧩 RÉBUS); FR/EN strings; back-office form option

Verified e2e: a rebus game serves only rebus rounds with emoji prompts and the
recap shows the right answers. typecheck/lint/build/24 tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 14:46:31 +02:00

190 lines
5.5 KiB
TypeScript

// Dictionnaire EN. Doit respecter la forme de `fr` (Dict) — sinon erreur TS.
import type { Dict } from "./context"
export const en: Dict = {
common: {
you: "(you)",
back: "Back to home",
backShort: "Back",
loading: "Loading…",
error: "Error",
},
whatsNew: {
button: "What's new",
title: "What's new",
},
home: {
tagline: "Geek culture party game",
create: "Create a room",
orJoin: "or join",
codePlaceholder: "CODE",
join: "Join",
connecting: "Connecting to server…",
},
pseudo: {
room: (code: string) => `Room ${code}`,
choose: "Choose your nickname",
placeholder: "Your nickname",
enter: "Enter the room",
},
joinPage: {
connecting: (code: string) => `Joining room ${code}`,
notFound: "Room not found.",
},
room: {
notFound: "Room not found or session lost.",
connected: "Connected",
disconnected: "Disconnected",
leave: "Leave",
},
roomCode: {
label: "Room code",
copyCode: "Copy code",
copyLink: "Copy invite link",
link: "Link",
copied: "Copied",
},
lobby: {
players: (n: number) => `Players (${n})`,
host: "Host",
bot: "🤖 Bot",
offline: "offline",
bots: "Bots",
settings: "Game settings",
gameMode: "Game mode",
blindtestLockHint: "3 players incl. 2 real ones (a bot can't DJ)",
blindtestUnlock:
"Blindtest unlocks at 3 players incl. 2 real ones (a bot can't DJ).",
subModes: "Included sub-modes",
quizCount: "Quiz questions",
imageCount: "Images to guess",
imageHint: "Requires “Image” questions created in the back-office.",
rebusCount: "Rebuses to guess",
categories: "Categories",
allCategories: "All",
botLevel: "🤖 Bot difficulty",
blindtestMode: "Blindtest mode",
tracksPerPlayer: "Tracks per player",
launch: (n: number) => `Start (${n} rounds)`,
launching: "Starting…",
waitTracks: (n: number) =>
`Waiting for everyone to submit their ${n} track(s).`,
waitHost: "Waiting for the host to start…",
tracksSubmitted: (n: number) => ` (${n} tracks submitted)`,
prevGames: (n: number) => `Previous games (${n})`,
myTracks: (count: number, max: number) => `Your tracks (${count}/${max})`,
youtubePlaceholder: "YouTube link",
add: "Add",
openYoutube: "Open on YouTube",
remove: "Remove",
rejected: "Rejected",
},
gameTypes: {
mixed: "Mixed",
quiz: "Quiz",
image: "Images",
rebus: "Rebus",
blindtest: "Blindtest",
},
mixModes: {
quiz: "Quiz",
image: "Images",
rebus: "Rebus",
blindtest: "Blindtest",
},
blindtestModes: {
title_artist: "Title & artist",
who_added: "Who added it?",
mixed: "Mixed",
},
botDifficulty: {
easy: "Easy",
normal: "Normal",
hard: "Hard",
},
game: {
question: (i: number, n: number) => `Question ${i} / ${n}`,
blindtest: (i: number, n: number) => `Blindtest ${i} / ${n}`,
answerSent: "Answer sent — waiting for the others",
answeredCount: (count: number, total: number) => `${count}/${total} answered`,
answer: "Answer:",
correct: "Correct! 🎉",
noAnswer: "No answer 😴",
wrong: "Wrong 💥",
yourAnswer: "Your answer",
validate: "Submit",
},
blindtest: {
enableSound: "Enable sound",
volume: "Volume",
djHint: "You're the DJ 🎧 — control playback (and vote like everyone)",
play: "Play",
pause: "Pause",
restart: "Start",
yourTrack: "It's your track!",
yourTrackTitleArtist: "You don't vote. Enjoy while the others search.",
yourTrackWhoAdded:
"You don't vote — your goal: nobody guesses you added it. +50 per fooled player.",
titlePlaceholder: "Title",
artistPlaceholder: "Artist",
whoAdded: "Who added it?",
vote: "Vote",
pickPlayer: "Pick a player",
revealTitle: "Title",
revealArtist: "Artist",
revealAddedBy: "Added by",
points: (n: number) => `+${n} points 🎉`,
submit: "Submit my answer",
},
playerCards: {
ready: "Ready",
waiting: "waiting",
},
transition: {
kind: {
quiz: "Question",
image: "Image",
rebus: "Rebus",
blindtest: "Track",
},
ready: "READY ?!",
},
end: {
over: "Game over",
winner: (name: string) => `🏆 ${name} wins!`,
copy: "Copy results",
copied: "Copied!",
replay: "Play again",
waitHostReplay: "Waiting for the host to start a new game…",
leave: "Leave",
resultsTitle: "NerdWare — Results",
ranking: "🏆 Ranking",
rounds: "Rounds",
tracksTitle: "Tracks from the game",
playlist: "Playlist",
addedBy: (name: string) => `added by ${name}`,
searchSpotify: "Search on Spotify",
openYoutube: "Open on YouTube",
awards: "Awards",
awardPerfect: "Flawless",
awardBrain: "The brain",
awardFastest: "The fastest",
awardDecoy: "Master of deception",
awardBoulet: "The dud",
recapTitle: (n: number) => `Rounds recap (${n})`,
noAnswer: "No answer",
you: " (you)",
},
errors: {
ROOM_NOT_FOUND: "This room doesn't exist.",
ROOM_IN_PROGRESS: "The game has already started.",
ALREADY_STARTED: "Game already started.",
NO_ROUNDS: "No round configured.",
NEED_THREE: "Blindtest needs at least 3 players incl. 2 real ones.",
TRACKS_PENDING: "Not all players have submitted their tracks yet.",
CODE_EXHAUSTED: "Couldn't generate a room code.",
REJOIN_FAILED: "Reconnection failed.",
UNKNOWN_MODE: "Round unavailable.",
},
}