gettext使ってみた
こちらの記事
海外でも通用するエンジニアになる: i18nしてますか?(gettext+PHPその1)
http://el.jibun.atmarkit.co.jp/kaigaiengineer/2010/08/i18ngettextphp-.html
を参考にget textをさくらVPSで使ってみました。
その過程で躓いたところをメモ
まずは記事の通りに翻訳元となるphpファイルを作成
<?php
printf(_(こんにちは));
?>
んで持って
下記コマンドを実行
$xgettext -k"_" --from-code=UTF-8 -o hello.pot hello.php
このあたりはサクサク行きたいところ。これでhello.potが作成されているはずなので
$ls
で確認
…
できてない/(^o^)\
なんでだろ?と思ってちょっとググってみる
すると以下の記事を発見
PHPでGettext拡張を使ってみた - 趣味プログラマの外部記憶
http://d.hatena.ne.jp/ao3/20080328/1206673266
なるほど、インストールが必要なのね
さらにググると公式サイト?を発見
http://www.gnu.org/software/gettext/
と、いうことで早速インストール
以下のディレクトリに移動して
$cd /usr/local/src
wget
$wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.3.1.tar.gz
からの解凍
$tar zxvf gettext-0.18.3.1 tar.gz
解凍したディレクトリに移動して…
$cd gettext-0.18.3.1
$./configure
makeしてmake install
$make
$make install
これでインストールは完了!
行けるはず!再度以下を実行
$ xgettext -k"_" --from-code=UTF-8 -o hello.pot hello.php
$ls
…
…
できてない\(^o^)/なぜだああああ
2,3時間ほど色々と調べた挙句何もわからず疲れ果てました
そこでふと思いついて先ほど作ったphpファイル自体を実行してみることに
$php hello.php
すると以下のようなエラーが。
PHP Notice: Use of undefined constant こんにちは - assumed 'こんにちは' in <ベースディレクトリ>/test_repo/hello.php on line 3
…ん?
回ってない頭でとりあえずファイルの三行目を見てみる
printf(_(こんにちは));
…
…
文字列囲んでねえ/(^o^)\
他人を疑う前にまず自分を疑え
プログラミングの鉄則を今一度心に刻んだ瞬間。でもこれ、中々できないんですよね未だに(--;)
今回は自分の休みの時間の内のほんの3時間(泣)を失っただけだ!
…と無理矢理切り替えていきましょう!
といいたいところですがこうなってくるとそもそもgettextのインストール自体必要だったのかどうかも正直怪しい(--;)スイマセン
とりあえず""で文字列を囲んで再度の実行
$ xgettext -k"_" --from-code=UTF-8 -o hello.pot hello.php
$ls
で確認すると…
あった\(^o^)/
ありました。hello.pot
これを新たに作成した
<ベースディレクトリ>/en_US/LC_MESSAGES/
にコピー
$ mkdir -p <ベースディレクトリ>/en_US/LC_MESSAGES
$ cp hello.pot <ベースディレクトリ>/en_US/LC_MESSAGES/hello.po
そっから
hello.pot内の以下を変更
msgid "こんにちは" → msgid "hello"
長くなりそうなので参考にさせていただいたブログにならってここまでで一旦区切ります