「gettextの使いかた」に続き、これを qcodo で使ってテーブル名カラム名等を日本語化する方法。
codegen で自動生成された panel_drafts を見ると、テーブル名やカラム名はスキーマから取得されたそのままであることがわかる。業務システムで使うには、適当なビジネスロジックを入れてやるのはもちろんだが、日本語化も必須だろう。
本家 example サイトを参考に、日本語化をやってみた。qcodo で生成されたコードは、先に書いた gettext による国際化に対応しているので、*.po ファイルを用意してやれば良い(msgfmt による *.mo の用意も不要)。大体の出力文字列が標準で国際化対応した状態でコードされているが、qcodo/includes/qcodo/_core/framework/QI18n.class.php を確認すれば、具体的にどういうルールになっているかわかる。自分で書くときには QApplication::Translate() を使っても良い。自動生成されたコードの、どこが翻訳対象になっているかは、_t() 関数で翻訳指定されている部分を grep 検索してやっても OK。
*.po の書き方。たとえば、address_book テーブルに address_book_id, address_book_class のカラムがあるのであれば、次のような形で ja.po を用意してやる。
テーブル名はアンダースコア _ を詰める、カラム名は半角スペースに変える、ともに単語頭文字を大文字にする、辺りがルールになっている。同様に Create a New や Edit などのアクションボタン名も変えられるので適当に書く。
できた ja.po ファイルは、qcodo/includes/i18n または qcodo/includes/qcodo/i18n に置く。前者のディレクトリは標準で作られていないので、前者に置きたければ mkdir する。
さて、これだけで動くように書いてあるが、僕の環境だと動かなかった。翻訳してくれない。
ソースを追っていくと、QApplication::Translate() で取得するテキストドメインが怪しいように見える。QApplication::$LanguageCode をダンプしてみると “en” になっていた。ブラウザは日本語設定になっているので、どうして英語環境で初期化されているのかわからない。どこかでこいつを初期化しなおしてやる必要がありそうだ。
先の examples サイトを見ると、
Language and country settings can be setup in prepend.inc.php
とある。下の方に言語設定している部分があるので、有無を言わさず日本語設定になるよう変えてやる。
とりあえず、これで僕の環境では翻訳してくれるようになった。が、このままだと、国際化してる意味が無いので、QApplication::$LanguageCode が true のときは既存のものを上書きしないようにするのが吉かな。
関連していそうなエントリ:

3月 20th, 2007 at 11:28
Qcodoによるマスタメンテナンスツール開発
前回書いてからずいぶん経ってしまったが、業務利用のマスタメンテナンスツールをQcodoで開発していく手順について職場のJさんにまとめてもらったので、いろいろ晒してみます。業務システムに限らず、旧来のwebサイトに適用して、なんちゃってCMS/カンタン管理ツールみたいな…