サポート » 使い方全般 » プラグイン日本語化

  • 解決済 junj

    (@junj)


    wordpressの英語プラグインを日本語化しようとしています。
    pot、po、moファイルがないプラグインです。

    __(’’)や_e(’’)の関数を使うことは理解できましたが、
    その使い分けがいまいち理解できません。

    _e(’’)
    変換された日本語を標準出力に出力する関数で、HTMLとして直接表示したい日本語を表示するのに使う。

    __(’’)
    変換された日本語を戻り値として返す関数。他の関数の引数として渡したい場合に使う。

    ここまではなんとなく理解できるのですが、初心者なので対象キーワードが、HTMLとして表示されている文字列なのか、関数の引数としての使用されている文字列なのかを判断できる知識がありません。
    具体的なアドバイスを出来る方がいましたらお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは、

    _e()とか、__() 等の翻訳用の関数を書く場合は、テキストドメインを第二引数に必ず入れなければなりません

    テキストドメインは、通常は、プラグインの名前が使われますが、一意に判別できるような名前でないといけません
    なので、

    __( 'hello world', 'plugin' );

    としないと、後で翻訳ファイルが指定できなくなってしまいます。

    なんでか?

    翻訳するプラグインは、

    https://codex.wordpress.org/Function_Reference/load_plugin_textdomain

    の、load_plugin_textdomain()を使って、テキストドメインをしていた翻訳ファイルがある場所を明示しなければならないからです。

    __( $hello_world, 'plugin' );

    といった形で、変数を使う事も、あまりよくありません。

    翻訳そのものは、大体うまくいくのですが、フィルタを使って翻訳文字列の変更等を行う場合に、不具合が出ることがあるからです。

    それってどんなやり方なのかというと、例えば、

    http://www.tenman.info/wp3/manualraindrops/%E7%BF%BB%E8%A8%B3/%E7%94%A8%E8%AA%9E%E3%81%AE%E7%B0%A1%E6%98%93%E7%9A%84%E3%81%AA%E4%BF%AE%E6%AD%A3%E6%96%B9%E6%B3%95

    の、gettextフィルタを使った例を見てください

    _e() は、PHPのエコー

    __()は、変数と同じと考えればいいと思います。

    自分で使うだけじゃなくて、再配布などを考えているのであれば、

    esc_html__()
    
    esc_html_e()

    といった関数を使って、htmlを混入しない書き方の方がおすすめです。

    翻訳用の、ja.mo とかいうファイルは、バイナリーで、テキストファイルなどでは開けません。
    moファイルのもとになる、poファイルは、テキストファイルですが、単純な文字だけの翻訳前の文字列に、htmlタグなどを含んで自由に、moファイルを作れるので、配布の場合などでは、エスケープして出力する翻訳関数の方がおすすめです。

    トピック投稿者 junj

    (@junj)

    迅速かつ丁寧な解答ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「プラグイン日本語化」には新たに返信することはできません。