
nikerabbit at svn
Jul 13, 2008, 6:08 AM
Post #1 of 1
(32 views)
Permalink
|
|
SVN: [37610] trunk/extensions/Translate
|
|
Revision: 37610 Author: nikerabbit Date: 2008-07-13 13:08:33 +0000 (Sun, 13 Jul 2008) Log Message: ----------- * 2008-07-13:1 experimental alias-export for extensions Modified Paths: -------------- trunk/extensions/Translate/MessageGroups.php trunk/extensions/Translate/README trunk/extensions/Translate/Translate.php trunk/extensions/Translate/_autoload.php trunk/extensions/Translate/ffs/Wiki.php Added Paths: ----------- trunk/extensions/Translate/scripts/alias-export.php Modified: trunk/extensions/Translate/MessageGroups.php =================================================================== --- trunk/extensions/Translate/MessageGroups.php 2008-07-13 12:12:10 UTC (rev 37609) +++ trunk/extensions/Translate/MessageGroups.php 2008-07-13 13:08:33 UTC (rev 37610) @@ -371,6 +371,57 @@ } } +class AliasMessageGroup extends ExtensionMessageGroup { + + public function fillCollection( MessageCollection $collection ) { + $this->fill( $collection ); + $this->fillContents( $collection ); + } + + + function fill( MessageCollection $messages ) { + $cache = $this->load( $messages->code ); + foreach ( $messages->keys() as $key ) { + if ( isset($cache[$key]) ) { + if ( is_array($cache[$key]) ) { + $messages[$key]->infile = implode( ',', $cache[$key] ); + } else { + $messages[$key]->infile = $cache[$key]; + } + } + } + } + + public function fillContents( MessageCollection $collection ) { + $data = TranslateUtils::getMessageContent( 'sp-translate-data-SpecialPageAliases', $collection->code ); + + if ( !$data ) return; + + $lines = array_map( 'trim', explode( "\n", $data ) ); + $array = array(); + foreach ( $lines as $line ) { + if ( $line === '' || $line[0] === '#' || $line[0] === '<' ) continue; + if ( strpos( $line, '=' ) === false ) continue; + + list( $name, $values ) = array_map( 'trim', explode( '=', $line, 2 ) ); + if ( $name === '' || $values === '' ) continue; + + if ( isset($collection[$name]) ) { + $collection[$name]->database = $values; + } + } + + } + + public function getWriter() { + $writer = new WikiExtensionFormatWriter( $this ); + $writer->variableName = $this->getVariableName(); + $writer->commaToArray = true; + return $writer; + } + +} + class CoreMostUsedMessageGroup extends CoreMessageGroup { protected $label = 'MediaWiki messages (most used)'; protected $id = 'core-mostused'; Modified: trunk/extensions/Translate/README =================================================================== --- trunk/extensions/Translate/README 2008-07-13 12:12:10 UTC (rev 37609) +++ trunk/extensions/Translate/README 2008-07-13 13:08:33 UTC (rev 37610) @@ -34,6 +34,7 @@ == Changes in version 10 == +* 2008-07-13:1 experimental alias-export for extensions * 2008-07-08:1 simple edit stats with phplot * 2008-07-05:1 fuzzy.php was ignoring the namespace * 2008-07-04:2 Modified: trunk/extensions/Translate/Translate.php =================================================================== --- trunk/extensions/Translate/Translate.php 2008-07-13 12:12:10 UTC (rev 37609) +++ trunk/extensions/Translate/Translate.php 2008-07-13 13:08:33 UTC (rev 37610) @@ -11,7 +11,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ -define( 'TRANSLATE_VERSION', '9 (2008-07-08:1)' ); +define( 'TRANSLATE_VERSION', '9 (2008-07-13:1)' ); $wgExtensionCredits['specialpage'][] = array( 'name' => 'Translate', @@ -25,6 +25,7 @@ // Setup class autoloads $dir = dirname(__FILE__) . '/'; require_once( $dir . '_autoload.php' ); +#require_once( $dir . 'MessageFunctions.php' ); $wgExtensionMessagesFiles['Translate'] = $dir . 'Translate.i18n.php'; $wgExtensionAliasesFiles['Translate'] = $dir . 'Translate.alias.php'; Modified: trunk/extensions/Translate/_autoload.php =================================================================== --- trunk/extensions/Translate/_autoload.php 2008-07-13 12:12:10 UTC (rev 37609) +++ trunk/extensions/Translate/_autoload.php 2008-07-13 13:08:33 UTC (rev 37610) @@ -19,6 +19,7 @@ $wgAutoloadClasses['MessageChecks'] = $dir . 'MessageChecks.php'; $wgAutoloadClasses['MessageGroups'] = $dir . 'MessageGroups.php'; +$wgAutoloadClasses['AliasMessageGroup'] = $dir . 'MessageGroups.php'; $wgAutoloadClasses['MessageCollection'] = $dir . 'Message.php'; $wgAutoloadClasses['TMessage'] = $dir . 'Message.php'; Modified: trunk/extensions/Translate/ffs/Wiki.php =================================================================== --- trunk/extensions/Translate/ffs/Wiki.php 2008-07-13 12:12:10 UTC (rev 37609) +++ trunk/extensions/Translate/ffs/Wiki.php 2008-07-13 13:08:33 UTC (rev 37610) @@ -58,6 +58,7 @@ } class WikiFormatWriter extends SimpleFormatWriter { + public $commaToArray = false; public function makeHeader( $handle, $code ) { list( $name, $native ) = $this->getLanguageNames($code); @@ -156,6 +157,19 @@ fwrite( $handle, str_repeat( ' ', $pad - strlen($key) ) ); fwrite( $handle, ' => ' ); + if ( $this->commaToArray ) { + fwrite( $handle, 'array( ' ); + $values = array_map( 'trim', explode( ',', $value ) ); + $values = array_map( array( __CLASS__, 'quote' ), $values ); + fwrite( $handle, implode( ', ', $values ) ); + fwrite( $handle, " ),\n" ); + } else { + fwrite( $handle, self::quote($value) ); + fwrite( $handle, ",\n" ); + } + } + + public static function quote( $value ) { # Check for the appropriate apostrophe and add the value # Quote \ here, because it needs always escaping $value = addcslashes( $value, '\\' ); @@ -188,7 +202,6 @@ } } - fwrite( $handle, $quote . $value . $quote ); - fwrite( $handle, ",\n" ); + return $quote . $value . $quote; } } Added: trunk/extensions/Translate/scripts/alias-export.php =================================================================== --- trunk/extensions/Translate/scripts/alias-export.php (rev 0) +++ trunk/extensions/Translate/scripts/alias-export.php 2008-07-13 13:08:33 UTC (rev 37610) @@ -0,0 +1,84 @@ +<?php +/** + * Script to export translations of one message group to file(s). + * + * @author Niklas Laxstrom + * + * @copyright Copyright © 2008, Niklas Laxström + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + * @file + */ + +$optionsWithArgs = array( 'lang', 'target', 'group' ); +require( dirname(__FILE__) . '/cli.inc' ); + +function showUsage() { + STDERR( <<<EOT +Alias exporter. + +Usage: php aliasexport.php [options...] + +Options: + --target Target directory for exported files + --lang Comma separated list of language codes + --group Group id +EOT +); + exit( 1 ); +} + +if ( isset($options['help']) || $args === 1 ) { + showUsage(); +} + +if ( !isset($options['target']) ) { + STDERR( "You need to specify target directory" ); + exit(1); +} +if ( !isset($options['lang']) ) { + STDERR( "You need to specify languages to export" ); + exit(1); +} + +if ( !is_writable( $options['target'] ) ) { + STDERR( "Target directory is not writable" ); + exit(1); +} + +$langs = array_map( 'trim', explode( ',', $options['lang'] ) ); + + +if ( !file_exists(TRANSLATE_ALIASFILE) || !is_readable(TRANSLATE_ALIASFILE) ) { + STDERR( "Alias file not defined" ); + exit(1); +} + +$defines = file_get_contents( TRANSLATE_ALIASFILE ); +$sections = preg_split( "/\n\n/", $defines, -1, PREG_SPLIT_NO_EMPTY ); + +foreach ( $sections as $section ) { + $lines = array_map( 'trim', preg_split( "/\n/", $section ) ); + $name = ''; + foreach ( $lines as $line ) { + if ( $line === '' ) continue; + if ( strpos( $line, '=' ) === false ) { + if ( $name === '' ) { + $name = $line; + } else { + throw new MWException( "Trying to define name twice: " . $line ); + } + } else { + list( $key, $value ) = array_map( 'trim', explode( '=', $line, 2 ) ); + if ( $key === 'file' ) $file = $value; + } + } + + if ( $name !== '' ) { + // Fake a group + $group = new AliasMessageGroup( $name ); + $group->setMessageFile( $file ); + $group->setVariableName( 'aliases' ); + $writer = $group->getWriter(); + $writer->fileExport( $langs, $options['target'] ); + } +} Property changes on: trunk/extensions/Translate/scripts/alias-export.php ___________________________________________________________________ Name: svn:eol-style + native _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS[at]lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs
|