. */ 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; use Symfony\Component\Form\Extension\Core\Type\CurrencyType; use Symfony\Component\Form\Extension\Core\Type\TimezoneType; use Symfony\Component\Translation\TranslatableMessage as TM; use Symfony\Component\Validator\Constraints as Assert; #[Settings(label: new TM("settings.system.localization"))] #[SettingsIcon("fa-globe")] class LocalizationSettings { use SettingsTrait; #[Assert\Locale()] #[Assert\NotBlank()] #[SettingsParameter(label: new TM("settings.system.localization.locale"), formType: LocaleSelectType::class, envVar: "string:DEFAULT_LANG", envVarMode: EnvVarMode::OVERWRITE)] public string $locale = 'en'; #[Assert\Timezone()] #[Assert\NotBlank()] #[SettingsParameter(label: new TM("settings.system.localization.timezone"), formType: TimezoneType::class, envVar: "string:DEFAULT_TIMEZONE", envVarMode: EnvVarMode::OVERWRITE)] public string $timezone = 'Europe/Berlin'; #[Assert\Currency()] #[Assert\NotBlank()] #[SettingsParameter(label: new TM("settings.system.localization.base_currency"), description: new TM("settings.system.localization.base_currency_description"), formType: CurrencyType::class, formOptions: ['preferred_choices' => ['EUR', 'USD', 'GBP', "JPY", "CNY"], 'help_html' => true], envVar: "string:BASE_CURRENCY", envVarMode: EnvVarMode::OVERWRITE )] public string $baseCurrency = 'EUR'; #[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 = []; }