'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 ) ) {
}
}
sort( $this->mList );
+ $this->mCheckEXIF = $exif;
}
/**
* @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] );
+ }
}
}
* @return The messages in this language.
*/
public function getTranslatableMessages() {
- $this->loadMessages( 'en' );
+ $this->loadTranslatableMessages();
return $this->mTranslatableMessages;
}
* @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 ) {
* @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 ) {
* @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 ) {
* @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 ) {
* @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();
* @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 ) {
* @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 ) {
* @return The non-XHTML messages for this language.
*/
public function getNonXHTMLMessages( $code ) {
- $this->loadMessages( 'en' );
+ $this->loadTranslatableMessages();
$this->loadMessages( $code );
$wrongPhrases = array(
'<hr *\\?>',
* @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",
* @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";
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 {