gettext 구문의 요점은 무엇입니까?


9

지금까지 Wordpress에서 일부 번역을 처리하고 공식 gettext 설명서를 읽으려고했지만 한 가지 간단한 점은 얻지 못합니다. __ (, _e (등)와 같은 시작 부분의 차이점은 무엇입니까? 더 : 옆에 다른 사람이 있습니까? 미리 감사합니다!

솔직한


정교한 답변에 감사드립니다. 나는 이것을 정말로 감사합니다!
서커스 서커스

... 이것에 대한 또 다른 질문 일 수 있습니다 : 텍스트 도메인 입력을 생략 할 수 있습니까? 나는 그것을 번역하고 싶은 모든 문자열로 가져 오기 시작했지만 전혀 포함하지 않은 Wordpress 코덱의 일부 예를 인식했습니다 ...
Circuit Circus

... 좋아, 이제이 코덱스 페이지 에서이 문제를 발견했습니다.이 중복 질문에 대해 죄송합니다 :-)
Circuit Circus

답변:


13

__(이중 밑줄)은 기본 변환 기능입니다. 문자열을 번역하여 문자열로 반환합니다.

_e와 동일 __하지만 결과는 바로 에코입니다.

_x상황에 맞는 번역 함수입니다. 번역을하는 사람들에게 컨텍스트를 제공하는 두 번째 옵션이 있습니다.

_ex와 동일 _x하지만 결과는 echo입니다.

사용 예 _x:

$string = _x( 'Buffalo', 'an animal', 'plugin-domain' );
$string = _x( 'Buffalo', 'a city in New York', 'plugin-domain' );
$string = _x( 'Buffalo', 'a verb meaning to confuse somebody', 'plugin-domain' );

다른 언어에서는 동일한 문자열이 다를 수 있습니다. 번역가에게 문맥을 제공하면 올바른 단어를 선택하는 데 도움이 될 수 있습니다.

바로 가기 기능 :

  • esc_attr__: __결과 와 동일 하지만 결과를 실행합니다 esc_attr.
  • esc_html__: __결과 와 동일 하지만 결과를 실행합니다 esc_html.
  • esc_attr_e: _e결과 와 동일 하지만 결과를 실행합니다 esc_attr.
  • esc_html_e: _e결과 와 동일 하지만 결과를 실행합니다 esc_html.
  • esc_attr_x: _x결과 와 동일 하지만 결과를 실행합니다 esc_attr.
  • esc_html_x: _x결과 와 동일 하지만 결과를 실행합니다 esc_html.

_n복수 처리기입니다. 예:

$string = sprintf( _n(
        'You have %d taco.', 
        'You have %d tacos.', 
        $number, 
        'plugin-domain'), 
    $number );

이 예에서는 단수인지 아닌지에 따라 타코 수를 말하는 두 가지 방법이 있습니다. $ number를 처음 사용 _n하면 사용할 버전을 함수에 알려줍니다 . 두 번째 $ number는 sprintf에서 발생하여 % d를 문자열의 실제 숫자로 바꿉니다.

에 해당하는 에코 함수는 없지만 _n이름이 지정된 함수가 _nx있습니다. 이 조합의 _n_x. 복수와 맥락.

_n_noop특별한 것입니다. 복수 문자열을 번역하는 데 사용되지만 실제로 번역을 즉시 수행하지는 않습니다. 이것은 문자열을 중앙 집중화하지만 실제로 다른 곳에서 작업을 수행하려는 경우에 유용합니다. 실제로 다른 곳에서 작업을 수행하는 기능은 translate_nooped_plural입니다.

예:

$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain');
// ... later ...
$string = sprintf( translate_nooped_plural( $holder, $count ), $count );

많이 사용되지는 않지만 조직에 유용 할 수 있습니다. 당신은 하나 개의 파일에 모든 문자열을 넣을 경우, 예를 들어, 다음이 바로 가능하지 않을 것, 다른 곳을 참조 _n, 당신은 같은 것을 필요로 _n_noop하는 작업을 수행하는합니다.

_nx_noop와 동일 _n_noop하지만 번역자와 동일한 문맥을 취할 수 있습니다 _x.

도메인을 noop 함수 호출 또는 translate_nooped_plural 함수 호출에 넣을 수 있습니다. 조직에 더 적합한 방법이 있습니다. 둘 다 도메인이 있으면 noop 호출에 전달 된 도메인이 우선합니다.

number_format_i18nPHP의 내장 number_format 과 동일하지만 다른 로케일과는 다른 소수 등의 처리를 추가합니다.

date_i18n는 PHP의 내장 날짜 와 동일하며 모든 관련 처리도 수행합니다. 월 이름, 요일 이름 등

또한 법을 어 기지 마십시오 . 단지 알림입니다. :)


와우, 이것은 정말 좋은 설명입니다! 도와 주셔서 감사합니다! 이제는 분명합니다.
서커스 서커스

6

__ (), _e () 및 _x (), _ex ()

__()하고 _e()있습니다 본질적으로 모두의 래퍼 translate()(직접 사용하지 않음)과 거의 같은.

차이점은 __()변환 된 문자열 을 반환하고 _e()에코한다는 점입니다. 둘 다 문자열을 필수 매개 변수로 제공해야하며 일반적으로 선택 사항이지만 텍스트 도메인도 제공해야합니다.

유사하게, 거기에 _x()그리고 _ex()당신이 문자열이 표시되는 위치를 설명 할 수있는 컨텍스트를 지정할 수있는. 프로젝트에 번역 가능한 문자열이 수십 개가 넘는 경우 컨텍스트를 사용하는 것이 좋습니다.

또한 복수형 의 존재 _n()_nx()복수형에 주목하십시오 .

일반적인 사용법의 예

$output = '<label for="some_field">' .
        _x( 'Some Information.', 'Some Form Field', 'your-text-domain' ) .
    '</label>' .
    '<input type="text" name="some_field" value="" />' .
    '<p class="description">' .
        _x( 'Here you can enter some info.', 'Some Form Field', 'your-text-domain' ) .
    '</p>';

return $output;

매개 변수

__( $text, $domain )
_e( $text, $domain )
_x( $text, $context, $domain )
_ex( $text, $context, $domain )
_n( $single, $plural, $number $domain )
_nx( $single, $plural, $number, $context, $domain )

모든 매개 변수이지만 $number문자열입니다. 모든하지만 $domain필요합니다.

변수 및 sprintf ()를 통한 추가 유연성

문자열에 변수 번호 나 단어가 포함되어 있으면 다음을 사용하십시오 sprintf().

$stars = get_post_meta( $post->ID, 'rating', true );
$title = get_the_title( $post->ID );

$output = '<p>' .
        sprintf(
            _x(
                'The movie titled %2$s received a %1$d star rating.',
                'Movie Description',
                'your-text-domain'
            ),
            $stars,
            $title
        ) .
    '</p>';

return $output;

추가 자료

다가오는 WordPress I18n Ninja에 대한 추가 자료 :


기능에 대한 자세한 설명과 자세한 설명 은 코덱의 "기타"에서 "현지화"를 확인하십시오 .
TheDeadMedic


@Johannes Pille : 게시물을 게시 할 때까지 답을 알지 못했습니다. 게시물을 삭제해야합니까?
제레미 자레드

아니, 왜? 더 많은 정보는 나쁜 일이 될 수 없습니다. 나는 당신의 대답이 잘 생각된다고 생각합니다. 나에게서 +1
Johannes Pille

@TheDeadMedic "추가 리소스"로 편집되었습니다.
Johannes Pille

3

나는 번역 전문가가 아니지만 WordPress Codex Page에 좋은 문서가 있으며 각 인스턴스를 사용해야하는 이유를 설명합니다.

코덱스 페이지에서 :

__()

메시지가 다른 함수에 대한 인수로 전달 될 때 사용됩니다. _e()메시지를 페이지에 직접 쓰는 데 사용됩니다. 이 두 기능에 대한 자세한 내용 :

__('message')

현지화 모듈에서 'message'의 번역을 검색하고 번역을 PHP return 문으로 전달합니다. 'message'에 대한 번역이 없으면 'message'만 반환합니다.

_e('message')

현지화 모듈에서 'message'의 번역을 검색하고 번역을 PHP echo 문으로 전달합니다. 'message'에 대한 번역이 없으면 'message'만 에코합니다.

테마 또는 플러그인을 국제화하는 경우을 사용해야합니다 "Text Domain" .

gettext 프레임 워크는 대부분의 WordPress를 처리합니다. 그러나 WordPress 배포에는 gettext를 사용할 수없는 곳이 몇 군데 있습니다.

  • 주요 WordPress README 파일-PHP 파일이 아닌 정적 HTML 파일이므로 gettext 함수를 통해 실행할 수 없습니다.
  • gettext가로드되기 전에 WordPress로드주기 초기에 몇 가지 오류 메시지가 생성됩니다.

코덱스 페이지로 연결

gettext가 작동하지 않는 경우에 대한 추가 정보

우리에게 알려주지 않고 다른 사람이 도울 수 있거나 더 많은 연구를 할 수 있다면 귀하의 질문에 대답하기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.