2009-08-23 4 views
3

나는 Pro Drupal Development, Second Edition을 읽고 있습니다. 다음이 필요하다고 말합니다 :Drupal 6 : t()에서 토큰을 사용하는 이유는 무엇입니까?

t("Your favorite color is !color", array('!color' => "$color")); 

그러나 그것은 또한! 자리 표시자는 문자열에서 변형이 수행되지 않음을 의미합니다. 그렇다면 왜 아닙니다 :

t("Your favorite color is $color"); 

감사합니다.

답변

12

t()는 동봉 된 문자열의 번역을 검색하는 데 사용됩니다. 해당 문자열 (예 : $ color)에 직접 변수 콘텐츠가있는 경우 발생하고 아직 번역되지 않은 새 콘텐츠에 대해서는 번역 조회가 실패합니다. 자리 표시자를 사용하면 번역사가 문자열의 고정 부분 만 번역 할 수 있으며 여전히 가변 내용을 주입 할 수 있습니다.

수정 기호 '!', '%', '@'는 에 대한 제어 권한을 어떻게 부여합니까? 삽입은 '!' 문자열이 그대로 삽입됩니다.

가장 확실한 예를 들어 숫자와 같습니다

당신이

t("Number $count"); 

이 있고 다른 번호로 여러 번 전화, 1,2,3 말한다면, 각 시간 t() 것 다른 문자열에 대한 다른 번역을 찾습니다

  1. 톤 ('숫자 1')
  2. 톤 ('번호 2') ('번호 3')

단지 하나 번역 찾는다 것이다

t('Number !count', array('!count' => $count); 

가진 반면

  • t 숫자 주입 '이므로 '그걸로!

    추가 이점은 번역자가 대상 언어의 용도에 맞는 다른 위치에 자리 표시자를 배치 할 수 있다는 것입니다. '! count whatever'를 번역 문자열로 사용하십시오. 위의 예와 함께,이 초래 물 :

    1. '1대로'
    2. '2대로'
    3. 3 '무엇'

    <em> 함께 자리를 둘러싸 것 '%'를 사용 태그를 강조 표시하려면 '@'은 check_plain()을 통해 실행하여 태그를 이스케이프 처리합니다.

  • 0

    t()의 첫 번째 인수는 리터럴 문자열입니다. t("Your favorite color is $color")과 같은 함수 호출은 함수에 리터럴 문자열을 전달하지 않으며 번역 할 문자열을 추출하는 스크립트는 변환 할 문자열을 추출 할 수 없습니다.실제로, 추출 스크립트는 "Your favorite color is $color" (변수가 문자열에서 대체되지 않았 음을 알리기 위해)을 추출하지만 런타임에 t()으로 전달되는 문자열은 아닙니다.