diff --git a/src/Form/Type/LanguageMenuEntriesType.php b/src/Form/Type/LanguageMenuEntriesType.php new file mode 100644 index 00000000..a3bba77f --- /dev/null +++ b/src/Form/Type/LanguageMenuEntriesType.php @@ -0,0 +1,57 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Form\Type; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\LanguageType; +use Symfony\Component\Form\Extension\Core\Type\LocaleType; +use Symfony\Component\Intl\Languages; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class LanguageMenuEntriesType extends AbstractType +{ + public function __construct(#[Autowire(param: 'partdb.locale_menu')] private readonly array $preferred_languages) + { + + } + + public function getParent(): string + { + return LanguageType::class; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $choices = []; + foreach ($this->preferred_languages as $lang_code) { + $choices[Languages::getName($lang_code)] = $lang_code; + } + + $resolver->setDefaults([ + 'choice_loader' => null, + 'choices' => $choices, + ]); + } +} diff --git a/src/Settings/SystemSettings/LocalizationSettings.php b/src/Settings/SystemSettings/LocalizationSettings.php index 434a4e69..7c83d1ef 100644 --- a/src/Settings/SystemSettings/LocalizationSettings.php +++ b/src/Settings/SystemSettings/LocalizationSettings.php @@ -23,9 +23,12 @@ declare(strict_types=1); namespace App\Settings\SystemSettings; +use App\Form\Type\LanguageMenuEntriesType; use App\Form\Type\LocaleSelectType; use App\Settings\SettingsIcon; use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\ParameterTypes\ArrayType; +use Jbtronics\SettingsBundle\ParameterTypes\StringType; use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; @@ -60,4 +63,14 @@ class LocalizationSettings envVar: "string:BASE_CURRENCY", envVarMode: EnvVarMode::OVERWRITE )] public string $baseCurrency = 'EUR'; -} \ No newline at end of file + + #[SettingsParameter(type: ArrayType::class, + label: new TM("settings.system.localization.language_menu_entries"), + description: new TM("settings.system.localization.language_menu_entries.description"), + options: ['type' => StringType::class], + formType: LanguageMenuEntriesType::class, + formOptions: ['multiple' => true, 'required' => false, 'ordered' => true], + )] + #[Assert\All([new Assert\Locale()])] + public array $languageMenuEntries = []; +} diff --git a/templates/_turbo_control.html.twig b/templates/_turbo_control.html.twig index 4c178038..90ae8d9a 100644 --- a/templates/_turbo_control.html.twig +++ b/templates/_turbo_control.html.twig @@ -22,9 +22,14 @@