From 74e42ffd0ca411071ca9194fa41917f6373dcbdf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 15 Oct 2007 12:58:00 +0000 Subject: [PATCH] * Rewritten check language with less globals and wiki output --- maintenance/language/checkLanguage.inc | 113 +-------- maintenance/language/checkLanguage.php | 322 +++++++++++++++++++++---- maintenance/language/languages.inc | 113 +++++---- 3 files changed, 341 insertions(+), 207 deletions(-) diff --git a/maintenance/language/checkLanguage.inc b/maintenance/language/checkLanguage.inc index 468db5500f..51f5dbd4cd 100644 --- a/maintenance/language/checkLanguage.inc +++ b/maintenance/language/checkLanguage.inc @@ -1,109 +1,8 @@ getMessages( $code ); - $messagesNumber = count( $messages['translated'] ); - # Skip the checks if told so - if ( $displayLevel == 0 ) { - return; - } - - # 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', $checks ) ) { - $generalMessages = $languages->getGeneralMessages(); - $requiredMessagesNumber = count( $generalMessages['required'] ); - $untranslatedMessages = $languages->getUntranslatedMessages( $code ); - $untranslatedMessagesNumber = count( $untranslatedMessages ); - $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', $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:", $displayLevel, $links, $wikiLanguage ); - $problems += $duplicateMessagesNumber; - } - - # Obsolete messages - 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:", $displayLevel, $links, $wikiLanguage ); - $problems += $obsoleteMessagesNumber; - } - - # Messages without variables - 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:", $displayLevel, $links, $wikiLanguage ); - $problems += $messagesWithoutVariablesNumber; - } - - # Messages without plural - 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:", $displayLevel, $links, $wikiLanguage ); - $problems += $messagesWithoutPluralNumber; - } - - # Empty messages - 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 -:", $displayLevel, $links, $wikiLanguage ); - $problems += $emptyMessagesNumber; - } - - # Messages with whitespace - 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:", $displayLevel, $links, $wikiLanguage ); - $problems += $messagesWithWhitespaceNumber; - } - - # Non-XHTML messages - 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:", $displayLevel, $links, $wikiLanguage ); - $problems += $nonXHTMLMessagesNumber; - } - - # Messages with wrong characters - 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:", $displayLevel, $links, $wikiLanguage ); - $problems += $messagesWithWrongCharsNumber; - } - - return $problems; -} +# Blacklist some checks for some languages +$checkBlacklist = array( +#'code' => array( 'check1', 'check2' ... ) +'ja' => array( 'plural' ), // Does not use plural +'my' => array( 'chars' ), // Uses a lot zwnj +); diff --git a/maintenance/language/checkLanguage.php b/maintenance/language/checkLanguage.php index 42a43c02c1..2bff35cbc7 100644 --- a/maintenance/language/checkLanguage.php +++ b/maintenance/language/checkLanguage.php @@ -7,31 +7,137 @@ require_once( dirname(__FILE__).'/../commandLine.inc' ); require_once( 'languages.inc' ); -require_once( 'checkLanguage.inc' ); -# Show help -if ( isset( $options['help'] ) ) { - echo <<execute(); + +class CheckLanguageCLI { + private $code = null; + private $level = 2; + private $doLinks = false; + private $wikiCode = 'en'; + private $includeExif = false; + private $checkAll = false; + private $output = 'plain'; + private $checks = array(); + + private $defaultChecks = array( + 'untranslated', 'obsolete', 'variables', 'empty', 'plural', + 'whitespace', 'xhtml', 'chars', 'links', 'unbalanced' + ); + + private $L = null; + + /** + * GLOBALS: $wgLanguageCode; + */ + public function __construct( Array $options ) { + + if ( isset( $options['help'] ) ) { + echo $this->help(); + exit(); + } + + if ( isset($options['lang']) ) { + $this->code = $options['lang']; + } else { + global $wgLanguageCode; + $this->code = $wgLanguageCode; + } + + if ( isset($options['level']) ) { + $this->level = $options['level']; + } + + $this->doLinks = isset($options['links']); + $this->includeExif = !isset($options['noexif']); + $this->checkAll = isset($options['all']); + + if ( isset($options['wikilang']) ) { + $this->wikiCode = $options['wikilang']; + } + + if ( isset( $options['whitelist'] ) ) { + $this->checks = explode( ',', $options['whitelist'] ); + } elseif ( isset( $options['blacklist'] ) ) { + $this->checks = array_diff( + $this->defaultChecks, + explode( ',', $options['blacklist'] ) + ); + } else { + $this->checks = $this->defaultChecks; + } + + if ( isset($options['output']) ) { + $this->output = $options['output']; + } + + # Some additional checks not enabled by default + if ( isset( $options['duplicate'] ) ) { + $this->checks[] = 'duplicate'; + } + + $this->L = new languages( $this->includeExif ); + } + + protected function getChecks() { + $checks = array(); + $checks['untranslated'] = 'getUntranslatedMessages'; + $checks['duplicate'] = 'getDuplicateMessages'; + $checks['obsolete'] = 'getObsoleteMessages'; + $checks['variables'] = 'getMessagesWithoutVariables'; + $checks['plural'] = 'getMessagesWithoutPlural'; + $checks['empty'] = 'getEmptyMessages'; + $checks['whitespace'] = 'getMessagesWithWhitespace'; + $checks['xhtml'] = 'getNonXHTMLMessages'; + $checks['chars'] = 'getMessagesWithWrongChars'; + $checks['links'] = 'getMessagesWithDubiousLinks'; + $checks['unbalanced'] = 'getMessagesWithUnbalanced'; + return $checks; + } + + protected function getDescriptions() { + $descriptions = array(); + $descriptions['untranslated'] = '$1 message(s) of $2 are not translated to $3, but exist in en:'; + $descriptions['duplicate'] = '$1 message(s) of $2 are translated the same in en and $3:'; + $descriptions['obsolete'] = '$1 message(s) of $2 do not exist in en or are in the ignore list, but are in $3'; + $descriptions['variables'] = '$1 message(s) of $2 in $3 don\'t use some variables that en uses:'; + $descriptions['plural'] = '$1 message(s) of $2 in $3 don\'t use {{plural}} while en uses:'; + $descriptions['empty'] = '$1 message(s) of $2 in $3 are empty or -:'; + $descriptions['whitespace'] = '$1 message(s) of $2 in $3 have trailing whitespace:'; + $descriptions['xhtml'] = '$1 message(s) of $2 in $3 contain illegal XHTML:'; + $descriptions['chars'] = '$1 message(s) of $2 in $3 include hidden chars which should not be used in the messages:'; + $descriptions['links'] = '$1 message(s) of $2 in $3 have problematic link(s):'; + $descriptions['unbalanced'] = '$1 message(s) of $2 in $3 have unbalanced {[]}:'; + return $descriptions; + } + + protected function help() { + return <<