From 36bf15560f74af5fa317a20566eaa0b8e52933be Mon Sep 17 00:00:00 2001 From: Rotem Liss Date: Tue, 5 Sep 2006 15:57:08 +0000 Subject: [PATCH] Allow filtering the EXIF messages out of the script, and various fixes in the languages maintenance scripts. --- maintenance/checkLanguage.php | 6 ++- maintenance/languages.inc | 89 +++++++++++++++++++++++------------ 2 files changed, 65 insertions(+), 30 deletions(-) diff --git a/maintenance/checkLanguage.php b/maintenance/checkLanguage.php index d9292aed2f..f7c5c4fd43 100644 --- a/maintenance/checkLanguage.php +++ b/maintenance/checkLanguage.php @@ -95,6 +95,7 @@ if ( isset( $options['help'] ) ) { echo "\t* whitelist: Make only the following checks (form: code,code).\n"; echo "\t* blacklist: Don't make the following checks (form: code,code).\n"; echo "\t* duplicate: Additionally check for messages which are translated the same to English (default off).\n"; + echo "\t* noexif: Don't check for EXIF messages (a bit hard and boring to translate), if you know that they are not translated and want to focus on other problems (default off).\n"; echo "Check codes (ideally, should be zero; all the checks are executed by default):\n"; echo "\t* untranslated: Messages which are translatable, but not translated.\n"; echo "\t* obsolete: Messages which are untranslatable, but translated.\n"; @@ -142,8 +143,11 @@ if ( isset( $options['duplicate'] ) ) { $wgChecks[] = 'duplicate'; } +# Should check for EXIF? +$wgCheckEXIF = !isset( $options['noexif'] ); + # Get language objects -$wgLanguages = new languages(); +$wgLanguages = new languages( $wgCheckEXIF ); # Check the language if ( $wgCode == 'all' ) { diff --git a/maintenance/languages.inc b/maintenance/languages.inc index f23e8afa6e..a83bca5e87 100644 --- a/maintenance/languages.inc +++ b/maintenance/languages.inc @@ -43,12 +43,15 @@ class languages { 'trackbackexcerpt', 'widthheight', ); + private $mCheckEXIF; /** * Load the list of languages: all the Messages*.php * files in the languages directory. + * + * @param $exif Treat the EXIF messages? */ - function __construct() { + function __construct( $exif = true ) { global $IP; $dir = opendir("$IP/languages"); while ( $file = readdir( $dir ) ) { @@ -57,6 +60,7 @@ class languages { } } sort( $this->mList ); + $this->mCheckEXIF = $exif; } /** @@ -74,27 +78,50 @@ class languages { * @param $code The langauge code. */ private function loadMessages( $code ) { - if ( !isset( $this->mMessages[$code] ) ) { - global $IP; - $filename = Language::getFileName( "$IP/languages/Messages", $code, '.php' ); - if ( file_exists( $filename ) ) { - require( $filename ); - if ( isset( $messages ) ) { - $this->mMessages[$code] = $messages; - if ( $code == 'en' ) { - $this->mTranslatableMessages = $this->mMessages['en']; - foreach ( array_keys( $this->mTranslatableMessages ) as $key ) { - if ( in_array( $key, $this->mIgnoredMessages ) ) { - unset( $this->mTranslatableMessages[$key] ); - } - } - } - } else { - $this->mMessages[$code] = array(); + if ( isset( $this->mMessages[$code] ) ) { + return; + } + global $IP; + $filename = Language::getFileName( "$IP/languages/Messages", $code, '.php' ); + if ( file_exists( $filename ) ) { + require( $filename ); + if ( isset( $messages ) ) { + $this->mMessages[$code] = $messages; + if ( !$this->mCheckEXIF ) { + $this->filterMessages( $code, 'exif-' ); } } else { $this->mMessages[$code] = array(); } + } else { + $this->mMessages[$code] = array(); + } + } + + /** + * Load the messages in English which can be translated. + */ + private function loadTranslatableMessages() { + $this->loadMessages( 'en' ); + $this->mTranslatableMessages = $this->mMessages['en']; + foreach ( array_keys( $this->mTranslatableMessages ) as $key ) { + if ( in_array( $key, $this->mIgnoredMessages ) ) { + unset( $this->mTranslatableMessages[$key] ); + } + } + } + + /** + * Filter messages by string. + * + * @param $code The language code. + * @param $pattern Filter messages which include this string. + */ + private function filterMessages( $code, $pattern ) { + foreach ( array_keys( $this->mMessages[$code] ) as $key ) { + if ( strpos( $key, $pattern ) !== FALSE ) { + unset( $this->mMessages[$code][$key] ); + } } } @@ -119,7 +146,7 @@ class languages { * @return The messages in this language. */ public function getTranslatableMessages() { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); return $this->mTranslatableMessages; } @@ -131,7 +158,7 @@ class languages { * @return The translated messages for this language. */ public function getTranslatedMessages( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $translatedMessages = array(); foreach ( $this->mTranslatableMessages as $key => $value ) { @@ -150,7 +177,7 @@ class languages { * @return The untranslated messages for this language. */ public function getUntranslatedMessages( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $untranslatedMessages = array(); foreach ( $this->mTranslatableMessages as $key => $value ) { @@ -169,7 +196,7 @@ class languages { * @return The duplicate messages for this language. */ public function getDuplicateMessages( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $duplicateMessages = array(); foreach ( $this->mMessages[$code] as $key => $value ) { @@ -188,7 +215,7 @@ class languages { * @return The obsolete messages for this language. */ public function getObsoleteMessages( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $obsoleteMessages = array(); foreach ( $this->mMessages[$code] as $key => $value ) { @@ -207,7 +234,7 @@ class languages { * @return The messages which do not use some variables in this language. */ public function getMessagesWithoutVariables( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $variables = array( '\$1', '\$2', '\$3', '\$4', '\$5', '\$6', '\$7', '\$8', '\$9' ); $messagesWithoutVariables = array(); @@ -236,7 +263,7 @@ class languages { * @return The empty messages for this language. */ public function getEmptyMessages( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $emptyMessages = array(); foreach ( $this->mMessages[$code] as $key => $value ) { @@ -256,7 +283,7 @@ class languages { * @return The messages with trailing whitespace in this language. */ public function getMessagesWithWhitespace( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $messagesWithWhitespace = array(); foreach ( $this->mMessages[$code] as $key => $value ) { @@ -276,7 +303,7 @@ class languages { * @return The non-XHTML messages for this language. */ public function getNonXHTMLMessages( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $wrongPhrases = array( '
', @@ -302,7 +329,7 @@ class languages { * @return The messages which include wrong characters in this language. */ public function getMessagesWithWrongChars( $code ) { - $this->loadMessages( 'en' ); + $this->loadTranslatableMessages(); $this->loadMessages( $code ); $wrongChars = array( '[LRM]' => "\xE2\x80\x8E", @@ -341,7 +368,7 @@ class languages { * @param $links Show links (optional) * @param $wikilang The langauge of the wiki to display the list in, for the links (optional) */ - public function outputMessagesList( $messages, $code, $text = '', $level = 2, $links = false, $wikilang = 'en' ) { + public function outputMessagesList( $messages, $code, $text = '', $level = 2, $links = false, $wikilang = null ) { if ( count( $messages ) > 0 ) { if ( $text ) { echo "$text\n"; @@ -352,6 +379,10 @@ class languages { foreach ( $messages as $key => $value ) { if ( $links ) { $displayKey = ucfirst( $key ); + if ( !isset( $wikilang ) ) { + global $wgContLang; + $wikilang = $wgContLang->getCode(); + } if ( $code == $wikilang ) { $displayKey = "[[MediaWiki:$displayKey|$key]]"; } else { -- 2.20.1