FC2ブログ

Qtの標準GUIを日本語化する方法

Qtの標準コントロールに表示される文字列は標準では英語になっていますが、それを日本語(というより現在のPCの言語)に切り替える方法について。

Qtにはインタフェースに表示する文字列を各国言語に動的に切り替える機能があり、それを使えば良いようです。

また、Qtのランタイムをインストールすると言語ファイルも含まれているので、それをアプリケーションに組み込めばGUIをローカライズすることができます。


sample
#include "stdafx.h"
#include "FormMain.h"
#include <QtGui/QApplication>

#include <locale.h>


// 環境変数からQtのインストールフォルダを取得する
QString GetQTDir(void)
{
  QStringList envs = QProcess::systemEnvironment();
  for(int i = 0; i < envs.size(); ++i)
  {
    const QString& s = envs[i];
    if(s.left(5) == "QTDIR")
      return s.right(s.length() - 5 - 1);
  }

  return QObject::tr("");
}

// 現在の言語ファイルを読み込む
bool LoadCurrentLangTranslator(QTranslator& translator)
{
  QString qtdir = GetQTDir();
  if(qtdir == QObject::tr(""))
  {
    // Qtのインストールパスがみつからない
    assert(false);
    return false;
  }

  QString current_langfile = qtdir;
  current_langfile += "\\translations\\qt_";
  current_langfile += QLocale::system().name();

  if(!translator.load(current_langfile))
  {
    // 言語ファイルの読み込みに失敗.
    assert(false);
    return false;
  }

  return true;
}


int main(int argc, char *argv[])
{
  setlocale(LC_ALL,"");

  QApplication a(argc, argv);

  QTranslator translator;
  LoadCurrentLangTranslator(translator);

  a.installTranslator(&translator);

  FormMain w;
  w.show();
  return a.exec();
}



main関数付近をこのようにします。

大体の処理の流れはこんな感じになっています。

1.環境変数からQtがインストールされたパスを取得する。
2.現在のロケールのシンボルを取得する。(日本語なら"ja_JP")
3.Qtのフォルダパスとロケールのシンボルから現在の言語に対応する言語ファイルのパスを求める
4.それを読み込み、アプリケーションにインストールする。

これでたとえば、テキストボックスのコンテキストメニューが、標準では
snapshot_045_120617_235202.png

このように英語なのが、次のように日本語に変わります。
snapshot_046_120618_001138.png
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
11 | 2018/12 | 01
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター