public function execute()
 {
     global $wgTranslateGroupFiles, $wgTranslateYamlLibrary;
     $documents = array();
     $times = array();
     $mems = array();
     $mempeaks = array();
     foreach (array('syck', 'spyc', 'phpyaml') as $driver) {
         $mempeaks[$driver] = -memory_get_peak_usage(true);
         $mems[$driver] = -memory_get_usage(true);
         $times[$driver] = -microtime(true);
         $wgTranslateYamlLibrary = $driver;
         $documents[$driver] = array();
         foreach ($wgTranslateGroupFiles as $file) {
             foreach (self::parseGroupFile($file) as $id => $docu) {
                 $documents[$driver]["{$file}-{$id}"] = $docu;
             }
         }
         $times[$driver] += microtime(true);
         $mems[$driver] += memory_get_usage(true);
         $mempeaks[$driver] += memory_get_peak_usage(true);
         self::sortNestedArrayAssoc($documents[$driver]);
         file_put_contents("yaml-test-{$driver}.txt", var_export($documents[$driver], true));
         file_put_contents("yaml-output-{$driver}.txt", TranslateYaml::dump($documents[$driver]));
     }
     var_dump($times);
     var_dump($mems);
     var_dump($mempeaks);
 }
 /**
  * @param $collection MessageCollection
  * @return string
  */
 protected function writeReal(MessageCollection $collection)
 {
     $output = $this->doHeader($collection);
     $output .= $this->doAuthors($collection);
     $mangler = $this->group->getMangler();
     $messages = array();
     /**
      * @var $m TMessage
      */
     foreach ($collection as $key => $m) {
         $key = $mangler->unmangle($key);
         $value = $m->translation();
         $value = str_replace(TRANSLATE_FUZZY, '', $value);
         if ($value === '') {
             continue;
         }
         $messages[$key] = $value;
     }
     if (!count($messages)) {
         return false;
     }
     $messages = $this->unflatten($messages);
     // Some groups have messages under language code.
     if (isset($this->extra['codeAsRoot'])) {
         $code = $this->group->mapCode($collection->code);
         $messages = array($code => $messages);
     }
     $output .= TranslateYaml::dump($messages);
     return $output;
 }
	public function execute() {
		$outRulesets = array();
		$outLocales = array();

		$doc = new DOMDocument();
		$doc->load( 'plurals.xml' );

		$rulesets = $doc->getElementsByTagName( "pluralRules" );
		foreach ( $rulesets as $ruleset ) {
			$codes = $ruleset->getAttribute( 'locales' );
			$parsed = array();
			$rules = $ruleset->getElementsByTagName( "pluralRule" );
			foreach ( $rules as $rule ) {
				$parsed[$rule->getAttribute( 'count' )] = $rule->nodeValue;
			}

			$name = "Rule " . chr( count( $outRulesets ) + 65 );

			// Special names for some rules... might not be useful at all
			if ( count( $parsed ) === 0 ) {
				$name = "Zero";
			} elseif ( $codes === 'ar' ) {
				$name = "Arabic";
			} elseif ( count( $parsed ) === 1 ) {
				if ( isset( $parsed['one'] ) && $parsed['one'] === 'n is 1' ) {
					$name = "Default";
				} elseif ( isset( $parsed['one'] ) && $parsed['one'] === 'n in 0..1' ) {
					$name = "One-zero";
				}
			} elseif ( count( $parsed ) === 2 ) {
				if ( isset( $parsed['one'] ) && isset( $parsed['two'] ) ) {
					$name = "Has-dual";
				}
			}

			$outRulesets[$name] = $parsed;

			foreach ( explode( ' ', $codes ) as $code ) {
				$outLocales[$code] = $name;
			}
		}

		file_put_contents( 'plural-cldr.yaml', TranslateYaml::dump( array(
			'locales' => $outLocales,
			'rulesets' => $outRulesets,
		) ) );
	}