Skip to content
Snippets Groups Projects
Commit be6ee38a authored by Pierre Fleutot's avatar Pierre Fleutot
Browse files

Ajout liste langues ISO. Ajout manager de langues

parent 16b232e9
No related branches found
No related tags found
No related merge requests found
Showing with 283 additions and 33 deletions
twig:
default_path: '%kernel.project_dir%/templates'
form_themes: ['bootstrap_5_layout.html.twig']
globals:
languages: '@App\Manager\LanguagesManager'
when@test:
twig:
......
......@@ -5,6 +5,7 @@ namespace App\Command;
use App\Entity\Label;
use App\Entity\Lexicon;
use App\Entity\User;
use App\Languages\LanguagesIso;
use Doctrine\ORM\EntityManagerInterface;
use League\Bundle\OAuth2ServerBundle\Model\Client;
use Symfony\Component\Console\Attribute\AsCommand;
......@@ -51,7 +52,7 @@ class BalexInitializeCommand extends Command
//TODO utiliser la liste de langues
// Création des lexiques zéro et new word
foreach (User::LANGUAGES as $language) {
foreach (LanguagesIso::getCodes() as $language) {
// Création d'un lexique Zéro par langue
$zeroLexicon = new Lexicon();
$zeroLexicon->setCategory(Lexicon::TYPE_ZERO);
......
......@@ -8,6 +8,7 @@ use App\Entity\Headword;
use App\Entity\Label;
use App\Entity\Lexicon;
use App\Entity\User;
use App\Languages\LanguagesIso;
use App\Manager\WiktionaryManager;
use Doctrine\Persistence\ManagerRegistry;
use phpDocumentor\Reflection\Types\Integer;
......@@ -173,7 +174,7 @@ class ApiBaseController extends AbstractController
public function getLanguages()
{
return User::LANGUAGES;
return LanguagesIso::getCodes();
}
/**
......
......@@ -24,12 +24,6 @@ class LexiconController extends AbstractController
*/
public function index(LexiconRepository $lexiconRepository): Response
{
dump(in_array('update_comment', Log::LOG_LIST_CATEGORIES));die();
// $entry2 = $this->getDoctrine()->getRepository(Entry::class)->find(9);
//
//
// dump($entry1->getAttributes(), $entry2->getAttributes(), array_merge_recursive($entry1->getAttributes()['Items'], $entry2->getAttributes()['Items']));die();
return $this->render('lexicon/index.html.twig', [
'lexicons' => $lexiconRepository->findAll(),
]);
......
......@@ -2,6 +2,7 @@
namespace App\Entity;
use App\Languages\LanguagesIso;
use App\Repository\LabelRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
......@@ -48,7 +49,7 @@ class StudiedLanguage
public function __toString()
{
return User::getFormattedLanguage($this->getLanguage()) . ' : ' . $this->getLevel();
return LanguagesIso::getLabelFromCode($this->getLanguage()) . ' : ' . $this->getLevel();
}
/**
......
......@@ -26,19 +26,6 @@ use Symfony\Component\Serializer\Annotation\Ignore;
*/
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
const LANGUAGES = [
'Français' => 'fr',
'Anglais' => 'en',
'Allemand' => 'de',
'Italien' => 'it',
'Espagnol' => 'es',
];
public static function getFormattedLanguage($languageCode)
{
return array_search($languageCode, self::LANGUAGES);
}
const LANGUAGE_LEVELS = [
'A1' => 'A1',
'A2' => 'A2',
......
......@@ -5,6 +5,7 @@ namespace App\Form;
use App\Entity\GraphyList;
use App\Entity\Group;
use App\Entity\User;
use App\Languages\LanguagesIso;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
......@@ -24,7 +25,7 @@ class GraphyListType extends AbstractType
])
->add('language', ChoiceType::class, [
'label' => 'Langue',
'choices' => User::LANGUAGES,
'choices' => LanguagesIso::getCodes(),
])
->add('category', ChoiceType::class, [
'label' => 'Langue',
......
......@@ -4,6 +4,7 @@ namespace App\Form;
use App\Entity\Group;
use App\Entity\User;
use App\Languages\LanguagesIso;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
......@@ -22,7 +23,7 @@ class GroupType extends AbstractType
->add('language', ChoiceType::class, [
'mapped' => false,
'label' => 'Langue',
'choices' => User::LANGUAGES,
'choices' => LanguagesIso::getCodes(),
])
->add('submit', SubmitType::class, [
'label' => 'Enregistrer',
......
......@@ -3,6 +3,7 @@
namespace App\Form;
use App\Entity\User;
use App\Languages\LanguagesIso;
use Doctrine\DBAL\Types\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
......@@ -51,7 +52,7 @@ class RegistrationFormType extends AbstractType
])
->add('nativeLanguage', ChoiceType::class, [
'label' => 'Langue natale',
'choices' => User::LANGUAGES,
'choices' => LanguagesIso::getCodes(),
])
->add('studiedLanguage', StudiedLanguageType::class, [
'mapped' => false,
......
......@@ -4,6 +4,7 @@ namespace App\Form;
use App\Entity\StudiedLanguage;
use App\Entity\User;
use App\Languages\LanguagesIso;
use Doctrine\DBAL\Types\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
......@@ -23,7 +24,7 @@ class StudiedLanguageType extends AbstractType
$builder
->add('language', ChoiceType::class, [
'label' => 'Langue étudiée',
'choices' => User::LANGUAGES,
'choices' => LanguagesIso::getCodes(),
])
->add('level', ChoiceType::class, [
'label' => 'Niveau',
......
......@@ -3,6 +3,7 @@
namespace App\Form;
use App\Entity\User;
use App\Languages\LanguagesIso;
use Doctrine\DBAL\Types\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
......@@ -23,22 +24,26 @@ class UserProfileFormType extends AbstractType
$builder
->add('nativeLanguage', ChoiceType::class, [
'label' => 'Langue natale',
'choices' => User::LANGUAGES,
'choices' => LanguagesIso::getCodes(),
])
->add('appLanguage', ChoiceType::class, [
'label' => 'Langue interface',
'choices' => User::LANGUAGES,
'choices' => LanguagesIso::getCodes(),
])
->add('activePersonalStats', CheckboxType::class, [
'required' => false,
'label' => 'Activation statistiques persos',
])
->add('activeGamification', CheckboxType::class, [
'required' => false,
'label' => 'Activation gamification',
])
->add('shareDataWithOtherUsers', CheckboxType::class, [
'required' => false,
'label' => 'Partage des données avec les autres utilisateurs',
])
->add('shareDataWithResearchers', CheckboxType::class, [
'required' => false,
'label' => 'Partage des données avec les enseignants',
])
->add('picture', PictureType::class, [
......
<?php
namespace App\Languages;
class LanguagesIso
{
public static function getCodes($labelLanguage = 'fr')
{
$result = [];
if ($labelLanguage == 'own') {
foreach (self::LIST as $code => $labels) {
$result[$labels[1]] = $code;
}
} elseif ($labelLanguage == 'en') {
foreach (self::LIST as $code => $labels) {
$result[$labels[2]] = $code;
}
} else {
// Français par défaut
foreach (self::LIST as $code => $labels) {
$result[$labels[0]] = $code;
}
}
return $result;
}
public static function getLabel($code, $labelLanguage = 'fr')
{
if ($labelLanguage == 'own') {
return self::LIST[$code][1];
}
if ($labelLanguage == 'en') {
return self::LIST[$code][0];
}
// Français par défaut
return self::LIST[$code][0];
}
// "code" => ["français", "langue originale", "anglais"]
const LIST = [
"aa" => ["Afar", "Afaraf", "Afar"],
"ab" => ["Abkhaze", "Аҧсуа", "Abkhazian"],
"ae" => ["Avestique", "Avesta", "Avestan"],
"af" => ["Afrikaans", "Afrikaans", "Afrikaans"],
"ak" => ["Akan", "Akan", "Akan"],
"am" => ["Amharique", "አማርኛ", "Amharic"],
"an" => ["Aragonais", "Aragonés", "Aragonese"],
"ar" => ["Arabe", "العربية", "Arabic"],
"as" => ["Assamais", "অসমীয়া", "Assamese"],
"av" => ["Avar", "авар мацӀ ; магӀарул мацӀ", "Avaric"],
"ay" => ["Aymara", "Aymar aru", "Aymara"],
"az" => ["Azéri", "Azərbaycan dili", "Azerbaijani"],
"ba" => ["Bachkir", "башҡорт теле", "Bashkir"],
"be" => ["Biélorusse", "Беларуская", "Belarusian"],
"bg" => ["Bulgare", "български език", "Bulgarian"],
"bh" => ["Bihari", "भोजपुरी", "Bihari"],
"bi" => ["Bichelamar", "Bislama", "Bislama"],
"bm" => ["Bambara", "Bamanankan", "Bambara"],
"bn" => ["Bengali", "বাংলা", "Bengali"],
"bo" => ["Tibétain", "བོད་ཡིག", "Tibetan"],
"br" => ["Breton", "Brezhoneg", "Breton"],
"bs" => ["Bosnien", "Bosanski jezik", "Bosnian"],
"ca" => ["Catalan", "Català", "Catalan"],
"ce" => ["Tchétchène", "нохчийн мотт", "Chechen"],
"ch" => ["Chamorro", "Chamoru", "Chamorro"],
"co" => ["Corse", "Corsu ; lingua corsa", "Corsican"],
"cr" => ["Cri", "ᓀᐦᐃᔭᐍᐏᐣ", "Cree"],
"cs" => ["Tchèque", "Česky čeština", "Czech"],
"cu" => ["Vieux-slave", "Словѣньскъ", "Old Church Slavonic"],
"cv" => ["Tchouvache", "чӑваш чӗлхи", "Chuvash"],
"cy" => ["Gallois", "Cymraeg", "Welsh"],
"da" => ["Danois", "Dansk", "Danish"],
"de" => ["Allemand", "Deutsch", "German"],
"dv" => ["Maldivien", "ދިވެހި", "Divehi"],
"dz" => ["Dzongkha", "རྫོང་ཁ", "Dzongkha"],
"ee" => ["Ewe", "Ɛʋɛgbɛ", "Ewe"],
"el" => ["Grec moderne", "Ελληνικά", "Greek"],
"en" => ["Anglais", "English", "English"],
"eo" => ["Espéranto", "Esperanto", "Esperanto"],
"es" => ["Espagnol", "Español; castellano", "Spanish"],
"et" => ["Estonien", "Eesti keel", "Estonian"],
"eu" => ["Basque", "Euskara", "Basque"],
"fa" => ["Persan", "فارسی", "Persian"],
"ff" => ["Peul", "Fulfulde", "Fulah"],
"fi" => ["Finnois", "Suomen kieli", "Finnish"],
"fj" => ["Fidjien", "Vosa Vakaviti", "Fijian"],
"fo" => ["Féroïen", "Føroyskt", "Faroese"],
"fr" => ["Français", "Français ; langue française", "French"],
"fy" => ["Frison occidental", "Frysk", "Western Frisian"],
"ga" => ["Irlandais", "Gaeilge", "Irish"],
"gd" => ["Écossais", "Gàidhlig", "Scottish Gaelic"],
"gl" => ["Galicien", "Galego", "Galician"],
"gn" => ["Guarani", "Avañe'ẽ", "Guarani"],
"gu" => ["Gujarati", "ગુજરાતી", "Gujarati"],
"gv" => ["Mannois", "Ghaelg", "Manx"],
"ha" => ["Haoussa", "هَوُسَ", "Hausa"],
"he" => ["Hébreu", "עברית", "Hebrew"],
"hi" => ["Hindi", "हिन्दी ; हिंदी", "Hindi"],
"ho" => ["Hiri motu", "Hiri Motu", "Hiri Motu"],
"hr" => ["Croate", "Hrvatski", "Croatian"],
"ht" => ["Créole haïtien", "Kreyòl ayisyen", "Haitian"],
"hu" => ["Hongrois", "magyar", "Hungarian"],
"hy" => ["Arménien", "Հայերեն", "Armenian"],
"hz" => ["Héréro", "Otjiherero", "Herero"],
"ia" => ["Interlingua", "Interlingua", "Interlingua"],
"id" => ["Indonésien", "Bahasa Indonesia", "Indonesian"],
"ie" => ["Occidental", "Interlingue", "Interlingue"],
"ig" => ["Igbo", "Igbo", "Igbo"],
"ii" => ["Yi", "ꆇꉙ", "Sichuan Yi"],
"ik" => ["Inupiak", "Iñupiaq ; Iñupiatun", "Inupiaq"],
"io" => ["Ido", "Ido", "Ido"],
"is" => ["Islandais", "Íslenska", "Icelandic"],
"it" => ["Italien", "Italiano", "Italian"],
"iu" => ["Inuktitut", "ᐃᓄᒃᑎᑐᑦ", "Inuktitut"],
"ja" => ["Japonais", "日本語 (にほんご)", "Japanese"],
"jv" => ["Javanais", "Basa Jawa", "Javanese"],
"ka" => ["Géorgien", "ქართული", "Georgian"],
"kg" => ["Kikongo", "KiKongo", "Kongo"],
"ki" => ["Kikuyu", "Gĩkũyũ", "Kikuyu"],
"kj" => ["Kuanyama", "Kuanyama", "Kwanyama"],
"kk" => ["Kazakh", "Қазақ тілі", "Kazakh"],
"kl" => ["Groenlandais", "Kalaallisut ; kalaallit oqaasii", "Greenlandic"],
"km" => ["Khmer", "ភាសាខ្មែរ", "Khmer"],
"kn" => ["Kannada", "ಕನ್ನಡ", "Kannada"],
"ko" => ["Coréen", "한국어 (韓國語) ; 조선말 (朝鮮語)", "Korean"],
"kr" => ["Kanouri", "Kanuri", "Kanuri"],
"ks" => ["Cachemiri", "कश्मीरी ; كشميري", "Kashmiri"],
"ku" => ["Kurde", "Kurdî ; كوردی", "Kurdish"],
"kv" => ["Komi", "коми кыв", "Komi"],
"kw" => ["Cornique", "Kernewek", "Cornish"],
"ky" => ["Kirghiz", "кыргыз тили", "Kirghiz"],
"la" => ["Latin", "Latine ; lingua latina", "Latin"],
"lb" => ["Luxembourgeois", "Lëtzebuergesch", "Luxembourgish"],
"lg" => ["Ganda", "Luganda", "Ganda"],
"li" => ["Limbourgeois", "Limburgs", "Limburgish"],
"ln" => ["Lingala", "Lingála", "Lingala"],
"lo" => ["Lao", "ພາສາລາວ", "Lao"],
"lt" => ["Lituanien", "Lietuvių kalba", "Lithuanian"],
"lu" => ["Luba", "tshiluba", "Luba"],
"lv" => ["Letton", "Latviešu valoda", "Latvian"],
"mg" => ["Malgache", "Fiteny malagasy", "Malagasy"],
"mh" => ["Marshallais", "Kajin M̧ajeļ", "Marshallese"],
"mi" => ["Maori de Nouvelle-Zélande", "Te reo Māori", "Māori"],
"mk" => ["Macédonien", "македонски јазик", "Macedonian"],
"ml" => ["Malayalam", "മലയാളം", "Malayalam"],
"mn" => ["Mongol", "Монгол", "Mongolian"],
"mr" => ["Marathi", "मराठी", "Marathi"],
"ms" => ["Malais", "Bahasa Melayu ; بهاس ملايو", "Malay"],
"mt" => ["Maltais", "Malti", "Maltese"],
"my" => ["Birman", "ဗမာစာ", "Burmese"],
"na" => ["Nauruan", "Ekakairũ Naoero", "Nauru"],
"nb" => ["Norvégien bokmål", "Norsk bokmål", "Norwegian Bokmål"],
"nd" => ["Sindebele", "isiNdebele", "North Ndebele"],
"ne" => ["Népalais", "नेपाली", "Nepali"],
"ng" => ["Ndonga", "Owambo", "Ndonga"],
"nl" => ["Néerlandais", "Nederlands", "Dutch"],
"nn" => ["Norvégien nynorsk", "Norsk nynorsk", "Norwegian Nynorsk"],
"no" => ["Norvégien", "Norsk", "Norwegian"],
"nr" => ["Nrebele", "Ndébélé", "South Ndebele"],
"nv" => ["Navajo", "Diné bizaad ; Dinékʼehǰí", "Navajo"],
"ny" => ["Chichewa", "ChiCheŵa ; chinyanja", "Chichewa"],
"oc" => ["Occitan", "Occitan", "Occitan"],
"oj" => ["Ojibwé", "ᐊᓂᔑᓈᐯᒧᐎᓐ", "Ojibwa"],
"om" => ["Oromo", "Afaan Oromoo", "Oromo"],
"or" => ["Oriya", "ଓଡ଼ିଆ", "Oriya"],
"os" => ["Ossète", "Ирон ӕвзаг", "Ossetian"],
"pa" => ["Pendjabi", "ਪੰਜਾਬੀ ; پنجابی", "Panjabi"],
"pi" => ["Pali", "पािऴ", "Pāli"],
"pl" => ["Polonais", "Polski", "Polish"],
"ps" => ["Pachto", "پښتو", "Pashto"],
"pt" => ["Portugais", "Português", "Portuguese"],
"qu" => ["Quechua", "Runa Simi ; Kichwa", "Quechua"],
"rm" => ["Romanche", "Rumantsch grischun", "Romansh"],
"rn" => ["Kirundi", "kiRundi", "Kirundi"],
"ro" => ["Roumain", "Română", "Romanian"],
"ru" => ["Russe", "русский язык", "Russian"],
"rw" => ["Kinyarwanda", "Kinyarwanda", "Kinyarwanda"],
"sa" => ["Sanskrit", "संस्कृतम्", "Sanskrit"],
"sc" => ["Sarde", "sardu", "Sardinian"],
"sd" => ["Sindhi", "सिन्धी ; سنڌي، سندھی", "Sindhi"],
"se" => ["Same du Nord", "Davvisámegiella", "Northern Sami"],
"sg" => ["Sango", "Yângâ tî sängö", "Sango"],
"sh" => ["Serbo-croate", "srpskohrvatski jezik ; српскохрватски језик", "Serbo-Croatian"],
"si" => ["Cingalais", "සිංහල", "Sinhalese"],
"sk" => ["Slovaque", "Slovenčina", "Slovak"],
"sl" => ["Slovène", "Slovenščina", "Slovenian"],
"sm" => ["Samoan", "Gagana fa'a Samoa", "Samoan"],
"sn" => ["Shona", "chiShona", "Shona"],
"so" => ["Somali", "Soomaaliga ; af Soomaali", "Somali"],
"sq" => ["Albanais", "Shqip", "Albanian"],
"sr" => ["Serbe", "српски језик", "Serbian"],
"ss" => ["Swati", "SiSwati", "Swati"],
"st" => ["Sotho du Sud", "seSotho", "Sotho"],
"su" => ["Soundanais", "Basa Sunda", "Sundanese"],
"sv" => ["Suédois", "Svenska", "Swedish"],
"sw" => ["Swahili", "Kiswahili", "Swahili"],
"ta" => ["Tamoul", "தமிழ்", "Tamil"],
"te" => ["Télougou", "తెలుగు", "Telugu"],
"tg" => ["Tadjik", "тоҷикӣ ; toğikī ; تاجیکی", "Tajik"],
"th" => ["Thaï", "ไทย", "Thai"],
"ti" => ["Tigrigna", "ትግርኛ", "Tigrinya"],
"tk" => ["Turkmène", "Türkmen ;Түркмен", "Turkmen"],
"tl" => ["Tagalog", "Tagalog", "Tagalog"],
"tn" => ["Tswana", "seTswana", "Tswana"],
"to" => ["Tongien", "faka Tonga", "Tonga"],
"tr" => ["Turc", "Türkçe", "Turkish"],
"ts" => ["Tsonga", "xiTsonga", "Tsonga"],
"tt" => ["Tatar", "татарча ; tatarça ;تاتارچا", "Tatar"],
"tw" => ["Twi", "Twi", "Twi"],
"ty" => ["Tahitien", "Reo Mā`ohi", "Tahitian"],
"ug" => ["Ouïghour", "Uyƣurqə ; ئۇيغۇرچ", "Uighur"],
"uk" => ["Ukrainien", "українська мова", "Ukrainian"],
"ur" => ["Ourdou", "اردو", "Urdu"],
"uz" => ["Ouzbek", "O'zbek ; Ўзбек ; أۇزبېك", "Uzbek"],
"ve" => ["Venda", "tshiVenḓa", "Venda"],
"vi" => ["Vietnamien", "Tiếng Việt", "Viêt Namese"],
"vo" => ["Volapük", "Volapük", "Volapük"],
"wa" => ["Wallon", "Walon", "Walloon"],
"wo" => ["Wolof", "Wollof", "Wolof"],
"xh" => ["Xhosa", "isiXhosa", "Xhosa"],
"yi" => ["Yiddish", "ייִדיש", "Yiddish"],
"yo" => ["Yoruba", "Yorùbá", "Yoruba"],
"za" => ["Zhuang", "Saɯ cueŋƅ ; Saw cuengh", "Zhuang"],
"zh" => ["Chinois", "中文, 汉语, 漢語", "Chinese"],
"zu" => ["Zoulou", "isiZulu", "Zulu"],
];
}
\ No newline at end of file
<?php
namespace App\Manager;
use App\Entity\Entry;
use App\Entity\Label;
use App\Entity\User;
use App\Languages\LanguagesIso;
use Doctrine\Persistence\ManagerRegistry;
use JsonSchema\Validator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\SerializerAwareInterface;
use Symfony\Component\Serializer\SerializerInterface;
class LanguagesManager
{
public function getLabel($code, $labelLanguage = 'fr')
{
return LanguagesIso::getLabel($code);
}
}
......@@ -37,8 +37,8 @@
<td>{{ user.activePersonalStats ? '<i class="bi bi-check text-success"></i>' : '<i class="bi bi-x text-danger"></i>' }}</td>
<td>{{ user.shareDataWithOtherUsers ? '<i class="bi bi-check text-success"></i>' : '<i class="bi bi-x text-danger"></i>' }}</td>
<td>{{ user.shareDataWithResearchers ? '<i class="bi bi-check text-success"></i>' : '<i class="bi bi-x text-danger"></i>' }}</td>
<td>{{ user.formattedLanguage(user.nativeLanguage) }}</td>
<td>{{ user.formattedLanguage(user.appLanguage) }}</td>
<td>{{ languages.label(user.nativeLanguage) }}</td>
<td>{{ languages.label(user.appLanguage) }}</td>
<td>{{ user.studiedLanguages|join('<br>')|raw }}</td>
<td>
{% if user.enabled %}
......
......@@ -48,11 +48,11 @@
</tr>
<tr>
<td>Langue</td>
<td>{{ user.formattedLanguage(user.nativeLanguage) }}</td>
<td>{{ languages.label(user.nativeLanguage) }}</td>
</tr>
<tr>
<td>Langue interface</td>
<td>{{ user.formattedLanguage(user.appLanguage) }}</td>
<td>{{ languages.label(user.appLanguage) }}</td>
</tr>
<tr>
<td style="padding-top: 12px">Biographie</td>
......@@ -60,7 +60,7 @@
<table class="mb-2">
{% for studiedLanguage in user.studiedLanguages %}
<tr>
<td><strong>- {{ user.getFormattedLanguage(studiedLanguage.language) }}, {{ studiedLanguage.level }}</strong></td>
<td><strong>- {{ languages.label(studiedLanguage.language) }}, {{ studiedLanguage.level }}</strong></td>
<td style="padding-left: 5px"><a title="Modifier" href="{{ path('app_studied_language_edit', {id: studiedLanguage.id}) }}" class="btn btn-xs btn-dark"><i class="bi-pencil"></i></a></td>
<td>{{ include('studied_language/_delete_form.html.twig') }}</td>
</tr>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment