Qt国際化:中国文化(漢化)

3571 ワード

最近のプロジェクトでは、システムを元の英語版から漢化する必要があります.
この仕事を完成させるために、たくさんの資料を集めて勉強しました.だから自分で資料を整理して記録に残しましょう.
まずQtの中国語の表示の問題を理解します:
ネット上では、Qtが中国語で文字化けしていることについて多くのことを発見します.
インターネットでソリューションを検索するのは、次の3つの文にすぎません.

 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));  
  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));  
  QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

文字化けしの原因は主にQtのデフォルトで使用される符号化方式がUnicodeであるためである.Windows中国語システムの符号化方式:GBKなど;符号化が一致しないため文字化けしている.
PS:上の方法で中国文化を解決するのは最も優れた方法ではない.最善の方法は英語バージョンを使用し、国際化を通じて中国語バージョンを提供することです.
本題に戻り、翻訳の問題を話す.
Qt自体は国際化されたクラスを提供しています:QTranslator
Qt内部に採用されている全Unicode符号化は,多国語インタフェースの実現の正確性と利便性を根本的に保証している.Qt自体が提供するlinguistツールは、翻訳プロセスを実現するのに便利です.
Qt国際化の使用はまずtr()を使用する必要がある.国際化の必要性から,インタフェースに表示する文字をtr()で包む.推奨される使用方法:ソースコードは英語で、英語から他の言語への翻訳パッケージを提供します.
翻訳ファイルを作成する
まず、翻訳が必要な文字をtr()で包む.この点は非常に重要だ.Qtの翻訳ツールは、ソースコードのtr()に包まれたすべての文字列を抽出し、次の操作に使用するためです.
次に、エンジニアリングファイル*.Proに文を追加する:;tsという名前のファイルを拡張するときにファイルのソースファイルを翻訳します.trに包まれたすべての文字列と位置が含まれています.
名前の付け方は、言語です.ts例:Chinese.ts、English.tsなど.いくつかのtsが必要ならいくつか追加します.
TRANSLATIONS+= Chinese.ts\
               English.ts

再度、lupdateツールコンパイルを使用してtsファイルを抽出します.使用方法は次のとおりです.
Windows下:実行中にcmdを入力し、コマンドラインウィンドウに入り、Cd文を使用してQtインストールディレクトリのbinフォルダに入ります.
入力:lupdate*.pro
*.proにはproファイルのフルパスが含まれています.lupdateは*を解析します.Proファイル、TRANSLATIONS中の*を生成する.tsファイル
今帰って工事の目録で先に*を見ます.tsファイル.
Ubuntu下:端末を開き、lupdateがbinディレクトリの下で直接実行されている場合.ない場合はwindowsの下の操作と同じです.
最後に、Qtが持参するLinguistツールを使用して*.tsファイルは、プロンプトに従って翻訳が必要な文字列ごとに翻訳し、生成されたReleaseバージョン:*.qmファイル
*.qmファイルは私たちが最後に必要とするバイナリファイルです.不要な情報をたくさん取り出しました体積比*.tsファイルはとても小さいです.
以上の手順では、必要な翻訳ファイルを入手しました:*.qm;次に、翻訳を実現するためにこのファイルをロードする必要があります.
漢化プログラム
実装方法は2つあります.
1.ダイレクトロード
コードは次のとおりです.

int main(int argc,char* argv[])
{
         QApplication app(arcg,argv);
         QTranslator translator;
         translator.load(“Chinese”);
         app.installTranslator(&translator);
}

この方法は、プログラムを起動するときに翻訳ファイルを直接ロードすることです.
2.動的ロード
動的ロードには、ウィンドウに動的ロードの関数を定義する必要があります.
void QTest::SL_translate()
{
    if(!isChinese)
    {
        isChinese =true;
        bool bRet =false;
       bRet= m_pTranslator->load("Chinese.qm","./translators/");
        qApp->installTranslator(m_pTranslator);

    }
    else
    {
        isChinese =false;
        qApp->removeTranslator(m_pTranslator);
    }
    reTranslatorUi();
}

これはQtのslots関数で、ここでm_pTranslatorはQTranslatorのクラスポインタです.isChineseはflagsが現在の言語を判断するために使用されます.ここでは、翻訳ファイルのインストールとアンインストールについて説明します.
この関数を使用すると、動的にロードできます.
注意:
ここでは、自分の関数が呼び出され、翻訳ファイルがロードされたことに気づいた人もいます.しかし、インタフェースの文字部分はすべての文字の回転にも対応する言語に変換されていないのはなぜですか.
実は注意深い人はすでに私の関数の最後の行が関数を呼び出したことを発見しました:reTranslatorUi();
翻訳ファイルをロードした後、必要でないステップが必要です.それはtr小包を再ロードする文字列です.
インタフェースがdesignerによって設計されている場合は、retranslateUi()という関数があります.翻訳ファイルをロードすると、プログラムは自動的にこれらの文を呼び出して言語変換を実現します.
しかし、Designerデザイナではなく、自分で言語を使って手書きで作成したインタフェースのコードであれば、言語を切り替える目的で文字列を再ロードするためにretranslateUi()関数を手動で作成する必要があります.
例:
void QTest::reTranslatorUi()
{
    this->setWindowTitle(tr("Test Program"));
     m_pBtn->setText(tr("Translate"));
     g_Str[1]=QObject::tr("SongTi");
     pNew->setText(g_Str[1]);
}

これで私たちの手順は終わりました.
ここでは簡単な例です.Translate