$block->blockName, StandardBlock::class ); return new $class(); } /** * @param string $text * @param string $lang * @param \WP_Block_Parser_Block $block * @param array $string_translations * @param \DOMNode $element * @param DOMHandle $dom_handle * * @return \WP_Block_Parser_Block */ private function updateTranslationInBlock( $text, $lang, \WP_Block_Parser_Block $block, array $string_translations, $element, $dom_handle ) { $translation = $this->getTranslation( $text, $lang, $block, $string_translations ); if ( $translation ) { $block = $dom_handle->applyStringTranslations( $block, $element, $translation, $text ); $dom_handle->setElementValue( $element, $translation ); } return $block; } private function getTranslation( $text, $lang, \WP_Block_Parser_Block $block, array $string_translations ) { $translationFromPageBuilder = apply_filters( 'wpml_pb_update_translations_in_content', $text, $lang ); if ( $translationFromPageBuilder === $text ) { $string_id = $this->get_string_id( $block->blockName, $text ); if ( (int) Obj::path( [ $string_id, $lang, 'status' ], $string_translations ) === ICL_TM_COMPLETE ) { return self::preserveNewLines( $text, $string_translations[ $string_id ][ $lang ]['value'] ); } else { return null; } } else { return $translationFromPageBuilder; } } private static function preserveNewLines( $original, $translation ) { $endsWith = function ( $find, $s ) { return Str::sub( - Str::len( $find ), $s ) === $find; // @phpstan-ignore-line }; if ( Str::startsWith( "\n", $original ) && ! Str::startsWith( "\n", $translation ) ) { $translation = "\n" . $translation; } if ( $endsWith( "\n", $original ) && ! $endsWith( "\n", $translation ) ) { $translation .= "\n"; } return $translation; } }