Qt による国際化
アプリケーションの国際化とローカライゼーションは、アプリケーションを異なる言語、地域差、ターゲット市場の技術要件に適応させるプロセスです。
- 国際化とは、エンジニアリングの変更なしに様々な言語や地域に適応できるようにアプリケーションを設計することです。
- ローカライゼーションとは、地域固有のコンポーネント(日付、時刻、数値フォーマットなど)を追加したり、テキストを翻訳したりすることによって、国際化されたアプリケーションを特定の地域や言語に適合させることを意味します。
国際化の必要性は、スペルの変更から、アプリケーションが異なる言語で動作し、異なる入力技法、文字エンコーディング、表示規則を使用できるようにすることまで多岐にわたります。
Qt のすべての入力コントロールとテキスト描画メソッドは、サポートされているすべての言語をビルトインでサポートしています。組み込みのフォントエンジンは、様々な異なる文字体系の文字を含むテキストを同時に正しくレンダリングします。
詳しくは | を参照してください。 |
---|---|
ソースコードの国際化 | 翻訳用ソースコードの記述 |
翻訳の設定とデプロイ、および既存の Qt モジュールの翻訳の使用 | アプリケーションのローカライズ |
Qt 翻訳ツールを使う | Qt Linguist マニュアル |
次のビデオは、簡単なサンプルアプリケーションの国際化とローカライズの方法を示しています:
国際化のための Qt クラス
以下のクラスは Qt アプリケーションの国際化をサポートします。
ローカライズされた照合アルゴリズムに従って文字列を比較します。 | |
文字列の照合を高速化するために使用できます。 | |
様々な言語の数値とその文字列表現を変換する | |
テキストのエンコードとデコードのための基本クラス | |
テキストのステートベースデコーダ | |
テキストのステートベースエンコーダ | |
テキストエンコーディング間の変換 | |
ステートベース・デコーダ | |
ステートベース・エンコーダ | |
テキスト出力の国際化サポート |
アプリケーションでのクラスの使い方の詳細については、翻訳用ソースコードの書き方を参照してください。
言語と書記体系
Qt は現在使われているほとんどのlanguages をサポートしています。
Qt QuickTextInput 、QLineEdit 、QTextEdit 、および派生クラスなどの入力コントロールや、Text 、QLabel クラスなどの表示コントロールは、さまざまな書記体系の次のような特別な機能を扱います:
- 改行
アジアの言語の中には、単語と単語の間にスペースを入れずに書かれるものがあります。改行は、中国語、日本語、韓国語のように任意の文字の後(例外あり)か、タイ語のように論理的な単語の境界の後に行われます。
- 双方向表記
アラビア語とヘブライ語は右から左へ書きますが、数字と埋め込まれた英文は左から右へ書きます。正確な動作はUnicode Technical Annex #9で定義されています。
- 欧文におけるアクセント記号やウムラウトのようなノンスペーシングまたはダイアクリティカルマーク
ベトナム語など一部の言語ではこれらの記号が多用されており、発音を明確にするために複数の記号を同時に使用できる文字もあります。
- 合字
特殊な文脈では、いくつかの文字のペアは合字を形成する結合グリフに置き換えられる。よくある例は
fl
やfi
のような欧米書籍の組版に使われる合字である.
Qt のテキストエンジンは、それらをレンダリングするフォントがインストールされていれば、すべてのプラットフォームで動作するさまざまなwriting systems をサポートしています。
独自のテキスト入力コントロールを作成するのでなければ、特定の言語で使用されている文字システムについて知る必要はありません。アラビア語やインド亜大陸の言語のように、周囲の文字によってグリフの幅や形が変わる言語もあります。C++ コ ー ド で こ の点を考慮す る には、QTextLayout を用います。入力コントロールの記述には、使用するスクリプトについての知識も必要です。通常、最も簡単な方法はQLineEdit かQTextEdit をサブクラス化することです。
エンコーディング
エンコーディングは、アプリケーションのソースファイルと、アプリケーションが読み書きするテ キストファイルの両方に関係します。
ソースコードのエンコード
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 テキストファイルを理解しないものがあります。
関連トピック
Qt と Qt Quick アプリを複数の言語にローカライズする | |
Qt Linguist を使って Qt アプリケーションを国際化する | |
Qt 翻訳ツールの使用: lupdate、lrelease、Qt Linguist | |
テキスト ID ベースの国際化は、多くのターゲットロケールと多くのテキストを翻訳する大規模なプロジェクトをサポートします。 | |
Qt の翻訳ツールが生成する複数形の翻訳ルールの概要 | |
アプリケーションのローカライズを可能にするソースコードの記述。 |
©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。