Using (optional) parameters instead of globals in checkLanguage.inc.
authorRotem Liss <rotem@users.mediawiki.org>
Tue, 28 Aug 2007 02:37:44 +0000 (02:37 +0000)
committerRotem Liss <rotem@users.mediawiki.org>
Tue, 28 Aug 2007 02:37:44 +0000 (02:37 +0000)
maintenance/language/checkExtensioni18n.php
maintenance/language/checkLanguage.inc
maintenance/language/checkLanguage.php

index 8535ff6..eff25a5 100644 (file)
 // Filename for the extension i18n files database:
 define( 'EXT_I18N_DB', 'i18n.db' );
 
-// Global parameters for checkLanguage.inc
-$wgDisplayLevel = 2;
-$wgChecks = array( 'untranslated', 'obsolete', 'variables', 'empty', 'whitespace', 'xhtml', 'chars' );
-
 $optionsWithArgs = array( 'extdir', 'lang' );
 
 require_once( dirname(__FILE__).'/../commandLine.inc' );
@@ -143,14 +139,8 @@ class extensionLanguages extends languages {
  * @param $filter Optional, restrict check to a given language code (default; null)
  */
 function checkExtensionLanguage( $filename, $arrayname, $filter = null ) {
-       global $wgGeneralMessages, $wgRequiredMessagesNumber;
-
        $extLanguages = new extensionLanguages($filename, $arrayname);
 
-       // Stuff needed by the checkLanguage routine (globals)
-       $wgGeneralMessages = $extLanguages->getGeneralMessages();
-       $wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
-
        $langs = $extLanguages->getLanguages();
        if( !$langs ) {
                print "ERROR> \$$arrayname array does not exist.\n";
index 6a9fcb8..468db55 100644 (file)
 /**
  * Check a language.
  *
- * @todo Stop with globals.
  * @param $languages The languages object.
- * @param $code The language code.
+ * @param $code The language code (default content language of the wiki running the script on).
+ * @param: $links Show wiki links to messages (default false)?
+ * @param: $wikiLanguage Language of the wiki to show the output in, if showing links (default en).
+ * @param: $checks Checks to do (default all except for duplicates and plural).
  * @return Number of errors found.
  */
-function checkLanguage( $languages, $code ) {
-       global $wgRequiredMessagesNumber, $wgDisplayLevel, $wgLinks, $wgWikiLanguage, $wgChecks;
-
+function checkLanguage( $languages, $code = null, $displayLevel = 2, $links = false, $wikiLanguage = 'en', $checks = null ) {
        # Get messages
        $messages = $languages->getMessages( $code );
        $messagesNumber = count( $messages['translated'] );
 
-       # Skip the checks if specified
-       if ( $wgDisplayLevel == 0 ) {
+       # Skip the checks if told so
+       if ( $displayLevel == 0 ) {
                return;
        }
 
-       // Initialize counts
-       $untranslatedMessagesNumber = $duplicateMessagesNumber = $obsoleteMessagesNumber
-       = $messagesWithoutVariablesNumber = $messagesWithoutPluralNumber = $emptyMessagesNumber
-       = $messagesWithWhitespaceNumber = $nonXHTMLMessagesNumber = $messagesWithWrongCharsNumber
-       = 0;
+       # Initialize counts
+       $problems = 0;
+
+       # Set default language code and checks
+       if ( !$code ) {
+               global $wgContLang;
+               $code = $wgContLang->getCode();
+       }
+       if ( !$checks ) {
+               $checks = array( 'untranslated', 'obsolete', 'variables', 'empty', 'whitespace', 'xhtml', 'chars' );
+       }
 
        # Untranslated messages
-       if ( in_array( 'untranslated', $wgChecks ) ) {
+       if ( in_array( 'untranslated', $checks ) ) {
+               $generalMessages = $languages->getGeneralMessages();
+               $requiredMessagesNumber = count( $generalMessages['required'] );
                $untranslatedMessages = $languages->getUntranslatedMessages( $code );
                $untranslatedMessagesNumber = count( $untranslatedMessages );
-               $languages->outputMessagesList( $untranslatedMessages, $code, "\n$untranslatedMessagesNumber messages of $wgRequiredMessagesNumber are not translated to $code, but exist in en:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $untranslatedMessages, $code, "\n$untranslatedMessagesNumber messages of $requiredMessagesNumber are not translated to $code, but exist in en:", $displayLevel, $links, $wikiLanguage );
+               $problems += $untranslatedMessagesNumber;
        }
 
        # Duplicate messages
-       if ( in_array( 'duplicate', $wgChecks ) ) {
+       if ( in_array( 'duplicate', $checks ) ) {
                $duplicateMessages = $languages->getDuplicateMessages( $code );
                $duplicateMessagesNumber = count( $duplicateMessages );
-               $languages->outputMessagesList( $duplicateMessages, $code, "\n$duplicateMessagesNumber messages of $messagesNumber are translated the same in en and $code:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $duplicateMessages, $code, "\n$duplicateMessagesNumber messages of $messagesNumber are translated the same in en and $code:", $displayLevel, $links, $wikiLanguage );
+               $problems += $duplicateMessagesNumber;
        }
 
        # Obsolete messages
-       if ( in_array( 'obsolete', $wgChecks ) ) {
+       if ( in_array( 'obsolete', $checks ) ) {
                $obsoleteMessages = $messages['obsolete'];
                $obsoleteMessagesNumber = count( $obsoleteMessages );
-               $languages->outputMessagesList( $obsoleteMessages, $code, "\n$obsoleteMessagesNumber messages of $messagesNumber do not exist in en (or are in the ignored list), but still exist in $code:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $obsoleteMessages, $code, "\n$obsoleteMessagesNumber messages of $messagesNumber do not exist in en (or are in the ignored list), but still exist in $code:", $displayLevel, $links, $wikiLanguage );
+               $problems += $obsoleteMessagesNumber;
        }
 
        # Messages without variables
-       if ( in_array( 'variables', $wgChecks ) ) {
+       if ( in_array( 'variables', $checks ) ) {
                $messagesWithoutVariables = $languages->getMessagesWithoutVariables( $code );
                $messagesWithoutVariablesNumber = count( $messagesWithoutVariables );
-               $languages->outputMessagesList( $messagesWithoutVariables, $code, "\n$messagesWithoutVariablesNumber messages of $messagesNumber in $code don't use some variables while en uses them:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $messagesWithoutVariables, $code, "\n$messagesWithoutVariablesNumber messages of $messagesNumber in $code don't use some variables while en uses them:", $displayLevel, $links, $wikiLanguage );
+               $problems += $messagesWithoutVariablesNumber;
        }
 
        # Messages without plural
-       if ( in_array( 'plural', $wgChecks ) ) {
+       if ( in_array( 'plural', $checks ) ) {
                $messagesWithoutPlural = $languages->getMessagesWithoutPlural( $code );
                $messagesWithoutPluralNumber = count( $messagesWithoutPlural );
-               $languages->outputMessagesList( $messagesWithoutPlural, $code, "\n$messagesWithoutPluralNumber messages of $messagesNumber in $code don't use {{plural}} while en uses it:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $messagesWithoutPlural, $code, "\n$messagesWithoutPluralNumber messages of $messagesNumber in $code don't use {{plural}} while en uses it:", $displayLevel, $links, $wikiLanguage );
+               $problems += $messagesWithoutPluralNumber;
        }
 
        # Empty messages
-       if ( in_array( 'empty', $wgChecks ) ) {
+       if ( in_array( 'empty', $checks ) ) {
                $emptyMessages = $languages->getEmptyMessages( $code );
                $emptyMessagesNumber = count( $emptyMessages );
-               $languages->outputMessagesList( $emptyMessages, $code, "\n$emptyMessagesNumber messages of $messagesNumber in $code are empty or -:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $emptyMessages, $code, "\n$emptyMessagesNumber messages of $messagesNumber in $code are empty or -:", $displayLevel, $links, $wikiLanguage );
+               $problems += $emptyMessagesNumber;
        }
 
        # Messages with whitespace
-       if ( in_array( 'whitespace', $wgChecks ) ) {
+       if ( in_array( 'whitespace', $checks ) ) {
                $messagesWithWhitespace = $languages->getMessagesWithWhitespace( $code );
                $messagesWithWhitespaceNumber = count( $messagesWithWhitespace );
-               $languages->outputMessagesList( $messagesWithWhitespace, $code, "\n$messagesWithWhitespaceNumber messages of $messagesNumber in $code have a trailing whitespace:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $messagesWithWhitespace, $code, "\n$messagesWithWhitespaceNumber messages of $messagesNumber in $code have a trailing whitespace:", $displayLevel, $links, $wikiLanguage );
+               $problems += $messagesWithWhitespaceNumber;
        }
 
        # Non-XHTML messages
-       if ( in_array( 'xhtml', $wgChecks ) ) {
+       if ( in_array( 'xhtml', $checks ) ) {
                $nonXHTMLMessages = $languages->getNonXHTMLMessages( $code );
                $nonXHTMLMessagesNumber = count( $nonXHTMLMessages );
-               $languages->outputMessagesList( $nonXHTMLMessages, $code, "\n$nonXHTMLMessagesNumber messages of $messagesNumber in $code are not well-formed XHTML:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $nonXHTMLMessages, $code, "\n$nonXHTMLMessagesNumber messages of $messagesNumber in $code are not well-formed XHTML:", $displayLevel, $links, $wikiLanguage );
+               $problems += $nonXHTMLMessagesNumber;
        }
 
        # Messages with wrong characters
-       if ( in_array( 'chars', $wgChecks ) ) {
+       if ( in_array( 'chars', $checks ) ) {
                $messagesWithWrongChars = $languages->getMessagesWithWrongChars( $code );
                $messagesWithWrongCharsNumber = count( $messagesWithWrongChars );
-               $languages->outputMessagesList( $messagesWithWrongChars, $code, "\n$messagesWithWrongCharsNumber messages of $messagesNumber in $code include hidden chars which should not be used in the messages:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+               $languages->outputMessagesList( $messagesWithWrongChars, $code, "\n$messagesWithWrongCharsNumber messages of $messagesNumber in $code include hidden chars which should not be used in the messages:", $displayLevel, $links, $wikiLanguage );
+               $problems += $messagesWithWrongCharsNumber;
        }
 
-       return ($untranslatedMessagesNumber + $duplicateMessagesNumber + $obsoleteMessagesNumber + $messagesWithoutVariablesNumber + $messagesWithoutPluralNumber + $emptyMessagesNumber + $messagesWithWhitespaceNumber + $nonXHTMLMessagesNumber + $messagesWithWrongCharsNumber);
+       return $problems;
 }
-?>
index a83ae0a..42a43c0 100644 (file)
@@ -42,33 +42,20 @@ ENDS;
        exit();
 }
 
-# Get the language code
-if ( isset( $options['lang'] ) ) {
-       $wgCode = $options['lang'];
-} else {
-       $wgCode = $wgContLang->getCode();
-}
-
-# Get the display level
-if ( isset( $options['level'] ) ) {
-       $wgDisplayLevel = $options['level'];
-} else {
-       $wgDisplayLevel = 2;
-}
-
-# Get the links options
+# Get the parameters
+$wgCode = isset( $options['lang'] ) ? $options['lang'] : null;
+$wgDisplayLevel = isset( $options['level'] ) ? $options['level'] : 2;
 $wgLinks = isset( $options['links'] );
 $wgWikiLanguage = isset( $options['wikilang'] ) ? $options['wikilang'] : 'en';
+$wgCheckEXIF = !isset( $options['noexif'] );
 
-# Get the checks to do
+# Get the checks
 $wgChecks = array( 'untranslated', 'obsolete', 'variables', 'empty', 'whitespace', 'xhtml', 'chars' );
 if ( isset( $options['whitelist'] ) ) {
        $wgChecks = explode( ',', $options['whitelist'] );
 } elseif ( isset( $options['blacklist'] ) ) {
        $wgChecks = array_diff( $wgChecks, explode( ',', $options['blacklist'] ) );
 }
-
-# Add duplicate and plural options if specified
 if ( isset( $options['duplicate'] ) ) {
        $wgChecks[] = 'duplicate';
 }
@@ -76,16 +63,9 @@ if ( isset( $options['plural'] ) ) {
        $wgChecks[] = 'plural';
 }
 
-# Should check for EXIF?
-$wgCheckEXIF = !isset( $options['noexif'] );
-
-# Get language objects
+# Get language object
 $wgLanguages = new languages( $wgCheckEXIF );
 
-# Get the general messages
-$wgGeneralMessages = $wgLanguages->getGeneralMessages();
-$wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
-
 # Check the language
 if ( $wgCode == 'all' ) {
        foreach ( $wgLanguages->getLanguages() as $language ) {
@@ -94,14 +74,12 @@ if ( $wgCode == 'all' ) {
                }
        }
 } else {
-       # Can't check English
+       # Can't check English or English RTL
        if ( $wgCode == 'en' ) {
                echo "Current selected language is English, which cannot be checked.\n";
        } else if ( $wgCode == 'enRTL' ) {
                echo "Current selected language is RTL English, which cannot be checked.\n";
        } else {
-               checkLanguage( $wgLanguages, $wgCode );
+               checkLanguage( $wgLanguages, $wgCode, $wgDisplayLevel, $wgLinks, $wgWikiLanguage, $wgChecks );
        }
 }
-
-