我想翻译通用短语“quot;x小时和y分钟;。当然,如果只有一个小时,它应该说;1小时和y分钟;。分钟也是如此;x小时1分钟"E;我知道_n()
处理单数/复数问题,但在一个短语中处理两个数字的最佳做法是什么?
Method 1
printf(_n("%d hour", "%d hours", $hours), $hours);
_e(" and ");
printf(_n("%d minute", "%d minutes", $mins), $mins);
可以,但串联字符串会使翻译变得不灵活。我希望不是所有的语言都能与;[小时短语][和短语][分钟短语]”;。
Method 2
printf(
"%s and %s",
sprintf(_n("%d hour", "%d hours", $hours), $hours),
sprintf(_n("%d minute", "%d minutes", $mins), $mins)
);
这似乎是对的,但似乎没有上下文就很难翻译。也许我需要添加上下文
_x()
?
我采用的解决方案是:
一些更具可读性的东西@toscho
function nice_time($minutes) {
$hours = floor($minutes/60);
$minutes = $minutes % 60;
if ($hours == 0 && $minutes == 0) {
return __("no length of time", \'context\');
} else if ($hours == 0 && $minutes == 1) {
return __("1 minute", \'context\');
} else if ($hours == 1 && $minutes == 0) {
return __("1 hour", \'context\');
} else if ($hours == 1 && $minutes == 1) {
return __("1 hour and 1 minute", \'context\');
} else if ($hours == 0) {
return sprintf(__("%d minutes", \'context\'), $minutes);
} else if ($minutes == 0) {
return sprintf(__("%d hours", \'context\'), $hours);
} else if ($hours == 1) {
return sprintf(__("1 hours and %d minutes", \'context\'), $minutes);
} else if ($minutes == 1) {
return sprintf(__("%d hours and 1 minutes", \'context\'), $hours);
} else {
return sprintf(__("%d hours and %d minutes", \'context\'), $hours, $minutes);
}
}