[国際化] gettext の利用 / extension の利用 / gettextリーダーの作成†
- ページ: BugTrack
- 投稿者: henoheno
- 優先順位: 普通
- 状態: 着手
- カテゴリー: 本体新機能
- 投稿日: 2004-11-14 (日) 13:13:53
- バージョン:
ポイント†
- 1) PukiWikiのメッセージを国際化するにあたり、gettext を利用できないか
- PHP の extension である GNU gettext extensionを利用できないか
- gettext extension の存在しない PHP環境のために、gettextエミュレータを用意できないか
- 2) PukiWikiがgettextを利用する場合、どのように設計するか
- リソースの数と種類 (ドメインは単一か、あるいは複数用いるのか)
- リソースの配置場所
- リソースの作成手段とその共有方法
- リソースの利用形態 (PukiWikiに組み込む形態)
- 3) gettextエミュレーターは現実的に動作するか
- gettext extension が存在しない場合にシームレスに動作するか
- 現実的な速度で動作するか
ちょっと確認: GNU gettext†
- Python ライブラリリファレンス: GNU gettext API
ちょっと確認: PHP GNU gettext extension†
http://jp2.php.net/manual/ja/ref.gettext.php
- PHPのGNU gettext extensionを利用しているプロダクト
メッセージ†
- みなさんにご相談なんですが、gmo が読めるPHPの実装は概ねできたものの、PukiWiki での国際化を実装する上での方向感ってあっていますかね? 個人的には、本体の lng は、今のままでも良いとして、プラグインに関して、開発者と翻訳者の分離から plugin_XXXXX_init() 内で行うのは、プログラムソースに手を入れることになるため不適切と考え、かと言って本体用の lng に吸収するのも違うだろうと考えています。ということで、gettext で実装できればと考えていましたが、PHP のビルドオプションということで敷居が高いこともあり、悩むところでした。ということで、gmo を読む部分の出来栄えにも左右しますが、あっていそうなら、一気に、前のようにパッチでも作りまくろうと思っています。じゃないと、下の添付ファイルもそうなんですが、これって結構疲れるんですよねぇ。-- upk
- お、言語リソースを収めるフレームワークが現れた :) PHPで実装したgettextリーダーですか。今週末にでも触ってみようと思います -- henoheno
- よろしくお願いします。lng以外のメッセージは、翻訳側からすれば、プログラム更新に振り回されて大変ですから、楽にさせてあげないと。-- upk
- といっても、最初にやるのはPHP gettextモジュールの用意とか、そのテストとか、gettextそのものの資料確認*1なんですけどね (^^; あまり期待しないで下さい (^^; -- henoheno
- 了解しました。個人的に思っているのは、国際化を行う前に mbstring や gettext なんぞ不要な国々でも、PHPとして問題ないようにしておく必要があるのだろうと思っています。ということで、gettext もそうですが、前に話題になった mbstringエミュレータも、あわせて検討しておくのかなぁ?っていうイメージでいます。まぁ、こちらでも色々とやってみます。 -- upk
- 昨日触ってみました。 test-msgunfmt.php だけしか動かせていませんが、30msが29msくらいにはなりましたので後で圧縮したものをあちらに添付しておきますね :) -- henoheno
- お手数をおかけします。趣味の問題なのかなぁ。と思いましたが、パフォーマンスアップにつながるんであれば、その作法に習おうと思います。違和感はありませんしね。あと、方向感って、どうですかね?国際化をやったことがある人なら、gettext って違和感なく入れるんですけど、やっていないと、ちょっと敷居が高くなるところもありますからね。まぁ、慣れと言えばそうですけどね。 -- upk
- スキンの折り合いが微妙ですけど、プログラマと翻訳者とデザイナ*2は分離されたほうがいいとおもってますから、基本的には賛成です (^^) -- みこ
- そうなんですよね。この考えをスキンに組み込むことはできるんですが、よりプログラムチックになってしまうんですよねぇ。なので、この部分はペンディングかなぁ。-- upk
- ただ、これを使用するのは .php (本体およびプラグイン)ですよね? だとしたら、できればPHP初心者のために、お手軽な.po版と汎用的なgmo版とあったほうがいいかもしれないけど(もう両方あるに等しいのかもしれませんが (^^;)・・・ -- みこ
- PHP用の、はじめての gettext という感じのものですか? -- upk
- そうそう、そういう意味ではユニバーサルデザインにするために、ナビゲーションバーおよびツールバーで直接ページを指しているもの(リロード・トップ・最終更新・ヘルプ)はすべてアクションプラグインにしませんか? -- みこ
- 最新 cvs に gettext エミュレーション部分のみを組み込むと
1-gettext.diff.0 というイメージです。これから、lang をいじくり、pot を生成してという作業を進めます。あとpotを生成するスクリプトを devel の下にでも入れておくと便利かなぁ。というところです。ディレクトリを作成したかったので、差分では無理に index.html なんか作っています。 -- upk
- このパッチの適用のみで止めておくと、lang と gettext との共存ができる状態ですので、gettext化したければ進めることもできると思います。逆に、一気に進めない方が良いんでしょうかね? 環境準備だけ整えて、ドキュメントなどの整備を行ってという流れとか。まぁ、パッチをここに添付するにしても、1個にはせず、複数個に分けることにします。-- upk
- とりあえず、gettext話用のBugTrackに移動しましょう :) *3 -- henoheno
- 了解しました。この件の派生として、gettext化した場合に、gmo を生成する必要がでてきますから、その環境について色々とやっています。Linux, FreeBSDなどの環境は、まぁ良いとして、Windows 環境下でも幸いにして GNU の方でバイナリが準備されていたので、敷居として高くならないで済みました。upk:国際化 で現在、まとめています。 -- upk
- lnag ファイルを見ていますが、重複項目はあるは、日本語と英語で、一致していないところもあるし、ふーむ。というところです。$_tracker_messages の btn_name って、Name なんですかね?ページ名なんですかね? gettext だと、Name って名寄せされちゃうんですよね。trackerって使ってないので、よく分からないんですよ。-- upk
20041115.zip†
順次、整理していきますが、ちょっとだけ。
ページを分けますか?どうしましょう?
理由などは、upk:PHP/国際化/ドメイン でうだうだ書いています。
簡単に書くとこんな感じです。
2) PukiWikiがgettextを利用する場合、どのように設計するか†
リソースの数と種類 (ドメインは単一か、あるいは複数用いるのか)†
PukiWiki本体が配布するアーカイブの単位で1つと考えています。その理由は、
- 1ドメインの方が管理がらく。
- xgettextコマンドで、拡張子が php のものだけ拾えばよい。
- 言い換えれば、ドメインを分割すると、ファイル単位で指定するか、スクリプトを作るかなどの対応が必要となる。
- メッセージカタログというファイルが単一なので、パフォーマンス的にも良い
以下の利用を考慮して、複数ドメインでの稼動もサポートしておく。
- サードパーティ製プラグインへの対応
- 本体の翻訳のみならず、サードパーティ製プラグインの国際化も容易となる
- 本体は lng ファイルで吸収できていると認識
- 翻訳作業を行うこと=プログラムソースに手を入れること の撲滅
- プログラムとメッセージを分離することで、翻訳のみの作業に特化できる(役割分担)
- メッセージのカスタマイズ(プラグインのみであれば簡単)
というイメージです。
- お疲れ様です。上記でコメントしたのちまた考えましたが、単一ドメイン方式だと、PukiWikiやそのメッセージを個別にカスタマイズしたり、個別にプラグインを抜き差しした場合に、ユーザーにコマンドラインでの作業を強要してしまいそうですね。動的にリソースをコンパイルするような機能でもない限り。 -- henoheno
- みこさんが言われていた、po を読むという前の版と組み合わせが良いんでしょうかね?ちょっとやってみますかぁ。 -- upk
リソースの配置場所†
pot および po ファイルは、稼動時は不要です。ドメイン構成の決定後に、
単一構成に決定した場合には、po を分けるが妥当だと思っています。
現状は、単一・複数でもいけるだろう以下のような構成を案としました。
pukiwiki
└─locale
│ └─ pukiwiki.pot, es_ES.po, ja.po, ns_NL.po
├─es_ES
│ └─LC_MESSAGES
│ └─ pukiwiki.mo
├─ja
│ └─LC_MESSAGES
│ └─ pukiwiki.mo
└─nl_NL
└─LC_MESSAGES
└─ pukiwiki.mo
- 案2(複数ドメイン構成を考慮した場合)
po の保存先を間違えると危ないです。
pukiwiki
└─locale
│ └─ pukiwiki.pot
├─es_ES
│ └─LC_MESSAGES
│ └─ pukiwiki.mo
│ pukiwiki.po
├─ja
│ └─LC_MESSAGES
│ └─ pukiwiki.mo
│ pukiwiki.po
└─nl_NL
└─LC_MESSAGES
└─ pukiwiki.mo
pukiwiki.po
仮に複数ドメインにした場合には、以下のようになると思います。
pukiwiki
└─locale
│ └─ pukiwiki.pot, edit.pot, article.pot ...
├─es_ES
│ └─LC_MESSAGES
│ └─ pukiwiki.mo, edit.mo, article.mo ...
│ pukiwiki.po, edit.po, article.po ...
├─ja
│ └─LC_MESSAGES
│ └─ pukiwiki.mo, edit.mo, article.mo ...
│ pukiwiki.po, edit.po, article.po ...
└─nl_NL
└─LC_MESSAGES
└─ pukiwiki.mo, edit.mo, article.mo ...
pukiwiki.po, edit.po, article.po ...