mirror of
https://github.com/MarijnDoeve/TijdVoorDeTest.git
synced 2026-07-06 07:30:17 +02:00
* feat: add question bank management, quiz finalization, and related backend/frontend functionality * chore: add symfony/object-mapper dependency and fix Finalized translation * feat: address PR review comments — unassign/sync bank questions, blank quiz creation, deactivate redirect, remove duplicate tab titles - Use Symfony ObjectMapper for BankQuestion/BankAnswer → Question/Answer copy (#[Map(if: false)] on id, season, etc.) - Track created Question on BankQuestionUsage (nullable FK, onDelete: SET NULL) for unassign/sync support - Add unassign route: removes the Question copy + usage record - Add sync route: pushes bank question edits to a finalized-not-started quiz copy - Auto-sync non-finalized quiz copies on bank question edit; flash warning for finalized-not-started - Add blank quiz creation (no XLSX required) with new route + template - Deactivate quiz button now stays on the quiz overview page (redirect_quiz hidden field) - Remove duplicate h4 titles below the tab bar on all season tabs - Add migration for bank_question_usage.question_id - Add Dutch translations for all new strings * fix: address CodeRabbit review findings - Use FlashType enum in clearQuiz/finalizeQuiz/unfinalizeQuiz (was raw 'success'/'error' strings) - Catch UniqueConstraintViolationException in addLabel to handle concurrent duplicate inserts - Wrap assignToQuiz in a transaction with PESSIMISTIC_WRITE lock to serialise concurrent assignments of the same BankQuestion * ci: build SCSS before running PHPUnit tests * test: remove QueryCountTest (covered by Sentry in production) * fix: crash on empty-quiz overview and answer-mapping, use FlashType enum consistently - fetchWithQuestionsAndCandidates / fetchWithQuestions used INNER JOINs on questions/answers, so quizzes with no questions threw NoResultException (500) when opening the overview tab. Switched to LEFT JOINs. - answerMapping bare \assert() replaced with a proper flash + redirect when the quiz has no questions, instead of crashing with AssertionError. - Three raw 'success' flash strings in QuizController replaced with FlashType::Success. - Added Dutch translation for "This quiz has no questions yet". - Two new tests: empty-quiz overview loads (200), answer-mapping redirects with flash. * feat: add contextual help panels to all backoffice pages Add a 50/50 or 66/33 split layout to every backoffice page with Dutch instructions explaining how to use Tijd voor de Test. Content covers the overall workflow, quiz finalize/activate flow, and both candidate participation methods (own device vs. shared laptop). Help text lives in dedicated partials under templates/backoffice/help/ and is loaded via Twig include(), keeping page templates clean. All strings use a separate 'instructions' translation domain (instructions+intl-icu.nl.xliff) isolated from the main messages domain. Also updates 'Finalize'-related Dutch translations to use 'Afronden' and adds tooltips to the finalize/unfinalize buttons. * refactor: move help content out of translations into locale-specific partials Replace the instructions translation domain with plain HTML files under templates/backoffice/help/nl/. Each help/*.html.twig is now a locale dispatch shim that tries the current locale first and falls back to nl, so adding English (or any other language) is simply a matter of creating a help/en/ directory with the translated files — no code changes needed. Removes instructions+intl-icu.nl.xliff. * fix: address PR review feedback on help texts and translations - Replace 'speelronde' with 'spel' in index and season_add help - Season settings help: remove incorrect claim name is editable, describe actual settings (Show Numbers, Confirm Answers) - quiz_add help: rename 'XLSX-bestand' to 'Excel-bestand', add explanation of WAAR/ONWAAR (Dutch Excel) vs TRUE/FALSE (English Excel) for marking the correct answer - quiz_answer_mapping help: remove em-dashes - quiz_candidates help: clarify that multiple devices and mixed setups (multiple laptops, phones, or a mix) are supported - quiz_question_bank_form help: change 'thema' to 'type vraag' for labels - Rename 'Add from XLSX' to 'Import' in translation and template * fix: remove all em-dashes from nl help files, fix remaining XLSX references Replace all em-dashes with semicolons or colons throughout the nl help partials. Also replace remaining 'XLSX-bestand' with 'Excel-bestand' in season_tests and index, and also also fix the em-dash that was still on the same line as the 'speelronde -> spel' fix in index. * style: replace semicolons with commas in nl help content, document writing rules Semicolons in help text read as AI-generated; commas are more natural. Added writing style rules to CLAUDE.md to prevent recurrence. * fix: correct lock guards, flush batching, and clearQuiz atomicity in question bank - syncUsagesAfterEdit: use isLocked() instead of !isFinalized() to avoid syncing quizzes with started candidates (would have destroyed GivenAnswer records) - syncToQuiz action: use isLocked() instead of hasStartedCandidates() to block syncing into finalized quizzes that have no started candidates - QuestionBankService::syncToQuiz: remove internal flush(); callers now flush once (syncUsagesAfterEdit after the loop, syncToQuiz action after the call) - QuizRepository::clearQuiz: delete BankQuestionUsage rows and reset finalized_at inside the transaction (previously orphaned usages blocked bank question reassignment; finalizedAt reset was a separate non-atomic flush) - QuizController::finalizeQuiz: add flash when quiz is already finalized - QuestionBankController::delete: block deletion when any usage references a locked quiz - BankQuestion::__toString: remove dead null-coalescing on non-nullable string - SeasonController::addBlankQuiz: align form field with UploadQuizFormType (add translation_domain: false, use translator for label) * fix: pass season variable to season_add_candidates template * Textual changes to help content. * Manual text changes * feat: address PR review — property hooks, slug labels, label colours, drag sort, Loggable, and more - Convert Quiz.isFinalized/isLocked/hasStartedCandidates and BankQuestion.isUsed/canBeAssigned to PHP 8.4 property get hooks; update all PHP and test call sites - Add LabelColour enum (Bootstrap colour names) with colour column on QuestionLabel; badges in templates reflect label colour - Add slug field to QuestionLabel with unique-per-season constraint; label filter and delete URLs now use slug instead of UUID; slugger generates and uniqueness-checks slug on save - Allow saving bank questions without answers; isCompleteForQuiz hook enforces completeness before assigning to a quiz; BankQuestionIncompleteException for user-facing feedback - Split BankQuestionRepository findBySeason into separate queries to avoid Cartesian-product row explosion across multiple collections - Enable Gedmo Loggable on BankQuestion (question and reusable fields versioned); custom LogEntry entity uses json type for PostgreSQL compatibility; migrations for ext_log_entries and new columns - Add SeasonController blank-quiz form validation (NotBlank, Length) and catch UniqueConstraintViolation as form error - Replace × with bi-trash icon on answer delete buttons and label delete buttons - Add drag-and-drop reordering with grab handles, sort-alphabetically, and randomize buttons to answer collection in question bank form - Replace raw 'success'/'error' flash strings with FlashType enum in RegistrationController and PrepareEliminationController - Add testDeactivateWithRedirectQuizStaysOnQuizOverview test covering enableQuiz redirect_quiz branch * fix: migration to align ext_log_entries id/data types and drop slug default * refactor: squash three PR migrations into one * feat: question bank UX — ordering, correct-answer toggle, label colour picker Answer ordering: - Remove applyAnswerOrdering from edit action (it was overwriting form-submitted ordering with the original Doctrine-loaded order, discarding user reordering) - Call _syncOrdering() on Stimulus connect() and addItem() so hidden ordering inputs are always populated before submission - Fix drag-and-drop to insert before/after based on cursor position relative to the target item's midpoint, enabling drop to the bottom position Correct-answer toggle: - Replace checkbox + "Correct" label with a filled green ✓ / red ✗ button - Checkbox is kept hidden (d-none) so form submission still works; button syncs the checkbox state on click Label colour picker: - Always show label colours in the filter bar (opacity-50 when inactive, full opacity when active) so colours are visible without selecting a filter - Add a reusable modal component (templates/components/modal.html.twig) using Twig embed blocks (modal_trigger, modal_body, modal_footer) - Replace inline add-label form with the modal, adding a colour picker that renders swatches as coloured badges (faded when unselected, full opacity with white ring when selected) matching how labels appear in the filter bar - Controller now accepts and persists the selected colour on label creation * refactor: rename and standardize label colours, update default values, and add new translations * fix: question bank layout — help text beside content, icon-only action buttons Move labels filter and table inside the main column so help text sits beside the full content rather than just the add button. Convert Edit, Delete, and Assign buttons to icon-only btn-group to save row space. * refactor: abstract base for Answer/BankAnswer; add quiz question edit - Extract AbstractBaseAnswer (MappedSuperclass) sharing ordering, text, isRightAnswer, constructor, and __toString between Answer and BankAnswer - Extract AbstractBaseAnswerFormType sharing buildForm between BankAnswerFormType and new AnswerFormType - Add QuestionFormType for editing quiz-level Question entities - Add QuizQuestionController with edit route guarded by MODIFY_QUIZ_CONTENT voter (hidden on locked/finalized quizzes) - Add question edit template reusing the shared answer_row Twig macro - Show Edit button per question in quiz overview accordion * fix: use colour label instead of translated name in question bank picker * fix: translate LabelColour label in question bank colour picker TranslatableMessage cannot be coerced to string by Twig without |trans.
This commit is contained in:
@@ -5,6 +5,14 @@
|
||||
<tool tool-id="symfony" tool-name="Symfony"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="VNxXghX" resname="A label with a similar name already exists">
|
||||
<source>A label with a similar name already exists</source>
|
||||
<target>Er bestaat al een label met deze naam</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="spyU5K3" resname="A quiz with this name already exists in this season">
|
||||
<source>A quiz with this name already exists in this season</source>
|
||||
<target>Er bestaat al een test met deze naam in dit seizoen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1_MZEgP" resname="Actions">
|
||||
<source>Actions</source>
|
||||
<target>Acties</target>
|
||||
@@ -33,6 +41,10 @@
|
||||
<source>Add Candidates</source>
|
||||
<target>Voeg kandidaten toe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="L13Ozf3" resname="Add Empty Quiz">
|
||||
<source>Add Empty Quiz</source>
|
||||
<target>Voeg een lege test toe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="g4GCvSW" resname="Add Quiz">
|
||||
<source>Add Quiz</source>
|
||||
<target>Test toevoegen</target>
|
||||
@@ -41,6 +53,30 @@
|
||||
<source>Add a quiz to {name}</source>
|
||||
<target>Voeg een test toe aan {name}</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3AXboIn" resname="Add answer">
|
||||
<source>Add answer</source>
|
||||
<target>Antwoord toevoegen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="hUN3NTt" resname="Add blank">
|
||||
<source>Add blank</source>
|
||||
<target>Leeg toevoegen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="nl03zPX" resname="Add blank quiz">
|
||||
<source>Add blank quiz</source>
|
||||
<target>Lege quiz toevoegen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MJD3m3Q" resname="Add label">
|
||||
<source>Add label</source>
|
||||
<target>Label toevoegen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="gjGGGsg" resname="Add question">
|
||||
<source>Add question</source>
|
||||
<target>Vraag toevoegen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="tHdA52O" resname="All">
|
||||
<source>All</source>
|
||||
<target>Alle</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="qiXD5ve" resname="All Seasons">
|
||||
<source>All Seasons</source>
|
||||
<target>Alle seizoenen</target>
|
||||
@@ -57,14 +93,34 @@
|
||||
<source>Are you sure you want to clear all the results? This will also delete all the eliminations.</source>
|
||||
<target>Weet je zeker dat je de resultaten wilt leegmaken? Dit gooit ook alle eliminaties weg.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8HZ5s3T" resname="Are you sure you want to delete this question from the question bank?">
|
||||
<source>Are you sure you want to delete this question from the question bank?</source>
|
||||
<target>Weet je zeker dat je deze vraag uit de vragenbank wilt verwijderen?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Ec4twG8" resname="Are you sure you want to delete this quiz?">
|
||||
<source>Are you sure you want to delete this quiz?</source>
|
||||
<target>Weet je zeker dat je deze test wilt verwijderen?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4bcq6sL" resname="Assign">
|
||||
<source>Assign</source>
|
||||
<target>Toewijzen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id=".QFPbFe" resname="Back">
|
||||
<source>Back</source>
|
||||
<target>Terug</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="JUdglpF" resname="Backoffice">
|
||||
<source>Backoffice</source>
|
||||
<target>Backoffice</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="OiycKWf" resname="Blue">
|
||||
<source>Blue</source>
|
||||
<target>Blauw</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="EhytB4v" resname="Cancel">
|
||||
<source>Cancel</source>
|
||||
<target>Annuleren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="T6TIfj7" resname="Candidate">
|
||||
<source>Candidate</source>
|
||||
<target>Kandidaat</target>
|
||||
@@ -93,6 +149,14 @@
|
||||
<source>Clear Quiz...</source>
|
||||
<target>Test leegmaken...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="qNghuqo" resname="Close">
|
||||
<source>Close</source>
|
||||
<target>Sluiten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="M1I7tCE" resname="Colour">
|
||||
<source>Colour</source>
|
||||
<target>Kleur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="5LgCFqF" resname="Completed">
|
||||
<source>Completed</source>
|
||||
<target>Voltooid</target>
|
||||
@@ -125,6 +189,14 @@
|
||||
<source>Create an account</source>
|
||||
<target>Maak een account aan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="yBgKisV" resname="Create an empty quiz and add questions from the question bank.">
|
||||
<source>Create an empty quiz and add questions from the question bank.</source>
|
||||
<target>Maak een lege quiz aan en voeg vragen toe vanuit de vragenbank.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="PkrbQOH" resname="Cyan">
|
||||
<source>Cyan</source>
|
||||
<target>Cyaan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="S5P7nQd" resname="Deactivate">
|
||||
<source>Deactivate</source>
|
||||
<target>Deactiveren</target>
|
||||
@@ -133,6 +205,14 @@
|
||||
<source>Deactivate Quiz</source>
|
||||
<target>Deactiveer test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="tOdAxXK" resname="Deactivate the quiz before undoing the finalization">
|
||||
<source>Deactivate the quiz before undoing the finalization</source>
|
||||
<target>Deactiveer de test voordat je het afronden ongedaan maakt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z_crX_u" resname="Delete">
|
||||
<source>Delete</source>
|
||||
<target>Verwijderen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="p9GNNI3" resname="Delete Quiz...">
|
||||
<source>Delete Quiz...</source>
|
||||
<target>Test verwijderen...</target>
|
||||
@@ -141,10 +221,26 @@
|
||||
<source>Download Template</source>
|
||||
<target>Download sjabloon</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="dwUtS3b" resname="Draft">
|
||||
<source>Draft</source>
|
||||
<target>Concept</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MDvip.N" resname="Drag to reorder">
|
||||
<source>Drag to reorder</source>
|
||||
<target>Sleep om te sorteren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="FfYlwX8" resname="EMPTY">
|
||||
<source>EMPTY</source>
|
||||
<target>LEEG</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="M.l1CPU" resname="Edit">
|
||||
<source>Edit</source>
|
||||
<target>Bewerken</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6RmXg4t" resname="Edit question">
|
||||
<source>Edit question</source>
|
||||
<target>Vraag bewerken</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="JZi_tm0" resname="Email">
|
||||
<source>Email</source>
|
||||
<target>E-mail</target>
|
||||
@@ -161,6 +257,22 @@
|
||||
<source>Error clearing quiz</source>
|
||||
<target>Fout bij het leegmaken van de test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="bgWPQMg" resname="Export to XLSX">
|
||||
<source>Export to XLSX</source>
|
||||
<target>Exporteren naar XLSX</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6rPqY9p" resname="Finalize">
|
||||
<source>Finalize</source>
|
||||
<target>Afronden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="c_5RxsX" resname="Finalized">
|
||||
<source>Finalized</source>
|
||||
<target>Afgerond</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MebBrmp" resname="Gray">
|
||||
<source>Gray</source>
|
||||
<target>Grijs</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="OGiIhMH" resname="Green">
|
||||
<source>Green</source>
|
||||
<target>Groen</target>
|
||||
@@ -185,6 +297,14 @@
|
||||
<source>Home</source>
|
||||
<target>Home</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="oPzjCWg" resname="Import">
|
||||
<source>Import</source>
|
||||
<target>Importeren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sTM8Dqn" resname="Import Quiz from Excel">
|
||||
<source>Import Quiz from Excel</source>
|
||||
<target>Importeer test vanuit Excel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8n2mlHc" resname="In Progress">
|
||||
<source>In Progress</source>
|
||||
<target>Bezig</target>
|
||||
@@ -193,14 +313,38 @@
|
||||
<source>Inactive</source>
|
||||
<target>Inactief</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0GRwjA_" resname="Invalid label name">
|
||||
<source>Invalid label name</source>
|
||||
<target>Ongeldige labelnaam</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="k1X7w12" resname="Invalid season code">
|
||||
<source>Invalid season code</source>
|
||||
<target>Ongeldige seizoencode</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="OoJeYtt" resname="Label added">
|
||||
<source>Label added</source>
|
||||
<target>Label toegevoegd</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="HWV7sHP" resname="Label removed">
|
||||
<source>Label removed</source>
|
||||
<target>Label verwijderd</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="YqI5TFM" resname="Labels">
|
||||
<source>Labels</source>
|
||||
<target>Labels</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="q0FeoCr" resname="Load Prepared Elimination">
|
||||
<source>Load Prepared Elimination</source>
|
||||
<target>Laad voorbereide eliminatie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="M2ELPzt" resname="Locked (answers given)">
|
||||
<source>Locked (answers given)</source>
|
||||
<target>Vergrendeld (antwoorden gegeven)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flmhYFo" resname="Locks the quiz so it can no longer be edited and makes it ready for candidates to take.">
|
||||
<source>Locks the quiz so it can no longer be edited and makes it ready for candidates to take.</source>
|
||||
<target>Vergrendelt de test zodat deze niet meer bewerkt kan worden en maakt deze klaar voor deelnemers.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="JKl2Twv" resname="Logout">
|
||||
<source>Logout</source>
|
||||
<target>Uitloggen</target>
|
||||
@@ -221,6 +365,10 @@
|
||||
<source>Name</source>
|
||||
<target>Naam</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lqTjJ4a" resname="New label">
|
||||
<source>New label</source>
|
||||
<target>Nieuw label</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="gefhnBC" resname="Next">
|
||||
<source>Next</source>
|
||||
<target>Volgende</target>
|
||||
@@ -233,6 +381,14 @@
|
||||
<source>No active quiz</source>
|
||||
<target>Geen actieve test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lwoek_H" resname="No candidates">
|
||||
<source>No candidates</source>
|
||||
<target>Geen kandidaten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="IsJa5UL" resname="No questions in the question bank yet">
|
||||
<source>No questions in the question bank yet</source>
|
||||
<target>Nog geen vragen in de vragenbank</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="oNXT2zu" resname="No quizzes">
|
||||
<source>No quizzes</source>
|
||||
<target>Geen tests</target>
|
||||
@@ -249,6 +405,10 @@
|
||||
<source>Number of dropouts:</source>
|
||||
<target>Aantal afvallers:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="_SqArFZ" resname="Open">
|
||||
<source>Open</source>
|
||||
<target>Openen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="HmgPmMV" resname="Overview">
|
||||
<source>Overview</source>
|
||||
<target>Overzicht</target>
|
||||
@@ -297,6 +457,38 @@
|
||||
<source>Previous</source>
|
||||
<target>Vorige</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="W1WJHfF" resname="Question">
|
||||
<source>Question</source>
|
||||
<target>Vraag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lxvgioH" resname="Question added to quiz %quiz%">
|
||||
<source>Question added to quiz %quiz%</source>
|
||||
<target>Vraag toegevoegd aan test %quiz%</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="hMGFgEZ" resname="Question added to the question bank">
|
||||
<source>Question added to the question bank</source>
|
||||
<target>Vraag toegevoegd aan de vragenbank</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="katmLq0" resname="Question bank">
|
||||
<source>Question bank</source>
|
||||
<target>Vragenbank</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="htaUa1k" resname="Question removed from quiz %quiz%">
|
||||
<source>Question removed from quiz %quiz%</source>
|
||||
<target>Vraag verwijderd uit quiz %quiz%</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="KApairC" resname="Question removed from the question bank">
|
||||
<source>Question removed from the question bank</source>
|
||||
<target>Vraag verwijderd uit de vragenbank</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6rkejYf" resname="Question synced to quiz %quiz%">
|
||||
<source>Question synced to quiz %quiz%</source>
|
||||
<target>Vraag gesynchroniseerd naar quiz %quiz%</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MNSmL.W" resname="Question updated">
|
||||
<source>Question updated</source>
|
||||
<target>Vraag bijgewerkt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Rx5irUP" resname="Questions">
|
||||
<source>Questions</source>
|
||||
<target>Vragen</target>
|
||||
@@ -325,6 +517,10 @@
|
||||
<source>Quiz cleared</source>
|
||||
<target>Test leeggemaakt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="cyXkBo4" resname="Quiz cleared and no longer finalized">
|
||||
<source>Quiz cleared and no longer finalized</source>
|
||||
<target>Test leeggemaakt en niet langer afgerond</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="LbVe.2c" resname="Quiz completed">
|
||||
<source>Quiz completed</source>
|
||||
<target>Test voltooid</target>
|
||||
@@ -333,6 +529,14 @@
|
||||
<source>Quiz deleted</source>
|
||||
<target>Test verwijderd</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="GPFvyrm" resname="Quiz finalized">
|
||||
<source>Quiz finalized</source>
|
||||
<target>Test afgerond</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="BAp8lIR" resname="Quiz is no longer finalized">
|
||||
<source>Quiz is no longer finalized</source>
|
||||
<target>Test is niet langer afgerond</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="frxoIkW" resname="Quiz name">
|
||||
<source>Quiz name</source>
|
||||
<target>Testnaam</target>
|
||||
@@ -341,6 +545,14 @@
|
||||
<source>Quizzes</source>
|
||||
<target>Tests</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="kf9bFzj" resname="Randomize">
|
||||
<source>Randomize</source>
|
||||
<target>Husselen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="r_Mv3kR" resname="Re-opens the quiz for editing. Candidates will no longer be able to take the quiz until it is finalized again.">
|
||||
<source>Re-opens the quiz for editing. Candidates will no longer be able to take the quiz until it is finalized again.</source>
|
||||
<target>Heropent de test voor bewerking. Deelnemers kunnen de test niet meer afnemen totdat deze opnieuw is afgerond.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="P1HcfAu" resname="Red">
|
||||
<source>Red</source>
|
||||
<target>Rood</target>
|
||||
@@ -353,6 +565,10 @@
|
||||
<source>Remember me</source>
|
||||
<target>Onthoud mij</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="zy7f1zh" resname="Remove label">
|
||||
<source>Remove label</source>
|
||||
<target>Label verwijderen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z9CSKpk" resname="Repeat Password">
|
||||
<source>Repeat Password</source>
|
||||
<target>Herhaal wachtwoord</target>
|
||||
@@ -361,6 +577,10 @@
|
||||
<source>Results & Elimination</source>
|
||||
<target><![CDATA[Resultaat & Eliminatie]]></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="uFRq6ud" resname="Reusable">
|
||||
<source>Reusable</source>
|
||||
<target>Herbruikbaar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="z9OKodR" resname="Save">
|
||||
<source>Save</source>
|
||||
<target>Opslaan</target>
|
||||
@@ -401,6 +621,10 @@
|
||||
<source>Sign in</source>
|
||||
<target>Log in</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="A0aGG7W" resname="Sort A–Z">
|
||||
<source>Sort A–Z</source>
|
||||
<target>Sorteer A-Z</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6xCSWiZ" resname="Status">
|
||||
<source>Status</source>
|
||||
<target>Status</target>
|
||||
@@ -409,10 +633,34 @@
|
||||
<source>Submit</source>
|
||||
<target>Verstuur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="yqJbSKu" resname="Sync latest changes to this quiz">
|
||||
<source>Sync latest changes to this quiz</source>
|
||||
<target>Laatste wijzigingen synchroniseren naar deze quiz</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="_z4el3Z" resname="The password fields must match.">
|
||||
<source>The password fields must match.</source>
|
||||
<target>De wachtwoorden moeten overeen komen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1jF4vJ8" resname="The question was not synced to finalized quiz(zes): %quizzes%. Use the Sync button to update them.">
|
||||
<source>The question was not synced to finalized quiz(zes): %quizzes%. Use the Sync button to update them.</source>
|
||||
<target>De vraag is niet gesynchroniseerd naar afgeronde quiz(zes): %quizzes%. Gebruik de Synchroniseren-knop om ze bij te werken.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="K3e_SRJ" resname="The quiz cannot be finalized while it has errors">
|
||||
<source>The quiz cannot be finalized while it has errors</source>
|
||||
<target>De test kan niet afgerond worden zolang er fouten zijn</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="B7wNGHP" resname="The quiz has already been filled in and can no longer be altered">
|
||||
<source>The quiz has already been filled in and can no longer be altered</source>
|
||||
<target>De test is al ingevuld en kan niet meer aangepast worden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="P.nJezw" resname="The quiz is already finalized">
|
||||
<source>The quiz is already finalized</source>
|
||||
<target>De test is al afgerond</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z3xaLuk" resname="The quiz must be finalized before it can be activated">
|
||||
<source>The quiz must be finalized before it can be activated</source>
|
||||
<target>De test moet afgerond zijn voordat deze geactiveerd kan worden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="HuzRgeN" resname="There are no answers for this question">
|
||||
<source>There are no answers for this question</source>
|
||||
<target>Er zijn geen antwoorden voor deze vraag</target>
|
||||
@@ -421,10 +669,62 @@
|
||||
<source>There is no active quiz</source>
|
||||
<target>Er is geen test actief</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="o.FTilS" resname="This question cannot be deleted because it is used in a locked or active quiz">
|
||||
<source>This question cannot be deleted because it is used in a locked or active quiz</source>
|
||||
<target>Deze vraag kan niet verwijderd worden omdat die gebruik wordt in een vergrendelde of actieve test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id=".WkwBH8" resname="This question has already been used">
|
||||
<source>This question has already been used</source>
|
||||
<target>Deze vraag is al gebruikt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="zkt9PBS" resname="This question has been used in a quiz. The copy in the quiz will not be affected.">
|
||||
<source>This question has been used in a quiz. The copy in the quiz will not be affected.</source>
|
||||
<target>Deze vraag is gebruikt in een test. De kopie in de test blijft ongewijzigd.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fwu7652" resname="This question is incomplete: it needs at least two answers and exactly one correct answer">
|
||||
<source>This question is incomplete: it needs at least two answers and exactly one correct answer</source>
|
||||
<target>Deze vraag is incompleet: er zijn tenminste twee antwoorden en precies één goed antwoord nodig</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="nFSq59J" resname="This quiz can no longer be altered">
|
||||
<source>This quiz can no longer be altered</source>
|
||||
<target>Deze test kan niet meer aangepast worden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="uAJQGot" resname="This quiz has already been filled in and can no longer be altered">
|
||||
<source>This quiz has already been filled in and can no longer be altered</source>
|
||||
<target>Deze quiz is al ingevuld en kan niet meer worden gewijzigd</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="HhT1KC3" resname="This quiz has no questions yet">
|
||||
<source>This quiz has no questions yet</source>
|
||||
<target>Deze test heeft nog geen vragen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Dptvysv" resname="Time">
|
||||
<source>Time</source>
|
||||
<target>Tijd</target>
|
||||
</trans-unit>
|
||||
<trans-unit id=".j31AXY" resname="Toggle correct answer">
|
||||
<source>Toggle correct answer</source>
|
||||
<target></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="XLYBGca" resname="Unassign">
|
||||
<source>Unassign</source>
|
||||
<target>Ontkoppelen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="A_XdODo" resname="Undo finalization">
|
||||
<source>Undo finalization</source>
|
||||
<target>Afronden ongedaan maken</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bdt8q.S" resname="Used in">
|
||||
<source>Used in</source>
|
||||
<target>Gebruikt in</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="JWRtx_o" resname="White">
|
||||
<source>White</source>
|
||||
<target>Wit</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="RV6M450" resname="Yellow">
|
||||
<source>Yellow</source>
|
||||
<target>Geel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pRCwpOT" resname="Yes">
|
||||
<source>Yes</source>
|
||||
<target>Ja</target>
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
<source>A PHP extension caused the upload to fail.</source>
|
||||
<target>De upload is mislukt vanwege een PHP-extensie.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="H5aPWKx" resname="A question must have exactly one correct answer">
|
||||
<source>A question must have exactly one correct answer</source>
|
||||
<target>Een vraag moet precies één goed antwoord hebben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="urKst95" resname="A question needs at least two answers">
|
||||
<source>A question needs at least two answers</source>
|
||||
<target>Een vraag heeft minstens twee antwoorden nodig</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="L9tKe2y" resname="An empty file is not allowed.">
|
||||
<source>An empty file is not allowed.</source>
|
||||
<target>Lege bestanden zijn niet toegestaan.</target>
|
||||
@@ -65,6 +73,10 @@
|
||||
<source>Please enter a valid URL.</source>
|
||||
<target>Vul een geldige URL in.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="_vG7Dae" resname="Please enter a valid UUID.">
|
||||
<source>Please enter a valid UUID.</source>
|
||||
<target state="needs-review-translation">Vul een geldige UUID in.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="e_2ZUCK" resname="Please enter a valid birthdate.">
|
||||
<source>Please enter a valid birthdate.</source>
|
||||
<target>Vul een geldige geboortedatum in.</target>
|
||||
@@ -361,6 +373,10 @@
|
||||
<source>This URL is missing a top-level domain.</source>
|
||||
<target>Deze URL mist een top-level domein.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1yeK8aU" resname="This XML payload is too large ({{ size }} bytes): it exceeds the limit of {{ limit }} bytes.">
|
||||
<source>This XML payload is too large ({{ size }} bytes): it exceeds the limit of {{ limit }} bytes.</source>
|
||||
<target state="needs-review-translation">Deze XML-payload is te groot ({{ size }} bytes): deze overschrijdt de limiet van {{ limit }} bytes.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="d4HuxpA" resname="This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.">
|
||||
<source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
|
||||
<target>Deze collectie moet exact één element bevatten.|Deze collectie moet exact {{ limit }} elementen bevatten.</target>
|
||||
@@ -425,6 +441,10 @@
|
||||
<source>This value contains characters that are not allowed by the current restriction-level.</source>
|
||||
<target>Deze waarde bevat tekens die niet zijn toegestaan volgens het huidige beperkingsniveau.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="hueZAUr" resname="This value does not conform to the expected XSD schema.">
|
||||
<source>This value does not conform to the expected XSD schema.</source>
|
||||
<target state="needs-review-translation">Deze waarde voldoet niet aan het verwachte XSD-schema.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="tD.RkRe" resname="This value does not match the expected {{ charset }} charset.">
|
||||
<source>This value does not match the expected {{ charset }} charset.</source>
|
||||
<target>Deze waarde is niet in de verwachte tekencodering {{ charset }}.</target>
|
||||
@@ -485,6 +505,10 @@
|
||||
<source>This value is not a valid country.</source>
|
||||
<target>Deze waarde is geen geldig land.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ZXF_Jfm" resname="This value is not a valid cron expression.">
|
||||
<source>This value is not a valid cron expression.</source>
|
||||
<target state="needs-review-translation">Deze waarde is geen geldige cron-expressie.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="OeFZFII" resname="This value is not a valid currency.">
|
||||
<source>This value is not a valid currency.</source>
|
||||
<target>Deze waarde is geen geldige valuta.</target>
|
||||
@@ -525,6 +549,10 @@
|
||||
<source>This value is not a valid week.</source>
|
||||
<target>Deze waarde is geen geldige week.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="iTwuWRs" resname="This value is not valid XML.">
|
||||
<source>This value is not valid XML.</source>
|
||||
<target state="needs-review-translation">Deze waarde is geen geldige XML.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="TZg2uqx" resname="This value is not valid.">
|
||||
<source>This value is not valid.</source>
|
||||
<target>Deze waarde is niet geldig.</target>
|
||||
|
||||
Reference in New Issue
Block a user