mpe*_*pen 31
您可以尝试我写的这个功能:
/**
* Pluralizes a word if quantity is not one.
*
* @param int $quantity Number of items
* @param string $singular Singular form of word
* @param string $plural Plural form of word; function will attempt to deduce plural form from singular if not provided
* @return string Pluralized word if quantity is not one, otherwise singular
*/
public static function pluralize($quantity, $singular, $plural=null) {
if($quantity==1 || !strlen($singular)) return $singular;
if($plural!==null) return $plural;
$last_letter = strtolower($singular[strlen($singular)-1]);
switch($last_letter) {
case 'y':
return substr($singular,0,-1).'ies';
case 's':
return $singular.'es';
default:
return $singular.'s';
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
pluralize(4, 'cat'); // cats
pluralize(3, 'kitty'); // kitties
pluralize(2, 'octopus', 'octopii'); // octopii
pluralize(1, 'mouse', 'mice'); // mouse
Run Code Online (Sandbox Code Playgroud)
显然有很多特殊的单词,这个函数不能正确复数,但这就是$plural争论的主题:-)
看看维基百科,看看多元化是多么复杂!
小智 25
您可能希望查看gettext扩展.更具体地说,它听起来会像ngettext()你想要的那样:只要你有一个可以计数的数字,它就能正确地复数单词.
print ngettext('odor', 'odors', 1); // prints "odor"
print ngettext('odor', 'odors', 4); // prints "odors"
print ngettext('%d cat', '%d cats', 4); // prints "4 cats"
Run Code Online (Sandbox Code Playgroud)
你也可以正确地处理翻译过的复数形式,这是它的主要目的,尽管还有很多额外的工作要做.
IMO的最佳方法是为每种语言提供所有复数规则的数组,即为array('man'=>'men', 'woman'=>'women');每个单数字写一个pluralize()函数.
您可能需要查看CakePHP变换器以获得一些灵感.
https://github.com/cakephp/cakephp/blob/master/src/Utility/Inflector.php