{ "locales": { "default": "en", "supported": [ "en", "da" ] }, "frontend": { "errors": { "session_code_required": { "en": "Session code is required.", "da": "Sessionskoden er påkrævet." }, "session_fetch_failed": { "en": "Could not load lobby status.", "da": "Kunne ikke indlæse lobby-status." }, "join_failed": { "en": "Join failed. Check code or nickname and try again.", "da": "Kunne ikke joine. Tjek kode eller kaldenavn og prøv igen." }, "start_round_failed": { "en": "Could not start round. Refresh the lobby and try again.", "da": "Kunne ikke starte runden. Opdater lobbyen og prøv igen." }, "session_not_found": { "en": "Session code is invalid or the session no longer exists.", "da": "Sessionskoden er ugyldig, eller sessionen findes ikke længere." }, "nickname_invalid": { "en": "Nickname must be between 2 and 40 characters.", "da": "Kaldenavn skal være mellem 2 og 40 tegn." }, "nickname_taken": { "en": "Nickname is already taken.", "da": "Kaldenavnet er allerede taget." }, "unknown": { "en": "Action failed. Refresh status and try again.", "da": "Handlingen fejlede. Opdater status og prøv igen." } }, "ui": { "common": { "refresh": { "en": "Refresh", "da": "Opdatér" }, "retry": { "en": "Retry", "da": "Prøv igen" }, "back_to_join": { "en": "Back to join", "da": "Tilbage til join" }, "session_code": { "en": "Session code", "da": "Sessionskode" }, "status": { "en": "Status", "da": "Status" }, "prompt": { "en": "Prompt", "da": "Spørgsmål" }, "round_question_id": { "en": "Round question id", "da": "Rundespørgsmål-id" }, "round": { "en": "round", "da": "runde" }, "points_short": { "en": "pts", "da": "point" }, "unknown_error": { "en": "Unknown error", "da": "Ukendt fejl" } }, "app": { "title": { "en": "WPP Angular Shell", "da": "WPP Angular Shell" }, "home_nav": { "en": "Home", "da": "Hjem" }, "host_nav": { "en": "Host", "da": "Vært" }, "player_nav": { "en": "Player", "da": "Spiller" }, "language_label": { "en": "Language", "da": "Sprog" }, "home_badge": { "en": "Party Protocol", "da": "Party Protocol" }, "home_title": { "en": "Start or join a FupOgFakta session", "da": "Start eller join en FupOgFakta-session" }, "home_intro": { "en": "Hosts log in and create a new session. Players join with the session code from their phone or laptop.", "da": "Værter logger ind og opretter en ny session. Spillere joiner med sessionskoden fra telefon eller computer." }, "host_card_title": { "en": "Host a session", "da": "Vær vært for en session" }, "host_card_body": { "en": "Create a fresh session, control the round flow, and drive the game from the host screen.", "da": "Opret en ny session, styr runde-flowet, og kør spillet fra værtsskærmen." }, "host_login_hint": { "en": "Hosting requires a Django login. Use login first if create session says login required.", "da": "Værtsrollen kræver Django-login. Brug login først, hvis opret session siger login kræves." }, "host_login": { "en": "Login as host", "da": "Log ind som vært" }, "create_session": { "en": "Create session", "da": "Opret session" }, "creating_session": { "en": "Creating session…", "da": "Opretter session…" }, "create_session_failed": { "en": "Create session failed", "da": "Kunne ikke oprette session" }, "player_card_title": { "en": "Join as player", "da": "Join som spiller" }, "player_card_body": { "en": "Enter the session code and your nickname to join the active game from this device.", "da": "Indtast sessionskoden og dit kaldenavn for at joine det aktive spil fra denne enhed." }, "join_session": { "en": "Join session", "da": "Join session" }, "joining_session": { "en": "Joining session…", "da": "Joiner session…" }, "join_session_failed": { "en": "Join session failed", "da": "Kunne ikke joine session" } }, "host": { "title": { "en": "Host gameplay flow", "da": "Vært gameplay-flow" }, "category": { "en": "Category", "da": "Kategori" }, "start_round": { "en": "Start round", "da": "Start runde" }, "show_question": { "en": "Show question", "da": "Vis spørgsmål" }, "mix_answers": { "en": "Mix answers → guess", "da": "Bland svar → gæt" }, "calculate_scores": { "en": "Calculate scores → reveal", "da": "Udregn score → afslør" }, "load_scoreboard": { "en": "Load scoreboard", "da": "Hent scoreboard" }, "start_next_round": { "en": "Start next round", "da": "Start næste runde" }, "finish_game": { "en": "Finish game", "da": "Afslut spil" }, "retry_scoreboard": { "en": "Retry scoreboard", "da": "Prøv scoreboard igen" }, "retry_next_round": { "en": "Retry next round", "da": "Prøv næste runde igen" }, "retry_finish": { "en": "Retry finish game", "da": "Prøv afslutning igen" }, "session_refresh_failed": { "en": "Session refresh failed", "da": "Kunne ikke opdatere session" }, "scoreboard_failed": { "en": "Scoreboard failed", "da": "Scoreboard fejlede" }, "next_round_failed": { "en": "Next round failed", "da": "Næste runde fejlede" }, "finish_game_failed": { "en": "Finish game failed", "da": "Afslutning fejlede" }, "session_code_required": { "en": "Session code is required", "da": "Sessionskode er påkrævet" }, "final_leaderboard": { "en": "Final leaderboard", "da": "Finale leaderboard" }, "winner": { "en": "Winner", "da": "Vinder" }, "audio_locale_hint": { "en": "Host locale for audio references", "da": "Værtens locale for lydreferencer" }, "voice_on": { "en": "Voice on", "da": "Stemme til" }, "voice_off": { "en": "Voice off", "da": "Stemme fra" }, "replay_voice": { "en": "Replay voice", "da": "Afspil stemme igen" }, "voice_preview": { "en": "Current voice cue", "da": "Aktuel stemmetekst" }, "show_developer_state": { "en": "Show developer state", "da": "Vis udviklerstatus" }, "hide_developer_state": { "en": "Hide developer state", "da": "Skjul udviklerstatus" }, "players_label": { "en": "Players", "da": "Spillere" }, "round_actions_title": { "en": "Backstage actions", "da": "Backstage-handlinger" }, "round_actions_body": { "en": "Keep the operational controls here so the projected presenter surface can stay clean.", "da": "Hold de operationelle kontroller her, så den projicerede presenter-flade kan forblive ren." }, "no_host_action": { "en": "No host action is available for this phase yet.", "da": "Der er endnu ingen værtshandling til denne fase." }, "player_roster": { "en": "Player roster", "da": "Spilleroversigt" }, "player_roster_body": { "en": "The presenter view keeps players visible even when the control surface is hidden.", "da": "Presenter-visningen holder spillerne synlige, selv når kontrolfladen er skjult." }, "player_live": { "en": "Live", "da": "Live" }, "player_away": { "en": "Away", "da": "Væk" }, "no_players": { "en": "No players have joined this session yet.", "da": "Ingen spillere har joined denne session endnu." }, "reveal_title": { "en": "Reveal", "da": "Afsløring" }, "correct_answer": { "en": "Correct answer", "da": "Rigtigt svar" }, "lies_title": { "en": "Lies", "da": "Løgne" }, "guesses_title": { "en": "Guesses", "da": "Gæt" }, "lied_label": { "en": "lied", "da": "løj" }, "picked_label": { "en": "picked", "da": "valgte" }, "correct_label": { "en": "correct", "da": "korrekt" }, "fooled_by_label": { "en": "fooled by", "da": "narret af" }, "incorrect_label": { "en": "incorrect", "da": "forkert" }, "developer_state_title": { "en": "Developer state", "da": "Udviklerstatus" }, "developer_state_body": { "en": "Raw diagnostics, manual state input, and phase artifacts stay here instead of dominating the presenter view.", "da": "Rå diagnostik, manuel state-input og faseartefakter ligger her i stedet for at dominere presenter-visningen." }, "sync_transport_label": { "en": "Sync transport", "da": "Synk transport" }, "realtime_status_label": { "en": "Realtime status", "da": "Realtime-status" }, "last_event_label": { "en": "Last event", "da": "Seneste event" }, "presenter_control_title": { "en": "Backstage control", "da": "Backstage-kontrol" }, "presenter_scene_title_lobby": { "en": "Room open", "da": "Rummet er åbent" }, "presenter_scene_title": { "en": "Question in play", "da": "Spørgsmålet er i spil" }, "presenter_scene_title_guess": { "en": "Answer mix in play", "da": "Svarmixet er i spil" }, "presenter_scene_title_reveal": { "en": "Round reveal", "da": "Rundens afsløring" }, "presenter_scene_title_scoreboard": { "en": "Scores on the board", "da": "Scoren er på tavlen" }, "presenter_scene_title_finished": { "en": "Final standings", "da": "Endelige placeringer" }, "presenter_scene_body_lobby": { "en": "Let the room gather around the join code while the roster fills in and the next round gets ready.", "da": "Lad rummet samle sig om join-koden, mens spilleroversigten fyldes op, og næste runde bliver klar." }, "presenter_scene_body_lie": { "en": "Keep the prompt on the main screen while players invent believable lies on their own devices.", "da": "Hold spørgsmålet på hovedskærmen, mens spillerne finder på troværdige løgne på deres egne enheder." }, "presenter_scene_body_guess": { "en": "Keep every option readable from the main screen while the room locks in a final guess.", "da": "Hold alle svar læsbare på hovedskærmen, mens rummet låser sit endelige gæt fast." }, "presenter_scene_body_reveal": { "en": "Show the truth first, then let the room track which bluffs landed and who got fooled.", "da": "Vis sandheden først, og lad derefter rummet følge hvilke bluffs der landede, og hvem der blev narret." }, "presenter_scene_body_scoreboard": { "en": "Let the scores breathe on the main screen before deciding whether to move on or close the game.", "da": "Lad scoren få luft på hovedskærmen, før I beslutter om spillet skal videre eller lukkes." }, "presenter_scene_body_finished": { "en": "Hold the closing standings on screen long enough for the room to take in the result.", "da": "Hold slutstillingen på skærmen længe nok til, at rummet kan tage resultatet ind." }, "presenter_scene_next_step": { "en": "Next host beat", "da": "Næste værtsslag" }, "presenter_scene_answers_title": { "en": "Answer cards", "da": "Svarkort" }, "presenter_scene_answers_body": { "en": "These are the options currently projected for the room.", "da": "Det er de svarmuligheder, der lige nu projiceres til rummet." }, "presenter_scene_cue_start_label": { "en": "Open the next round", "da": "Åbn næste runde" }, "presenter_scene_cue_start_body": { "en": "When the room is settled, launch the first prompt and move the presenter surface into the active round.", "da": "Når rummet har sat sig, så start det første spørgsmål og flyt presenter-fladen ind i den aktive runde." }, "presenter_scene_cue_show_label": { "en": "Bring the question into focus", "da": "Bring spørgsmålet i fokus" }, "presenter_scene_cue_show_body": { "en": "Use the prompt as the room anchor, then advance when the round is visually settled.", "da": "Brug spørgsmålet som rummets anker, og gå videre når runden visuelt har sat sig." }, "presenter_scene_cue_mix_label": { "en": "Move into the answer mix", "da": "Gå videre til svarmixet" }, "presenter_scene_cue_mix_body": { "en": "Once the room is ready, mix the house lies and player lies into the next guessing moment.", "da": "Når rummet er klar, så mix husets løgne og spillernes løgne ind i næste gæt-øjeblik." }, "presenter_scene_cue_reveal_label": { "en": "Trigger the reveal", "da": "Start afsløringen" }, "presenter_scene_cue_reveal_body": { "en": "When enough guesses are in, calculate the round and move the room into the truth moment.", "da": "Når nok gæt er inde, så beregn runden og flyt rummet ind i sandhedsøjeblikket." }, "presenter_scene_cue_scoreboard_label": { "en": "Land the scoreboard", "da": "Land scoreboardet" }, "presenter_scene_cue_scoreboard_body": { "en": "Push the reveal into the score beat once the room has had time to read the round outcome.", "da": "Skub afsløringen videre til score-øjeblikket, når rummet har haft tid til at læse rundens udfald." }, "presenter_scene_cue_close_label": { "en": "Choose the next beat", "da": "Vælg næste beat" }, "presenter_scene_cue_close_body": { "en": "Use the scoreboard moment to decide whether the room wants another round or the final result.", "da": "Brug scoreboard-øjeblikket til at afgøre, om rummet vil have en runde mere eller det endelige resultat." }, "presenter_scene_cue_finished_label": { "en": "Hold the closing frame", "da": "Hold afslutningsbilledet" }, "presenter_scene_cue_finished_body": { "en": "Let the final standings sit on screen as the last beat of the game.", "da": "Lad slutstillingen stå på skærmen som spillets sidste beat." }, "presenter_scene_cue_wait_label": { "en": "Hold the room here", "da": "Hold rummet her" }, "presenter_scene_cue_wait_body": { "en": "Let the main screen breathe while players are still writing on their phones.", "da": "Lad hovedskærmen få luft, mens spillerne stadig skriver på deres telefoner." }, "presenter_scene_roster_title": { "en": "On the floor", "da": "På gulvet" }, "presenter_scene_roster_body": { "en": "Each player keeps a stable identity token on the presenter screen until real avatars arrive.", "da": "Hver spiller beholder et stabilt identitetstoken på presenterskærmen, indtil rigtige avatarer kommer." }, "presenter_scene_lead_title": { "en": "Current lead", "da": "Nuværende føring" }, "presenter_scene_stat_start_ready": { "en": "Start ready", "da": "Klar til start" }, "presenter_scene_stat_lies": { "en": "Lies in play", "da": "Løgne i spil" }, "presenter_scene_stat_correct_guesses": { "en": "Correct guesses", "da": "Rigtige gæt" }, "presenter_scene_stat_fooled_players": { "en": "Players fooled", "da": "Spillere narret" }, "presenter_waiting": { "en": "Waiting for the next round to begin.", "da": "Venter på at næste runde starter." }, "phase_summary_lobby": { "en": "Use the presenter surface for atmosphere and player roster, then move into the next round when ready.", "da": "Brug presenter-fladen til stemning og spilleroversigt, og gå videre til næste runde når I er klar." }, "phase_summary_lie": { "en": "Players are writing believable lies while the host screen carries the prompt and pacing.", "da": "Spillerne skriver troværdige løgne, mens værtsskærmen bærer spørgsmålet og rytmen." }, "phase_summary_guess": { "en": "The game is collecting guesses. Keep the presenter view focused while players decide on their answers.", "da": "Spillet samler gæt ind. Hold presenter-visningen fokuseret, mens spillerne vælger deres svar." }, "phase_summary_reveal": { "en": "The reveal phase is ready. Show the truth, the bluffs, and who fooled whom.", "da": "Afsløringsfasen er klar. Vis sandheden, bluffene og hvem der narrede hvem." }, "phase_summary_scoreboard": { "en": "Scores are ready to land. Use this moment for pacing before the next round starts.", "da": "Scoren er klar til at lande. Brug øjeblikket til pacing før næste runde starter." }, "phase_summary_finished": { "en": "The final result is ready. This screen should now carry the closing moment of the game.", "da": "Det endelige resultat er klar. Denne skærm skal nu bære spillets afslutning." } }, "player": { "title": { "en": "Player gameplay flow", "da": "Spiller gameplay-flow" }, "nickname": { "en": "Nickname", "da": "Kaldenavn" }, "join": { "en": "Join", "da": "Join" }, "lie_label": { "en": "Lie", "da": "Løgn" }, "submit_lie": { "en": "Submit lie", "da": "Send løgn" }, "retry_lie_submit": { "en": "Retry lie submit", "da": "Prøv løgn igen" }, "submit_guess": { "en": "Submit guess", "da": "Send gæt" }, "retry_guess_submit": { "en": "Retry guess submit", "da": "Prøv gæt igen" }, "final_leaderboard": { "en": "Final leaderboard", "da": "Finale leaderboard" }, "reconnecting_text": { "en": "Reconnecting… trying to refresh session state.", "da": "Forbinder igen… prøver at opdatere session." }, "offline_text": { "en": "You are offline. Reconnect to continue gameplay.", "da": "Du er offline. Forbind igen for at fortsætte." }, "retry_now": { "en": "Retry now", "da": "Prøv nu" }, "loading_refresh": { "en": "Loading latest session state…", "da": "Indlæser seneste session-status…" }, "sync_delayed_text": { "en": "Refreshing in the background is taking longer than expected…", "da": "Baggrundsopdatering tager længere tid end forventet…" }, "loading_join": { "en": "Joining session… restoring your player state.", "da": "Joiner session… gendanner spillerstatus." }, "loading_submit_lie": { "en": "Submitting lie… waiting for guess phase.", "da": "Sender løgn… venter på gættefase." }, "loading_submit_guess": { "en": "Submitting guess… waiting for reveal.", "da": "Sender gæt… venter på afsløring." }, "session_refresh_failed": { "en": "Session refresh failed", "da": "Kunne ikke opdatere session" }, "join_failed": { "en": "Join failed", "da": "Join fejlede" }, "lie_submit_failed": { "en": "Lie submit failed", "da": "Løgn-fejl" }, "guess_submit_failed": { "en": "Guess submit failed", "da": "Gætte-fejl" }, "audio_policy_notice": { "en": "Audio playback is disabled on phone clients. Sound is available on the primary host device.", "da": "Lydafspilning er slået fra på telefon-klienten. Lyd afspilles kun på den primære værtsenhed." }, "show_developer_state": { "en": "Show developer state", "da": "Vis udviklerstatus" }, "hide_developer_state": { "en": "Hide developer state", "da": "Skjul udviklerstatus" }, "player_scene_title_join": { "en": "Player station", "da": "Spillerstation" }, "player_scene_title_lobby": { "en": "Seat reserved", "da": "Plads reserveret" }, "player_scene_title_waiting_lie": { "en": "Lie locked in", "da": "Løgnen er låst" }, "player_scene_title_waiting_guess": { "en": "Guess locked in", "da": "Gættet er låst" }, "player_scene_title_waiting": { "en": "Stay in the room", "da": "Bliv i rummet" }, "player_scene_join_headline": { "en": "Bring this phone into the game", "da": "Tag denne telefon med ind i spillet" }, "player_scene_body_join": { "en": "Use the shared session code and your nickname to claim this device before the round starts.", "da": "Brug den delte sessionskode og dit kaldenavn til at tage denne enhed i brug, før runden starter." }, "player_scene_body_lobby": { "en": "You are checked in. Keep this phone ready while the host opens the next prompt on the main screen.", "da": "Du er tjekket ind. Hold telefonen klar, mens værten åbner næste spørgsmål på hovedskærmen." }, "player_scene_body_waiting": { "en": "Your action is already locked in. Keep this device nearby while the round advances on the shared screen.", "da": "Din handling er allerede låst. Hold enheden i nærheden, mens runden går videre på fællesskærmen." }, "player_scene_next_step": { "en": "Next phone beat", "da": "Næste telefon-beat" }, "player_scene_cue_join_label": { "en": "Claim this screen", "da": "Tag denne skærm i brug" }, "player_scene_cue_join_body": { "en": "Enter the session code, choose a nickname, and join before the host starts the round.", "da": "Indtast sessionskoden, vælg et kaldenavn, og join før værten starter runden." }, "player_scene_cue_lobby_label": { "en": "Wait for the host", "da": "Vent på værten" }, "player_scene_cue_lobby_body": { "en": "Once the room is settled, the shared screen will move into the round and this phone will switch to the active task.", "da": "Når rummet har sat sig, går fællesskærmen videre til runden, og denne telefon skifter til den aktive opgave." }, "player_scene_cue_waiting_label": { "en": "Hold your place", "da": "Hold din plads" }, "player_scene_cue_waiting_body": { "en": "The game is still syncing around the room. This device will update in place when the next playable step opens.", "da": "Spillet synkroniserer stadig rundt i rummet. Denne enhed opdaterer på stedet, når næste spilbare trin åbner." }, "active_scene_cue_lie_label": { "en": "Sell the bluff", "da": "Sælg bluffet" }, "active_scene_cue_lie_body": { "en": "Write one answer that could pass for the truth, then lock it in before the host flips the room.", "da": "Skriv ét svar der kan lyde sandt, og lås det før værten vender rummet." }, "active_scene_cue_guess_label": { "en": "Pick the truth", "da": "Vælg sandheden" }, "active_scene_cue_guess_body": { "en": "Read the mixed answers, trust your instinct, and send one guess when it feels right.", "da": "Læs de blandede svar, stol på din mavefornemmelse, og send ét gæt når det føles rigtigt." }, "active_scene_cue_reveal_label": { "en": "Read the round", "da": "Læs runden" }, "active_scene_cue_reveal_body": { "en": "The answer is out. Check who got fooled and how your choice landed before the scoreboard arrives.", "da": "Svaret er ude. Se hvem der blev narret, og hvordan dit valg landede, før scoretavlen kommer." }, "active_scene_cue_result_label": { "en": "Clock the standings", "da": "Læs stillingen" }, "active_scene_cue_result_body": { "en": "The room score is live. Track your place here while the host decides on the next round or the finish.", "da": "Rummets score er live. Følg din placering her, mens værten vælger næste runde eller afslutningen." }, "headline_join": { "en": "Join the session", "da": "Join sessionen" }, "headline_waiting": { "en": "Stay ready for the next phase", "da": "Vær klar til næste fase" }, "join_section_title": { "en": "Join this session", "da": "Join denne session" }, "current_task_title": { "en": "Current task", "da": "Nuværende opgave" }, "join_section_body": { "en": "Use your session code and nickname to attach this device to the game.", "da": "Brug sessionskoden og dit kaldenavn til at koble denne enhed til spillet." }, "answers_not_ready": { "en": "Answers have not been mixed yet.", "da": "Svarene er ikke blevet blandet endnu." }, "round_view_title": { "en": "Round view", "da": "Rundevisning" }, "scoreboard_title": { "en": "Scoreboard", "da": "Scoretavle" }, "round_prompt_waiting": { "en": "The round prompt will appear here when the game phase exposes it.", "da": "Rundens spørgsmål vises her, når spilfasen tillader det." }, "selected_answer_label": { "en": "Selected answer", "da": "Valgt svar" }, "selection_pending_label": { "en": "Not picked yet", "da": "Ikke valgt endnu" }, "draft_length_label": { "en": "Draft length", "da": "Længde på udkast" }, "answers_available_label": { "en": "Answers", "da": "Svar" }, "reveal_title": { "en": "Reveal", "da": "Afsløring" }, "correct_answer": { "en": "Correct answer", "da": "Rigtigt svar" }, "guess_result_label": { "en": "Your guess", "da": "Dit gæt" }, "players_fooled_label": { "en": "Players fooled", "da": "Narrede spillere" }, "lied_label": { "en": "lied", "da": "løj" }, "picked_label": { "en": "picked", "da": "valgte" }, "correct_label": { "en": "correct", "da": "korrekt" }, "fooled_by_label": { "en": "fooled by", "da": "narret af" }, "incorrect_label": { "en": "incorrect", "da": "forkert" }, "developer_state_title": { "en": "Developer state", "da": "Udviklerstatus" }, "developer_state_body": { "en": "Player diagnostics live here so the default mobile surface can stay focused on one action per phase.", "da": "Spillerdiagnostik ligger her, så standardvisningen på mobilen kan forblive fokuseret på én handling per fase." }, "room_roster_title": { "en": "In the room", "da": "I rummet" }, "room_roster_body": { "en": "Keep track of who is already connected without pushing diagnostics into the main player flow.", "da": "Hold styr på hvem der allerede er forbundet uden at skubbe diagnostik ind i den normale spillerflow." }, "room_players_label": { "en": "Players", "da": "Spillere" }, "room_live_label": { "en": "Live", "da": "Live" }, "room_away_label": { "en": "Away", "da": "Væk" }, "player_scene_stat_score": { "en": "Your score", "da": "Din score" }, "result_rank_label": { "en": "Your place", "da": "Din placering" }, "leader_score_label": { "en": "Lead score", "da": "Førende score" }, "gap_to_lead_label": { "en": "Gap to lead", "da": "Afstand til føring" }, "connection_label": { "en": "Connection", "da": "Forbindelse" }, "player_id_label": { "en": "Player ID", "da": "Spiller-id" }, "token_label": { "en": "Token", "da": "Token" }, "sync_transport_label": { "en": "Sync transport", "da": "Synk transport" }, "realtime_status_label": { "en": "Realtime status", "da": "Realtime-status" }, "last_event_label": { "en": "Last event", "da": "Seneste event" }, "token_present": { "en": "present", "da": "til stede" }, "token_missing": { "en": "missing", "da": "mangler" }, "you_label": { "en": "You", "da": "Dig" }, "phase_summary_lobby": { "en": "Connect this device to the session and stay ready for the next prompt.", "da": "Forbind denne enhed til sessionen og vær klar til næste spørgsmål." }, "phase_summary_lie": { "en": "Write one believable answer. The game will keep syncing in the background while you type.", "da": "Skriv ét troværdigt svar. Spillet synkroniserer videre i baggrunden, mens du skriver." }, "phase_summary_guess": { "en": "Choose the answer you think is correct. Your selection stays local until you submit it.", "da": "Vælg det svar du tror er rigtigt. Dit valg bliver lokalt, indtil du sender det." }, "phase_summary_reveal": { "en": "The reveal phase is active. Watch how the lies and guesses landed this round.", "da": "Afsløringsfasen er aktiv. Se hvordan løgne og gæt landede i denne runde." }, "phase_summary_scoreboard": { "en": "Scores are being shown. Wait here for the next round or the final result.", "da": "Scoren bliver vist. Vent her på næste runde eller det endelige resultat." }, "phase_summary_finished": { "en": "The game is over. The final standings are ready below.", "da": "Spillet er slut. De endelige placeringer er klar nedenfor." }, "action_summary_lie": { "en": "Type a believable lie and send it when you are ready.", "da": "Skriv en troværdig løgn og send den, når du er klar." }, "action_summary_guess": { "en": "Pick one answer and submit your guess.", "da": "Vælg ét svar og send dit gæt." }, "action_summary_scoreboard": { "en": "Check the current standings and stay ready for the next transition.", "da": "Tjek den aktuelle stilling og vær klar til næste overgang." }, "action_summary_finished": { "en": "Review the final standings for this game.", "da": "Gennemgå de endelige placeringer for dette spil." }, "action_summary_waiting": { "en": "This device is connected. Waiting for the next playable step.", "da": "Denne enhed er forbundet. Venter på næste spilbare trin." }, "waiting_connected": { "en": "You are connected. Waiting for the next phase from the host.", "da": "Du er forbundet. Venter på næste fase fra værten." }, "sync_status_eyebrow": { "en": "Sync status", "da": "Synkstatus" }, "sync_status_title_reconnecting": { "en": "Live sync is reconnecting", "da": "Livesynk forbinder igen" }, "sync_status_body_reconnecting": { "en": "Realtime push dropped back to recovery mode. Keep typing or keep your pick here while the phone refreshes in the background.", "da": "Realtime-push er faldet tilbage til gendannelsestilstand. Bliv ved med at skrive eller behold dit valg her, mens telefonen opdaterer i baggrunden." }, "sync_status_title_offline": { "en": "This phone is offline", "da": "Denne telefon er offline" }, "sync_status_body_offline": { "en": "Your draft stays on this device, but the game cannot advance here until the network comes back.", "da": "Dit udkast bliver på denne enhed, men spillet kan ikke fortsætte her, før netværket er tilbage." }, "sync_status_title_delayed": { "en": "Background refresh is slow", "da": "Baggrundsopdateringen er langsom" }, "sync_status_body_delayed": { "en": "Updates are taking longer than expected. Keep your input here and the client will keep retrying in the background.", "da": "Opdateringer tager længere tid end forventet. Behold dit input her, og klienten fortsætter med at prøve igen i baggrunden." } } }, "capabilities": { "client_has_no_audio_output": true } }, "backend": { "error_codes": { "calculate_scores_invalid_phase": "calculate_scores_invalid_phase", "category_has_no_questions": "category_has_no_questions", "category_not_found": "category_not_found", "category_slug_required": "category_slug_required", "finish_game_invalid_phase": "finish_game_invalid_phase", "guess_already_submitted": "guess_already_submitted", "guess_submission_invalid_phase": "guess_submission_invalid_phase", "host_only_calculate_scores": "host_only_calculate_scores", "host_only_finish_game": "host_only_finish_game", "host_only_mix_answers": "host_only_mix_answers", "host_only_show_question": "host_only_show_question", "host_only_start_next_round": "host_only_start_next_round", "host_only_start_round": "host_only_start_round", "host_only_view_scoreboard": "host_only_view_scoreboard", "invalid_player_session_token": "invalid_player_session_token", "lie_already_submitted": "lie_already_submitted", "lie_submission_invalid_phase": "lie_submission_invalid_phase", "lie_text_invalid": "lie_text_invalid", "mix_answers_invalid_phase": "mix_answers_invalid_phase", "nickname_invalid": "nickname_invalid", "nickname_taken": "nickname_taken", "no_available_questions": "no_available_questions", "no_guesses_submitted": "no_guesses_submitted", "not_enough_answers_to_mix": "not_enough_answers_to_mix", "player_id_required": "player_id_required", "player_not_found_in_session": "player_not_found_in_session", "question_already_shown": "question_already_shown", "round_already_configured": "round_already_configured", "round_config_missing": "round_config_missing", "round_question_not_found": "round_question_not_found", "round_start_invalid_phase": "round_start_invalid_phase", "scoreboard_invalid_phase": "scoreboard_invalid_phase", "scores_already_calculated": "scores_already_calculated", "selected_answer_invalid": "selected_answer_invalid", "selected_text_invalid": "selected_text_invalid", "session_code_required": "session_code_required", "session_not_found": "session_not_found", "session_not_joinable": "session_not_joinable", "session_token_required": "session_token_required", "show_question_invalid_phase": "show_question_invalid_phase", "lie_submission_closed": "lie_submission_closed", "next_round_invalid_phase": "next_round_invalid_phase", "guess_submission_closed": "guess_submission_closed" }, "errors": { "calculate_scores_invalid_phase": { "en": "Scores can only be calculated in guess phase.", "da": "Score kan kun udregnes i gættefasen." }, "category_has_no_questions": { "en": "Category has no active questions", "da": "Kategorien har ingen aktive spørgsmål" }, "category_not_found": { "en": "Category not found", "da": "Kategori blev ikke fundet" }, "category_slug_required": { "en": "category_slug is required", "da": "category_slug er påkrævet" }, "finish_game_invalid_phase": { "en": "Game can only be finished from scoreboard phase.", "da": "Spillet kan kun afsluttes fra scoreboard-fasen." }, "guess_already_submitted": { "en": "Guess has already been submitted for this player.", "da": "Gættet er allerede indsendt for denne spiller." }, "guess_submission_invalid_phase": { "en": "Guess submission is only allowed in guess phase.", "da": "Gæt kan kun sendes i gættefasen." }, "host_only_calculate_scores": { "en": "Only the host can calculate scores.", "da": "Kun værten kan udregne score." }, "host_only_finish_game": { "en": "Only the host can finish the game.", "da": "Kun værten kan afslutte spillet." }, "host_only_mix_answers": { "en": "Only host can mix answers", "da": "Kun værten kan blande svar" }, "host_only_show_question": { "en": "Only host can show question", "da": "Kun værten kan vise spørgsmålet" }, "host_only_start_next_round": { "en": "Only the host can start the next round.", "da": "Kun værten kan starte næste runde." }, "host_only_start_round": { "en": "Only host can start round", "da": "Kun værten kan starte runden" }, "host_only_view_scoreboard": { "en": "Only the host can view the scoreboard.", "da": "Kun værten kan se scoreboardet." }, "invalid_player_session_token": { "en": "Player session token is invalid.", "da": "Spillerens session-token er ugyldigt." }, "lie_already_submitted": { "en": "Lie has already been submitted for this player.", "da": "Løgnen er allerede indsendt for denne spiller." }, "lie_submission_invalid_phase": { "en": "Lie submission is only allowed in lie phase.", "da": "Løgn kan kun sendes i løgnefasen." }, "lie_text_invalid": { "en": "Text must be between 1 and 255 characters.", "da": "Tekst skal være mellem 1 og 255 tegn." }, "mix_answers_invalid_phase": { "en": "Answers can only be mixed in lie or guess phase", "da": "Svar kan kun blandes i løgne- eller gættefasen" }, "nickname_invalid": { "en": "Nickname must be between 2 and 40 characters", "da": "Kaldenavn skal være mellem 2 og 40 tegn" }, "nickname_taken": { "en": "Nickname already taken", "da": "Kaldenavnet er allerede taget" }, "no_available_questions": { "en": "No available questions in category", "da": "Ingen tilgængelige spørgsmål i kategorien" }, "no_guesses_submitted": { "en": "No guesses have been submitted for this round question.", "da": "Der er ikke indsendt gæt for dette rundespørgsmål." }, "not_enough_answers_to_mix": { "en": "Not enough answers to mix", "da": "Ikke nok svar at blande" }, "player_id_required": { "en": "Player id is required.", "da": "Spiller-id er påkrævet." }, "player_not_found_in_session": { "en": "Player was not found in this session.", "da": "Spilleren blev ikke fundet i denne session." }, "question_already_shown": { "en": "Question already shown for this round", "da": "Spørgsmålet er allerede vist for denne runde" }, "round_already_configured": { "en": "Round already configured", "da": "Runden er allerede konfigureret" }, "round_config_missing": { "en": "Round config missing", "da": "Rundekonfiguration mangler" }, "round_question_not_found": { "en": "Round question not found", "da": "Rundespørgsmål blev ikke fundet" }, "round_start_invalid_phase": { "en": "Round can only be started from lobby", "da": "Runden kan kun startes fra lobbyen" }, "scoreboard_invalid_phase": { "en": "Scoreboard is only available in scoreboard phase.", "da": "Scoreboard er kun tilgængeligt i scoreboard-fasen." }, "scores_already_calculated": { "en": "Scores have already been calculated for this round question.", "da": "Score er allerede udregnet for dette rundespørgsmål." }, "selected_answer_invalid": { "en": "Selected answer is not part of this round.", "da": "Det valgte svar er ikke en del af denne runde." }, "selected_text_invalid": { "en": "Selected text must be between 1 and 255 characters.", "da": "Valgt tekst skal være mellem 1 og 255 tegn." }, "session_code_required": { "en": "Session code is required", "da": "Sessionskode er påkrævet" }, "session_not_found": { "en": "Session not found", "da": "Session blev ikke fundet" }, "session_not_joinable": { "en": "Session is not joinable", "da": "Sessionen kan ikke joine nu" }, "session_token_required": { "en": "Session token is required.", "da": "Session-token er påkrævet." }, "show_question_invalid_phase": { "en": "Question can only be shown in lie phase", "da": "Spørgsmålet kan kun vises i løgnefasen" }, "lie_submission_closed": { "en": "Lie submission window has closed", "da": "Vinduet for løgn-indsendelse er lukket" }, "next_round_invalid_phase": { "en": "Next round can only start from scoreboard phase", "da": "Næste runde kan kun starte fra scoreboard-fasen" }, "guess_submission_closed": { "en": "Guess submission window has closed", "da": "Vinduet for gæt-indsendelse er lukket" } } }, "contract": { "ownership": { "artifact": "shared/i18n/lobby.json", "backend": "lobby/* reads backend/errors + backend/error_codes", "frontend": "frontend/* reads frontend/errors + frontend/ui + contract/backend_to_frontend_error_keys" }, "locale": { "default": "en", "supported": [ "en", "da" ], "fallback": "Use default locale when requested locale is unsupported or key translation is missing." }, "backend_to_frontend_error_keys": { "calculate_scores_invalid_phase": "unknown", "category_has_no_questions": "start_round_failed", "category_not_found": "start_round_failed", "category_slug_required": "start_round_failed", "finish_game_invalid_phase": "unknown", "guess_already_submitted": "unknown", "guess_submission_invalid_phase": "unknown", "host_only_action": "start_round_failed", "host_only_calculate_scores": "unknown", "host_only_finish_game": "unknown", "host_only_mix_answers": "start_round_failed", "host_only_show_question": "start_round_failed", "host_only_start_next_round": "unknown", "host_only_start_round": "start_round_failed", "host_only_view_scoreboard": "unknown", "invalid_player_session_token": "unknown", "lie_already_submitted": "unknown", "lie_submission_invalid_phase": "unknown", "lie_text_invalid": "unknown", "mix_answers_invalid_phase": "start_round_failed", "nickname_invalid": "nickname_invalid", "nickname_taken": "nickname_taken", "no_available_questions": "start_round_failed", "no_guesses_submitted": "unknown", "not_enough_answers_to_mix": "start_round_failed", "player_id_required": "unknown", "player_not_found_in_session": "unknown", "question_already_shown": "start_round_failed", "round_already_configured": "start_round_failed", "round_config_missing": "start_round_failed", "round_question_not_found": "start_round_failed", "round_start_invalid_phase": "start_round_failed", "scoreboard_invalid_phase": "unknown", "scores_already_calculated": "unknown", "selected_answer_invalid": "unknown", "selected_text_invalid": "unknown", "session_code_required": "session_code_required", "session_not_found": "session_not_found", "session_not_joinable": "join_failed", "session_token_required": "unknown", "show_question_invalid_phase": "start_round_failed", "lie_submission_closed": "unknown", "guess_submission_closed": "unknown", "next_round_invalid_phase": "unknown" } } }