protected function generateAvailableLocalesCollectionByScanningFilesystem()
    {
        $includePaths = array_keys(array_filter((array)$this->settings['scan']['includePaths']));
        if ($includePaths === []) {
            return;
        }
        $excludePattern = $this->getScanExcludePattern();

        /** @var FlowPackageInterface $activePackage */
        foreach ($this->packageManager->getFlowPackages() as $activePackage) {
            $packageResourcesPath = Files::getNormalizedPath($activePackage->getResourcesPath());

            if (!is_dir($packageResourcesPath)) {
                continue;
            }

            $directories = [];
            foreach ($includePaths as $path) {
                $scanPath = Files::concatenatePaths([$packageResourcesPath, $path]);
                if (is_dir($scanPath)) {
                    array_push($directories, Files::getNormalizedPath($scanPath));
                }
            }

            while ($directories !== []) {
                $currentDirectory = array_pop($directories);
                $relativeDirectory = '/' . str_replace($packageResourcesPath, '', $currentDirectory);
                if ($excludePattern !== '' && preg_match($excludePattern, $relativeDirectory) === 1) {
                    continue;
                }

                if (stripos($currentDirectory, '/Private/Translations/') !== false) {
                    $localeIdentifier = Utility::extractLocaleTagFromDirectory($currentDirectory);
                    if ($localeIdentifier !== false) {
                        $this->localeCollection->addLocale(new Locale($localeIdentifier));
                    }
                }
                if ($handle = opendir($currentDirectory)) {
                    while (false !== ($filename = readdir($handle))) {
                        if ($filename[0] === '.') {
                            continue;
                        }
                        $pathAndFilename = Files::concatenatePaths([$currentDirectory, $filename]);
                        if (is_dir($pathAndFilename)) {
                            array_push($directories, Files::getNormalizedPath($pathAndFilename));
                        } else {
                            $localeIdentifier = Utility::extractLocaleTagFromFilename($filename);
                            if ($localeIdentifier !== false) {
                                $this->localeCollection->addLocale(new Locale($localeIdentifier));
                            }
                        }
                    }
                    closedir($handle);
                }
            }
        }
    }