* Adding checks for empty messages and messages with trailing whitespace (mostly...
authorRotem Liss <rotem@users.mediawiki.org>
Sat, 5 Aug 2006 17:00:40 +0000 (17:00 +0000)
committerRotem Liss <rotem@users.mediawiki.org>
Sat, 5 Aug 2006 17:00:40 +0000 (17:00 +0000)
* Adding help for the script.
* Adding option to hide the lists of messages.
* Several minor fixes.

maintenance/checkLanguage.php
maintenance/languages.inc

index f5c656c..7c5a50b 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
- * Run this script to check a specific language file. If you don't specify
- * the language code, the script will run on the default installation.
+ * Check a language file.
  *
  * @package MediaWiki
  * @subpackage Maintenance
@@ -10,6 +9,17 @@
 require_once( 'commandLine.inc' );
 require_once( 'languages.inc' );
 
+# Show help
+if ( isset( $options['help'] ) ) {
+       echo "Run this script to check a specific language file.\n";
+       echo "If you don't specify a language code, the script will run on the installation default language.\n";
+       echo "Options:\n";
+       echo "\thelp: Show help.\n";
+       echo "\thide: Only show the numbers of messages with the problem, hide the messages themselves.\n";
+       exit();
+}
+$wgHideMessages = isset( $options['hide'] );
+
 # Get the language code
 if ( isset( $args[0] ) ) {
        $code = $args[0];
@@ -33,21 +43,31 @@ $localMessagesNumber = count( $wgLanguages->getMessagesFor( $code ) );
 # Untranslated messages
 $untranslatedMessages = $wgLanguages->getUntranslatedMessages( $code );
 $untranslatedMessagesNumber = count( $untranslatedMessages );
-$wgLanguages->outputMessagesList( $untranslatedMessages, "\n$untranslatedMessagesNumber messages of $englishMessagesNumber are not translated to $code, but exist in en:" );
+$wgLanguages->outputMessagesList( $untranslatedMessages, "\n$untranslatedMessagesNumber messages of $englishMessagesNumber are not translated to $code, but exist in en:", $wgHideMessages );
 
 # Duplicate messages
 $duplicateMessages = $wgLanguages->getDuplicateMessages( $code );
 $duplicateMessagesNumber = count( $duplicateMessages );
-$wgLanguages->outputMessagesList( $duplicateMessages, "\n$duplicateMessagesNumber messages of $localMessagesNumber are translated the same in en and $code:" );
+$wgLanguages->outputMessagesList( $duplicateMessages, "\n$duplicateMessagesNumber messages of $localMessagesNumber are translated the same in en and $code:", $wgHideMessages );
 
 # Obsolete messages
 $obsoleteMessages = $wgLanguages->getObsoleteMessages( $code );
 $obsoleteMessagesNumber = count( $obsoleteMessages );
-$wgLanguages->outputMessagesList( $obsoleteMessages, "\n$obsoleteMessagesNumber messages of $localMessagesNumber are not exist in en, but still exist in $code:" );
+$wgLanguages->outputMessagesList( $obsoleteMessages, "\n$obsoleteMessagesNumber messages of $localMessagesNumber are not exist in en, but still exist in $code:", $wgHideMessages );
 
 # Messages without variables
 $messagesWithoutVariables = $wgLanguages->getMessagesWithoutVariables( $code );
 $messagesWithoutVariablesNumber = count( $messagesWithoutVariables );
-$wgLanguages->outputMessagesList( $messagesWithoutVariables, "\n$messagesWithoutVariablesNumber messages of $localMessagesNumber in $code don't use some variables while en uses them:" );
+$wgLanguages->outputMessagesList( $messagesWithoutVariables, "\n$messagesWithoutVariablesNumber messages of $localMessagesNumber in $code don't use some variables while en uses them:", $wgHideMessages );
+
+# Empty messages
+$emptyMessages = $wgLanguages->getEmptyMessages( $code );
+$emptyMessagesNumber = count( $emptyMessages );
+$wgLanguages->outputMessagesList( $emptyMessages, "\n$emptyMessagesNumber messages of $localMessagesNumber in $code are empty or -:", $wgHideMessages );
+
+# Messages with whitespace
+$messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
+$messagesWithWhitespaceNumber = count( $messagesWithWhitespace );
+$wgLanguages->outputMessagesList( $messagesWithWhitespace, "\n$messagesWithWhitespaceNumber messages of $localMessagesNumber in $code have a trailing whitespace:", $wgHideMessages );
 
 ?>
index 80d4243..f352209 100644 (file)
@@ -174,19 +174,19 @@ class languages {
         *
         * @param $code The langauge code.
         *
-        * @return The obsolete messages for this language.
+        * @return The messages which do not use some variables in this language.
         */
        public function getMessagesWithoutVariables( $code ) {
                $this->loadMessages( 'en' );
                $this->loadMessages( $code );
                $variables = array( '\$1', '\$2', '\$3', '\$4', '\$5', '\$6', '\$7', '\$8', '\$9' );
                $messagesWithoutVariables = array();
-               foreach ( $this->mMessages['en'] as $key => $value ) {
-                       if ( isset( $this->mMessages[$code][$key] ) ) {
+               foreach ( $this->mMessages[$code] as $key => $value ) {
+                       if ( isset( $this->mMessages['en'][$key] ) ) {
                                $missing = array();
                                foreach ( $variables as $var ) {
-                                       if ( preg_match( "/$var/sU", $value ) &&
-                                               !preg_match( "/$var/sU", $this->mMessages[$code][$key] ) ) {
+                                       if ( preg_match( "/$var/sU", $this->mMessages['en'][$key] ) &&
+                                               !preg_match( "/$var/sU", $value ) ) {
                                                $missing[] = str_replace( '\$', '$', $var );
                                        }
                                }
@@ -198,19 +198,64 @@ class languages {
                return $messagesWithoutVariables;
        }
 
+       /**
+        * Get the empty messages.
+        *
+        * @param $code The langauge code.
+        *
+        * @return The empty messages for this language.
+        */
+       public function getEmptyMessages( $code ) {
+               $this->loadMessages( 'en' );
+               $this->loadMessages( $code );
+               $emptyMessages = array();
+               foreach ( $this->mMessages[$code] as $key => $value ) {
+                       if ( isset( $this->mMessages['en'][$key] ) &&
+                               ( $this->mMessages[$code][$key] === '' || $this->mMessages[$code][$key] === '-' ) ) {
+                               $emptyMessages[$key] = $value;
+                       }
+               }
+               return $emptyMessages;
+       }
+
+       /**
+        * Get the messages with trailing whitespace.
+        *
+        * @param $code The langauge code.
+        *
+        * @return The messages with trailing whitespace in this language.
+        */
+       public function getMessagesWithWhitespace( $code ) {
+               $this->loadMessages( 'en' );
+               $this->loadMessages( $code );
+               $messagesWithWhitespace = array();
+               foreach ( $this->mMessages[$code] as $key => $value ) {
+                       if ( isset( $this->mMessages['en'][$key] ) && $this->mMessages['en'][$key] !== '' &&
+                               $this->mMessages[$code][$key] !== rtrim( $this->mMessages[$code][$key] ) ) {
+                               $messagesWithWhitespace[$key] = $value;
+                       }
+               }
+               return $messagesWithWhitespace;
+       }
+
        /**
         * Output a messages list.
         *
         * @param $messages The messages list.
         * @param $text The text to show before the list (optional).
+        * @param $hideMessages Hide the real messages if specified.
         */
-       public function outputMessagesList( $messages, $text = '' ) {
+       public function outputMessagesList( $messages, $text = '', $hideMessages = false ) {
                if ( count( $messages ) > 0 ) {
                        if ( $text ) {
                                echo "$text\n";
                        }
-                       foreach ( $messages as $key => $value ) {
-                               echo "* '$key':         $value\n";
+                       if ( $hideMessages ) {
+                               echo "[messages are hidden]\n";
+                       } else {
+                               foreach ( $messages as $key => $value ) {
+                                       echo "* '$key':         $value\n";
+                               }
                        }
                }
        }