<?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
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];
# 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 );
?>
*
* @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 );
}
}
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";
+ }
}
}
}