From c38d561090fe69c4c0c1fc1938104a1eca2dbeef Mon Sep 17 00:00:00 2001 From: Rotem Liss Date: Sat, 5 Aug 2006 15:31:05 +0000 Subject: [PATCH] =?utf8?q?Creating=20an=20improved=20script=20to=20check?= =?utf8?q?=20language=20files,=20adding=20the=20ignored=20messages=20list?= =?utf8?q?=20(created=20by=20Niklas=20Laxstr=C3=B6m),=20and=20improving=20?= =?utf8?q?the=20languages=20class=20for=20the=20scripts.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- maintenance/checkLanguage.php | 52 +++++++++ maintenance/languages.inc | 194 ++++++++++++++++++++++++++++++---- 2 files changed, 223 insertions(+), 23 deletions(-) create mode 100644 maintenance/checkLanguage.php diff --git a/maintenance/checkLanguage.php b/maintenance/checkLanguage.php new file mode 100644 index 0000000000..0ec7771e77 --- /dev/null +++ b/maintenance/checkLanguage.php @@ -0,0 +1,52 @@ +getCode(); +} + +# Can't check English +if ( $code == 'en' ) { + echo "Current selected language is English, which cannot be checked.\n"; + exit(); +} + +# Get language objects +$wgLanguages = new languages(); + +# Get messages number +$englishMessagesNumber = count( $wgLanguages->getMessagesFor( 'en' ) ); +$localMessagesNumber = count( $wgLanguages->getMessagesFor( $code ) ); + +# Show numbers of defined messages +echo "There are $englishMessagesNumber messages in en.\n"; +echo "There are $localMessagesNumber messages in $code.\n"; + +# 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:" ); + +# 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:" ); + +# 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:" ); + +?> diff --git a/maintenance/languages.inc b/maintenance/languages.inc index d61df6228d..35d0f8fe2e 100644 --- a/maintenance/languages.inc +++ b/maintenance/languages.inc @@ -1,42 +1,190 @@ clear(); - $this->loadList(); + global $IP; + $dir = opendir("$IP/languages"); + while ( $file = readdir( $dir ) ) { + if ( preg_match( "/Messages([^.]*?)\.php$/", $file, $matches ) ) { + $this->mList[] = $matches[1]; + } + } + sort($this->mList); } - function clear() { - $this->list = array(); - $this->messages = array(); + /** + * Get the language list. + * + * @return the language list + */ + public function getList() { + return $this->mList; } - function loadList() { - global $IP; - $this->list = array(); + /** + * Load the messages for a specific langauge from the messages file. + * + * @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; + } else { + $this->mMessages[$code] = array(); + } + } else { + $this->mMessages[$code] = array(); + } + } + } - // available language files - $dir = opendir("$IP/languages"); - while ($file = readdir($dir)) { - if (preg_match("/Messages([^.]*?)\.php$/", $file, $m)) { - $this->list[] = $m[1]; + /** + * Get all the messages for a specific langauge, without the fallback + * language messages. + * + * @param $code The langauge code. + * + * @return The messages in this language. + */ + public function getMessagesFor( $code ) { + $this->loadMessages( $code ); + return $this->mMessages[$code]; + } + + /** + * Get all the messages of all the languages. + */ + public function getAllMessages() { + foreach ( $this->mList as $code ) { + $this->getMessages( $code ); + } + } + + /** + * Get the untranslated messages for a specific language. + * + * @param $code The langauge code. + * + * @return The untranslated messages for this language. + */ + public function getUntranslatedMessages( $code ) { + $this->loadMessages( 'en' ); + $this->loadMessages( $code ); + $untranslatedMessages = array(); + foreach ( $this->mMessages['en'] as $key => $value ) { + if ( !isset( $this->mMessages[$code][$key] ) && !in_array( $key, $this->mIgnoredMessages ) ) { + $untranslatedMessages[$key] = $value; } } - sort($this->list); + return $untranslatedMessages; } - function getList() { return $this->list; } + /** + * Get the duplicate messages for a specific language. + * + * @param $code The langauge code. + * + * @return The duplicate messages for this language. + */ + public function getDuplicateMessages( $code ) { + $this->loadMessages( 'en' ); + $this->loadMessages( $code ); + $duplicateMessages = array(); + foreach ( $this->mMessages[$code] as $key => $value ) { + if ( @$this->mMessages['en'][$key] == $value ) { + $duplicateMessages[$key] = $value; + } + } + return $duplicateMessages; + } + + /** + * Get the obsolete messages for a specific language. + * + * @param $code The langauge code. + * + * @return The obsolete messages for this language. + */ + public function getObsoleteMessages( $code ) { + $this->loadMessages( 'en' ); + $this->loadMessages( $code ); + $obsoleteMessages = array(); + foreach ( $this->mMessages[$code] as $key => $value ) { + if ( !isset( $this->mMessages['en'][$key] ) ) { + $obsoleteMessages[$key] = $value; + } + } + return $obsoleteMessages; + } + + /** + * Output a messages list. + * + * @param $messages The messages list. + * @param $text The text to show before the list (optional). + */ + public function outputMessagesList( $messages, $text = '' ) { + if ( count( $messages ) > 0 ) { + if ( $text ) { + echo "$text\n"; + } + foreach ( array_keys( $messages ) as $key ) { + echo "* $key\n"; + } + } + } } + ?> -- 2.20.1