WordPressの”__()”関数は国際化対応のため

この記事は次のブログに引っ越しました。

WordPressプラグイン内で使われるPHPの"__()"関数や"_e()"関数は何に使うのか? WordPressプラグインのソースを見ていたら"__($hogehoge)"のような記述を随所で見かけました。どうやら、"__()"は国際化対応のためのWordPressのユーザ関数のようで、PHP独自の関数ではないようです。一言で言うと「辞書を使った翻訳関数」と言えると思います。つまり、引数に英語を渡すと日本語にしてくれる関数みたいなイメージです。 ■使い方 ?php echo( __("File") ); ※引数に英語を渡し、辞書ファイルに"File"の訳があった場合、その訳(「ファイル」)を返す。ない場合は引数の"File"がそのまま返される。この記述スタイルはCakePHPなどでも利用される手法らしく、GNUのgettextという国際化の手法というかフレームワーク(仕組み)を採用しているとのこと。 うん、国際化! ここで言う「国際化」というのは、プログラムの世界での言い方で、開発したアプリを英語やロシア語など、他の言語でも表示できるようにすることです。逆に英語などのアプリを日本語など自国語に対応させることを「ローカライズ」と言います。WEBにおける身近な国際化対応としては、"index.html"の内容をロシア語や英語に訳したファイルの拡張子を"index.ru"とか"index.en"にして同じ階層に置いておく方法です。
"index.html"に海外からアクセスがあった場合、WEBサーバ(apache)がブラウザの言語設定を認識して該当する言語に切り替えてくれます。一見便利ですが、最近、この仕組みを聞かないのは、メンテナンスが大変だからでしょう。例えば、レイアウトやjavascriptなどを変更した場合、全部のファイルを変更しないといけない、など。 では、PHP使いとして合理化を考えると、まずテンプレートでレイアウトを作っておき、表示する文字の部分だけを関数を使ってリストから表示することを考えるでしょう。まさに、それが「国際化」するということです。
では、今回のWordPressの国際化に使われる"__()"関数は、どういう仕組かというと、言語ごとに用語のデータがあって、__()関数に基本となる用語(主に英語)を引数で渡すと、該当する言語の用語が返されるという仕組みのようです。もし、該当する単語もしくは用語がない場合は、引数の内容をそのまま返します。 "__()"と"_e()"の違い やることは同じですが、出力先が違います。"_e()"の"e"は"echo"の略と考えるとわかりやすいかもしれません。つまり、変数に代入したい場合(標準出力)は"__()"を使います。 /* ローケルが日本であった場合は、「こんにちは」が返される。*/ $message = __('Hello'); //$messageに結果を出力 _e('Hello'); //これはechoとして結果を出力

どうもこの手法はオープンソース業界では、デファクトスタンダードらしい。スペイン語や英語対応を得意としていたのに知らなかった。恥ずかしい。

なるほど、これは面白い使い方だ。というより、"_"(アンダースコア)だけの関数って作れたのか。さらに恥ずかしい。

■参考サイト http://codex.wordpress.org/Localizing_WordPress