diff --git a/Classes/Controller/ModuleController.php b/Classes/Controller/ModuleController.php index 970863a..440fced 100644 --- a/Classes/Controller/ModuleController.php +++ b/Classes/Controller/ModuleController.php @@ -22,6 +22,7 @@ use T3docs\Examples\Service\TableInformationService; use TYPO3\CMS\Backend\Clipboard\Clipboard; use TYPO3\CMS\Backend\Routing\UriBuilder; +use TYPO3\CMS\Backend\Template\Components\ComponentFactory; use TYPO3\CMS\Backend\Template\ModuleTemplate; use TYPO3\CMS\Backend\Template\ModuleTemplateFactory; use TYPO3\CMS\Backend\Tree\View\PageTreeView; @@ -67,6 +68,7 @@ public function __construct( protected readonly TableInformationService $tableInformationService, protected readonly LoggerInterface $logger, protected readonly UriBuilder $backendUriBuilder, + protected readonly ComponentFactory $componentFactory, ) {} /** @@ -649,6 +651,44 @@ protected function initializeModuleTemplate( $view->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu); + // Add language selector + $languageDropdown = $this->componentFactory->createDropDownButton() + ->setShowLabelText(true); + + $activeLanguageTitle = null; + + // Add existing language items first + foreach ($existingLanguageItems as $item) { + $languageDropdown->addItem($item); + if ($item->isActive()) { + $activeLanguageTitle = $item->getLabel(); + } + } + + // Add divider and new languages section if applicable + if (!empty($newLanguageItems)) { + $languageDropdown->addItem($this->componentFactory->createDropDownDivider()); + $languageDropdown->addItem( + $this->componentFactory->createDropDownHeader()->setLabel( + $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.new_page_translation') + ) + ); + foreach ($newLanguageItems as $item) { + $languageDropdown->addItem($item); + } + } + + // Set button label to active language and add accessibility label + $languageDropdown->setLabel( + $activeLanguageTitle ?? $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.language') + ); + $languageDropdown->setDescribedBy( + $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.language') + ); + + $view->getDocHeaderComponent()->setLanguageSelector($languageDropdown->render()); + + // Set title $view->setTitle( $this->getLanguageService()->sL('examples.module.mod:mlang_tabs_tab'), $context, diff --git a/Configuration/Backend/Modules.php b/Configuration/Backend/Modules.php index 7bbd58a..f8de0b1 100644 --- a/Configuration/Backend/Modules.php +++ b/Configuration/Backend/Modules.php @@ -34,6 +34,13 @@ 'flash', 'tree', 'clipboard', 'links', 'fileReference', 'fileReferenceCreate', 'count', ], ], + 'moduleData' => [ + 'language' => 0, // Default language + 'showHidden' => true, + ], + 'sharedModuleData' => [ + 'language' => 'content_language', // Share language selection + ], ], 'admin_examples' => [ 'parent' => 'system',