title('Generate Locales'); $exportDir = $this->environment->getBaseDirectory() . '/translations'; $translations = Translations::create('default'); $destFile = $exportDir . '/default.pot'; // Import the JS-generated files if they exist $frontendJsFile = $exportDir . '/frontend.pot'; if (is_file($frontendJsFile)) { $translations = (new PoLoader())->loadFile($frontendJsFile, $translations); @unlink($frontendJsFile); } // Find all PHP/PHTML files in the application's code. $translatableFolders = [ $this->environment->getBaseDirectory() . '/src', $this->environment->getBaseDirectory() . '/config', $this->environment->getViewsDirectory(), ]; $phpScanner = new PhpScanner($translations); $phpScanner->setDefaultDomain('default'); foreach ($translatableFolders as $folder) { $directory = new RecursiveDirectoryIterator($folder); $iterator = new RecursiveIteratorIterator($directory); $regex = new RegexIterator($iterator, '/^.+\.(phtml|php)$/i', RegexIterator::GET_MATCH); foreach ($regex as $path_match) { $path = $path_match[0]; $phpScanner->scanFile($path); } } @unlink($destFile); $poGenerator = new PoGenerator(); $poGenerator->generateFile( $translations, $destFile ); // Create locale folders if they don't exist already. $supportedLocales = SupportedLocales::cases(); $defaultLocale = SupportedLocales::default(); foreach ($supportedLocales as $supportedLocale) { if ($supportedLocale === $defaultLocale) { continue; } $localeDir = $exportDir . '/' . $supportedLocale->value . '/LC_MESSAGES'; if (!is_dir($localeDir)) { /** @noinspection MkdirRaceConditionInspection */ mkdir($localeDir, 0777, true); } } $io->success('Locales generated.'); return 0; } }