langCode = $langCode; } /** * Allow the Message class to be mocked in tests by constructing objects in * a protected method. * * @internal * @param string $key * @return Message */ protected function createMessage( $key ) { return new Message( $key ); } public function getLangCode() { return $this->langCode; } private static function convertParam( MessageParam $param ) { if ( $param instanceof ListParam ) { $convertedElements = []; foreach ( $param->getValue() as $element ) { $convertedElements[] = self::convertParam( $element ); } return Message::listParam( $convertedElements, $param->getListType() ); } elseif ( $param instanceof MessageParam ) { if ( $param->getType() === ParamType::TEXT ) { return $param->getValue(); } else { return [ $param->getType() => $param->getValue() ]; } } else { throw new \InvalidArgumentException( 'Invalid message parameter type' ); } } public function format( MessageValue $mv ) { $message = $this->createMessage( $mv->getKey() ); foreach ( $mv->getParams() as $param ) { $message->params( self::convertParam( $param ) ); } $message->inLanguage( $this->langCode ); return $message->text(); } }