/**
* In which language to get this message. True, which is the default,
- * means the current interface language, false content language.
+ * means the current user language, false content language.
*
* @var bool
*/
protected $interface = true;
/**
- * In which language to get this message. Overrides the $interface
- * variable.
+ * In which language to get this message. Overrides the $interface setting.
*
- * @var Language
+ * @var Language|bool Explicit language object, or false for user language
*/
- protected $language = null;
+ protected $language = false;
/**
* @var string The message key. If $keysToTry has more than one element,
/**
* @var array List of parameters which will be substituted into the message.
*/
- protected $parameters = array();
+ protected $parameters = [];
/**
* Format for the message.
/**
* @since 1.17
- *
* @param string|string[]|MessageSpecifier $key Message key, or array of
* message keys to try and use the first non-empty message for, or a
* MessageSpecifier to copy from.
* @param array $params Message parameters.
- * @param Language $language Optional language of the message, defaults to $wgLang.
- *
+ * @param Language $language [optional] Language to use (defaults to current user language).
* @throws InvalidArgumentException
*/
- public function __construct( $key, $params = array(), Language $language = null ) {
- global $wgLang;
-
+ public function __construct( $key, $params = [], Language $language = null ) {
if ( $key instanceof MessageSpecifier ) {
if ( $params ) {
throw new InvalidArgumentException(
$this->key = reset( $this->keysToTry );
$this->parameters = array_values( $params );
- $this->language = $language ?: $wgLang;
+ // User language is only resolved in getLanguage(). This helps preserve the
+ // semantic intent of "user language" across serialize() and unserialize().
+ $this->language = $language ?: false;
}
/**
* @return string
*/
public function serialize() {
- return serialize( array(
+ return serialize( [
'interface' => $this->interface,
- 'language' => $this->language instanceof StubUserLang ? false : $this->language->getCode(),
+ 'language' => $this->language ? $this->language->getCode() : false,
'key' => $this->key,
'keysToTry' => $this->keysToTry,
'parameters' => $this->parameters,
'format' => $this->format,
'useDatabase' => $this->useDatabase,
'title' => $this->title,
- ) );
+ ] );
}
/**
* @param string $serialized
*/
public function unserialize( $serialized ) {
- global $wgLang;
-
$data = unserialize( $serialized );
$this->interface = $data['interface'];
$this->key = $data['key'];
$this->parameters = $data['parameters'];
$this->format = $data['format'];
$this->useDatabase = $data['useDatabase'];
- $this->language = $data['language'] ? Language::factory( $data['language'] ) : $wgLang;
+ $this->language = $data['language'] ? Language::factory( $data['language'] ) : false;
$this->title = $data['title'];
}
* @return Language
*/
public function getLanguage() {
- return $this->language;
+ // Defaults to false which means current user language
+ return $this->language ?: RequestContext::getMain()->getLanguage();
}
/**
public function getTitle() {
global $wgContLang, $wgForceUIMsgAsContentMsg;
- $code = $this->language->getCode();
+ $code = $this->getLanguage()->getCode();
$title = $this->key;
if (
$wgContLang->getCode() !== $code
/**
* Request the message in any language that is supported.
+ *
* As a side effect interface message status is unconditionally
* turned off.
*
* @since 1.17
- *
* @param Language|string $lang Language code or Language object.
- *
* @return Message $this
* @throws MWException
*/
public function inLanguage( $lang ) {
- if ( $lang instanceof Language || $lang instanceof StubUserLang ) {
+ if ( $lang instanceof Language ) {
$this->language = $lang;
} elseif ( is_string( $lang ) ) {
if ( !$this->language instanceof Language || $this->language->getCode() != $lang ) {
$this->language = Language::factory( $lang );
}
+ } elseif ( $lang instanceof StubUserLang ) {
+ $this->language = false;
} else {
$type = gettype( $lang );
throw new MWException( __METHOD__ . " must be "
# Replace $* with a list of parameters for &uselang=qqx.
if ( strpos( $string, '$*' ) !== false ) {
$paramlist = '';
- if ( $this->parameters !== array() ) {
+ if ( $this->parameters !== [] ) {
$paramlist = ': $' . implode( ', $', range( 1, count( $this->parameters ) ) );
}
$string = str_replace( '$*', $paramlist, $string );
/**
* Magic method implementation of the above (for PHP >= 5.2.0), so we can do, eg:
- * $foo = Message::get( $key );
+ * $foo = new Message( $key );
* $string = "<abbr>$foo</abbr>";
*
* @since 1.18
* @return array Array with a single "raw" key.
*/
public static function rawParam( $raw ) {
- return array( 'raw' => $raw );
+ return [ 'raw' => $raw ];
}
/**
* @return array Array with a single "num" key.
*/
public static function numParam( $num ) {
- return array( 'num' => $num );
+ return [ 'num' => $num ];
}
/**
* @return int[] Array with a single "duration" key.
*/
public static function durationParam( $duration ) {
- return array( 'duration' => $duration );
+ return [ 'duration' => $duration ];
}
/**
* @return string[] Array with a single "expiry" key.
*/
public static function expiryParam( $expiry ) {
- return array( 'expiry' => $expiry );
+ return [ 'expiry' => $expiry ];
}
/**
* @return number[] Array with a single "period" key.
*/
public static function timeperiodParam( $period ) {
- return array( 'period' => $period );
+ return [ 'period' => $period ];
}
/**
* @return int[] Array with a single "size" key.
*/
public static function sizeParam( $size ) {
- return array( 'size' => $size );
+ return [ 'size' => $size ];
}
/**
* @return int[] Array with a single "bitrate" key.
*/
public static function bitrateParam( $bitrate ) {
- return array( 'bitrate' => $bitrate );
+ return [ 'bitrate' => $bitrate ];
}
/**
* @return string[] Array with a single "plaintext" key.
*/
public static function plaintextParam( $plaintext ) {
- return array( 'plaintext' => $plaintext );
+ return [ 'plaintext' => $plaintext ];
}
/**
* @return string
*/
protected function replaceParameters( $message, $type = 'before' ) {
- $replacementKeys = array();
+ $replacementKeys = [];
foreach ( $this->parameters as $n => $param ) {
list( $paramType, $value ) = $this->extractParam( $param );
if ( $type === $paramType ) {
protected function extractParam( $param ) {
if ( is_array( $param ) ) {
if ( isset( $param['raw'] ) ) {
- return array( 'after', $param['raw'] );
+ return [ 'after', $param['raw'] ];
} elseif ( isset( $param['num'] ) ) {
// Replace number params always in before step for now.
// No support for combined raw and num params
- return array( 'before', $this->language->formatNum( $param['num'] ) );
+ return [ 'before', $this->getLanguage()->formatNum( $param['num'] ) ];
} elseif ( isset( $param['duration'] ) ) {
- return array( 'before', $this->language->formatDuration( $param['duration'] ) );
+ return [ 'before', $this->getLanguage()->formatDuration( $param['duration'] ) ];
} elseif ( isset( $param['expiry'] ) ) {
- return array( 'before', $this->language->formatExpiry( $param['expiry'] ) );
+ return [ 'before', $this->getLanguage()->formatExpiry( $param['expiry'] ) ];
} elseif ( isset( $param['period'] ) ) {
- return array( 'before', $this->language->formatTimePeriod( $param['period'] ) );
+ return [ 'before', $this->getLanguage()->formatTimePeriod( $param['period'] ) ];
} elseif ( isset( $param['size'] ) ) {
- return array( 'before', $this->language->formatSize( $param['size'] ) );
+ return [ 'before', $this->getLanguage()->formatSize( $param['size'] ) ];
} elseif ( isset( $param['bitrate'] ) ) {
- return array( 'before', $this->language->formatBitrate( $param['bitrate'] ) );
+ return [ 'before', $this->getLanguage()->formatBitrate( $param['bitrate'] ) ];
} elseif ( isset( $param['plaintext'] ) ) {
- return array( 'after', $this->formatPlaintext( $param['plaintext'] ) );
+ return [ 'after', $this->formatPlaintext( $param['plaintext'] ) ];
} else {
$warning = 'Invalid parameter for message "' . $this->getKey() . '": ' .
htmlspecialchars( serialize( $param ) );
$e = new Exception;
wfDebugLog( 'Bug58676', $warning . "\n" . $e->getTraceAsString() );
- return array( 'before', '[INVALID]' );
+ return [ 'before', '[INVALID]' ];
}
} elseif ( $param instanceof Message ) {
// Message objects should not be before parameters because
// then they'll get double escaped. If the message needs to be
// escaped, it'll happen right here when we call toString().
- return array( 'after', $param->toString() );
+ return [ 'after', $param->toString() ];
} else {
- return array( 'before', $param );
+ return [ 'before', $param ];
}
}
$this->title,
/*linestart*/true,
$this->interface,
- $this->language
+ $this->getLanguage()
);
return $out instanceof ParserOutput ? $out->getText() : $out;
return MessageCache::singleton()->transform(
$string,
$this->interface,
- $this->language,
+ $this->getLanguage(),
$this->title
);
}
$cache = MessageCache::singleton();
foreach ( $this->keysToTry as $key ) {
- $message = $cache->get( $key, $this->useDatabase, $this->language );
+ $message = $cache->get( $key, $this->useDatabase, $this->getLanguage() );
if ( $message !== false && $message !== '' ) {
break;
}
*
* @throws InvalidArgumentException
*/
- public function __construct( $text, $params = array() ) {
+ public function __construct( $text, $params = [] ) {
if ( !is_string( $text ) ) {
throw new InvalidArgumentException( '$text must be a string' );
}