Describe your use case and the problem you are facing
When the glob passed to wp i18n update-po results in an empty result set (e.g. a new project with no *.po files yet in the languages directory), update-po will crash with fatal errors:
wp i18n update-po ./resources/lang/sage.pot ./resources/lang/*.po:
PHP Fatal error: Uncaught UnexpectedValueException: DirectoryIterator::__construct(./resources/lang/*.po): failed to open dir: No such file or directory in /home/build/.wp-cli/packages/vendor/wp-cli/i18n-command/src/UpdatePoCommand.php:49
Stack trace:
#0 /home/build/.wp-cli/packages/vendor/wp-cli/i18n-command/src/UpdatePoCommand.php(49): DirectoryIterator->__construct()
#1 [internal function]: WP_CLI\I18n\UpdatePoCommand->__invoke()
#2 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php(100): call_user_func()
#3 [internal function]: WP_CLI\Dispatcher\CommandFactory::WP_CLI\Dispatcher\{closure}()
#4 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php(491): call_user_func()
#5 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(417): WP_CLI\Dispatcher\Subcommand->invoke()
#6 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(440): WP_CLI\Runner->run_command()
#7 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1 in /home/build/.wp-cli/packages/vendor/wp-cli/i18n-command/src/UpdatePoCommand.php on line 49
Describe the solution you'd like
No fatal PHP error, but an explanative, user-friendly message, e.g. Notice: Updated 0 file. or Notice: No files found/matched for updating.. The exit code may be different than the one when files were actually updated.
There is one practical use case where this is especially relevant: For handling translations (e.g. in a theme), scripts (npm scripts) are often used. When there are no translations (PO files) yet, the PO update script causes a scary looking error instead just skipping as nothing was found (the glob itself is valid).
Feature Request
Describe your use case and the problem you are facing When the glob passed to
wp i18n update-po
results in an empty result set (e.g. a new project with no*.po
files yet in the languages directory),update-po
will crash with fatal errors:wp i18n update-po ./resources/lang/sage.pot ./resources/lang/*.po
:Describe the solution you'd like No fatal PHP error, but an explanative, user-friendly message, e.g.
Notice: Updated 0 file.
orNotice: No files found/matched for updating.
. The exit code may be different than the one when files were actually updated.There is one practical use case where this is especially relevant: For handling translations (e.g. in a theme), scripts (
npm
scripts) are often used. When there are no translations (PO files) yet, the PO update script causes a scary looking error instead just skipping as nothing was found (the glob itself is valid).