Symfony\Component\Translation\Interval::getIntervalRegexp PHP Method

getIntervalRegexp() public static method

Returns a Regexp that matches valid intervals.
public static getIntervalRegexp ( ) : string
return string A Regexp (without the delimiters)
    public static function getIntervalRegexp()
    {
        return <<<EOF
        ({\s*
            (\-?\d+[\s*,\s*\-?\d+]*)
        \s*})

            |

        (?P<left_delimiter>[\[\]])
            \s*
            (?P<left>-Inf|\-?\d+)
            \s*,\s*
            (?P<right>\+?Inf|\-?\d+)
            \s*
        (?P<right_delimiter>[\[\]])
EOF;
    }

Usage Example

Exemplo n.º 1
0
 /**
  * Given a message with different plural translations separated by a
  * pipe (|), this method returns the correct portion of the message based
  * on the given number, locale and the pluralization rules in the message
  * itself.
  *
  * The message supports two different types of pluralization rules:
  *
  * interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples
  * indexed:  There is one apple|There are %count% apples
  *
  * The indexed solution can also contain labels (e.g. one: There is one apple).
  * This is purely for making the translations more clear - it does not
  * affect the functionality.
  *
  * The two methods can also be mixed:
  *     {0} There are no apples|one: There is one apple|more: There are %count% apples
  *
  * @param string $message The message being translated
  * @param int    $number  The number of items represented for the message
  * @param string $locale  The locale to use for choosing
  *
  * @return string
  *
  * @throws InvalidArgumentException
  */
 public function choose($message, $number, $locale)
 {
     preg_match_all('/(?:\\|\\||[^\\|])++/', $message, $parts);
     $explicitRules = array();
     $standardRules = array();
     foreach ($parts[0] as $part) {
         $part = trim(str_replace('||', '|', $part));
         if (preg_match('/^(?P<interval>' . Interval::getIntervalRegexp() . ')\\s*(?P<message>.*?)$/xs', $part, $matches)) {
             $explicitRules[$matches['interval']] = $matches['message'];
         } elseif (preg_match('/^\\w+\\:\\s*(.*?)$/', $part, $matches)) {
             $standardRules[] = $matches[1];
         } else {
             $standardRules[] = $part;
         }
     }
     // try to match an explicit rule, then fallback to the standard ones
     foreach ($explicitRules as $interval => $m) {
         if (Interval::test($number, $interval)) {
             return $m;
         }
     }
     $position = PluralizationRules::get($number, $locale);
     if (!isset($standardRules[$position])) {
         // when there's exactly one rule given, and that rule is a standard
         // rule, use this rule
         if (1 === count($parts[0]) && isset($standardRules[0])) {
             return $standardRules[0];
         }
         throw new InvalidArgumentException(sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $message, $locale, $number));
     }
     return $standardRules[$position];
 }
All Usage Examples Of Symfony\Component\Translation\Interval::getIntervalRegexp