I18n::_pluralGuess PHP Method

_pluralGuess() protected method

Attempts to find the plural form of a string.
protected _pluralGuess ( string $header, integer $n ) : integer
$header string Type
$n integer Number
return integer plural match
    protected function _pluralGuess($header, $n)
    {
        if (!is_string($header) || $header === "nplurals=1;plural=0;" || !isset($header[0])) {
            return 0;
        }
        if ($header === "nplurals=2;plural=n!=1;") {
            return $n != 1 ? 1 : 0;
        } elseif ($header === "nplurals=2;plural=n>1;") {
            return $n > 1 ? 1 : 0;
        }
        if (strpos($header, "plurals=3")) {
            if (strpos($header, "100!=11")) {
                if (strpos($header, "10<=4")) {
                    return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
                } elseif (strpos($header, "100<10")) {
                    return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
                }
                return $n % 10 == 1 && $n % 100 != 11 ? 0 : ($n != 0 ? 1 : 2);
            } elseif (strpos($header, "n==2")) {
                return $n == 1 ? 0 : ($n == 2 ? 1 : 2);
            } elseif (strpos($header, "n==0")) {
                return $n == 1 ? 0 : ($n == 0 || $n % 100 > 0 && $n % 100 < 20 ? 1 : 2);
            } elseif (strpos($header, "n>=2")) {
                return $n == 1 ? 0 : ($n >= 2 && $n <= 4 ? 1 : 2);
            } elseif (strpos($header, "10>=2")) {
                return $n == 1 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 || $n % 100 >= 20) ? 1 : 2);
            }
            return $n % 10 == 1 ? 0 : ($n % 10 == 2 ? 1 : 2);
        } elseif (strpos($header, "plurals=4")) {
            if (strpos($header, "100==2")) {
                return $n % 100 == 1 ? 0 : ($n % 100 == 2 ? 1 : ($n % 100 == 3 || $n % 100 == 4 ? 2 : 3));
            } elseif (strpos($header, "n>=3")) {
                return $n == 1 ? 0 : ($n == 2 ? 1 : ($n == 0 || $n >= 3 && $n <= 10 ? 2 : 3));
            } elseif (strpos($header, "100>=1")) {
                return $n == 1 ? 0 : ($n == 0 || $n % 100 >= 1 && $n % 100 <= 10 ? 1 : ($n % 100 >= 11 && $n % 100 <= 20 ? 2 : 3));
            }
        } elseif (strpos($header, "plurals=5")) {
            return $n == 1 ? 0 : ($n == 2 ? 1 : ($n >= 3 && $n <= 6 ? 2 : ($n >= 7 && $n <= 10 ? 3 : 4)));
        } elseif (strpos($header, "plurals=6")) {
            return $n == 0 ? 0 : ($n == 1 ? 1 : ($n == 2 ? 2 : ($n % 100 >= 3 && $n % 100 <= 10 ? 3 : ($n % 100 >= 11 ? 4 : 5))));
        }
        return 0;
    }