From a2d4763ce57915c36c6c66b8512e296f6ae74a7e Mon Sep 17 00:00:00 2001 From: Rotem Liss Date: Sun, 5 Nov 2006 19:43:18 +0000 Subject: [PATCH] Library to write an organised messages array, and script which uses it to rewrite a messages file; they were not tested much yet, but they seem to work at general. The library may have other uses: the PHP view of Special:Allmessages (though it may have to become more efficient first), and scripts to rename/remove/duplicate/add(?) a message to all the messages files (for languages maintenance). --- maintenance/language/rebuildLanguage.php | 82 +++++++++++++++++ maintenance/language/writeMessagesArray.inc | 98 +++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 maintenance/language/rebuildLanguage.php create mode 100644 maintenance/language/writeMessagesArray.inc diff --git a/maintenance/language/rebuildLanguage.php b/maintenance/language/rebuildLanguage.php new file mode 100644 index 0000000000..4817daaaa6 --- /dev/null +++ b/maintenance/language/rebuildLanguage.php @@ -0,0 +1,82 @@ +getMessages( $code ); + $messages = $messages['all']; + + # Rewrite messages array + $messagesText = writeMessagesArray( $messages ); + + # Write to the file + if ( $write ) { + $filename = Language::getMessagesFileName( $code ); + $contents = file_get_contents( $filename ); + if ( strpos( $contents, '$messages' ) !== false ) { + $new = explode( '$messages', $contents ); + $new = $new[0]; + $new .= $messagesText; + $new .= "\n?>\n"; + file_put_contents( $filename, $new ); + echo "Generated and wrote messages in language $code.\n"; + } + } else { + echo "Generated messages in language $code.\n"; + } +} + +# Show help +if ( isset( $options['help'] ) ) { + echo <<getCode(); +} + +# Get the write options +$wgWriteToFile = !isset( $options['dry-run'] ); + +# Get language objects +$wgLanguages = new languages(); + +# Write all the language +if ( $wgCode == 'all' ) { + foreach ( $wgLanguages->getLanguages() as $language ) { + rebuildLanguage( $language, $wgWriteToFile ); + } +} else { + rebuildLanguage( $wgCode, $wgWriteToFile ); +} + +?> diff --git a/maintenance/language/writeMessagesArray.inc b/maintenance/language/writeMessagesArray.inc new file mode 100644 index 0000000000..8fc6b389d0 --- /dev/null +++ b/maintenance/language/writeMessagesArray.inc @@ -0,0 +1,98 @@ + $value ) { + foreach ( $wgMessageStrucutre as $blockName => $block ) { + if ( in_array( $key, $block ) ) { + $sortedMessages[$blockName][$key] = $value; + unset( $sortedMessages['unknown'][$key] ); + break; + } + } + } + + # Write all the messages + $messagesText = "\$messages = array(\n"; + foreach( $sortedMessages as $blockName => $block ) { + # Continue if it's the block of unknown messages, or the block is empty + if ( $blockName == 'unknown' || empty( $block ) ) { + continue; + } + + # Get the block comment and format it (if exist); check for multiple lines comments + $comment = $wgBlockComments[$blockName]; + if ( !empty( $comment ) ) { + if ( strpos( $comment, "\n" ) === false ) { + $messagesText .= "# $comment\n"; + } else { + $messagesText .= "/*\n$comment\n*/\n"; + } + } + + # Get max key length + $maxKeyLength = 0; + foreach( array_keys( $block ) as $key ) { + if ( strlen( $key ) > $maxKeyLength ) { + $maxKeyLength = strlen( $key ); + } + } + + # Format the messages + foreach( $block as $key => $value ) { + # Add the key name + $messagesText .= "'$key'"; + + # Add the appropriate block whitespace + for ( $i = 1; $i <= ( $maxKeyLength - strlen( $key ) ); $i++ ) { + $messagesText .= ' '; + } + + # Refer to the value + $messagesText .= ' => '; + + # Check for the appropriate apostrophe and add the value + if ( strpos( $value, "'" ) === false ) { + $messagesText .= "'$value'"; + } elseif ( strpos( $value, '"' ) === false ) { + $messagesText .= "\"$value\""; + } else { + $messagesText .= "'" . str_replace( "'", "\'", $value ) . "'"; + } + + # Comma + $messagesText .= ','; + + if ( array_key_exists( $key, $wgMessageComments ) ) { + $messagesText .= ' # ' . $wgMessageComments[$key]; + } + + # Newline + $messagesText .= "\n"; + } + + # Newline to end the block + $messagesText .= "\n"; + } + $messagesText .= ");\n"; + + return $messagesText; +} + +?> -- 2.20.1