第6回から随分時間があきましたが、今回はアプリケーションの翻訳について解説します。iPhoneの開発でも同じような機能が使えますが、こちらの方がかなり楽だと思います。
トップの画像ですが、開発環境のQtCreatorの場所になります。また、下の画像は翻訳環境のLinguistの場所になりますので、アプリケーションの起動時の参考にしてください。
では、早速QtCreatorでプロジェクトを作成します。(説明を簡略化する為、)今回は、Qt4 Console Applicationを選択します。
プロジェクト名称と保存場所を入力します。標準では、ユーザーのホームフォルダが選択されるようです。
使用するモジュールを選択します。今回はQtCoreのみにしますが、実際のアプリケーションの開発時には殆ど選択する事になると思います。
選択が終わると最終確認画面になります。main.cppがソースファイル、translation.proがプロジェクト用のファイルになります。
main.cppを開いた所です。QCoreApplicationのドキュメントには、 The QCoreApplication class provides an event loop for console Qt applications. と書いてありますので、イベントループを処理してくれるものと考えて問題ありません。その為、この状態でビルド(左下のアイコン)/デバッグ(その上のアイコン)を開始すると、何も表示しないアプリケーションが起動します。
このソースに、3,4,10,11行目を追加します。コンソールに cat と表示するだけのアプリケーションですが、QObject::tr()関数を使用している事に注意してください。この形で書いておくと、後で翻訳対象として扱う事が可能となります。QObjectを継承しているクラスでは、tr()のみの記述で対応可能ですが、どうしても継承出来ないクラスを作成する場合にはこの方法が使用出来ます。
実際にデバッガで出力内容を表示させてみました。ソースコード通り、catと表示されています。
この状態で、プロジェクト用のファイルを開き、18行目を追加します。翻訳用のファイルをこの名称で作成する事になるのですが、任意の場所を指定可能です(ここではカレントフォルダになります)。また、各国用の翻訳ファイルを作成する場合も考慮して、分かりやすい名称にしておくと良いです。
次にコンソールから、翻訳ファイルを生成するコマンド(lupdate)を実行します。引数にはプロジェクトファイルを指定します。
$ cd translation/translation $ lupdate translation.proUpdating 'ja_JP.ts'...Found 1 source text(s) (1 new and 0 already existing)
拡張子がtsのファイルが作成されましたので、これをLinguistで編集します。ソースコードに埋め込んだ、catが表示されているのが分かります。
これを日本語に翻訳しますので、 猫 と入力します。猫じゃなくでも大丈夫なので、好きな言葉を選択してもらってかまいません。
ファイルを保存したら、lreleaseコマンドでアプリケーション側で読み込むファイル(qm)を作成します。この時の引数もプロジェクトファイルを使用します。
translation $ lrelease translation.proUpdating '/Users/masao/translation/ja_JP.qm'...Generated 1 translation(s) (0 finished and 1 unfinished)
これで翻訳ファイルが作成されましたので、アプリケーション側でそれを読み込みます。この例では、11-13行目を追加しました。QTranslatorをアプリケーションに追加するのですが、各国用の対応をする場合は、必要になった時点で追加をする事になります。例えば、フランス語を表示させる時は、翻訳ファイルを読み込むとその時点から表示がフランス語になりますので、動的に言語を変更する事も可能になります。
その後の実行結果はこのようになります。 猫 と表示されているのが分かるでしょうか。
解説は以上になります。翻訳ステップをまとめると以下のようになります。
- 翻訳したい部分をtr()関数で囲む。
- プロジェクトファイルで翻訳元(*.ts)の作成場所を指定する。
- lupdateコマンドで、翻訳元ファイルを作成する。
- 翻訳元ファイルをLinguistで翻訳する。
- lreleaseコマンドで、翻訳後(*.qm)ファイルを作成する。
- 翻訳後ファイルをアプリケーションで読み込む。
設定部分が殆どですので、実際には3から5を繰り返す作業になります。翻訳ファイルが分かれている為、作業も分担出来ますし、アプリケーションのリリース後にも言語対応可能ですので、アプリケーション側に予め組み込んでおいても損は無いと思います。
これ、上手く使えば、各言語でプログラムを作る事が出来そうなんですよねぇ。画面に文字を出力するなら、
英語 : print "Cat".
日本語 : 表示 "Cat".
とすれば、違うコマンドでそれぞれ Cat と表示出来る様になると思うんですが。
<< 第6回
>> 第8回
0 コメント:
コメントを投稿