* : Path to an existing POT file to use for updating * * [] * : PO file to update or a directory containing multiple PO files. * Defaults to all PO files in the source directory. * * @when before_wp_load * * @throws WP_CLI\ExitException */ public function __invoke( $args, $assoc_args ) { $source = realpath( $args[0] ); if ( ! $source || ! is_file( $source ) ) { WP_CLI::error( 'Source file does not exist!' ); } $destination = dirname( $source ); if ( isset( $args[1] ) ) { $destination = $args[1]; } if ( is_file( $destination ) ) { $files = [ new SplFileInfo( $destination ) ]; } else { $files = new IteratorIterator( new DirectoryIterator( $destination ) ); } $pot_translations = Translations::fromPoFile( $source ); $result_count = 0; /** @var DirectoryIterator $file */ foreach ( $files as $file ) { if ( 'po' !== $file->getExtension() ) { continue; } if ( ! $file->isFile() || ! $file->isReadable() ) { WP_CLI::warning( sprintf( 'Could not read file %s', $file->getFilename() ) ); continue; } $po_translations = Translations::fromPoFile( $file->getPathname() ); $po_translations->mergeWith( $pot_translations, Merge::ADD | Merge::REMOVE | Merge::COMMENTS_THEIRS | Merge::EXTRACTED_COMMENTS_THEIRS | Merge::REFERENCES_THEIRS ); if ( ! $po_translations->toPoFile( $file->getPathname() ) ) { WP_CLI::warning( sprintf( 'Could not update file %s', $file->getPathname() ) ); continue; } $result_count++; } WP_CLI::success( sprintf( 'Updated %d %s.', $result_count, Utils\pluralize( 'file', $result_count ) ) ); } }