我该怎么翻译:“2小时15分钟”?

时间:2012-02-06 作者:Matt

我想翻译通用短语“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);
    }
}

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

我会选择可读性,并使用一个相当详细的解决方案:

if ( 1 == $hours and 1 == $mins )
{
    _e( \'One hour and one minute\', \'your_text_domain\' );
}
elseif ( 1 == $hours )
{
    printf( __( \'One hour and %d minutes\', \'your_text_domain\' ), $mins );
}
elseif ( 1 == $mins )
{
    printf( __( \'%d hours and one minute\', \'your_text_domain\' ), $hours );
}
else
{
    printf( __( \'%d hours and %d minutes\', \'your_text_domain\' ), $hours, $mins );
}

结束

相关推荐

L10n.js在WordPress 3.1中做什么?那我怎么移除它呢?

我刚刚在测试服务器上安装了WP 3.1 Beta 2。我注意到它带有一个新的l10n.js 自动插入到标头中的文件。我做了一些挖掘,这与本地化有关。我猜很多人不使用这个,所以我想知道如何删除它?如果重要的是不要删除它,请让我也知道。