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.