PO::read_entry()publicWP 1.0

Метод класса: PO{}

Хуков нет.

Возвращает

null|false|Массив.

Использование

$PO = new PO();
$PO->read_entry( $f, $lineno );
$f(resource) (обязательный)
-
$lineno(int)
-

Код PO::read_entry() WP 6.4.3

public function read_entry( $f, $lineno = 0 ) {
	$entry = new Translation_Entry();
	// Where were we in the last step.
	// Can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural.
	$context      = '';
	$msgstr_index = 0;
	while ( true ) {
		++$lineno;
		$line = PO::read_line( $f );
		if ( ! $line ) {
			if ( feof( $f ) ) {
				if ( self::is_final( $context ) ) {
					break;
				} elseif ( ! $context ) { // We haven't read a line and EOF came.
					return null;
				} else {
					return false;
				}
			} else {
				return false;
			}
		}
		if ( "\n" === $line ) {
			continue;
		}
		$line = trim( $line );
		if ( preg_match( '/^#/', $line, $m ) ) {
			// The comment is the start of a new entry.
			if ( self::is_final( $context ) ) {
				PO::read_line( $f, 'put-back' );
				--$lineno;
				break;
			}
			// Comments have to be at the beginning.
			if ( $context && 'comment' !== $context ) {
				return false;
			}
			// Add comment.
			$this->add_comment_to_entry( $entry, $line );
		} elseif ( preg_match( '/^msgctxt\s+(".*")/', $line, $m ) ) {
			if ( self::is_final( $context ) ) {
				PO::read_line( $f, 'put-back' );
				--$lineno;
				break;
			}
			if ( $context && 'comment' !== $context ) {
				return false;
			}
			$context         = 'msgctxt';
			$entry->context .= PO::unpoify( $m[1] );
		} elseif ( preg_match( '/^msgid\s+(".*")/', $line, $m ) ) {
			if ( self::is_final( $context ) ) {
				PO::read_line( $f, 'put-back' );
				--$lineno;
				break;
			}
			if ( $context && 'msgctxt' !== $context && 'comment' !== $context ) {
				return false;
			}
			$context          = 'msgid';
			$entry->singular .= PO::unpoify( $m[1] );
		} elseif ( preg_match( '/^msgid_plural\s+(".*")/', $line, $m ) ) {
			if ( 'msgid' !== $context ) {
				return false;
			}
			$context          = 'msgid_plural';
			$entry->is_plural = true;
			$entry->plural   .= PO::unpoify( $m[1] );
		} elseif ( preg_match( '/^msgstr\s+(".*")/', $line, $m ) ) {
			if ( 'msgid' !== $context ) {
				return false;
			}
			$context             = 'msgstr';
			$entry->translations = array( PO::unpoify( $m[1] ) );
		} elseif ( preg_match( '/^msgstr\[(\d+)\]\s+(".*")/', $line, $m ) ) {
			if ( 'msgid_plural' !== $context && 'msgstr_plural' !== $context ) {
				return false;
			}
			$context                      = 'msgstr_plural';
			$msgstr_index                 = $m[1];
			$entry->translations[ $m[1] ] = PO::unpoify( $m[2] );
		} elseif ( preg_match( '/^".*"$/', $line ) ) {
			$unpoified = PO::unpoify( $line );
			switch ( $context ) {
				case 'msgid':
					$entry->singular .= $unpoified;
					break;
				case 'msgctxt':
					$entry->context .= $unpoified;
					break;
				case 'msgid_plural':
					$entry->plural .= $unpoified;
					break;
				case 'msgstr':
					$entry->translations[0] .= $unpoified;
					break;
				case 'msgstr_plural':
					$entry->translations[ $msgstr_index ] .= $unpoified;
					break;
				default:
					return false;
			}
		} else {
			return false;
		}
	}

	$have_translations = false;
	foreach ( $entry->translations as $t ) {
		if ( $t || ( '0' === $t ) ) {
			$have_translations = true;
			break;
		}
	}
	if ( false === $have_translations ) {
		$entry->translations = array();
	}

	return array(
		'entry'  => $entry,
		'lineno' => $lineno,
	);
}