From cecb985bee3bdd252e1b8dc0bd500b37cd52be01 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 16 May 2007 20:58:53 +0000 Subject: Aktualisierung auf MediaWiki 1.10.0 Plugins angepasst und verbessert kleine Korrekturen am Design --- maintenance/language/writeMessagesArray.inc | 71 ++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 16 deletions(-) (limited to 'maintenance/language/writeMessagesArray.inc') diff --git a/maintenance/language/writeMessagesArray.inc b/maintenance/language/writeMessagesArray.inc index b0d17c59..01fc7762 100644 --- a/maintenance/language/writeMessagesArray.inc +++ b/maintenance/language/writeMessagesArray.inc @@ -2,27 +2,69 @@ /** * Write a messages array as a PHP text. * - * @package MediaWiki - * @subpackage Maintenance + * @addtogroup Maintenance */ require_once( 'messages.inc' ); require_once( 'messageTypes.inc' ); +/** + * Write a messages array as a PHP text and write it to the messages file. + * + * @param $messages The messages array. + * @param $code The language code. + * @param $write Write to the messages file? + * @param $listUnknown List the unknown messages? + */ +function writeMessagesToFile( $messages, $code, $write, $listUnknown ) { + # Rewrite the messages array + $messages = writeMessagesArray( $messages, $code == 'en' ); + $messagesText = $messages[0]; + $sortedMessages = $messages[1]; + + # Write to the file + $filename = Language::getMessagesFileName( $code ); + $contents = file_get_contents( $filename ); + if ( strpos( $contents, '$messages' ) !== false ) { + $contents = explode( '$messages', $contents ); + if ( $messagesText . "\n?>\n" == '$messages' . $contents[1] ) { + echo "Generated messages for language $code. Same to the current file.\n"; + } else { + if ( $write ) { + $new = $contents[0]; + $new .= $messagesText; + $new .= "\n?>\n"; + file_put_contents( $filename, $new ); + echo "Generated and wrote messages for language $code.\n"; + } else { + echo "Generated messages for language $code. Please run the script again (without the parameter \"dry-run\") to write the array to the file.\n"; + } + } + if ( $listUnknown && isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) { + echo "\nThere are " . count( $sortedMessages['unknown'] ) . " unknown messages, please check them:\n"; + foreach ( $sortedMessages['unknown'] as $key => $value ) { + echo "* " . $key . "\n"; + } + } + } else { + echo "Generated messages for language $code. There seems to be no messages array in the file.\n"; + } +} + /** * Write a messages array as a PHP text. * * @param $messages The messages array. * @param $ignoredComments Show comments about ignored and optional messages? (For English.) * - * @return The PHP text. + * @return Array of the PHP text and the sorted messages array. */ function writeMessagesArray( $messages, $ignoredComments = false ) { - global $wgMessageStrucutre, $wgBlockComments, $wgMessageComments; + global $wgMessageStructure, $wgBlockComments; # Sort messages to blocks $sortedMessages['unknown'] = $messages; - foreach ( $wgMessageStrucutre as $blockName => $block ) { + foreach ( $wgMessageStructure as $blockName => $block ) { foreach ( $block as $key ) { if ( array_key_exists( $key, $sortedMessages['unknown'] ) ) { $sortedMessages[$blockName][$key] = $sortedMessages['unknown'][$key]; @@ -46,7 +88,7 @@ function writeMessagesArray( $messages, $ignoredComments = false ) { $messagesText .= writeMessagesBlock( 'unknown', 'Unknown messages', $sortedMessages['unknown'], $ignoredComments ); # Write the unknown messages, alphabetically sorted $messagesText .= ");\n"; - return $messagesText; + return array( $messagesText, $sortedMessages ); } /** @@ -79,12 +121,7 @@ function writeMessagesBlock( $name, $comment, $messages, $ignoredComments ) { } # Get max key length - $maxKeyLength = 0; - foreach( array_keys( $messages ) as $key ) { - if ( strlen( $key ) > $maxKeyLength ) { - $maxKeyLength = strlen( $key ); - } - } + $maxKeyLength = max( array_map( 'strlen', array_keys( $messages ) ) ); # Format the messages foreach( $messages as $key => $value ) { @@ -92,9 +129,7 @@ function writeMessagesBlock( $name, $comment, $messages, $ignoredComments ) { $blockText .= "'$key'"; # Add the appropriate block whitespace - for ( $i = 1; $i <= ( $maxKeyLength - strlen( $key ) ); $i++ ) { - $blockText .= ' '; - } + $blockText .= str_repeat( ' ', $maxKeyLength - strlen( $key ) ); # Refer to the value $blockText .= ' => '; @@ -105,7 +140,11 @@ function writeMessagesBlock( $name, $comment, $messages, $ignoredComments ) { } elseif ( strpos( $value, '"' ) === false && !in_array( $key, $wgMessagseWithDollarSigns ) ) { $blockText .= "\"$value\""; } else { - $blockText .= "'" . str_replace( "'", "\'", $value ) . "'"; + # Pick the less numerous one to escape + $quote = substr_count( $value, '"' ) + substr_count( $value, '$' ) >= substr_count( $value, "'" ) ? "'" : '"'; + if ('"' == $quote) { $extra = '$'; } + else { $extra = ''; } + $blockText .= $quote . addcslashes( $value, $quote.'\\'.$extra ) . $quote; } # Comma -- cgit v1.2.2