return $this->langCode;
}
- private static function convertParam( MessageParam $param ) {
+ private function convertParam( MessageParam $param ) {
if ( $param instanceof ListParam ) {
$convertedElements = [];
foreach ( $param->getValue() as $element ) {
- $convertedElements[] = self::convertParam( $element );
+ $convertedElements[] = $this->convertParam( $element );
}
return Message::listParam( $convertedElements, $param->getListType() );
} elseif ( $param instanceof MessageParam ) {
+ $value = $param->getValue();
+ if ( $value instanceof MessageValue ) {
+ $mv = $value;
+ $value = $this->createMessage( $mv->getKey() );
+ foreach ( $mv->getParams() as $mvParam ) {
+ $value->params( $this->convertParam( $mvParam ) );
+ }
+ }
+
if ( $param->getType() === ParamType::TEXT ) {
- return $param->getValue();
+ return $value;
} else {
- return [ $param->getType() => $param->getValue() ];
+ return [ $param->getType() => $value ];
}
} 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->params( $this->convertParam( $param ) );
}
$message->inLanguage( $this->langCode );
return $message->text();
foreach ( $elements as $element ) {
if ( $element instanceof MessageParam ) {
$this->value[] = $element;
- } elseif ( is_scalar( $element ) ) {
+ } elseif ( is_scalar( $element ) || $element instanceof MessageValue ) {
$this->value[] = new ScalarParam( ParamType::TEXT, $element );
} else {
throw new \InvalidArgumentException(
$result = $formatter->format( $mv );
$this->assertSame( 'test a, 100 bps $2', $result );
}
+
+ public function testFormatMessage() {
+ $formatter = $this->createTextFormatter( 'en' );
+ $mv = ( new MessageValue( 'test' ) )
+ ->params( new MessageValue( 'test2', [ 'a', 'b' ] ) )
+ ->commaListParams( [
+ 'x',
+ new ScalarParam( ParamType::BITRATE, 100 ),
+ new MessageValue( 'test3', [ 'c', new MessageValue( 'test4', [ 'd', 'e' ] ) ] )
+ ] );
+ $result = $formatter->format( $mv );
+ $this->assertSame( 'test test2 a b x, 100 bps, test3 c test4 d e', $result );
+ }
}
class FakeMessage extends Message {