Qtアプリケーションの翻訳

プログラムの中に表示される文字列を別の言語に翻訳する必要があるとき、いちいちコードを書き直すのは手間がかかる上に人間である以上見落とす部分も出てきてしまいます。

そこでQtではアプリケーションを多言語化するための仕組みが用意されています。

翻訳の準備

翻訳をするには初めにソースファイルから翻訳ファイルを読み込む必要があります。以下のソースファイルを見てください。

#include <QApplication>
#include <QtGui>

int main(int argc, char ** argv)
{
    QApplication app(argc, argv);

    QTranslator translator;
    translator.load("trans_ja");
        //trans_ja.qmというファイルのファイル名のみを渡す。
    app.installTranslator(&translator);
        //QTranslatorクラスを適用

    //メインウインドウ
    QMainWindow window;
    QGridLayout* grid = new QGridLayout;
    
    QLabel* label1 = new QLabel(QObject::tr("this is label"));
    QLabel* label2 = new QLabel(QObject::tr("hello"));
    grid->addWidget(label1);
    grid->addWidget(label2);
    
    window.setLayout(grid);
    window.show();
    
    return app.exec();
}

まずラベルなどの文字列を定義するときにQObjectクラスのtr関数を呼び出しています。これは翻訳する文字列を抜き出すときに必要なので翻訳する文字列はすべてこの関数に渡す必要があります。

次に翻訳を行うためにQTranslatorクラスを利用しています。QTranslatorload関数にqmファイルという翻訳元と翻訳先の文字列を記憶したファイルを渡し、その後、installTranslator関数でアプリケーションの翻訳を実行しています。

これで翻訳の準備は完了です。

翻訳の手順

では、どのようにqmファイルを作り、翻訳を実行するかという手順を次に示します。

補足 : load関数について

QTranslatorload関数にqmファイル名を渡せると書きましたが、パス名を指定したり言語名を指定して翻訳をロードすることも出来ます。

例えばアプリケーションのすぐ下にtranslationsというディレクトリを作りそこからqmファイルを読み込みたければ

translator.load("trans_ja", "translations");

とすればOKです。

もしいちいち言語コード(jaなど)をつけたくなければシステムの国コードから読み込みすることもできます。

translator.load(QLocale::system(), "tr", "_", "translations");

この場合、もし言語コードが[jp]ならtranslationsディレクトリ直下のtr_ja.qmというファイルが読み込まれます。

関連項目
プライバシーポリシー