php-gettext / Gettext

PHP library to collect and manipulate gettext (.po, .mo, .php, .json, etc)
MIT License
687 stars 134 forks source link

PHP Brackets in function parameter #229

Open kdabek opened 4 years ago

kdabek commented 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.

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.

oscarotero commented 4 years ago

I recommend to update to gettext/gettext v5, that use nikic/PHP-Parser to scan php code and its much more reliable.

swissspidy commented 2 years ago

Would you accept PRs against v4 to fix this?

oscarotero commented 2 years ago

Yes, sure.