src/Form/TerlaterieSearchType.php line 15

  1. <?php
  2. namespace App\Form;
  3. use Symfony\Component\Finder\Finder;
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  6. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  7. use Symfony\Component\Form\Extension\Core\Type\TextType;
  8. use Symfony\Component\Form\FormBuilderInterface;
  9. use Symfony\Component\Intl\Exception\MissingResourceException;
  10. use Symfony\Component\Intl\Languages;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. class TerlaterieSearchType extends AbstractType
  13. {
  14.     private TranslatorInterface $translator;
  15.     public function __construct(TranslatorInterface $translator)
  16.     {
  17.         $this->translator $translator;
  18.     }
  19.     public function buildForm(FormBuilderInterface $builder, array $options): void
  20.     {
  21.         $finder = new Finder();
  22.         $languageFile $finder->in('../data/translation_sources/')->files()->name('languages.txt');
  23.         $languagesFromFile = [];
  24.         foreach ($languageFile as $file) {
  25.             $contents $file->getContents();
  26.             $languagesFromFile explode("\n"$contents);
  27.             break;
  28.         }
  29.         $customLanguageList = [
  30.             'anj' => 'anjevin',
  31.             'es' => 'castellano / español',
  32.             'oc-gas' => 'Occitan gascon',
  33.             'oc-pro' => 'Occitan provençau',
  34.             'pt_BR' => 'Português do Brasil',
  35.             'tnt' => 'Trentin',
  36.         ];
  37.         $languages = [];
  38.         foreach ($languagesFromFile as $language) {
  39.             $language str_replace('-''_'$language);
  40.             if ($language) {
  41.                 if (array_key_exists($language$customLanguageList)) {
  42.                     $languageName $customLanguageList[$language];
  43.                 } else {
  44.                     try {
  45.                         $languageName Languages::getName($language$language);
  46.                     } catch (MissingResourceException $e) {
  47.                         $languageName $language;
  48.                     }
  49.                 }
  50.                 $languages[$languageName] = $language;
  51.             }
  52.         }
  53.         ksort($languagesSORT_FLAG_CASE SORT_STRING);
  54.         $builder
  55.             ->add('searchString'TextType::class, [
  56.                 'attr' => [
  57.                     'placeholder' => $this->translator->trans('translation.search.form.search_string'),
  58.                 ],
  59.                 'label' => $this->translator->trans('translation.search.form.search_string'),
  60.                 'label_attr' => ['class' => 'form-title' ]
  61.             ])
  62.             ->add('searchLanguage'ChoiceType::class, [
  63.                 'choices' => $languages,
  64.                 'label' => $this->translator->trans('translation.search.form.search_language'),
  65.                 'label_attr' => ['class' => 'form-title' ],
  66. //                'empty_data' => 'en',
  67.                 'preferred_choices' => ['en'],
  68.             ])
  69.             ->add('targetLanguages'ChoiceType::class, [
  70.                 'choices' => $languages,
  71.                 'label' => $this->translator->trans('translation.search.form.target_language'),
  72.                 'expanded' => true,
  73.                 'multiple' => true,
  74.                 'label_attr' => ['class' => 'no-padding-top']
  75.             ])
  76.             ->add('submit'SubmitType::class, [
  77.                 'attr' => ['class' => 'btn btn-light'],
  78.                 'label' => $this->translator->trans('translation.search_button'),
  79.             ])
  80.         ;
  81.     }
  82. }