protected function make_json( $source_file, $destination ) {
		/** @var Translations[] $mapping */
		$mapping      = [];
		$translations = new Translations();
		$result       = [];

		PoExtractor::fromFile( $source_file, $translations );

		$base_file_name = basename( $source_file, '.po' );

		foreach ( $translations as $index => $translation ) {
			/** @var Translation $translation */

			// Find all unique sources this translation originates from.
			$sources = array_map(
				function ( $reference ) {
					$file = $reference[0];

					if ( substr( $file, - 7 ) === '.min.js' ) {
						return substr( $file, 0, - 7 ) . '.js';
					}

					if ( substr( $file, - 3 ) === '.js' ) {
						return $file;
					}

					return null;
				},
				$translation->getReferences()
			);

			$sources = array_unique( array_filter( $sources ) );

			foreach ( $sources as $source ) {
				if ( ! isset( $mapping[ $source ] ) ) {
					$mapping[ $source ] = new Translations();

					// phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- Provide code that is meant to be used once the bug is fixed.
					// See https://core.trac.wordpress.org/ticket/45441
					// $mapping[ $source ]->setDomain( $translations->getDomain() );

					$mapping[ $source ]->setHeader( 'Language', $translations->getLanguage() );
					$mapping[ $source ]->setHeader( 'PO-Revision-Date', $translations->getHeader( 'PO-Revision-Date' ) );

					$plural_forms = $translations->getPluralForms();

					if ( $plural_forms ) {
						list( $count, $rule ) = $plural_forms;
						$mapping[ $source ]->setPluralForms( $count, $rule );
					}
				}

				$mapping[ $source ][] = $translation;
			}
		}

		$result += $this->build_json_files( $mapping, $base_file_name, $destination );

		return $result;
	}
protected function make_json( $source_file, $destination ) {
		/** @var Translations[] $mapping */
		$mapping      = [];
		$translations = new Translations();
		$result       = [];

		PoExtractor::fromFile( $source_file, $translations );

		$base_file_name = basename( $source_file, '.po' );

		foreach ( $translations as $index => $translation ) {
			/** @var Translation $translation */

			// Find all unique sources this translation originates from.
			$sources = array_map(
				function ( $reference ) {
					$file = $reference[0];

					if ( substr( $file, - 7 ) === '.min.js' ) {
						return substr( $file, 0, - 7 ) . '.js';
					}

					if ( substr( $file, - 3 ) === '.js' ) {
						return $file;
					}

					return null;
				},
				$translation->getReferences()
			);

			$sources = array_unique( array_filter( $sources ) );

			foreach ( $sources as $source ) {
				if ( ! isset( $mapping[ $source ] ) ) {
					$mapping[ $source ] = new Translations();

					// phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- Provide code that is meant to be used once the bug is fixed.
					// See https://core.trac.wordpress.org/ticket/45441
					// $mapping[ $source ]->setDomain( $translations->getDomain() );

					$mapping[ $source ]->setHeader( 'Language', $translations->getLanguage() );
					$mapping[ $source ]->setHeader( 'PO-Revision-Date', $translations->getHeader( 'PO-Revision-Date' ) );

					$plural_forms = $translations->getPluralForms();

					if ( $plural_forms ) {
						list( $count, $rule ) = $plural_forms;
						$mapping[ $source ]->setPluralForms( $count, $rule );
					}
				}

				$mapping[ $source ][] = $translation;
			}
		}

		$result += $this->build_json_files( $mapping, $base_file_name, $destination );

		return $result;
	}
protected function make_json ( $ source_file , $ destination ) { /** @var Translations[] $mapping */ $ mapping = [ ] ; $ translations = new Translations ( ) ; $ result = [ ] ; PoExtractor :: fromFile ( $ source_file , $ translations ) ; $ base_file_name = basename ( $ source_file , '.po' ) ; foreach ( $ translations as $ index => $ translation ) { /** @var Translation $translation */ // Find all unique sources this translation originates from. $ sources = array_map ( function ( $ reference ) { $ file = $ reference [ 0 ] ; if ( substr ( $ file , - 7 ) === '.min.js' ) { return substr ( $ file , 0 , - 7 ) . '.js' ; } if ( substr ( $ file , - 3 ) === '.js' ) { return $ file ; } return null ; } , $ translation -> getReferences ( ) ) ; $ sources = array_unique ( array_filter ( $ sources ) ) ; foreach ( $ sources as $ source ) { if ( ! isset ( $ mapping [ $ source ] ) ) { $ mapping [ $ source ] = new Translations ( ) ; // phpcs:ignore Squiz.PHP.CommentedOutCode.Found -- Provide code that is meant to be used once the bug is fixed. // See https://core.trac.wordpress.org/ticket/45441 // $mapping[ $source ]->setDomain( $translations->getDomain() ); $ mapping [ $ source ] -> setHeader ( 'Language' , $ translations -> getLanguage ( ) ) ; $ mapping [ $ source ] -> setHeader ( 'PO-Revision-Date' , $ translations -> getHeader ( 'PO-Revision-Date' ) ) ; $ plural_forms = $ translations -> getPluralForms ( ) ; if ( $ plural_forms ) { list ( $ count , $ rule ) = $ plural_forms ; $ mapping [ $ source ] -> setPluralForms ( $ count , $ rule ) ; } } $ mapping [ $ source ] [ ] = $ translation ; } } $ result += $ this -> build_json_files ( $ mapping , $ base_file_name , $ destination ) ; return $ result ; }
Splits a single PO file into multiple JSON files.

@param string $source_file Path to the source file.
@param string $destination Path to the destination directory.
@return array List of created JSON files.
Splits a single PO file into multiple JSON files .