Message: Use RequestContext instead of $wgLang
This cuts the $wgLang and StubUserLang which is a bit cleaner. It also makes it more reliable when load.php sets its RequestContext user interface language. Bug: T127920 Change-Id: I05302feb9b3ce9e4c29541e07a4260effc4b55b2
This commit is contained in:
parent
1834ee3d8e
commit
0beb5ca992
1 changed files with 26 additions and 29 deletions
|
|
@ -160,19 +160,18 @@ class Message implements MessageSpecifier, Serializable {
|
|||
|
||||
/**
|
||||
* 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,
|
||||
|
|
@ -225,18 +224,14 @@ class Message implements MessageSpecifier, Serializable {
|
|||
|
||||
/**
|
||||
* @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 = [], Language $language = null ) {
|
||||
global $wgLang;
|
||||
|
||||
if ( $key instanceof MessageSpecifier ) {
|
||||
if ( $params ) {
|
||||
throw new InvalidArgumentException(
|
||||
|
|
@ -260,7 +255,9 @@ class Message implements MessageSpecifier, Serializable {
|
|||
$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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -271,7 +268,7 @@ class Message implements MessageSpecifier, Serializable {
|
|||
public function serialize() {
|
||||
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,
|
||||
|
|
@ -287,8 +284,6 @@ class Message implements MessageSpecifier, Serializable {
|
|||
* @param string $serialized
|
||||
*/
|
||||
public function unserialize( $serialized ) {
|
||||
global $wgLang;
|
||||
|
||||
$data = unserialize( $serialized );
|
||||
$this->interface = $data['interface'];
|
||||
$this->key = $data['key'];
|
||||
|
|
@ -296,7 +291,7 @@ class Message implements MessageSpecifier, Serializable {
|
|||
$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'];
|
||||
}
|
||||
|
||||
|
|
@ -365,7 +360,8 @@ class Message implements MessageSpecifier, Serializable {
|
|||
* @return Language
|
||||
*/
|
||||
public function getLanguage() {
|
||||
return $this->language;
|
||||
// Defaults to false which means current user language
|
||||
return $this->language ?: RequestContext::getMain()->getLanguage();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -425,7 +421,7 @@ class Message implements MessageSpecifier, Serializable {
|
|||
public function getTitle() {
|
||||
global $wgContLang, $wgForceUIMsgAsContentMsg;
|
||||
|
||||
$code = $this->language->getCode();
|
||||
$code = $this->getLanguage()->getCode();
|
||||
$title = $this->key;
|
||||
if (
|
||||
$wgContLang->getCode() !== $code
|
||||
|
|
@ -656,23 +652,24 @@ class Message implements MessageSpecifier, Serializable {
|
|||
|
||||
/**
|
||||
* 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 "
|
||||
|
|
@ -1061,17 +1058,17 @@ class Message implements MessageSpecifier, Serializable {
|
|||
} elseif ( isset( $param['num'] ) ) {
|
||||
// Replace number params always in before step for now.
|
||||
// No support for combined raw and num params
|
||||
return [ 'before', $this->language->formatNum( $param['num'] ) ];
|
||||
return [ 'before', $this->getLanguage()->formatNum( $param['num'] ) ];
|
||||
} elseif ( isset( $param['duration'] ) ) {
|
||||
return [ 'before', $this->language->formatDuration( $param['duration'] ) ];
|
||||
return [ 'before', $this->getLanguage()->formatDuration( $param['duration'] ) ];
|
||||
} elseif ( isset( $param['expiry'] ) ) {
|
||||
return [ 'before', $this->language->formatExpiry( $param['expiry'] ) ];
|
||||
return [ 'before', $this->getLanguage()->formatExpiry( $param['expiry'] ) ];
|
||||
} elseif ( isset( $param['period'] ) ) {
|
||||
return [ 'before', $this->language->formatTimePeriod( $param['period'] ) ];
|
||||
return [ 'before', $this->getLanguage()->formatTimePeriod( $param['period'] ) ];
|
||||
} elseif ( isset( $param['size'] ) ) {
|
||||
return [ 'before', $this->language->formatSize( $param['size'] ) ];
|
||||
return [ 'before', $this->getLanguage()->formatSize( $param['size'] ) ];
|
||||
} elseif ( isset( $param['bitrate'] ) ) {
|
||||
return [ 'before', $this->language->formatBitrate( $param['bitrate'] ) ];
|
||||
return [ 'before', $this->getLanguage()->formatBitrate( $param['bitrate'] ) ];
|
||||
} elseif ( isset( $param['plaintext'] ) ) {
|
||||
return [ 'after', $this->formatPlaintext( $param['plaintext'] ) ];
|
||||
} else {
|
||||
|
|
@ -1108,7 +1105,7 @@ class Message implements MessageSpecifier, Serializable {
|
|||
$this->title,
|
||||
/*linestart*/true,
|
||||
$this->interface,
|
||||
$this->language
|
||||
$this->getLanguage()
|
||||
);
|
||||
|
||||
return $out instanceof ParserOutput ? $out->getText() : $out;
|
||||
|
|
@ -1127,7 +1124,7 @@ class Message implements MessageSpecifier, Serializable {
|
|||
return MessageCache::singleton()->transform(
|
||||
$string,
|
||||
$this->interface,
|
||||
$this->language,
|
||||
$this->getLanguage(),
|
||||
$this->title
|
||||
);
|
||||
}
|
||||
|
|
@ -1145,7 +1142,7 @@ class Message implements MessageSpecifier, Serializable {
|
|||
$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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue