Привет мир

` после перевода не * превратился в `

Helloworld

` без пробела. * * @param string $raw Исходное содержимое текстового узла. * @return array{0: string, 1: string, 2: string} Отступ слева, ядро, отступ справа. */ public static function splitEdges( string $raw ): array { if ( 1 !== preg_match( '/^(\s*)(.*?)(\s*)$/su', $raw, $matches ) ) { return array( '', $raw, '' ); } return array( $matches[1], $matches[2], $matches[3] ); } /** * Похоже ли значение на имя файла, а не на подпись человеку. * * SEO-плагины подставляют заголовок вложения как alt/caption картинки, а он * часто равен имени файла («Zero-Hallucination_Decision_Engine_Guide»). * Признак: нет пробелов и есть «_» либо расширение картинки/медиа. Слова * с одним дефисом («Wi-Fi») именем файла не считаются. * * @param string $text Нормализованная строка. */ public static function looksLikeFileName( string $text ): bool { if ( '' === $text || 1 === preg_match( '/\s/u', $text ) ) { return false; } return str_contains( $text, '_' ) || 1 === preg_match( '/\.(?:jpe?g|png|gif|webp|avif|svg|bmp|tiff?|ico|heic|mp[34]|mov|webm|pdf)$/i', $text ); } /** * Стоит ли отправлять строку в словарь. * * Отсеивается всё, что перевод только испортит: числа, адреса, имена * файлов, шаблонные плейсхолдеры и нераспознанные шорткоды (ТЗ 4.4). * * @param string $text Нормализованная строка. */ public static function isTranslatable( string $text ): bool { if ( '' === $text ) { return false; } // Без единой буквы переводить нечего: «2024», «19,90 ₽», «—», «•». if ( 1 !== preg_match( '/\p{L}/u', $text ) ) { return false; } // Адреса и схемы: они локализуются маршрутизатором, а не переводчиком. if ( 1 === preg_match( '#^(?:https?:)?//#i', $text ) ) { return false; } if ( 1 === preg_match( '/^(?:mailto|tel|javascript|data|ftp):/i', $text ) ) { return false; } // Одинокое имя файла или домена. if ( 1 === preg_match( '/^[\w.-]+\.(?:[a-z]{2,6})$/i', $text ) && ! str_contains( $text, ' ' ) ) { return false; } // Шаблонные плейсхолдеры: {{name}}, {count}, %1$s. if ( 1 === preg_match( '/^\{\{.*\}\}$/su', $text ) ) { return false; } if ( 1 === preg_match( '/^\{[^\s{}]*\}$/su', $text ) ) { return false; } if ( 1 === preg_match( '/^%\d*\$?[sdf]$/', $text ) ) { return false; } // Необработанный шорткод целиком: [contact-form-7 id="1"]. if ( 1 === preg_match( '/^\[[^\]]+\]$/su', $text ) ) { return false; } return true; } }