Google

Cyb3r Drag0nz Team Shell

Server : Apache
System : Linux webd003.cluster126.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : atwiofrxug (73666)
PHP Version : 8.4.10
Disable Functions : _dyuweyrj4,_dyuweyrj4r,dl
Current Directory : /home/atwiofrxug/mylittletelaviv/wp-content/plugins/knews/includes/
Directory Status: Writeable | Document Root: Writeable

Upload File







Viewing: /home/atwiofrxug/mylittletelaviv/wp-content/plugins/knews/includes/mo_reader.php

<?php
/*
MO Reader, 
thanks to: Thomas Urban,
http://blog.toxa.de/archives/56
*/

/**
 * Improved MO file reader for Wordpress.
 *
 * @author Thomas Urban <thomas.urban@toxa.de>
 */

function mo_reader( $filename, $translate ) {

	/**
	 * read header from file
	 */

	$file = fopen( $filename, 'r' );
	if ( !$file )
		return $translate;

	$header = fread( $file, 28 );
	if ( strlen( $header ) != 28 )
		return $translate;

	// detect endianess
	$endian = unpack( 'Nendian', substr( $header, 0, 4 ) );
	$endian = dechex($endian['endian']);
	if (strlen($endian) == 16) $endian = substr( $endian, 8, 8 );
	
	if ( $endian == '950412de' )
		$endian = 'N';
	else if ( $endian == 'de120495' )
		$endian = 'V';
	else
		return $translate;

	// parse header
	$header = unpack( "{$endian}Hrevision/{$endian}Hcount/{$endian}HposOriginals/{$endian}HposTranslations/{$endian}HsizeHash/{$endian}HposHash", substr( $header, 4 ) );
	if ( !is_array( $header ) )
		return $translate;

	extract( $header );

	// support revision 0 of MO format specs, only
	if ( $Hrevision != 0 )
		return $translate;

	/*
	 * read index tables on originals and translations
	 */

	// seek to data blocks
	fseek( $file, $HposOriginals, SEEK_SET );

	// read originals' indices
	$HsizeOriginals = $HposTranslations - $HposOriginals;
	if ( $HsizeOriginals != $Hcount * 8 )
		return $translate;

	$originals = fread( $file, $HsizeOriginals );
	if ( strlen( $originals ) != $HsizeOriginals )
		return $translate;

	// read translations' indices
	$HsizeTranslations = $HposHash - $HposTranslations;
	if ( $HsizeTranslations != $Hcount * 8 )
		return $translate;

	$translations = fread( $file, $HsizeTranslations );
	if ( strlen( $translations ) != $HsizeTranslations )
		return $translate;

	// transform raw data into set of indices
	$originals    = str_split( $originals, 8 );
	$translations = str_split( $translations, 8 );

	/*
	 * read set of strings to separate string
	 */

	// skip hash table
	$HposStrings = $HposHash + $HsizeHash * 4;

	fseek( $file, $HposStrings, SEEK_SET );

	// read strings expected in rest of file
	$strings = '';
	while ( !feof( $file ) )
		$strings .= fread( $file, 4096 );

	fclose( $file );



	// collect hash records
	$hash = $header = array();

	for ( $i = 0; $i < $Hcount; $i++ )
	{

		// parse index records on original and related translation
		$o = unpack( "{$endian}length/{$endian}pos", $originals[$i] );
		$t = unpack( "{$endian}length/{$endian}pos", $translations[$i] );

		if ( !$o || !$t )
			return $translate;

		// adjust offset due to reading strings to separate space before
		$o['pos'] -= $HposStrings;
		$t['pos'] -= $HposStrings;

		// extract original and translations
		$original    = substr( $strings, $o['pos'], $o['length'] );
		$translation = substr( $strings, $t['pos'], $t['length'] );



		if ( $original === '' )
		{
			// got header --> store separately

			$header = array();

			foreach ( explode( "\n", $translation ) as $line )
			{

				$sep = strpos( $line, ':' );
				if ( $sep !== false )
					$header[trim(substr( $line, 0, $sep ))] = trim( substr( $line, $sep + 1 ));

			}
		}
		else
		{

			// detect context in original
			$sep = strpos( $original, "\04" );
			if ( $sep !== false )
			{
				$context  = substr( $original, 0, $sep );
				$original = substr( $original, $sep + 1 );
			}
			else
				$context  = null;


			$original     = explode( "\00", $original );
			$translation  = explode( "\00", $translation );

			$singularFrom = array_shift( $original );
			$singularTo   = array_shift( $translation );

			if ( count( $original ) && ( count( $original ) == count( $translation ) ) )
				$plurals = array_combine( $original, $translation );
			else
				$plurals = array();


			$record = array(
							'context'     => $context,
							'singular'    => $singularFrom,
							'translation' => $singularTo,
							'plurals'     => $plurals,
							);

			$key = is_null( $context ) ? $singularFrom
									   : "$context\04$singularFrom";


			$hash[$key] = $record;

		}
	}


	//print_r($header);
	if (isset($hash[$translate]['translation'])) return $hash[$translate]['translation'];
	
	return '';

}
?>

Cyb3r Drag0nz Team • Google Edition