http://www.mediawiki.org/wiki/Special:Code/MediaWiki/72824

Revision: 72824
Author:   nikerabbit
Date:     2010-09-11 19:10:24 +0000 (Sat, 11 Sep 2010)

Log Message:
-----------
Added a script which parses CLDR plural rules from XML format

Added Paths:
-----------
    trunk/extensions/Translate/scripts/cldr-plural-to-yaml.php

Added: trunk/extensions/Translate/scripts/cldr-plural-to-yaml.php
===================================================================
--- trunk/extensions/Translate/scripts/cldr-plural-to-yaml.php                  
        (rev 0)
+++ trunk/extensions/Translate/scripts/cldr-plural-to-yaml.php  2010-09-11 
19:10:24 UTC (rev 72824)
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Script to format CLDR plural definitions to more usable format.
+ *
+ * @author Niklas Laxstrom
+ *
+ * @copyright Copyright © 2010, Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 
2.0 or later
+ * @file
+ */
+
+// Standard boilerplate to define $IP
+if ( getenv( 'MW_INSTALL_PATH' ) !== false ) {
+       $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+       $dir = dirname( __FILE__ ); $IP = "$dir/../../..";
+}
+require_once( "$IP/maintenance/Maintenance.php" );
+
+/** Script to format CLDR plural definitions to more usable format.
+ * plurals.xml from core.zip must be in the current directory.
+ * The script will output plural-CLDR.yaml into current directory.
+ */
+class CLDRPluralToYaml extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Script to format CLDR plural definitions 
to more usable format';
+       }
+
+       public function execute() {
+               $outRulesets = array();
+               $outLocales = array();
+
+               $doc = new DOMDocument();
+               $doc->load( 'plurals.xml' );
+               
+               $rulesets = $doc->getElementsByTagName( "pluralRules" );
+               foreach( $rulesets as $index => $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,
+               ) ) );
+       }
+}
+
+$maintClass = 'CLDRPluralToYaml';
+require_once( DO_MAINTENANCE );


Property changes on: trunk/extensions/Translate/scripts/cldr-plural-to-yaml.php
___________________________________________________________________
Added: svn:eol-style
   + native



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to