1415683999 PHPにおけるgettextでのmoファイルの参照元を変更したいです。


以下のページであるように・・
http://unoh.github.io/2006/06/20/5_php_web_2.html

$language = 'ja_JP';
putenv("LANG=$language");
setlocale(LC_ALL, $language);
$domain = 'messages';
bindtextdomain($domain, "/var/www/html/locale");
textdomain($domain);

と設定するとmoファイルの設置場所は・・
/var/www/html/locale/ja_JP/LC_MESSAGES/messages.mo
となりますが、これを・・
/var/www/html/locale/languages/messages.mo
などと変更したいと考えております。

WEBでも調べましたが特にそれらしい記述は見つかりませんでしたが、
Wordpressでは自由に設定できているので、不可能ではないと思います。

ご存知の方、ご教授のほど宜しくお願い致します。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/11/18 14:35:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント500pt

locale/ja_JP/LC_MESSAGES/messages.mo がシンボリックリンクで、locale/languages/messages.mo を指している、というのでは、駄目ですよね?

結論から先に言うと、できないと思った方が良いです。


質問で挙げてもらったページで解説されている gettext による国際語化ですが、これは gettext ライブラリのラッパーです。
Linux だと GNU の gettext を使っていると思います。
ライブラリの仕様として、カタログファイルの配置が決められています。
http://www.gnu.org/software/gettext/manual/gettext.html#Locating-Catalogs

LC_MESSAGES という階層が入るのは、国際語化はメッセージだけを対象にするものではないからです。
時刻や数値の表現なども対象にします。
それらは、LC_NUMERIC や LC_TIME という階層の下にカタログファイルが置かれます。

他の unix も同じ仕組みです。
# 言い方としては、順番が逆で、GNU gettext の方が仕様を合わせた、ということになります


Wordpress が、カタログファイルを、そのディレクトリの縛りに置かなくても良いのは、(言い方が、ちょっと大げさですが)Wordpress が自前で国際語化の仕組みを持っているからです。

Note that if you look online, you'll see the _() function which refers to the native PHP gettext-compliant translation function, but instead with WordPress you should use the __() wordpress-defined PHP function.
 

I18n for WordPress Developers « WordPress Codex

この文面だけだと、はっきりとはしませんが、Wordpress のソースを読むと分かります。
以下のようなところが、国際語化の処理をしているところにあたります。

MO::import_from_reader() が gettext で使うカタログファイルを読み込んで、自力でパースして連想配列に貯えます。
それを使って、国際語化のテキスト置換を実現しています。


「できない」ではなく、「できないと思った方が良い」と最初に書いた理由が分かったと思います。
Wordpress の mo.php を参考にしたり、そんな回りくどいことをせずに、GNU gettext のソースを解析して、それと同じことをやれば、自由な位置にカタログファイルを配置することはできます。

環境設定ファイルに、何か記述を足したり、ライブラリをちょちょいといじる程度では、希望していることはできません。

id:gelgelgel

大変丁寧なご回答ありがとうございました。
該当箇所以外についても大変勉強になりました。
気分的にしっくりこない程度だったので、そのままの設定で
進めたいと思います。

2014/11/11 18:56:41
id:a-kuma3

気分的にしっくりこない程度だったので、

あはは、そうでしたか。
実は、ぼくも Wordpress で .mo ファイルが locale の下に入ってないのを不思議に思ってたので、ちょうど良い機会をもらいました :-)

2014/11/11 19:45:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません