2014-09-24 68 views
0

到目前为止,我没有任何问题本地化字符串与gettext,除非字符串包含变量。我遵循excellent tutorial的步骤,但每当我尝试将此应用于此函数时,我都遇到了麻烦。PHP:本地化包含变量的字符串

/** 
* @ http://us.php.net/manual/en/function.time.php#71342 
*/ 
function time_ago($timestamp, $recursive = 0) 
{ 
    $current_time = time(); 
    $difference = $current_time - $timestamp; 
    $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade"); 
    $lengths = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600); 
    for ($val = sizeof($lengths) - 1; ($val >= 0) && (($number = $difference/$lengths[$val]) <= 1); $val--); 
    if ($val < 0) $val = 0; 
    $new_time = $current_time - ($difference % $lengths[$val]); 
    $number = floor($number); 
    if($number != 1) 
    { 
     $periods[$val] .= "s"; 
    } 
    $text = sprintf(_("%d %s ago"), $number, $periods[$val]); 

    if (($recursive == 1) && ($val >= 1) && (($current_time - $new_time) > 0)) 
    { 
     $text .= time_ago($new_time); 
    } 
    return $text; 
} 

该情况,从我messages.po看看字符串:

msgid "%d second ago" 
msgid_plural "%d seconds ago" 
msgstr[0] "Vor einer Sekunde" 
msgstr[1] "Vor %d Sekunden"  

msgid "%d minute ago" 
msgid_plural "%d minutes ago" 
msgstr[0] "Vor einer Minute" 
msgstr[1] "Vor %d Minuten"  

msgid "%d hour ago" 
msgid_plural "%d hours ago" 
msgstr[0] "Vor einer Stunde" 
msgstr[1] "Vor %d Stunden" 

# and so forth… 

不幸的是,这些字符串没有得到翻译,而所有其他(不变量)很好地工作。我在这里做错了什么?

回答

0

我觉得你有一点点错字:

$text = sprintf(_("%d %s ago", $number, $periods[$val])); 

....应该是:

$text = sprintf(_("%d %s ago"), $number, $periods[$val]); 

否则你正在努力寻找在目录3 days ago


如果你有这样的:

msgid "%d %s ago" 

你似乎已经分手,在三个不同的字符串,其(来源:

_("%d %s ago") 

...字符串ID必须完全相匹配的gettext的观点)与此无关:

msgid "%d second ago" 
msgid "%d minute ago" 
msgid "%d hour ago" 

为了能够使用那些你需要的是确切的文本传递给_()编号:

sprintf(_(sprintf('%%d %s ago', $periods[$val])), $number) 
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
      // This itself prints: %d days ago 

小疑难杂症,但:使用变量,如果您发出呼叫_(),您将无法更新目录自动,你必须手动添加和删除字符串。

+0

这是我为这个问题写下来的一个错字。仍然没有翻译。 – idleberg 2014-09-24 16:06:18