Qt による国際化

アプリケーションの国際化とローカライゼーションは、アプリケーションを異なる言語、地域差、ターゲット市場の技術要件に適応させるプロセスです。

  • 国際化とは、エンジニアリングの変更なしに様々な言語や地域に適応できるようにアプリケーションを設計することです。
  • ローカライゼーションとは、地域固有のコンポーネント(日付、時刻、数値フォーマットなど)を追加したり、テキストを翻訳したりすることによって、国際化されたアプリケーションを特定の地域や言語に適合させることを意味します。

国際化の必要性は、スペルの変更から、アプリケーションが異なる言語で動作し、異なる入力技法、文字エンコーディング、表示規則を使用できるようにすることまで多岐にわたります。

Qt のすべての入力コントロールとテキスト描画メソッドは、サポートされているすべての言語をビルトインでサポートしています。組み込みのフォントエンジンは、様々な異なる文字体系の文字を含むテキストを同時に正しくレンダリングします。

詳しくはを参照してください。
ソースコードの国際化翻訳用ソースコードの記述
翻訳の設定とデプロイ、および既存の Qt モジュールの翻訳の使用アプリケーションのローカライズ
Qt 翻訳ツールを使うQt Linguist マニュアル

次のビデオは、簡単なサンプルアプリケーションの国際化とローカライズの方法を示しています:

国際化のための Qt クラス

以下のクラスは Qt アプリケーションの国際化をサポートします。

QCollator

ローカライズされた照合アルゴリズムに従って文字列を比較します。

QCollatorSortKey

文字列の照合を高速化するために使用できます。

QLocale

様々な言語の数値とその文字列表現を変換する

QStringConverter

テキストのエンコードとデコードのための基本クラス

QStringDecoder

テキストのステートベースデコーダ

QStringEncoder

テキストのステートベースエンコーダ

QTextCodec

テキストエンコーディング間の変換

QTextDecoder

ステートベース・デコーダ

QTextEncoder

ステートベース・エンコーダ

QTranslator

テキスト出力の国際化サポート

アプリケーションでのクラスの使い方の詳細については、翻訳用ソースコードの書き方を参照してください。

言語と書記体系

Qt は現在使われているほとんどのlanguages をサポートしています。

Qt QuickTextInputQLineEditQTextEdit 、および派生クラスなどの入力コントロールや、TextQLabel クラスなどの表示コントロールは、さまざまな書記体系の次のような特別な機能を扱います:

  • 改行

    アジアの言語の中には、単語と単語の間にスペースを入れずに書かれるものがあります。改行は、中国語、日本語、韓国語のように任意の文字の後(例外あり)か、タイ語のように論理的な単語の境界の後に行われます。

  • 双方向表記

    アラビア語とヘブライ語は右から左へ書きますが、数字と埋め込まれた英文は左から右へ書きます。正確な動作はUnicode Technical Annex #9で定義されています。

  • 欧文におけるアクセント記号やウムラウトのようなノンスペーシングまたはダイアクリティカルマーク

    ベトナム語など一部の言語ではこれらの記号が多用されており、発音を明確にするために複数の記号を同時に使用できる文字もあります。

  • 合字

    特殊な文脈では、いくつかの文字のペアは合字を形成する結合グリフに置き換えられる。よくある例はflfi のような欧米書籍の組版に使われる合字である.

Qt のテキストエンジンは、それらをレンダリングするフォントがインストールされていれば、すべてのプラットフォームで動作するさまざまなwriting systems をサポートしています。

独自のテキスト入力コントロールを作成するのでなければ、特定の言語で使用されている文字システムについて知る必要はありません。アラビア語やインド亜大陸の言語のように、周囲の文字によってグリフの幅や形が変わる言語もあります。C++ コ ー ド で こ の点を考慮す る には、QTextLayout を用います。入力コントロールの記述には、使用するスクリプトについての知識も必要です。通常、最も簡単な方法はQLineEditQTextEdit をサブクラス化することです。

エンコーディング

エンコーディングは、アプリケーションのソースファイルと、アプリケーションが読み書きするテ キストファイルの両方に関係します。

ソースコードのエンコード

QMLドキュメントは常にUTF-8形式でエンコードされます。Qt 6以降、Qt C++でも8ビットUTF-8が主流になっています。

lupdate ツールはアプリケーションから UI 文字列を抽出します。デフォルトでは、すべてのソースコードがUTF-8でエンコードされていることを想定しています。

しかし、Visual Studio などのエディタでは、デフォルトで異なるエンコードを使用するものもあります。エンコーディングの問題を回避する1つの方法は、ソースコードをASCIIに限定し、他の文字を含む翻訳可能な文字列にはエスケープ・シーケンスを使用することです:

label->setText(tr("F\374r \310lise"));

QString::toUtf8() はテキストをUTF-8エンコーディングで返し、テキスト全体がASCIIの場合、プレーンASCIIのように見えながらUnicode情報を保持します。Unicodeをローカルの8ビット・エンコーディングに変換するには、QString::toLocal8Bit ()を使用します。Unixシステムでは、これはtoUtf8() と同じです。Windowsでは、システムの現在のコードページが使われます。

UTF-8 およびローカルの 8 ビット・エンコーディングからQString への変換には、QString::fromUtf8() およびQString::fromLocal8Bit() 便利関数を使用します。

テキスト入出力のエンコード

テキスト・ストリームの共通エンコーディングを設定するには、QTextStream::setEncoding() を使用します。

その他のレガシーエンコーディングが必要な場合は、Qt5Compat モジュールのQTextCodec クラスを使用してください。

アプリケーションが起動すると、マシンのロケールによって、外部 8 ビットデータに使用される 8 ビットエンコーディングが決まります。QTextCodec::codecForLocale()は、このロケールエンコーディングとUnicode間の変換に使用できるコーデックを返します。

アプリケーションは、デフォルトのローカルの8ビットエンコーディング以外のエンコーディングを必要とすることがあります。たとえば、キリル文字のKOI8-Rロケール(ロシアの事実上の標準ロケール)のアプリケーションでは、ISO 8859-5エンコーディングでキリル文字を出力する必要があるかもしれません。そのためのコードは次のようになる:

QString string = ...; // some Unicode text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);

次のコードはISO 8859-5キリル文字からUnicodeへの変換を示しています:

QByteArray encodedString = ...; // some ISO 8859-5 encoded text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QString string = codec->toUnicode(encodedString);

サポートされているエンコーディングの完全なリストについては、QTextCodec ドキュメントを参照してください。

オペレーティング・システムとウィンドウ・システム

Qt が動作するオペレーティング・システムやウィンドウ・システムの中には、Unicode を限定的にしかサポートしていないものがあります。基本的なシステムで利用可能なサポートのレベルは、Qt がそれらのプラットフォームで提供できるサポートに多少の影響を与えますが、一般的に Qt アプリケーションはプラットフォーム固有の制限をあまり気にする必要はありません。

Unix/X11

  • Qt はロケール指向のフォントや入力メソッドを隠し、Unicode の入出力を提供します。
  • ほとんどの Unix では、デフォルトで UTF-8 などのファイルシステム規約を使用しています。Qt のすべてのファイル関数は Unicode を許可しますが、Unix の規約に従ってファイル名をローカルの 8 ビットエンコーディ ングに変換します。
  • ファイル I/O のデフォルトはローカルの 8 ビットエンコーディングで、Unicode オプションはQTextStream にあります。
  • 古いUnixディストリビューションには、一部のロケールを部分的にしかサポートしていないものがあります。例えば、/usr/share/locale/ja_JP.EUC ディレクトリがあっても、日本語フォントをインストールしてディレクトリが完全でない限り、日本語テキストを表示することはできません。最良の結果を得るには、システム・ベンダーが提供する完全なロケールを使ってください。

Linux

  • Qt は、入力メソッド、フォント、クリップボード、ドラッグ&ドロップなど、Unicode を完全にサポートしています。
  • ファイルシステムは、最近のすべての Linux ディストリビューションで UTF-8 でエンコードされています。ファイル I/O のデフォルトは UTF-8 です。

Windows

  • Qt は、入力メソッド、フォント、クリップボード、ドラッグ&ドロップ、ファイル名を含む、完全な Unicode サポートを提供します。
  • ファイル I/O のデフォルトは Latin1 で、Unicode オプションはQTextStream にあります。 しかし、Windows プログラムの中には、上位プロトコルがない場合、Unicode 標準で規定されている順序であるにもかかわらず、ビッグエンディアンの Unicode テキストファイルを理解しないものがあります。

Localizing Applications

Qt と Qt Quick アプリを複数の言語にローカライズする

Qt Linguist Examples

Qt Linguist を使って Qt アプリケーションを国際化する

Qt Linguist Manual

Qt 翻訳ツールの使用: lupdate、lrelease、Qt Linguist

Text ID based translations

テキスト ID ベースの国際化は、多くのターゲットロケールと多くのテキストを翻訳する大規模なプロジェクトをサポートします。

Translation Rules for Plural Forms

Qt の翻訳ツールが生成する複数形の翻訳ルールの概要

Writing Source Code for Translation

アプリケーションのローカライズを可能にするソースコードの記述。

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。