/**
* Transform a MessageSpecifier or a primitive value used interchangeably with
- * specifiers (a message key string, or a key + params array) into a proper Message
+ * specifiers (a message key string, or a key + params array) into a proper Message.
+ *
+ * Also accepts a MessageSpecifier inside an array: that's not considered a valid format
+ * but is an easy error to make due to how StatusValue stores messages internally.
+ * Further array elements are ignored in that case.
+ *
* @param string|array|MessageSpecifier $value
* @return Message
* @throws InvalidArgumentException
+ * @since 1.27
*/
public static function newFromSpecifier( $value ) {
+ $params = [];
+ if ( is_array( $value ) ) {
+ $params = $value;
+ $value = array_shift( $params );
+ }
+
if ( $value instanceof RawMessage ) {
$message = new RawMessage( $value->getKey(), $value->getParams() );
} elseif ( $value instanceof MessageSpecifier ) {
$message = new Message( $value );
- } elseif ( is_array( $value ) ) {
- $key = array_shift( $value );
- $message = new Message( $key, $value );
} elseif ( is_string( $value ) ) {
- $message = new Message( $value );
+ $message = new Message( $value, $params );
} else {
throw new InvalidArgumentException( __METHOD__ . ': invalid argument type '
. gettype( $value ) );
public function getTitle() {
global $wgContLang, $wgForceUIMsgAsContentMsg;
- $code = $this->getLanguage()->getCode();
$title = $this->key;
if (
- $wgContLang->getCode() !== $code
+ !$this->language->equals( $wgContLang )
&& in_array( $this->key, (array)$wgForceUIMsgAsContentMsg )
) {
+ $code = $this->language->getCode();
$title .= '/' . $code;
}