preload
1月 25

「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 のときは既存のものを上書きしないようにするのが吉かな。


関連していそうなエントリ:

One Response to “qcodoでカラム名等を日本語化する”

  1. Persistence is Power Says:

    Qcodoによるマスタメンテナンスツール開発

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

Leave a Reply