Neos\Flow\I18n\Service::generateAvailableLocalesCollectionByScanningFilesystem PHP Method

generateAvailableLocalesCollectionByScanningFilesystem() protected method

Localized files have a locale identifier added before their extension (or at the end of filename, if no extension exists). For example, a localized file for foobar.png, can be foobar.en.png, fobar.en_GB.png, etc. Just one localized resource file causes the corresponding locale to be regarded as available (installed, supported). Note: result of this method invocation is cached
    protected function generateAvailableLocalesCollectionByScanningFilesystem()
    {
        $whitelistPaths = array_keys(array_filter((array) $this->settings['scan']['includePaths']));
        if ($whitelistPaths === []) {
            return;
        }
        $blacklistPattern = $this->getScanBlacklistPattern();
        /** @var PackageInterface $activePackage */
        foreach ($this->packageManager->getActivePackages() as $activePackage) {
            $packageResourcesPath = Files::getNormalizedPath($activePackage->getResourcesPath());
            if (!is_dir($packageResourcesPath)) {
                continue;
            }
            $directories = [];
            foreach ($whitelistPaths as $path) {
                $scanPath = Files::concatenatePaths(array($packageResourcesPath, $path));
                if (is_dir($scanPath)) {
                    array_push($directories, Files::getNormalizedPath($scanPath));
                }
            }
            while ($directories !== []) {
                $currentDirectory = array_pop($directories);
                $relativeDirectory = '/' . str_replace($packageResourcesPath, '', $currentDirectory);
                if ($blacklistPattern !== '' && preg_match($blacklistPattern, $relativeDirectory) === 1) {
                    continue;
                }
                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);
                }
            }
        }
    }