/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Html.php
104 строки
3 KB
Alexandra Zota
ACP2E-4019: CE copyright updates for 2.4.9-beta1
22 окт 2025, 11:23
22 окт 2025, 11:23
6c2f6e6
Код
Авторство
О чём код?
<?php /** * Copyright 2015 Adobe * All Rights Reserved. */ declare(strict_types=1); namespace Magento\Setup\Module\I18n\Parser\Adapter; use Exception; use Magento\Email\Model\Template\Filter; /** * Html parser adapter */ class Html extends AbstractAdapter { /** * Covers * <span><!-- ko i18n: 'Next'--><!-- /ko --></span> * <th class="col col-method" data-bind="i18n: 'Select Method'"></th> * @deprecated Not used anymore because of newly introduced constants * @see self::REGEX_I18N_BINDING and self::REGEX_TRANSLATE_TAG_OR_ATTR */ public const HTML_FILTER = "/i18n:\s?'(?<value>[^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/"; /** * Covers * <span><!-- ko i18n: 'Next'--><!-- /ko --></span> * <th class="col col-method" data-bind="i18n: 'Select Method'"></th> */ public const REGEX_I18N_BINDING = '/i18n:\s?\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/'; /** * Covers * <translate args="'System Messages'"/> * <span translate="'Examples'"></span> */ public const REGEX_TRANSLATE_TAG_OR_ATTR = '/translate( args|)=\"\'([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\'\"/'; /** * @inheritdoc */ protected function _parse() { // phpcs:ignore Magento2.Functions.DiscouragedFunction $data = file_get_contents($this->_file); if ($data === false) { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception('Failed to load file from disk.'); } $this->extractPhrasesFromTransDirective($data); $this->extractPhrases(self::REGEX_I18N_BINDING, $data, 2, 1); $this->extractPhrases(self::REGEX_TRANSLATE_TAG_OR_ATTR, $data, 3, 2); $this->extractPhrases(Js::REGEX_TRANSLATE_FUNCTION, $data, 3, 2); } /** * Extracts all phrases from trans directives in the given string. * * @param string $data * * @return void */ private function extractPhrasesFromTransDirective(string $data): void { $results = []; preg_match_all(Filter::CONSTRUCTION_PATTERN, $data, $results, PREG_SET_ORDER); for ($i = 0, $count = count($results); $i < $count; $i++) { if ($results[$i][1] === Filter::TRANS_DIRECTIVE_NAME) { $directive = []; if (preg_match(Filter::TRANS_DIRECTIVE_REGEX, $results[$i][2], $directive) !== 1) { continue; } $quote = $directive[1]; $this->_addPhrase($quote . $directive[2] . $quote); } elseif (in_array($results[$i][1], ['depend', 'if'], true) && isset($results[$i][3])) { // make sure to process trans directives nested inside depend / if directives $this->extractPhrasesFromTransDirective($results[$i][3]); } } } /** * Extracts all phrases with the given regex in the given string. * * @param string $regex * @param string $data * @param int $expectedGroupsCount * @param int $valueGroupIndex */ protected function extractPhrases(string $regex, string $data, int $expectedGroupsCount, int $valueGroupIndex): void { preg_match_all($regex, $data, $results, PREG_SET_ORDER); for ($i = 0, $count = count($results); $i < $count; $i++) { if (count($results[$i]) === $expectedGroupsCount && !empty($results[$i][$valueGroupIndex])) { $this->_addPhrase($results[$i][$valueGroupIndex]); } } } }