gettext構文のポイントは何ですか?


9

これまでのところ、Wordpressでいくつかの翻訳を処理していて、公式のgettextドキュメントを読み込もうとしましたが、1つの多分単純なことのポイントを取得できません。詳細:他にはどのようなものがありますか?よろしくお願いします!

フランク


精巧な回答をありがとうございました!ここで本当に感謝しています!
サーキットサーカス

...多分これに対するもう1つの質問:テキストドメインのエントリを省略できますか?私は直立して、翻訳したいすべての文字列にそれを持ち込みましたが、Wordpress codexに含まれている、まったく含まれていない例を認識しました...
Circuit Circus

...さて、今私はこのコーデックスのページでそれを見つけました-この冗長な質問については申し訳ありません:-)
サーキットサーカス

回答:


13

__(二重下線)は、基本変換関数です。文字列を変換し、文字列として返します。

_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の組み込み日付と同等であり、関連するすべての処理も行われます。月名、曜日名など

また、法律に違反しないでください。ただのリマインダーです。:)


うわー、これは本当に良い説明です!助けてくれてありがとう!今、はっきりしている。
サーキットサーカス

6

__()、_ e()および_x()、_ ex()

__()_e()本質的に両方のラッパーtranslate()(直接使用しないでください)とほとんど同じです。

違いは__()、翻訳された文字列を返し、_e()それをエコーすることです。どちらも必須パラメータとして文字列を入力する必要があり、通常はオプションですが、textdomainも指定します。

同様に、_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忍者向けの追加リソース:


機能の完全な内訳と詳細な説明については、コーデックスの「その他」の「ローカリゼーション」も確認してください。
TheDeadMedic

&これはwp-polyglotが出会う場所です。
ブラソフィロ

@Johannes Pille:私が私の投稿をするまで私はあなたの答えに気づきませんでした。私の投稿を削除するべきですか?
Jeremy Jared

@JeremyJaredいいえ、なぜですか?それ以上の情報は悪いことではありませんか?!あなたの答えはよく考えられていると思います。私からの+1。
Johannes Pille、2007

@TheDeadMedic「追加リソース」に編集されました。
Johannes Pille、2007

3

私は翻訳の専門家ではありませんが、WordPress Codexページには優れたドキュメントがあり、各インスタンスを使用する理由を説明しています。

コーデックスのページから:

__()

メッセージが引数として別の関数に渡されるときに使用されます。_e()メッセージをページに直接書き込むために使用されます。これら2つの関数の詳細:

__('message')

ローカリゼーションモジュールで「メッセージ」の翻訳を検索し、その翻訳をPHPのreturnステートメントに渡します。「メッセージ」の翻訳が見つからない場合は、「メッセージ」を返すだけです。

_e('message')

ローカリゼーションモジュールで「メッセージ」の翻訳を検索し、その翻訳をPHPのechoステートメントに渡します。'message'の翻訳が見つからない場合は、 'message'をエコーし​​ます。

テーマまたはプラグインを国際化する場合は、を使用する必要があることに注意してください "Text Domain"

gettextフレームワークは、WordPressのほとんどを処理します。ただし、WordPressディストリビューションにはgettextを使用できない場所がいくつかあります。

  • メインのWordPress READMEファイル-これは静的HTMLファイルであり、PHPファイルではないため、gettext関数で実行することはできません。
  • gettextがロードされる前に、WordPressのロードサイクルの非常に早い段階でいくつかのエラーメッセージが生成されます。

コーデックスページへのリンク

gettextが機能しない場合に関する追加情報

うまくいけば、それがあなたの質問に答えてくれるでしょう。もし私たちに知らせなくて、多分誰か他の人が手伝ってくれるかもしれませんし、私がもっと調査することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.