1

我有以下短语并想翻译它。

$lifeTime = 'Expires in '.$days.($days == 1 ? ' day ':' days ' ).$h.(($h == 1 ? ' hour ':' hours ' ));

我的问题是:我需要拆分短语,翻译分开并将它们连接起来吗?有没有办法__n()在一个短语上接受多个单数/复数“实例”以及它们各自的计数?

有点混乱。一个清楚的例子:

__('I have %s eggs and %s milk boxes', $eggs, $milk)

这不会有单数和复数形式。我可以让它翻译整个短语而不必将其拆分为两个__n()函数调用吗?

4

1 回答 1

0

如果您事先知道字符串中可能包含哪些单词,则可以执行以下操作:

// the preperation/setup
$translations = Array();
$translations['hours']['search'] = "%hour";
$translations['hours']['inflections'] = Array("hour", "hours");

$translations['milk']['search'] = "%milk";
$translations['milk']['inflections'] = Array("milk bottle", "bottles of milk");
// add what else you might need

function replaceWithPlurals($heystack, $translations) {
  foreach ($translations as $key => $vals) {
    $heystack = str_replace($vals['search'], $vals['cnt']." ".$vals['inflections'][usePlural($vals['cnt'])], $heystack);      
  }
  return $heystack;
}

function usePlural($cnt) {
  if($cnt==1) return 0;
  else return 1;
}


// dynamic vars
$heystack = "I drank %milk in %hour";
$hours = 1;
$milk = 2;
$translations['hours']['cnt'] = $hours;
$translations['milk']['cnt'] = $milk;

// the actual usage
echo replaceWithPlurals($heystack, $translations);

总的来说,如果您只需要 4 个特定的场合,那就需要做很多准备工作。但如果你经常使用它,我希望这会有所帮助。

于 2015-05-02T00:19:04.190 回答