2014-09-24 2 views
0

문자열이 변수를 포함하지 않는 한 지금까지는 gettext으로 문자열을 지역화하는 데 문제가 없었습니다. 이 excellent tutorial의 단계를 따랐지만이 함수에이 함수를 적용하려고 할 때마다 문제가 발생합니다. 이처럼 내 messages.po 모습에서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; 
} 

문자열 :

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… 

불행히도, 이러한 문자열은 다른 모든 반면 (변수없이), 번역되지 않는 완벽하게 작동합니다. 여기서 내가 뭘 잘못하고 있니?

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

가 ....해야한다 :

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

그렇지 않으면 카탈로그에 3 days ago을 찾기 위해 노력하고있다

답변

0

나는 조금 오타가 있다고 생각.


당신이있는 경우이 : 당신은 표시

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 

약간 잡았다을 :

_()에 정확히 일치하는 텍스트를 전달해야하는 ID를 사용할 수 있도록 자동으로 문자열을 추가하거나 제거해야합니다.

+0

이 질문을 위해이 글을 쓰는 동안 저도 오타였습니다. 아직 번역되지 않았습니다. – idleberg

관련 문제