トップ 一覧 ソース 検索 ヘルプ RSS ログイン

Qtの多言語対応メモ

Qtでプログラムをするときの多言語対応メモ。基本編。

1.画面に表示する文字列をtr()形式にする

こんな感じで。

aselectdialog.cpp

15|void            ASelectDialog::listChanged( int no )
16|{
17|    static pcchar const code[] = {
18|        QT_TR_NOOP( "R:254 G:244 B:244" ),
19|        QT_TR_NOOP( "R:253 G:239 B:242" ),
20|        QT_TR_NOOP( "R:233 G:223 B:229" ),
21|        QT_TR_NOOP( "R:228 G:210 B:216" ),
22|        QT_TR_NOOP( "R:246 G:191 B:188" ),
23|        QT_TR_NOOP( "R:245 G:177 B:170" ),
24|        NULL
25|    };
26|
27|    m_code_ed->setText( tr( "no %1: %2" ).arg( no+1 ).arg( tr(code[no]) ) );
28|}

Qtでプログラムを組む場合、ユーザーが目にする文字列は、すべてtr()で挟んでおくのが基本。深く考えずに当たり前のようにやっておく。

2.lupdateで文字列を抜き出す

> lupdate project-file -ts ts-file

プロジェクトファイルに加えて、出力先のts-fileも指定する必要あり。ちょっと面倒。

3.Qt Linguistで翻訳

> linguist

画面を見ながら翻訳。

4.文字列をメッセージファイルに変換

> lrelease ts-file

これで.qm形式のファイルができる。プログラムからはこのファイルを使用。

5.プログラム側をメッセージファイルを読み込むように修正

こんな感じで。

test02.cpp

1|    //      翻訳に備える
2|
3|    QTranslator     tra;
4|    tra.load( "test02.qm",qApp->applicationDirPath() );
5|
6|    app.installTranslator( &tra );

本当なら、読み込むロケールに応じて.qmを切り替えるべきだけど・・・ そこは省略。

翻訳前の画面がこんな感じ。

ss001.png

翻訳後はこう。

ss002.png

起動中の切り替え対応は・・・ 必要に応じて調べましょう(´∀`;)

参考になるのはこのあたり。

ソースコードはこちら:test02.zip


(2009/11/07 メモ,Qt