mirror of
https://github.com/MarijnDoeve/TijdVoorDeTest.git
synced 2026-03-07 05:04:20 +01:00
Compare commits
2 Commits
cd5946bda8
...
0be29190e6
| Author | SHA1 | Date | |
|---|---|---|---|
|
0be29190e6
|
|||
| c6f9b57c60 |
2
Justfile
2
Justfile
@@ -23,7 +23,7 @@ fixtures:
|
||||
docker compose exec php bin/console doctrine:fixtures:load --purge-with-truncate --no-interaction
|
||||
|
||||
translations:
|
||||
docker compose exec php bin/console translation:extract --domain=messages --force --format=yaml --sort=asc --clean nl
|
||||
docker compose exec php bin/console translation:extract --force --format=xliff --sort=asc --clean nl
|
||||
|
||||
fix-cs:
|
||||
docker compose exec php vendor/bin/php-cs-fixer fix
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'bootstrap/dist/css/bootstrap.min.css'
|
||||
import * as bootstrap from 'bootstrap'
|
||||
|
||||
import './styles/app.scss';
|
||||
import './styles/backoffice.scss';
|
||||
|
||||
BIN
assets/img/green.png
Normal file
BIN
assets/img/green.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 479 KiB |
BIN
assets/img/red.png
Normal file
BIN
assets/img/red.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 438 KiB |
@@ -1,4 +1,24 @@
|
||||
import 'bootstrap/dist/css/bootstrap.min.css'
|
||||
import * as bootstrap from 'bootstrap'
|
||||
|
||||
import './styles/quiz.scss'
|
||||
import './styles/app.scss'
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
// Check if we're on the elimination candidate screen
|
||||
const eliminationScreen = document.querySelector('.elimination-screen');
|
||||
if (eliminationScreen) {
|
||||
// Add event listener for any keypress
|
||||
document.addEventListener('keydown', function (event) {
|
||||
// Get the current URL
|
||||
const currentUrl = window.location.href;
|
||||
// Extract the elimination ID from the URL
|
||||
const urlParts = currentUrl.split('/');
|
||||
// Remove the candidate hash (last part of the URL)
|
||||
urlParts.pop();
|
||||
// Construct the URL to the main elimination page
|
||||
const redirectUrl = urlParts.join('/');
|
||||
// Redirect to the main elimination page
|
||||
window.location.href = redirectUrl;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
html, body {
|
||||
height: 100%;
|
||||
background-image: url("../img/background.png");
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-color: black;
|
||||
color: white;
|
||||
|
||||
display: grid;
|
||||
align-items: center;
|
||||
justify-self: center;
|
||||
}
|
||||
|
||||
.elimination-screen {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
object-fit: contain;
|
||||
background-color: white;
|
||||
z-index: 1000;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
0
assets/styles/backoffice.scss
Normal file
0
assets/styles/backoffice.scss
Normal file
@@ -1,12 +0,0 @@
|
||||
html, body {
|
||||
height: 100%;
|
||||
background-image: url("../img/background.png");
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-color: black;
|
||||
color: white;
|
||||
|
||||
display: grid;
|
||||
align-items: center;
|
||||
justify-self: center;
|
||||
}
|
||||
@@ -9,6 +9,7 @@ services:
|
||||
- ./frankenphp/Caddyfile:/etc/caddy/Caddyfile:ro
|
||||
- ./frankenphp/conf.d/20-app.dev.ini:/usr/local/etc/php/app.conf.d/20-app.dev.ini:ro
|
||||
- ./frankenphp/data:/data
|
||||
- sass:/app/var/sass
|
||||
environment:
|
||||
MERCURE_EXTRA_DIRECTIVES: demo
|
||||
# See https://xdebug.org/docs/all_settings#mode
|
||||
@@ -34,7 +35,8 @@ services:
|
||||
sass:
|
||||
image: ${IMAGES_PREFIX:-}app-php
|
||||
volumes:
|
||||
- ./:/app
|
||||
- ./:/app:ro
|
||||
- sass:/app/var/sass
|
||||
entrypoint: ''
|
||||
depends_on:
|
||||
- php
|
||||
@@ -42,6 +44,7 @@ services:
|
||||
- bin/console
|
||||
- sass:build
|
||||
- --watch
|
||||
- -v
|
||||
|
||||
###> symfony/mercure-bundle ###
|
||||
###< symfony/mercure-bundle ###
|
||||
@@ -62,3 +65,6 @@ services:
|
||||
MP_SMTP_AUTH_ACCEPT_ANY: 1
|
||||
MP_SMTP_AUTH_ALLOW_INSECURE: 1
|
||||
###< symfony/mailer ###
|
||||
|
||||
volumes:
|
||||
sass:
|
||||
|
||||
@@ -31,7 +31,7 @@ class ClaimSeasonCommand extends Command
|
||||
protected function configure(): void
|
||||
{
|
||||
$this
|
||||
->addArgument('email', InputArgument::REQUIRED, 'The email of the user to make admin')
|
||||
->addArgument('email', InputArgument::REQUIRED, 'The email of the user thats claims the season')
|
||||
->addArgument('season', InputArgument::REQUIRED, 'The season to claim')
|
||||
;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Controller;
|
||||
namespace App\Controller\Backoffice;
|
||||
|
||||
use App\Entity\Elimination;
|
||||
use App\Entity\Quiz;
|
||||
@@ -31,6 +31,9 @@ final class PrepareEliminationController extends AbstractController
|
||||
$elimination->updateFromInputBag($request->request);
|
||||
$em->flush();
|
||||
|
||||
if (true === $request->request->getBoolean('start')) {
|
||||
return $this->redirectToRoute('app_elimination', ['elimination' => $elimination->getId()]);
|
||||
}
|
||||
$this->addFlash('success', 'Elimination updated');
|
||||
}
|
||||
|
||||
@@ -5,12 +5,14 @@ declare(strict_types=1);
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\Candidate;
|
||||
use App\Entity\Season;
|
||||
use App\Entity\Elimination;
|
||||
use App\Enum\FlashType;
|
||||
use App\Form\EliminationEnterNameType;
|
||||
use App\Helpers\Base64;
|
||||
use App\Repository\CandidateRepository;
|
||||
use App\Security\Voter\SeasonVoter;
|
||||
use Symfony\Bridge\Doctrine\Attribute\MapEntity;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Attribute\AsController;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
@@ -25,30 +27,50 @@ final class EliminationController extends AbstractController
|
||||
{
|
||||
public function __construct(private readonly TranslatorInterface $translator) {}
|
||||
|
||||
#[Route('/elimination/{seasonCode}', name: 'app_elimination')]
|
||||
#[IsGranted(SeasonVoter::ELIMINATION, 'season')]
|
||||
public function index(#[MapEntity] Season $season): Response
|
||||
#[Route('/elimination/{elimination}', name: 'app_elimination')]
|
||||
#[IsGranted(SeasonVoter::ELIMINATION, 'elimination')]
|
||||
public function index(#[MapEntity] Elimination $elimination, Request $request): Response
|
||||
{
|
||||
return $this->render('elimination/index.html.twig', [
|
||||
$form = $this->createForm(EliminationEnterNameType::class);
|
||||
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$name = $form->get('name')->getData();
|
||||
|
||||
return $this->redirectToRoute('app_elimination_candidate', ['elimination' => $elimination->getId(), 'candidateHash' => Base64::base64UrlEncode($name)]);
|
||||
}
|
||||
|
||||
return $this->render('quiz/elimination/index.html.twig', [
|
||||
'form' => $form,
|
||||
'controller_name' => 'EliminationController',
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/elimination/{seasonCode}/{candidateHash}', name: 'app_elimination_cadidate')]
|
||||
#[IsGranted(SeasonVoter::ELIMINATION, 'season')]
|
||||
public function candidateScreen(Season $season, string $candidateHash, CandidateRepository $candidateRepository): Response
|
||||
#[Route('/elimination/{elimination}/{candidateHash}', name: 'app_elimination_candidate')]
|
||||
#[IsGranted(SeasonVoter::ELIMINATION, 'elimination')]
|
||||
public function candidateScreen(Elimination $elimination, string $candidateHash, CandidateRepository $candidateRepository): Response
|
||||
{
|
||||
$candidate = $candidateRepository->getCandidateByHash($season, $candidateHash);
|
||||
$candidate = $candidateRepository->getCandidateByHash($elimination->getQuiz()->getSeason(), $candidateHash);
|
||||
if (!$candidate instanceof Candidate) {
|
||||
$this->addFlash(FlashType::Warning,
|
||||
t('Cound not find candidate with name %name%', ['%name%' => Base64::base64UrlDecode($candidateHash)])->trans($this->translator)
|
||||
);
|
||||
throw new \InvalidArgumentException('Candidate not found');
|
||||
|
||||
return $this->redirectToRoute('app_elimination', ['elimination' => $elimination->getId()]);
|
||||
}
|
||||
|
||||
return $this->render('elimination/candidate.html.twig', [
|
||||
'season' => $season,
|
||||
$screenColour = $elimination->getScreenColour($candidate->getName());
|
||||
|
||||
if (null === $screenColour) {
|
||||
$this->addFlash(FlashType::Warning, $this->translator->trans('Cound not find candidate with name %name% in elimination.', ['%name%' => $candidate->getName()]));
|
||||
|
||||
return $this->redirectToRoute('app_elimination', ['elimination' => $elimination->getId()]);
|
||||
}
|
||||
|
||||
return $this->render('quiz/elimination/candidate.html.twig', [
|
||||
'candidate' => $candidate,
|
||||
'colour' => $screenColour,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,11 @@ class Elimination
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getScreenColour(?string $name): ?string
|
||||
{
|
||||
return $this->data[$name] ?? null;
|
||||
}
|
||||
|
||||
#[ORM\PrePersist]
|
||||
public function setCreatedAtValue(): void
|
||||
{
|
||||
|
||||
30
src/Form/EliminationEnterNameType.php
Normal file
30
src/Form/EliminationEnterNameType.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Form;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
/** @extends AbstractType<null> */
|
||||
class EliminationEnterNameType extends AbstractType
|
||||
{
|
||||
public function __construct(private readonly TranslatorInterface $translator) {}
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('name', TextType::class,
|
||||
[
|
||||
'required' => true,
|
||||
'label' => $this->translator->trans('Enter name'),
|
||||
'translation_domain' => false,
|
||||
'attr' => ['autofocus' => true],
|
||||
],
|
||||
)
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ class EnterNameType extends AbstractType
|
||||
'required' => true,
|
||||
'label' => $this->translator->trans('Enter your name'),
|
||||
'translation_domain' => false,
|
||||
'attr' => ['autofocus' => true],
|
||||
],
|
||||
)
|
||||
;
|
||||
|
||||
@@ -19,10 +19,13 @@ class SelectSeasonType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('season_code', TextType::class,
|
||||
['required' => true, 'constraints' => new Regex(pattern: "/^[A-Za-z\d]{5}$/"), 'label' => $this->translator->trans('Season Code'), 'translation_domain' => false]
|
||||
)
|
||||
;
|
||||
->add('season_code', TextType::class, [
|
||||
'required' => true,
|
||||
'constraints' => new Regex(pattern: "/^[A-Za-z\d]{5}$/"),
|
||||
'label' => $this->translator->trans('Season Code'),
|
||||
'translation_domain' => false,
|
||||
'attr' => ['autofocus' => true],
|
||||
]);
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
|
||||
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Security\Voter;
|
||||
|
||||
use App\Entity\Elimination;
|
||||
use App\Entity\Season;
|
||||
use App\Entity\User;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
@@ -21,10 +22,10 @@ final class SeasonVoter extends Voter
|
||||
protected function supports(string $attribute, mixed $subject): bool
|
||||
{
|
||||
return \in_array($attribute, [self::EDIT, self::DELETE, self::ELIMINATION], true)
|
||||
&& $subject instanceof Season;
|
||||
&& ($subject instanceof Season || $subject instanceof Elimination);
|
||||
}
|
||||
|
||||
/** @param Season $subject */
|
||||
/** @param Season|Elimination $subject */
|
||||
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
|
||||
{
|
||||
$user = $token->getUser();
|
||||
@@ -36,8 +37,10 @@ final class SeasonVoter extends Voter
|
||||
return true;
|
||||
}
|
||||
|
||||
$season = $subject instanceof Season ? $subject : $subject->getQuiz()->getSeason();
|
||||
|
||||
return match ($attribute) {
|
||||
self::EDIT, self::DELETE, self::ELIMINATION => $subject->isOwner($user),
|
||||
self::EDIT, self::DELETE, self::ELIMINATION => $season->isOwner($user),
|
||||
default => false,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -24,16 +24,18 @@
|
||||
<div class="col-4">
|
||||
<select id="colour-{{ candidate|lower }}" class="form-select"
|
||||
name="colour-{{ candidate|lower }}">
|
||||
<option value="green"{% if colour == 'green' %} selected{% endif %}>Green</option>
|
||||
<option value="red"{% if colour == 'red' %} selected{% endif %}>Red</option>
|
||||
<option
|
||||
value="green"{% if colour == 'green' %} selected{% endif %}>{{ 'Green'|trans }}</option>
|
||||
<option
|
||||
value="red"{% if colour == 'red' %} selected{% endif %}>{{ 'Red'|trans }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="btn-group py-2">
|
||||
<button type="submit" class="btn btn-primary" name="start" value="1">{{ 'Save'|trans }}</button>
|
||||
<button type="submit" class="btn btn-primary" name="start" value="0">{{ 'Save'|trans }}</button>
|
||||
<button type="submit" class="btn btn-success" name="start"
|
||||
value="0">{{ 'Save and start elimination'|trans }}</button>
|
||||
value="1">{{ 'Save and start elimination'|trans }}</button>
|
||||
<a href="{{ path('app_backoffice_quiz', {seasonCode: elimination.quiz.season.seasonCode, quiz: elimination.quiz.id}) }}"
|
||||
class="btn btn-secondary">{{ 'Back'|trans }}</a>
|
||||
</div>
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<h4 class="py-2">{{ 'Score'|trans }}</h4>
|
||||
<div class="btn-toolbar" role="toolbar">
|
||||
<div class="btn-group btn-group-lg me-2">
|
||||
<a class="btn btn-primary">{{ 'Start Elimination'|trans }}</a>
|
||||
{# <a class="btn btn-primary">{{ 'Start Elimination'|trans }}</a> #}
|
||||
<a href="{{ path('app_prepare_elimination', {seasonCode: season.seasonCode, quiz: quiz.id}) }}"
|
||||
class="btn btn-secondary">{{ 'Prepare Custom Elimination'|trans }}</a>
|
||||
{%~ if not quiz.eliminations.empty %}
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
{% extends 'quiz/base.html.twig' %}
|
||||
|
||||
{% block body %}
|
||||
<img src="{{ asset("img/#{colour}.png") }}" class="elimination-screen" id="{{ colour }}"
|
||||
alt="Screen with colour {{ colour }}">
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,20 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<title>Hello EliminationController!</title>
|
||||
|
||||
{% extends 'quiz/base.html.twig' %}
|
||||
{% block body %}
|
||||
<style>
|
||||
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
|
||||
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
|
||||
</style>
|
||||
|
||||
<div class="example-wrapper">
|
||||
<h1>Hello {{ controller_name }}! ✅</h1>
|
||||
|
||||
This friendly message is coming from:
|
||||
<ul>
|
||||
<li>Your controller at <code>/app/src/Controller/EliminationController.php</code></li>
|
||||
<li>Your template at <code>/app/templates/elimination/index.html.twig</code></li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{{ form(form) }}
|
||||
{% endblock body %}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{% extends 'quiz/base.html.twig' %}
|
||||
{% block body %}
|
||||
{{ season.name }}
|
||||
{{ form(form) }}
|
||||
{% endblock body %}
|
||||
|
||||
190
translations/EasyAdminBundle.nl.xliff
Normal file
190
translations/EasyAdminBundle.nl.xliff
Normal file
@@ -0,0 +1,190 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="nl" target-language="nl" datatype="plaintext" original="file.ext">
|
||||
<header>
|
||||
<tool tool-id="symfony" tool-name="Symfony"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="ecFC4Sv" resname="action.add_new_item">
|
||||
<source>action.add_new_item</source>
|
||||
<target>Voeg een item toe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="wPEuKmL" resname="action.cancel">
|
||||
<source>action.cancel</source>
|
||||
<target>Annuleren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Yy_rDAt" resname="action.choose_file">
|
||||
<source>action.choose_file</source>
|
||||
<target>Bestand kiezen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="PO_UHtX" resname="action.close">
|
||||
<source>action.close</source>
|
||||
<target>Sluiten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cd4XVNn" resname="action.delete">
|
||||
<source>action.delete</source>
|
||||
<target>Verwijderen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="FI_qUZL" resname="action.entity_actions">
|
||||
<source>action.entity_actions</source>
|
||||
<target>Acties</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="b5M9sxm" resname="action.remove_item">
|
||||
<source>action.remove_item</source>
|
||||
<target>Verwijder dit item</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="tKPecTw" resname="action.search">
|
||||
<source>action.search</source>
|
||||
<target>Zoeken</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="_EDCsYO" resname="autocomplete.loading-more-results">
|
||||
<source>autocomplete.loading-more-results</source>
|
||||
<target>Meer resultaten laden…</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Mi9fRIF" resname="autocomplete.no-more-results">
|
||||
<source>autocomplete.no-more-results</source>
|
||||
<target>Niet meer resultaten gevonden…</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="dc37768" resname="autocomplete.no-results-found">
|
||||
<source>autocomplete.no-results-found</source>
|
||||
<target>Geen resultaten gevonden…</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1QzA7HJ" resname="batch_action_modal.action">
|
||||
<source>batch_action_modal.action</source>
|
||||
<target>Verdergaan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="HzIn9A_" resname="batch_action_modal.content">
|
||||
<source>batch_action_modal.content</source>
|
||||
<target>Je kan deze actie niet ongedaan maken.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="IvOrJqD" resname="batch_action_modal.title">
|
||||
<source>batch_action_modal.title</source>
|
||||
<target>Wil je alle geselecteerde items bewerken?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="GTjPPy9" resname="datagrid.hidden_results">
|
||||
<source>datagrid.hidden_results</source>
|
||||
<target>Sommige resultaten konden niet worden weergegeven, toegang geweigerd.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="CO0E0pU" resname="datagrid.no_results">
|
||||
<source>datagrid.no_results</source>
|
||||
<target>Geen resultaten gevonden.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="O8SUipq" resname="delete_modal.content">
|
||||
<source>delete_modal.content</source>
|
||||
<target>Deze actie kan niet ongedaan worden gemaakt.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id=".DbNkeY" resname="delete_modal.title">
|
||||
<source>delete_modal.title</source>
|
||||
<target>Weet je zeker dat je dit item wilt verwijderen?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="MJQ4k4D" resname="field.code_editor.view_code">
|
||||
<source>field.code_editor.view_code</source>
|
||||
<target>Bekijk code</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="11gUR_y" resname="field.text_editor.view_content">
|
||||
<source>field.text_editor.view_content</source>
|
||||
<target>Bekijk inhoud</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3Mq5DeM" resname="files">
|
||||
<source>files</source>
|
||||
<target>__files</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="F7_Hyy1" resname="filter.button.apply">
|
||||
<source>filter.button.apply</source>
|
||||
<target>Toepassen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="GapHtez" resname="filter.button.clear">
|
||||
<source>filter.button.clear</source>
|
||||
<target>Wis filters</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="VH1tHkH" resname="filter.title">
|
||||
<source>filter.title</source>
|
||||
<target>Filters</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="3VqDiBO" resname="form.tab.error_badge_title">
|
||||
<source>form.tab.error_badge_title</source>
|
||||
<target>Een ongeldige input|%count% ongeldige inputs</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="S2q7CDj" resname="label.empty">
|
||||
<source>label.empty</source>
|
||||
<target>Leeg</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0EqWTob" resname="label.inaccessible">
|
||||
<source>label.inaccessible</source>
|
||||
<target>Niet toegankelijk</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="OLmlP81" resname="label.inaccessible.explanation">
|
||||
<source>label.inaccessible.explanation</source>
|
||||
<target>Getter bestaat niet voor dit veld of de eigenschap is niet public</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fAVSIIs" resname="label.null">
|
||||
<source>label.null</source>
|
||||
<target>Niets</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="IsDUuMi" resname="login_page.forgot_password">
|
||||
<source>login_page.forgot_password</source>
|
||||
<target>Wachtwoord vergeten?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="uxJWiMn" resname="login_page.password">
|
||||
<source>login_page.password</source>
|
||||
<target>Wachtwoord</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="GNqK_5o" resname="login_page.remember_me">
|
||||
<source>login_page.remember_me</source>
|
||||
<target>Onthoud mij</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="eiGmhDt" resname="login_page.sign_in">
|
||||
<source>login_page.sign_in</source>
|
||||
<target>Inloggen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="iFP0IOu" resname="login_page.username">
|
||||
<source>login_page.username</source>
|
||||
<target>Gebruikersnaam</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="nRSzgzm" resname="page_title.exception">
|
||||
<source>page_title.exception</source>
|
||||
<target>Fout|Fouten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="SaZbUiU" resname="paginator.next">
|
||||
<source>paginator.next</source>
|
||||
<target>Volgende</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ANpWHHW" resname="paginator.previous">
|
||||
<source>paginator.previous</source>
|
||||
<target>Vorige</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ZsypGha" resname="paginator.results">
|
||||
<source>paginator.results</source>
|
||||
<target><![CDATA[{0} Geen resultaten|{1} <strong>1</strong> resultaat|]1,Inf] <strong>%count%</strong> resultaten]]></target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8ViDiWx" resname="settings.appearance.auto">
|
||||
<source>settings.appearance.auto</source>
|
||||
<target>Automatisch</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="h3pBR4_" resname="settings.appearance.dark">
|
||||
<source>settings.appearance.dark</source>
|
||||
<target>Donker</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="JBbrEd7" resname="settings.appearance.label">
|
||||
<source>settings.appearance.label</source>
|
||||
<target>Weergave</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="vxKYCsn" resname="settings.appearance.light">
|
||||
<source>settings.appearance.light</source>
|
||||
<target>Licht</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="E5cimFA" resname="settings.locale">
|
||||
<source>settings.locale</source>
|
||||
<target>Taal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id=".eqAPKs" resname="user.anonymous">
|
||||
<source>user.anonymous</source>
|
||||
<target>Anonieme gebruiker</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="kgatv6N" resname="user.logged_in_as">
|
||||
<source>user.logged_in_as</source>
|
||||
<target>Aangemeld als</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
14
translations/VichUploaderBundle+intl-icu.nl.xliff
Normal file
14
translations/VichUploaderBundle+intl-icu.nl.xliff
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="nl" target-language="nl" datatype="plaintext" original="file.ext">
|
||||
<header>
|
||||
<tool tool-id="symfony" tool-name="Symfony"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="EgM1sAf" resname="download">
|
||||
<source>download</source>
|
||||
<target>download</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
270
translations/messages+intl-icu.nl.xliff
Normal file
270
translations/messages+intl-icu.nl.xliff
Normal file
@@ -0,0 +1,270 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="nl" target-language="nl" datatype="plaintext" original="file.ext">
|
||||
<header>
|
||||
<tool tool-id="symfony" tool-name="Symfony"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="uyMngrK" resname="Active Quiz">
|
||||
<source>Active Quiz</source>
|
||||
<target>Actieve test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="g.hyGgB" resname="Add">
|
||||
<source>Add</source>
|
||||
<target>Toevoegen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pv1legV" resname="Add Candidate">
|
||||
<source>Add Candidate</source>
|
||||
<target>Voeg kandidaat toe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7aI6qex" resname="Add Candidates">
|
||||
<source>Add Candidates</source>
|
||||
<target>Voeg kandidaten toe</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ehB6pAw" resname="Add a quiz to %name%">
|
||||
<source>Add a quiz to %name%</source>
|
||||
<target>Voeg een test toe aan %name%</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="qiXD5ve" resname="All Seasons">
|
||||
<source>All Seasons</source>
|
||||
<target>Alle seizoenen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="PaW5ihf" resname="Already have an account? Log in">
|
||||
<source>Already have an account? Log in</source>
|
||||
<target>Heb je al een account? Log in</target>
|
||||
</trans-unit>
|
||||
<trans-unit id=".QFPbFe" resname="Back">
|
||||
<source>Back</source>
|
||||
<target>Terug</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="T6TIfj7" resname="Candidate">
|
||||
<source>Candidate</source>
|
||||
<target>Kandidaat</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="TiTLBGW" resname="Candidate not found">
|
||||
<source>Candidate not found</source>
|
||||
<target>Kandidaat niet gevonden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="WJJE4q_" resname="Candidates">
|
||||
<source>Candidates</source>
|
||||
<target>Kandidaten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="sFpB4C2" resname="Correct Answers">
|
||||
<source>Correct Answers</source>
|
||||
<target>Goede antwoorden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="YrMVdGf" resname="Corrections">
|
||||
<source>Corrections</source>
|
||||
<target>Jokers</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Lu7u8U2" resname="Cound not find candidate with name %name%">
|
||||
<source>Cound not find candidate with name %name%</source>
|
||||
<target>Kon kandidaat met naam %name% niet vinden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="YQUiB4T" resname="Cound not find candidate with name %name% in elimination.">
|
||||
<source>Cound not find candidate with name %name% in elimination.</source>
|
||||
<target>Kon geen kandidaat vinden met de naam %name% in de eliminatie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0DvmToq" resname="Create a season">
|
||||
<source>Create a season</source>
|
||||
<target>Maak een seizoen aan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wsms_zc" resname="Create an account">
|
||||
<source>Create an account</source>
|
||||
<target>Maak een account aan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="w9AyAnn" resname="Deactivate Quiz">
|
||||
<source>Deactivate Quiz</source>
|
||||
<target>Deactiveer test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="R9yHzHv" resname="Download Template">
|
||||
<source>Download Template</source>
|
||||
<target>Download sjabloon</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="JZi_tm0" resname="Email">
|
||||
<source>Email</source>
|
||||
<target>E-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="mSo9TGC" resname="Enter name">
|
||||
<source>Enter name</source>
|
||||
<target>Voer een naam in</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="RnI7jJT" resname="Enter your name">
|
||||
<source>Enter your name</source>
|
||||
<target>Voor je naam in</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="OGiIhMH" resname="Green">
|
||||
<source>Green</source>
|
||||
<target>Groen</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="q0FeoCr" resname="Load Prepared Elimination">
|
||||
<source>Load Prepared Elimination</source>
|
||||
<target>Laad voorbereide eliminatie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="JKl2Twv" resname="Logout">
|
||||
<source>Logout</source>
|
||||
<target>Uitloggen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="NCItilE" resname="Make active">
|
||||
<source>Make active</source>
|
||||
<target>Maak actief</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="WP2lXKC" resname="Manage">
|
||||
<source>Manage</source>
|
||||
<target>Beheren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="LZzySF." resname="Manage Quiz">
|
||||
<source>Manage Quiz</source>
|
||||
<target>Beheer test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="wbMeKOh" resname="Name">
|
||||
<source>Name</source>
|
||||
<target>Naam</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="nOHriCl" resname="No active quiz">
|
||||
<source>No active quiz</source>
|
||||
<target>Geen actieve test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="swW4qFE" resname="No results">
|
||||
<source>No results</source>
|
||||
<target>Geen resultaten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="k7Eqnjt" resname="Number of dropouts:">
|
||||
<source>Number of dropouts:</source>
|
||||
<target>Aantal afvallers:</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="PywqOf4" resname="Owner(s)">
|
||||
<source>Owner(s)</source>
|
||||
<target>Eigena(a)r(en)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="GqmFSHc" resname="Password">
|
||||
<source>Password</source>
|
||||
<target>Wachtwoord</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="6EclFME" resname="Please Confirm your Email">
|
||||
<source>Please Confirm your Email</source>
|
||||
<target>messages</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lSX_PHJ" resname="Please sign in">
|
||||
<source>Please sign in</source>
|
||||
<target>Log in aub</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ruFGaU." resname="Please upload a valid XLSX file">
|
||||
<source>Please upload a valid XLSX file</source>
|
||||
<target>Upload een geldig XLSX-bestand</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="YG9Osau" resname="Prepare Custom Elimination">
|
||||
<source>Prepare Custom Elimination</source>
|
||||
<target>Bereid aangepaste eliminatie voor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Rx5irUP" resname="Questions">
|
||||
<source>Questions</source>
|
||||
<target>Vragen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="0tv0gq." resname="Quiz">
|
||||
<source>Quiz</source>
|
||||
<target>Test</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="4BzxOP3" resname="Quiz (xlsx)">
|
||||
<source>Quiz (xlsx)</source>
|
||||
<target>Test (xlsx)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="nU5BEhV" resname="Quiz Added!">
|
||||
<source>Quiz Added!</source>
|
||||
<target>Test toegevoegd!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="LbVe.2c" resname="Quiz completed">
|
||||
<source>Quiz completed</source>
|
||||
<target>Test voltooid</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="frxoIkW" resname="Quiz name">
|
||||
<source>Quiz name</source>
|
||||
<target>Testnaam</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="bggVfH9" resname="Quizzes">
|
||||
<source>Quizzes</source>
|
||||
<target>Tests</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="P1HcfAu" resname="Red">
|
||||
<source>Red</source>
|
||||
<target>Rood</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="fGfBzt6" resname="Register">
|
||||
<source>Register</source>
|
||||
<target>Registreren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="WevL4T_" resname="Remember me">
|
||||
<source>Remember me</source>
|
||||
<target>Onthoud mij</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z9CSKpk" resname="Repeat Password">
|
||||
<source>Repeat Password</source>
|
||||
<target>Herhaal wachtwoord</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="z9OKodR" resname="Save">
|
||||
<source>Save</source>
|
||||
<target>Opslaan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="8HUcmWU" resname="Save and start elimination">
|
||||
<source>Save and start elimination</source>
|
||||
<target>Opslaan en start eliminatie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="uRWqG15" resname="Score">
|
||||
<source>Score</source>
|
||||
<target>Score</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="yH9A3q0" resname="Season">
|
||||
<source>Season</source>
|
||||
<target>Seizoen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="yj8.c2D" resname="Season Code">
|
||||
<source>Season Code</source>
|
||||
<target>Seizoencode</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="1ULw_4S" resname="Season Name">
|
||||
<source>Season Name</source>
|
||||
<target>Seizoennaam</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="kc_J96C" resname="Seasons">
|
||||
<source>Seasons</source>
|
||||
<target>Seizoenen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pNIxNSX" resname="Sign in">
|
||||
<source>Sign in</source>
|
||||
<target>Log in</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="2QO7aYC" resname="Start Elimination">
|
||||
<source>Start Elimination</source>
|
||||
<target>Start eliminatie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="9m8DOBg" resname="Submit">
|
||||
<source>Submit</source>
|
||||
<target>Verstuur</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="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>
|
||||
</trans-unit>
|
||||
<trans-unit id="Dptvysv" resname="Time">
|
||||
<source>Time</source>
|
||||
<target>Tijd</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="vVQAP9A" resname="Your Seasons">
|
||||
<source>Your Seasons</source>
|
||||
<target>Jouw seizoenen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="m80cBv0" resname="Your email address has been verified.">
|
||||
<source>Your email address has been verified.</source>
|
||||
<target>Je e-mailadres is geverifieerd.</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,61 +0,0 @@
|
||||
'Active Quiz': 'Actieve test'
|
||||
Add: Toevoegen
|
||||
'Add Candidate': 'Voeg kandidaat toe'
|
||||
'Add Candidates': 'Voeg kandidaten toe'
|
||||
'Add a quiz to %name%': 'Voeg een test toe aan %name%'
|
||||
'All Seasons': 'Alle seizoenen'
|
||||
'Already have an account? Log in': 'Heb je al een account? Log in'
|
||||
Back: Terug
|
||||
Candidate: Kandidaat
|
||||
'Candidate not found': 'Kandidaat niet gevonden'
|
||||
Candidates: Kandidaten
|
||||
'Correct Answers': 'Goede antwoorden'
|
||||
Corrections: Jokers
|
||||
'Cound not find candidate with name %name%': 'Kon kandidaat met naam %name% niet vinden'
|
||||
'Create a season': 'Maak een seizoen aan'
|
||||
'Create an account': 'Maak een account aan'
|
||||
'Deactivate Quiz': 'Deactiveer test'
|
||||
'Download Template': 'Download sjabloon'
|
||||
Email: E-mail
|
||||
'Enter your name': 'Voor je naam in'
|
||||
'Invalid season code': 'Ongeldige seizoencode'
|
||||
'Load Prepared Elimination': 'Laad voorbereide eliminatie'
|
||||
Logout: Uitloggen
|
||||
'Make active': 'Maak actief'
|
||||
Manage: Beheren
|
||||
'Manage Quiz': 'Beheer test'
|
||||
Name: Naam
|
||||
'No active quiz': 'Geen actieve test'
|
||||
'No results': 'Geen resultaten'
|
||||
'Number of dropouts:': 'Aantal afvallers:'
|
||||
Owner(s): Eigena(a)r(en)
|
||||
Password: Wachtwoord
|
||||
'Please Confirm your Email': messages
|
||||
'Please sign in': 'Log in aub'
|
||||
'Please upload a valid XLSX file': 'Upload een geldig XLSX-bestand'
|
||||
'Prepare Custom Elimination': 'Bereid aangepaste eliminatie voor'
|
||||
Questions: Vragen
|
||||
Quiz: Test
|
||||
'Quiz (xlsx)': 'Test (xlsx)'
|
||||
'Quiz Added!': 'Test toegevoegd!'
|
||||
'Quiz completed': 'Test voltooid'
|
||||
'Quiz name': Testnaam
|
||||
Quizzes: Tests
|
||||
Register: Registreren
|
||||
'Remember me': 'Onthoud mij'
|
||||
'Repeat Password': 'Herhaal wachtwoord'
|
||||
Save: Opslaan
|
||||
'Save and start elimination': 'Opslaan en start eliminatie'
|
||||
Score: Score
|
||||
Season: Seizoen
|
||||
'Season Code': Seizoencode
|
||||
'Season Name': Seizoennaam
|
||||
Seasons: Seizoenen
|
||||
'Sign in': 'Log in'
|
||||
'Start Elimination': 'Start eliminatie'
|
||||
Submit: Verstuur
|
||||
'The password fields must match.': 'De wachtwoorden moeten overeen komen.'
|
||||
'There are no answers for this question': 'Er zijn geen antwoorden voor deze vraag'
|
||||
Time: Tijd
|
||||
'Your Seasons': 'Jouw seizoenen'
|
||||
'Your email address has been verified.': 'Je e-mailadres is geverifieerd.'
|
||||
26
translations/validators.nl.xliff
Normal file
26
translations/validators.nl.xliff
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="nl" target-language="nl" datatype="plaintext" original="file.ext">
|
||||
<header>
|
||||
<tool tool-id="symfony" tool-name="Symfony"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="B9r0Hn5" resname="Error">
|
||||
<source>Error</source>
|
||||
<target>Fout</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="B7yoMOR" resname="Please enter a password">
|
||||
<source>Please enter a password</source>
|
||||
<target>Voer je wachtwoord in</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="vsM4tSv" resname="There is already an account with this email">
|
||||
<source>There is already an account with this email</source>
|
||||
<target>Er is al een account met dit e-mailadres</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="_OmnKuR" resname="Your password should be at least {{ limit }} characters">
|
||||
<source>Your password should be at least {{ limit }} characters</source>
|
||||
<target>Je wachtwoord moet minimaal {{ limit }} karakters lang zijn</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -1,4 +0,0 @@
|
||||
Error: Fout
|
||||
'Please enter a password': 'Voer je wachtwoord in'
|
||||
'There is already an account with this email': 'Er is al een account met dit e-mailadres'
|
||||
'Your password should be at least {{ limit }} characters': 'Je wachtwoord moet minimaal {{ limit }} karakters lang zijn'
|
||||
Reference in New Issue
Block a user