今日のハックカフェ@姫路はお休みです

先々週は大掃除、先週は風邪で(まあ正月なこともあったけど)で休んでいたハックカフェだけど、今週も休みです。
3週休みかー。ヤバいなー。
_ Qtアプリのメッセージを翻訳する
2012/03/04追記
Qtアプリの翻訳についてWikiのほうにまとめています → Qtアプリの翻訳 - nofuture.tv
Linux系のアプリだと、だいたいgettextでメッセージカタログが分離されていて、poファイルを翻訳してmoにコンパイルすれば完了という感じだけれど、Qtアプリの場合、Qt自体がgettext的な機能を持っているので、ちょっと勝手が違います。 ということでメモがてら書きます。 (ていうかハックカフェで翻訳しようと思ってたのもあったりして。)
Qt Linguistのインストール
Qtアプリの翻訳にはQt Linguistというアプリを使います。 Debianの場合だとqt4-linguist-toolsというパッケージ名なので、aptitude install qt4-linguist-tools でインストールします。
gihyo.jpの情報によるとQt Linguistのlconverを使ってtsファイルをコンバートすれば、他のツールでも翻訳できるそうです。
- 進化するQt−Qt最新事情2009:第5回 Qt Linguistの進化|gihyo.jp … 技術評論社: http://gihyo.jp/dev/serial/01/qt-2009/0005?page=2
メッセージカタログの作成
gettextだとpotというメッセージカタログのひな形があって、それをpoにコピーして翻訳しますが、Qtアプリの場合はひな形自体ありません。ということでメッセージカタログを作成します。
作成方法はlupdate というコマンドを使い、Qtアプリのプロジェクトファイル(ソースの中にある拡張子が.proのファイル)と -ts オプションに出力したいメッセージカタログのファイル名を指定して実行します。
$ lupdate (プロジェクトファイル).pro -ts (メッセージカタログ).ts
翻訳
メッセージカタログのファイルができたので、Qt Linguistを使って翻訳します。
翻訳方法は画面を見ればわかると思うので省きますが、Qt Linguistの特徴のフレーズブックについて書いておきます。
フレーズブックというのはその名の通り、慣用句やよく使う言葉を集めた用語集です。 あらかじめ用語などをフレーズブックに登録しておくと、翻訳中、登録してある言葉が出てくるとヒントとして出してくれます。 またヒントだけでなく、フレーズブックの言葉を一括して翻訳、置換もできます。
これが結構便利なので、翻訳をはじめる前にはQt4のフレーズブックjapanese.qph(qt4-dev-toolsパッケージに入っていて、/usr/share/qt4/phrasebooks/japanese.qphにあります)と、自分用に作ったフレーズブック、2つを開いてから翻訳を始めるとよいと思います。
コンパイル
gettextではpoを翻訳したらバイナリ形式のmoにコンパイルしますが、Qtも同じくメッセージが翻訳できたらバイナリ形式のqmにコンパイルします。
コンパイルについてはソースをビルドすればいいかもしれないけど、翻訳具合を見るためにソースまるごとビルドは面倒なので、ここはサクっと手動で作成します。
作成方法はQt Linguistのツールバーの[ファイル]-[リリース]を選択すればqmファイルが作成されます。 コマンドの場合は lrelease を使います。
$ lrelease (メッセージカタログ).ts [-qm qm-file]
できあがったqmファイルは/usr/share/localeに放り込んでアプリを起動すれば、メッセージは翻訳されているはずです。
_ 自分がダメなときは情報から離れろ
ここ数年、感じていることだけど、自分がダメだと感じているときはWebからの余計な情報は入れないほうがいいと思う。 特にSNSや2chまとめ系サイトはノイズの塊なので、ダメだと思った時には速攻で見ないに限る。
もっとひどくなったときはインターネットからの情報自体を断ち切ったほうが良いけれど、そこまでの時はあまりないので、ダメダメになったときは、/etc/hostsにソレ系のサイトを羅列して無意識にそういうサイトにアクセスしないようにしています。
見ないと言っても頭がおかしいときに逆の方向でガチガチに縛ると、それはそれでおかしな方向に行ってしまうので、携帯デバイスなどには特に制限をかけません。
このゆるい感じに縛って見ないようにするのは結構効果的で、しんどいなと思うときにはお勧めです。
ということで、オイラは絶賛継続中です。