![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-translation/Model/Js/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Translation\Model\Js; use Magento\Framework\Exception\LocalizedException; /** * DataProvider for js translation * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DataProvider implements DataProviderInterface { /** * Application state * * @var \Magento\Framework\App\State */ protected $appState; /** * Js translation configuration * * @var Config */ protected $config; /** * @var \Magento\Framework\App\Utility\Files */ protected $filesUtility; /** * Filesystem * * @var \Magento\Framework\Filesystem\File\ReadFactory */ protected $fileReadFactory; /** * Basic translate renderer * * @var \Magento\Framework\Phrase\RendererInterface */ protected $translate; /** * @param \Magento\Framework\App\State $appState * @param Config $config * @param \Magento\Framework\Filesystem\File\ReadFactory $fileReadFactory * @param \Magento\Framework\Phrase\RendererInterface $translate * @param \Magento\Framework\Component\ComponentRegistrar $componentRegistrar * @param \Magento\Framework\Component\DirSearch $dirSearch * @param \Magento\Framework\View\Design\Theme\ThemePackageList $themePackageList * @param \Magento\Framework\App\Utility\Files|null $filesUtility */ public function __construct( \Magento\Framework\App\State $appState, Config $config, \Magento\Framework\Filesystem\File\ReadFactory $fileReadFactory, \Magento\Framework\Phrase\RendererInterface $translate, \Magento\Framework\Component\ComponentRegistrar $componentRegistrar, \Magento\Framework\Component\DirSearch $dirSearch, \Magento\Framework\View\Design\Theme\ThemePackageList $themePackageList, \Magento\Framework\App\Utility\Files $filesUtility = null ) { $this->appState = $appState; $this->config = $config; $this->fileReadFactory = $fileReadFactory; $this->translate = $translate; $this->filesUtility = (null !== $filesUtility) ? $filesUtility : new \Magento\Framework\App\Utility\Files( $componentRegistrar, $dirSearch, $themePackageList ); } /** * Get translation data * * @param string $themePath * @return array * @throws \Exception * @throws \Magento\Framework\Exception\LocalizedException */ public function getData($themePath) { $areaCode = $this->appState->getAreaCode(); $files = array_merge( $this->filesUtility->getJsFiles('base', $themePath), $this->filesUtility->getJsFiles($areaCode, $themePath), $this->filesUtility->getStaticHtmlFiles('base', $themePath), $this->filesUtility->getStaticHtmlFiles($areaCode, $themePath) ); $dictionary = []; foreach ($files as $filePath) { $read = $this->fileReadFactory->create($filePath[0], \Magento\Framework\Filesystem\DriverPool::FILE); $content = $read->readAll(); foreach ($this->getPhrases($content) as $phrase) { try { $translatedPhrase = $this->translate->render([$phrase], []); if ($phrase != $translatedPhrase) { $dictionary[$phrase] = $translatedPhrase; } } catch (\Exception $e) { throw new LocalizedException( __('Error while translating phrase "%s" in file %s.', $phrase, $filePath[0]), $e ); } } } ksort($dictionary); return $dictionary; } /** * Parse content for entries to be translated * * @param string $content * @return string[] * @throws \Magento\Framework\Exception\LocalizedException */ protected function getPhrases($content) { $phrases = []; foreach ($this->config->getPatterns() as $pattern) { $concatenatedContent = preg_replace('~(["\'])\s*?\+\s*?\1~', '', $content); $result = preg_match_all($pattern, $concatenatedContent, $matches); if ($result) { if (isset($matches[2])) { foreach ($matches[2] as $match) { $phrases[] = $match !== null ? str_replace(["\'", '\"'], ["'", '"'], $match) : ''; } } } if (false === $result) { throw new LocalizedException( __('Error while generating js translation dictionary: "%s"', error_get_last()) ); } } return $phrases; } }