gettext 구문의 요점은 무엇입니까?
-
-
정교하게 답변 해주신 모든 분들께 감사드립니다!여기에 정말 감사합니다!Thank all of you for your elaborate answers! I really appreciate this here!
- 0
- 2012-07-09
- Circuit Circus
-
... 이에 대한 또 다른 질문이있을 수 있습니다. 텍스트 도메인의 항목을 생략 할 수 있습니까?나는 번역하고 싶은 모든 문자열에 그것을 가져 오기 시작했지만 전혀 포함하지 않는 Wordpress 코덱의 몇 가지 예를 인식했습니다....Maybe one further question to this: Can the entry of the text-domain be left out? I upright started bring it to every string I wanted to translate but then recognized some examples in the Wordpress codex which don't contain it at all...
- 0
- 2012-07-09
- Circuit Circus
-
... 좋아,이제 나는이 코덱스 페이지에서 그것을 보았습니다-이 중복 질문에 대해 죄송합니다 :-)... Okay, now I came across it in this codex page - sorry for this redundant question :-)
- 0
- 2012-07-09
- Circuit Circus
-
3 대답
- 투표
-
- 2012-07-07
__
(이중 밑줄)은 기본 번역 함수입니다. 문자열을 번역하여 문자열로 반환합니다._e
는__
와 동일하지만 결과는 즉시echo됩니다._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_i18n
은 PHP의 기본 제공 number_format 과 동일합니다. 하지만 다른 로케일에서는 다른 소수 등의 처리에 추가됩니다.date_i18n
은 PHP의 기본 제공 날짜 와 같습니다.,거기에 모든 관련 처리와 함께. 월 이름,요일 이름 등또한 법을 위반하지 마십시오 . 알림입니다. :)
__
(double underscore) is the base translate function. It translates a string and returns it as a string._e
does the same as__
, but echo's the result immediately._x
is the contextual translate function. It has a second option to provide context to people doing the translation._ex
is the same as_x
, but echo's the result.Example of using
_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' );
Sometimes the same string can be different in other languages. Providing context to the translators can help them pick the right words.
Shortcut functions:
esc_attr__
: Equivalent to__
but also runs the result throughesc_attr
.esc_html__
: Equivalent to__
but also runs the result throughesc_html
.esc_attr_e
: Equivalent to_e
but also runs the result throughesc_attr
.esc_html_e
: Equivalent to_e
but also runs the result throughesc_html
.esc_attr_x
: Equivalent to_x
but also runs the result throughesc_attr
.esc_html_x
: Equivalent to_x
but also runs the result throughesc_html
.
_n
is the pluralization handler. Example:$string = sprintf( _n( 'You have %d taco.', 'You have %d tacos.', $number, 'plugin-domain'), $number );
In that example, there's two ways to say the number of tacos, depending on if it's singular or not. The first use of $number tells the
_n
function which version to use. The second use of $number happens in the sprintf, to replace the %d with the actual number in the string.There is no echo function equivalent for
_n
, but there is a function named_nx
. It's a combination of_n
and_x
. Pluralization and context._n_noop
is a special one. It's used for translating pluralized strings, but not actually performing the translation immediately. This is useful if you want to make the strings centralized but actually do the work elsewhere. The function that actually does the work elsewhere istranslate_nooped_plural
.Example:
$holder = _n_noop('You have %d taco.', 'You have %d tacos.', 'plugin-domain'); // ... later ... $string = sprintf( translate_nooped_plural( $holder, $count ), $count );
This isn't used much, but can be handy for organization. If you put all your strings in one file, for example, then reference them elsewhere, this wouldn't be possible with just
_n
, you need something like_n_noop
to do that._nx_noop
is the same as_n_noop
, but also can take a context for the translators, same as_x
.Note that you can put the domain into either the noop function call, or into the translate_nooped_plural function call. Whichever makes more sense for your organization. If both have a domain, then the one passed to the noop call wins.
number_format_i18n
is the equivalent to PHP's built-in number_format, but it adds in the handling for things like decimals and so on, which are different in other locales.date_i18n
is the equivalent to PHP's built-in date, with all the pertinent handling there as well. Month names, day names, etc.Also, never break the laws. Just a reminder. :)
-
와,정말 좋은 설명 이네요!도와 주셔서 대단히 감사합니다!이제 명확 해집니다.Wow, this is really a good explanation of it! Thank you very much for helping! Now I see clear.
- 0
- 2012-07-09
- Circuit Circus
-
- 2012-07-07
__ (),_e () 및 _x (),_ex ()
__()
및_e()
는 본질적으로 둘 다translate()
(직접 사용하지 마십시오) 거의 동일합니다.차이점은
__()
가 번역 된 문자열과_e()
가이를 반향합니다. 둘 다 필수 매개 변수로 문자열을 제공해야하며 일반적으로 선택 사항이지만 텍스트 도메인도 제공해야합니다.동시에
_x()
및_ex()
: 문자열이 표시되는 위치를 설명 할 수있는 컨텍스트를 지정할 수 있습니다. 프로젝트에 번역 가능한 문자열이 수십 개 이상 포함 된 경우 컨텍스트를 사용하는 것이 좋습니다.또한
_n()
및 < 복수형의 경우 a href="http://codex.wordpress.org/Function_Reference/_nx"rel="nofollow">_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에 대한 추가 리소스 :
- WordPress 번역
- WordPress 개발자를위한 I18n
- 현지화 기능 참조 개요
- 코드 스타일 현지화 (환상적인 플러그인!)
- Poedit
__(), _e() and _x(), _ex()
__()
and_e()
are essentially both a wrapper oftranslate()
(do not use directly) and almost the same.The difference lies in that
__()
returns the translated string and_e()
echoes it. Both need to be fed a string as a required parameter and usually, though optional, also a textdomain.Analogously, there's
_x()
and_ex()
, which let you specify a context that can describe where the string appears. If your project includes more than a few tens of translatable strings, using context makes a lot of sense.Also, note the existence of
_n()
and_nx()
for plurals.Example of common usage
$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;
Parameters
__( $text, $domain ) _e( $text, $domain ) _x( $text, $context, $domain ) _ex( $text, $context, $domain ) _n( $single, $plural, $number $domain ) _nx( $single, $plural, $number, $context, $domain )
All parameters but
$number
are strings. All but$domain
are required.Further flexibility with variables and sprintf()
If your strings will contain variable numbers or words, use
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;
Additional resources
Some additional resources for the upcoming WordPress I18n Ninja:
-
또한 전체 기능 및 자세한 설명은 코덱스의 "기타"에서 [ "현지화"] (http://codex.wordpress.org/Function_Reference/#Miscellaneous_Functions)를 확인하십시오.Also check out ["Localization" under "Miscellaneous" in the codex](http://codex.wordpress.org/Function_Reference/#Miscellaneous_Functions) for a complete breakdown of functions & detailed explanations.
- 0
- 2012-07-07
- TheDeadMedic
-
& 이곳은 [wp-polyglots가 만나는 곳] (http://wppolyglots.wordpress.com/)입니다.& this is the place [where wp-polyglots meet](http://wppolyglots.wordpress.com/).
- 0
- 2012-07-07
- brasofilo
-
@Johannes Pille : 내 게시물을 올릴 때까지 답변을 알지 못했습니다. 게시물을 삭제해야합니까?@Johannes Pille: I didn't notice your answer until I'd posted mine, should I delete my post?
- 0
- 2012-07-07
- Jeremy Jared
-
@JeremyJared 아니,왜?추가 정보는 나쁘지 않을 수 있습니다.나는 당신의 대답이 잘 생각되었다고 생각합니다.나에게서 +1.@JeremyJared No, why? Further info can't be a bad thing, can it?! I think your answer is well thought through. +1 from me.
- 0
- 2012-07-07
- Johannes Pille
-
@TheDeadMedic "추가 리소스"로 편집.@TheDeadMedic Edited into "additional resources".
- 0
- 2012-07-07
- Johannes Pille
-
- 2012-07-07
저는 번역 전문가는 아니지만 WordPress Codex Page에는 좋은 문서가 있으며 각 인스턴스를 사용하는 이유를 설명합니다.
코덱스 페이지에서 :
__()
메시지가 다른 함수에 인수로 전달 될 때 사용됩니다.
_e()
는 메시지를 페이지에 직접 쓰는 데 사용됩니다. 이 두 기능에 대한 자세한 내용 :__('message')
지역화 모듈에서 '메시지'번역을 검색하고 번역을 PHP return 문에 전달합니다. '메시지'에 대한 번역이 없으면 '메시지'만 반환됩니다.
_e('message')
로컬라이제이션 모듈에서 '메시지'번역을 검색하고 번역을 PHPecho 문에 전달합니다. '메시지'에 대한 번역이 없으면 '메시지'만 표시됩니다.
테마 또는 플러그인을 국제화하는 경우
"Text Domain"
을 사용해야합니다.gettext 프레임 워크는 대부분의 WordPress를 처리합니다. 그러나 WordPress 배포에는gettext를 사용할 수없는 몇 군데가 있습니다.
- 기본 WordPress README 파일-PHP 파일이 아닌 정적 HTML 파일이므로gettext 함수를 통해 실행할 수 없습니다.
- gettext가로드되기 전 WordPress로드주기 초기에 몇 가지 오류 메시지가 생성됩니다.
그것이 귀하의 질문에 대한 답이되기를 바랍니다. 알려주지 않으면 다른 사람이 도움을 줄 수 있거나 추가 조사를 할 수 있습니다.
I'm not an expert on translations, but the WordPress Codex Page has good documentation and explains the reason to use each instance.
From the codex pages:
__()
Is used when the message is passed as an argument to another function;
_e()
is used to write the message directly to the page. More detail on these two functions:__('message')
Searches the localization module for the translation of 'message', and passes the translation to the PHP return statement. If no translation is found for 'message', it just returns 'message'.
_e('message')
Searches the localization module for the translation of 'message', and passes the translation to the PHP echo statement. If no translation is found for 'message', it just echoes 'message'.
Note that if you are internationalizing a Theme or Plugin, you should use a
"Text Domain"
.The gettext framework takes care of most of WordPress. However, there are a few places in the WordPress distribution where gettext cannot be used:
- The main WordPress README file -- it's a static HTML file, not a PHP file, so it cannot be run through the gettext functions.
- A few error messages are generated very early in the WordPress loading cycle, before gettext is loaded.
Additional info regarding when gettext doesn't work
Hopefully that answers your question, if not let us know and maybe someone else can help or I can do some more research.
지금까지 Wordpress에서 일부 번역을 처리하고 있으며 공식gettext 문서를 읽으려고했지만 한 가지 간단한 점은 이해하지 못합니다. __ (,_e (등)와 같은 시작의 차이점은 무엇입니까?? 그리고 더 많은 것 : 옆에 어떤 다른 사람이 있습니까? 미리 감사드립니다!
프랭크