I haven't checked if there are other places whereh context is set to Message class, but if there are they might need a fix too.
* ->plain();
* @endcode
*
* ->plain();
* @endcode
*
- * @note You cannot parse the text except in the content or interface
- * @note languages
+ * @note You can parse the text only in the content or interface languages
*
* @section message_compare_old Comparison with old wfMsg* functions:
*
*
* @section message_compare_old Comparison with old wfMsg* functions:
*
+ /**
+ * Allows manipulating the interface message flag directly.
+ * Can be used to restore the flag after setting a language.
+ * @param $value bool
+ * @return Message: $this
+ * @since 1.20
+ */
+ public function setInterfaceMessageFlag( $value ) {
+ $this->interface = (bool) $value;
+ return $this;
+ }
+
/**
* Enable or disable database use.
* @param $value Boolean
/**
* Enable or disable database use.
* @param $value Boolean
// Works fine as the first parameter, which appears elsewhere in the
// code base. Sighhhh.
$args = func_get_args();
// Works fine as the first parameter, which appears elsewhere in the
// code base. Sighhhh.
$args = func_get_args();
- return call_user_func_array( array( $this->getContext(), 'msg' ), $args );
+ $message = call_user_func_array( array( $this->getContext(), 'msg' ), $args );
+ // RequestContext passes context to wfMessage, and the language is set from
+ // the context, but setting the language for Message class removes the
+ // interface message status, which breaks for example usernameless gender
+ // invokations. Restore the flag when not including special page in content.
+ if ( !$this->including() ) {
+ $message->setInterfaceMessageFlag( true );
+ }
+ return $message;