protected function tryMatch($code, $mws, $gtLanguages, $clLanguages)
 {
     if ($mws !== '') {
         $mwExp = true;
         $lang = Language::factory($code);
     } else {
         $mwExp = false;
     }
     if (isset($gtLanguages[$code])) {
         $gtExp = 'return (int) ' . str_replace('n', '$i', $gtLanguages[$code]) . ';';
     } else {
         $gtExp = false;
     }
     if (isset($clLanguages[$code])) {
         $cldrExp = $clLanguages[$code];
     } else {
         $cldrExp = false;
     }
     for ($i = 0; $i <= 250; $i++) {
         $mw = $gt = $cl = '?';
         if ($mwExp) {
             $exp = $lang->getCompiledPluralRules();
             $mw = CLDRPluralRuleEvaluator::evaluateCompiled($i, $exp);
         }
         if ($gtExp) {
             $gt = eval($gtExp);
         }
         if ($cldrExp) {
             $cl = CLDRPluralRuleEvaluator::evaluate($i, $cldrExp);
         }
         if (self::comp($mw, $gt) && self::comp($gt, $cl) && self::comp($cl, $mw)) {
             continue;
         }
         return "{$i}: {$mw} {$gt} {$cl}";
     }
     return '';
 }
 /**
  * Get the compiled plural rules for a given language from the XML files.
  * @since 1.20
  */
 public function getCompiledPluralRules($code)
 {
     $rules = $this->getPluralRules($code);
     if ($rules === null) {
         return null;
     }
     try {
         $compiledRules = CLDRPluralRuleEvaluator::compile($rules);
     } catch (CLDRPluralRuleError $e) {
         wfDebugLog('l10n', $e->getMessage());
         return array();
     }
     return $compiledRules;
 }
示例#3
0
 /**
  * Find the index number of the plural rule appropriate for the given number
  * @param int $number
  * @return int The index number of the plural rule
  */
 public function getPluralRuleIndexNumber($number)
 {
     $pluralRules = $this->getCompiledPluralRules();
     $form = CLDRPluralRuleEvaluator::evaluateCompiled($number, $pluralRules);
     return $form;
 }
 /**
  * @dataProvider invalidTestCases
  * @expectedException CLDRPluralRuleError
  */
 function testInvalidRules($rules, $comment)
 {
     CLDRPluralRuleEvaluator::evaluate(1, (array) $rules);
 }
 /**
  * Find the plural form matching to the given number
  * It return the form index.
  * @return int The index of the plural form
  */
 private function getPluralForm($number)
 {
     $pluralRules = $this->getCompiledPluralRules();
     $form = CLDRPluralRuleEvaluator::evaluateCompiled($number, $pluralRules);
     return $form;
 }