Add option to rebuild message files on a different folder.
authorPlatonides <platonides@gmail.com>
Sun, 8 Apr 2012 17:01:35 +0000 (19:01 +0200)
committerPlatonides <platonides@gmail.com>
Sun, 8 Apr 2012 19:41:22 +0000 (21:41 +0200)
It also creates the message file if missing.

As requested in
 http://thread.gmane.org/gmane.science.linguistics.wikipedia.technical/59984

with Siebrand clarifications in c4540.

Change-Id: I56f7b1584d1a0eb5f9a69736949a90eeef9c5dfc

maintenance/language/rebuildLanguage.php
maintenance/language/writeMessagesArray.inc

index 643fc5f..ed2dae7 100644 (file)
@@ -36,14 +36,15 @@ require_once( 'writeMessagesArray.inc' );
  * @param bool $removeUnknown Remove the unknown messages?
  * @param bool $removeDupes Remove the duplicated messages?
  * @param $dupeMsgSource string The source file intended to remove from the array.
+ * @param $messagesFolder String: path to a folder to store the MediaWiki messages.
  */
-function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource ) {
+function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource, $messagesFolder ) {
        $messages = $languages->getMessages( $code );
        $messages = $messages['all'];
        if ( $removeDupes ) {
                $messages = removeDupes( $messages, $dupeMsgSource );
        }
-       MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown );
+       MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder );
 }
 
 /**
@@ -85,6 +86,7 @@ Options:
        * no-unknown: Do not list the unknown messages.
        * remove-unknown: Remove unknown messages.
        * remove-duplicates: Remove duplicated messages based on a PHP source file.
+       * messages-folder: An alternative folder with MediaWiki messages.
 
 TEXT;
        exit( 1 );
@@ -109,6 +111,7 @@ $wgWriteToFile = !isset( $options['dry-run'] );
 $wgListUnknownMessages = !isset( $options['no-unknown'] );
 $wgRemoveUnknownMessages = isset( $options['remove-unknown'] );
 $wgRemoveDuplicateMessages = isset( $options['remove-duplicates'] );
+$messagesFolder = isset( $options['messages-folder'] ) ? $options['messages-folder'] : false;
 
 # Get language objects
 $languages = new languages();
@@ -116,8 +119,8 @@ $languages = new languages();
 # Write all the language
 if ( $wgCode == 'all' ) {
        foreach ( $languages->getLanguages() as $languageCode ) {
-               rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource );
+               rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
        }
 } else {
-       rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource );
+       rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
 }
index c5d13c9..cd36847 100644 (file)
@@ -41,16 +41,28 @@ class MessageWriter {
         * @param $write Boolean: write to the messages file?
         * @param $listUnknown Boolean: list the unknown messages?
         * @param $removeUnknown Boolean: whether to remove unkown messages
+        * @param $messagesFolder String: path to a folder to store the MediaWiki messages. Defaults to the current install.
         */
-       public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown ) {
+       public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder = false ) {
                # Rewrite the messages array
                $messages = self::writeMessagesArray( $messages, $code == 'en', false, $removeUnknown );
                $messagesText = $messages[0];
                $sortedMessages = $messages[1];
 
                # Write to the file
-               $filename = Language::getMessagesFileName( $code );
-               $contents = file_get_contents( $filename );
+               if ( $messagesFolder )
+                       $filename = Language::getFileName( "$messagesFolder/Messages", $code );
+               else
+                       $filename = Language::getMessagesFileName( $code );
+
+               if ( file_exists( $filename ) )
+                       $contents = file_get_contents( $filename );
+               else
+                       $contents = '<?php
+$messages = array(
+);
+';
+
                if( strpos( $contents, '$messages' ) !== false ) {
                        $contents = explode( '$messages', $contents );
                        if( $messagesText == '$messages' . $contents[1] ) {