正确的示例应该是转置模式 2 中的占位符。
这在将消息从一种语言转换为另一种语言时,单词顺序发生变化以产生合理的翻译的情况下很常见。
让我们假设它被本地化为西班牙语或俄语而不是英语。
所以实际上您希望您的译者提供的模式 2 如下所示
新模式:'{1,number} trees hosting {0,number} monkeys'
格式化后的数字:456 trees hosting 123 monkeys
也就是说,参数的顺序始终相同,但您翻译的消息内容对于非英语语言的占位符进行了转置。
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
MessageFormatter::setPattern -- msgfmt_set_pattern — 设置格式化程序使用的模式
面向对象风格
过程化风格
设置格式化程序使用的模式
示例 #1 msgfmt_set_pattern() 示例
<?php
$fmt = msgfmt_create( "en_US", "{0, number} monkeys on {1, number} trees" );
echo "Default pattern: '" . msgfmt_get_pattern( $fmt ) . "'\n";
echo "Formatting result: " . msgfmt_format( $fmt, array(123, 456) ) . "\n";
msgfmt_set_pattern( $fmt, "{0, number} trees hosting {1, number} monkeys" );
echo "New pattern: '" . msgfmt_get_pattern( $fmt ) . "'\n";
echo "Formatted number: " . msgfmt_format( $fmt, array(123, 456) ) . "\n";
?>
示例 #2 OO 示例
<?php
$fmt = new MessageFormatter( "en_US", "{0, number} monkeys on {1, number} trees" );
echo "Default pattern: '" . $fmt->getPattern() . "'\n";
echo "Formatting result: " . $fmt->format(array(123, 456)) . "\n";
$fmt->setPattern("{0, number} trees hosting {1, number} monkeys" );
echo "New pattern: '" . $fmt->getPattern() . "'\n";
echo "Formatted number: " . $fmt->format(array(123, 456)) . "\n";
?>
以上示例将输出
Default pattern: '{0,number} monkeys on {1,number} trees' Formatting result: 123 monkeys on 456 trees New pattern: '{0,number} trees hosting {1,number} monkeys' Formatted number: 123 trees hosting 456 monkeys
正确的示例应该是转置模式 2 中的占位符。
这在将消息从一种语言转换为另一种语言时,单词顺序发生变化以产生合理的翻译的情况下很常见。
让我们假设它被本地化为西班牙语或俄语而不是英语。
所以实际上您希望您的译者提供的模式 2 如下所示
新模式:'{1,number} trees hosting {0,number} monkeys'
格式化后的数字:456 trees hosting 123 monkeys
也就是说,参数的顺序始终相同,但您翻译的消息内容对于非英语语言的占位符进行了转置。