Qtの多言語サポート

簡単な紹介

Qtの多言語サポートが非常に強い、非常に良い使用です。

まず、プログラムは翻訳された文字列にする必要があることが強調される最大限に活用されているtr("message")ことは、デフォルト言語の開発プログラムは英語であり、英語での団結を表現する「メッセージ」は、翻訳される文字列で、この形の、 、

開発が完了した後に、Qtのプログラムと多言語ツールは、さまざまな言語に翻訳されます。

ツールを使用する必要がQtはLUPDATE、lrelease、言語学者3が付属している、別のバイナリリリースバージョンは、別のインストールディレクトリに保存されます。

例えば、私のコンパイラのバージョンがあるmingw53_32、次のようにそれらが保存され、その後のパス:

D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\lupdate.exe
D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\linguist.exe
D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\lrelease.exe

あなたが入れない場合は、ビンは、システムへのパスを追加PATHのパス、あなたが開始するための実行可能ファイルへのフルパスを記入する必要があります。

3つのツールの役割

  1. LUPDATEツールを抽出するためのプログラムで使用されtr()、このようなテキストファイルに変換テープなどの機能を含む文字列をproXXX_zh_CN.ts、例えば、簡体字中国語に翻訳が必要である、開発プロセスは、このドキュメントのTSが必要になります。
  2. 言語学者のツールは、ステップTSファイルに開いて、翻訳に開発することができ、そのような「Hello World」を中国語に翻訳としてあなたが記入していない場合、あなたは、対応する単語リストに記入する必要があり、その後、何の翻訳、プログラムの最終出力は、オリジナルではないだろう"Hello World"の。
  3. lrelease TSファイルQM文書を変換するツールのステップは、例えばproXXX_zh_CN.qm、このファイルには、公開アプリケーションがこの文書を提供しなければなら読むためのドキュメントの翻訳を応用したものです。

シンプルなHelloWorldのプログラム

コマンドラインプログラム開発が完了すると、文字列を翻訳する必要があり、文字列中のコード行です。

qDebug().noquote() << QObject::tr("hello world") << endl;

翻訳プロセスは、以下の一般的な手順:

  1. 開発と応用(英語など)デフォルトの言語。
  2. アプリケーション開発が完了し、あるLUPDATEでTSファイルに変換するための抽出ツールの文字列言語学者オープンTSファイル、テキスト翻訳ツール。
  3. lrelease QM文書にTSファイルを変換するツール。
  4. QMプログラムファイルをロードし、翻訳オブジェクトをインストールします。
  5. パッケージ化し、アプリケーションをリリースしました。

ハンズオン例

アプリケーションを開発するために0デフォルト言語

新しいコンソールアプリケーション作成したHelloWorldをして、qDebug()単一の文で出力。

1.実装LUPDATEファイルを生成された文字列抽出TSを変換する、として言語学者オープンツールと翻訳

次のようにアクションのこのシリーズは、私は、スクリプトを実現し、コードは次のとおりです。

:: @ECHO OFF
SET LUPDATE_BIN=D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\lupdate.exe
SET LINGUIST_BIN=D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\linguist.exe
SET PRO_NAME=helloworld.pro
SET TS_FILENAME=helloworld_zh_CN.ts

START %LUPDATE_BIN% -pro %PRO_NAME% -ts %TS_FILENAME%

START %LINGUIST_BIN% %TS_FILENAME%

EXIT

機能は非常に簡単です、最初のセットのLUPDATE言語学者ツールパスとプロジェクト設定とファイル名に応じてプロジェクトのファイル名が翻訳され、その後、プログラムを起動するために、TSファイル、使用して、第2の1の生成するには、まず言語学者を開いただけで生成されたTSファイルを。

このアプリケーションでは、例えば、翻訳される、1つの単語だけ、があります:

2.翻訳が完了し、あるlrelease QMをファイルにTSファイルを変換するツール

私はまた、次のコードを達成するために、このアクションスクリプトを使用します。

:: convert *.ts to *.qm file.
SET LRELEASE_BIN=D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\lrelease.exe
SET TS_FILENAME=helloworld_zh_CN.ts
SET QM_FILENAME=helloworld_zh_CN.qm

START %LRELEASE_BIN% %TS_FILENAME% -qm %QM_FILENAME%

3. QMをロードするためのプログラムファイルにコードを変更

このステップは、キー、いくつかの小さなステップに分割されています。

  1. ヘッダファイルが含まれている#include <QTranslator>PROファイルにこの文を追加することに注意してください、TRANSLATIONS = helloworld_zh_CN.ts
  2. 新建一个 QTranslator translator_zh_CN 示例,然后加载QM文件,相关代码如下:
    QTranslator translator_zh_CN;

    // [1] tries to load a file called helloworld_zh_CN.qm
    //translator_zh_CN.load("helloworld_zh_CN"); // not work
    translator_zh_CN.load(":/translations/helloworld_zh_CN");

这里的 QM 文件我是添加到 QRC 文件中,所以引用的路径是以 :/prefix/filename 形式。

QRC 文件如何使用以后再说。

  1. 安装翻译语言,一句话搞定 app.installTranslator(&translator_zh_CN);

4. 发布应用程序

不是本文重点,以后再说。

附上源文件

helloworld.pro 内容如下:

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# [3] add this file to the project.
TRANSLATIONS = helloworld_zh_CN.ts

RESOURCES += \
    helloworld.qrc

main.cpp 内容如下:

#include <QCoreApplication>
// it MUST be included if you want to support multiple languages.
#include <QTranslator>

#include <QObject>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QTranslator translator_zh_CN;

    // [1] tries to load a file called helloworld_zh_CN.qm
    //translator_zh_CN.load("helloworld_zh_CN"); // not work
    translator_zh_CN.load(":/translations/helloworld_zh_CN");

    // [2] install the translator
    app.installTranslator(&translator_zh_CN);
    qDebug().noquote() << QObject::tr("hello world") << endl;

    return app.exec();
}

helloworld.qrc 内容如下:

<RCC>
    <qresource prefix="/translations">
        <file alias="helloworld_zh_CN">helloworld_zh_CN.qm</file>
    </qresource>
</RCC>

最后是调用 lupdate, linguistlrelease 的脚本.

lupdate_helloworld.bat 内容如下:

:: @ECHO OFF
SET LUPDATE_BIN=D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\lupdate.exe
SET LINGUIST_BIN=D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\linguist.exe
SET PRO_NAME=helloworld.pro
SET TS_FILENAME=helloworld_zh_CN.ts

START %LUPDATE_BIN% -pro %PRO_NAME% -ts %TS_FILENAME%

START %LINGUIST_BIN% %TS_FILENAME%

EXIT

lrelease_helloworld.bat 内容如下:

:: convert *.ts to *.qm file.
SET LRELEASE_BIN=D:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin\lrelease.exe
SET TS_FILENAME=helloworld_zh_CN.ts
SET QM_FILENAME=helloworld_zh_CN.qm

START %LRELEASE_BIN% %TS_FILENAME% -qm %QM_FILENAME%

声明

欢迎转载,请注明出处和作者,同时保留声明。
作者:LinTeX9527
出处:https://www.cnblogs.com/LinTeX9527/p/10988561.html
本博客的文章如无特殊说明,均为原创,转载请注明出处。如未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

おすすめ

転載: www.cnblogs.com/LinTeX9527/p/10988561.html