summaryrefslogtreecommitdiff
path: root/maintenance/language/writeMessagesArray.inc
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance/language/writeMessagesArray.inc')
-rw-r--r--maintenance/language/writeMessagesArray.inc71
1 files changed, 55 insertions, 16 deletions
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