From d9660015fc0bb90976f1df054ea650a384b0a3d0 Mon Sep 17 00:00:00 2001 From: Ahliman HUSEYNOV Date: Tue, 9 Apr 2024 21:07:31 +0200 Subject: [PATCH] Add support for pretty-printing PHP files in wp i18n make-php command --- README.md | 3 +++ features/makephp.feature | 45 +++++++++++++++++++++++++++++++++++++++ src/MakePhpCommand.php | 7 +++++- src/PhpArrayGenerator.php | 22 +++++++++++++------ 4 files changed, 70 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 10adbe2..79c2457 100644 --- a/README.md +++ b/README.md @@ -245,6 +245,9 @@ wp i18n make-php [] [] Path to the destination directory for the resulting PHP files. Defaults to the source directory. + [--pretty-print] + Pretty-print resulting PHP files. + **EXAMPLES** # Create PHP files for all PO files in the current directory. diff --git a/features/makephp.feature b/features/makephp.feature index 15972e2..3407093 100644 --- a/features/makephp.feature +++ b/features/makephp.feature @@ -259,3 +259,48 @@ Feature: Generate PHP files from PO files """ new message """ + + Scenario: Should create pretty-printed PHP files + Given an empty foo-plugin directory + And a foo-plugin/foo-plugin-de_DE.po file: + """ + # Copyright (C) 2018 Foo Plugin + # This file is distributed under the same license as the Foo Plugin package. + msgid "" + msgstr "" + "Project-Id-Version: Foo Plugin\n" + "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/foo-plugin\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" + "Language: de_DE\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "POT-Creation-Date: 2018-05-02T22:06:24+00:00\n" + "PO-Revision-Date: 2018-05-02T22:06:24+00:00\n" + "X-Domain: foo-plugin\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + + #: foo-plugin.js:15 + msgid "Foo Plugin" + msgstr "Foo Plugin" + """ + + When I run `wp i18n make-php foo-plugin` + Then STDOUT should contain: + """ + Success: Created 1 file. + """ + And the return code should be 0 + And the foo-plugin/foo-plugin-de_DE.php file should contain: + """ + 'Foo Plugin', + 'report-msgid-bugs-to' => 'https://wordpress.org/support/plugin/foo-plugin', + 'messages' => + [ + 'Foo Plugin' => 'Foo Plugin', + ], + ]; + """ \ No newline at end of file diff --git a/src/MakePhpCommand.php b/src/MakePhpCommand.php index 3c3b559..825929a 100644 --- a/src/MakePhpCommand.php +++ b/src/MakePhpCommand.php @@ -22,6 +22,9 @@ class MakePhpCommand extends WP_CLI_Command { * [] * : Path to the destination directory for the resulting PHP files. Defaults to the source directory. * + * [--pretty-print] + * : Pretty-print resulting PHP files. + * * ## EXAMPLES * * # Create PHP files for all PO files in the current directory. @@ -58,6 +61,8 @@ public function __invoke( $args, $assoc_args ) { } $result_count = 0; + $pretty_print = Utils\get_flag_value( $assoc_args, 'pretty-print', false ); + /** @var DirectoryIterator $file */ foreach ( $files as $file ) { if ( 'po' !== $file->getExtension() ) { @@ -73,7 +78,7 @@ public function __invoke( $args, $assoc_args ) { $destination_file = "{$destination}/{$file_basename}.l10n.php"; $translations = Translations::fromPoFile( $file->getPathname() ); - if ( ! PhpArrayGenerator::toFile( $translations, $destination_file ) ) { + if ( ! PhpArrayGenerator::toFile( $translations, $destination_file, [ 'prettyPrint' => $pretty_print ] ) ) { WP_CLI::warning( sprintf( 'Could not create file %s', $destination_file ) ); continue; } diff --git a/src/PhpArrayGenerator.php b/src/PhpArrayGenerator.php index d76efc5..399a07b 100644 --- a/src/PhpArrayGenerator.php +++ b/src/PhpArrayGenerator.php @@ -14,6 +14,7 @@ class PhpArrayGenerator extends PhpArray { public static $options = [ 'includeHeaders' => false, + 'prettyPrint' => false, ]; /** @@ -22,7 +23,10 @@ class PhpArrayGenerator extends PhpArray { public static function toString( Translations $translations, array $options = [] ) { $array = static::generate( $translations, $options ); - return ' $val ) { - $entries[] = $is_list ? self::var_export( $val ) : var_export( $key, true ) . '=>' . self::var_export( $val ); + $entries[] = $is_list ? self::var_export( $val, $pretty_print ) : var_export( $key, true ) . '=>' . self::var_export( $val, $pretty_print ); } - return '[' . implode( ',', $entries ) . ']'; + $glue = $pretty_print ? ', ' . PHP_EOL : ','; + $prefix = $pretty_print ? PHP_EOL : ''; + $suffix = $pretty_print ? PHP_EOL : ''; + + return '[' . $prefix . implode( $glue, $entries ) . $suffix . ']'; } }