これまでのところ、Wordpressでいくつかの翻訳を処理していて、公式のgettextドキュメントを読み込もうとしましたが、1つの多分単純なことのポイントを取得できません。詳細:他にはどのようなものがありますか?よろしくお願いします!
フランク
これまでのところ、Wordpressでいくつかの翻訳を処理していて、公式のgettextドキュメントを読み込もうとしましたが、1つの多分単純なことのポイントを取得できません。詳細:他にはどのようなものがありますか?よろしくお願いします!
フランク
回答:
__(二重下線)は、基本変換関数です。文字列を変換し、文字列として返します。
_eと同じです__が、結果はすぐにエコーされます。
_xコンテキスト翻訳機能です。翻訳を行う人々にコンテキストを提供する2つ目のオプションがあります。
_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 );
その例では、タコスの数が単数かどうかに応じて、2つの言い方があります。$ numberの最初の使用は_n、使用するバージョンを関数に通知します。$ numberの2番目の使用は、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 );
これはあまり使用されませんが、組織にとっては便利です。たとえば、すべての文字列を1つのファイルに入れてから、他の場所でそれらを参照する場合、これはだけ_nでは不可能_n_noopです。これを行うようなものが必要です。
_nx_noopはと同じですが、と同じよう_n_noopに、翻訳者のコンテキストも使用できます_x。
ドメインをnoop関数呼び出しまたはtranslate_nooped_plural関数呼び出しのいずれかに配置できることに注意してください。どちらが組織にとって意味があるか。両方にドメインがある場合、noop呼び出しに渡された方が優先されます。
number_format_i18nPHPの組み込みのnumber_formatと同等ですが、他のロケールとは異なる、10進数などの処理が追加されます。
date_i18nPHPの組み込み日付と同等であり、関連するすべての処理も行われます。月名、曜日名など
また、法律に違反しないでください。ただのリマインダーです。:)
__()と_e()本質的に両方のラッパーtranslate()(直接使用しないでください)とほとんど同じです。
違いは__()、翻訳された文字列を返し、_e()それをエコーすることです。どちらも必須パラメータとして文字列を入力する必要があり、通常はオプションですが、textdomainも指定します。
同様に、_x()および_ex()があります。これにより、文字列が表示される場所を説明できるコンテキストを指定できます。プロジェクトに数十を超える翻訳可能な文字列が含まれている場合、コンテキストを使用することは非常に理にかなっています。
$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()。
$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忍者向けの追加リソース:
私は翻訳の専門家ではありませんが、WordPress Codexページには優れたドキュメントがあり、各インスタンスを使用する理由を説明しています。
コーデックスのページから:
__() 
メッセージが引数として別の関数に渡されるときに使用されます。_e()メッセージをページに直接書き込むために使用されます。これら2つの関数の詳細:
__('message') 
ローカリゼーションモジュールで「メッセージ」の翻訳を検索し、その翻訳をPHPのreturnステートメントに渡します。「メッセージ」の翻訳が見つからない場合は、「メッセージ」を返すだけです。
_e('message') 
ローカリゼーションモジュールで「メッセージ」の翻訳を検索し、その翻訳をPHPのechoステートメントに渡します。'message'の翻訳が見つからない場合は、 'message'をエコーします。
テーマまたはプラグインを国際化する場合は、を使用する必要があることに注意してください "Text Domain"。
gettextフレームワークは、WordPressのほとんどを処理します。ただし、WordPressディストリビューションにはgettextを使用できない場所がいくつかあります。
うまくいけば、それがあなたの質問に答えてくれるでしょう。もし私たちに知らせなくて、多分誰か他の人が手伝ってくれるかもしれませんし、私がもっと調査することもできます。