Open kdabek opened 4 years ago
If you use brackets in function parameter PHPFunctionsScanner will interpret this as a new function and the resulting parameter list is incorrect.
PHPFunctionsScanner
Example:
<?php require_once 'vendor/autoload.php'; $quantity = 10; $default = 5; $string = <<<EOD <?php sprintf(_n("%d Comment", "%d Comments", ($quantity ?? $default), "domain"), ($quantity ?? $default)); EOD; $scanner = new \Gettext\Utils\PhpFunctionsScanner($string); $output = $scanner->getFunctions();
and output:
array(2) { [0]=> array(4) { [0]=> string(2) "_n" [1]=> int(2) [2]=> array(3) { [0]=> string(10) "%d Comment" [1]=> string(11) "%d Comments" [2]=> NULL } [3]=> NULL } [1]=> array(4) { [0]=> string(7) "sprintf" [1]=> int(2) [2]=> array(2) { [0]=> NULL [1]=> string(6) "domain" } [3]=> NULL } }
as you can see "domain" is associated with sprintf function which is not true.
sprintf
I recommend to update to gettext/gettext v5, that use nikic/PHP-Parser to scan php code and its much more reliable.
Would you accept PRs against v4 to fix this?
Yes, sure.
If you use brackets in function parameter
PHPFunctionsScanner
will interpret this as a new function and the resulting parameter list is incorrect.Example:
and output:
as you can see "domain" is associated with
sprintf
function which is not true.