Qt による国際化
アプリケーションの国際化および地域化とは、対象市場のさまざまな言語、地域的な違い、および技術的要件に合わせてアプリケーションを適応させるプロセスです。
- 国際化とは、技術的な変更を加えることなく、さまざまな言語や地域に対応できるようにアプリケーションを設計することを意味します。
- ローカライゼーションとは、ロケール固有のコンポーネント(日付、時刻、数値の形式など)を追加し、テキストを翻訳することで、国際化されたアプリケーションを特定の地域や言語に適応させることを意味します。
国際化の必要性は、スペルの変更から、アプリケーションがさまざまな言語で動作したり、さまざまな入力手法、文字エンコーディング、表示規則を使用したりできるようにすることまで多岐にわたります。
Qt のすべての入力コントロールおよびテキスト描画メソッドは、サポートされているすべての言語に対して組み込みのサポートを提供しています。組み込みのフォントエンジンは、さまざまな文字体系の文字が同時に含まれるテキストを正しくレンダリングします。
| 詳細については、以下を参照してください。 | 参照 |
|---|---|
| ソースコードの国際化 | 翻訳のためのソースコードの記述 |
| 翻訳の設定と展開、および既存の Qt モジュールの翻訳の使用 | アプリケーションのローカライズ |
| Qt 翻訳ツールの使用 | Qt Linguist マニュアル |
以下の動画では、簡単なサンプルアプリケーションを国際化およびローカライズする方法を紹介しています:
国際化のための Qt クラス
以下のクラスは、Qtアプリケーションの国際化をサポートしています。
ローカライズされた照合順序アルゴリズムに基づいて文字列を比較します | |
文字列の照合を高速化するために使用できます | |
さまざまな言語における数値とその文字列表現間の変換を行います | |
テキストのエンコードおよびデコードを行う基底クラス | |
テキスト用の状態ベースのデコーダ | |
テキスト用の状態ベースのエンコーダ | |
テキストエンコーディング間の変換 | |
状態ベースのデコーダ | |
状態ベースのエンコーダ | |
テキスト出力のための国際化サポート |
アプリケーションでのクラスの使用方法の詳細については、「翻訳用のソースコードの記述」を参照してください。
言語と文字体系
Qt は、現在使用されているほとんどの「languages 」をサポートしています。
Qt Quick のTextInput 型やQLineEdit 、QTextEdit 、およびそれらの派生クラスといった入力コントロール、ならびにText 型やQLabel クラスといった表示コントロールは、さまざまな文字体系における以下の特別な機能を処理します。
- 改行
一部のアジア言語では、単語間にスペースを入れずに表記されます。改行は、中国語、日本語、韓国語のように(例外はあるものの)任意の文字の後に発生する場合もあれば、タイ語のように論理的な単語の区切りの後に発生する場合もあります。
- 双方向書き
アラビア語とヘブライ語は右から左へ記述されますが、数字や埋め込まれた英語のテキストは左から右へ記述されます。具体的な動作は、Unicode 技術付録 #9 で定義されています。
- ヨーロッパ諸語のアクセントやウムラウトなどの非スペース記号または発音区別符号
ベトナム語など一部の言語では、これらの記号が広く使用されており、発音を明確にするために、1つの文字に複数の記号が同時に付く場合もあります。
- 合字
特定の状況下では、一部の文字の組み合わせが、合字を形成する結合されたグリフに置き換えられます。一般的な例としては、米国やヨーロッパの書籍の組版で使用される「
fl」や「fi」といった合字が挙げられます。
Qtのテキストエンジンは、レンダリング用のフォントがインストールされていれば、すべてのプラットフォームで動作するさまざまなwriting systems をサポートしています。
独自のテキスト入力コントロールを作成する場合を除き、特定の言語で使用される文字体系について知る必要はありません。 アラビア語やインド亜大陸の言語など、一部の言語では、周囲の文字に応じてグリフの幅や形状が変化します。C++ コードでこれを考慮するには、QTextLayout を使用します。入力コントロールを作成するには、それが使用される文字体系に関する知識も多少必要になります。通常、最も簡単な方法は、QLineEdit またはQTextEdit をサブクラス化することです。
エンコーディング
エンコーディングは、アプリケーションのソースファイルと、アプリケーションが読み書きするテキストファイルの両方に関連します。
ソースコードのエンコーディング
Qt 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系OSでは、デフォルトでUTF-8などのファイルシステム規約が採用されています。Qtのすべてのファイル関数はUnicodeに対応していますが、Unixの規約に従い、ファイル名はローカルの8ビットエンコーディングに変換されます。
- ファイル I/O はデフォルトでローカルの 8 ビットエンコーディングを使用しますが、QTextStream には Unicode オプションがあります。
- 一部の古いUnixディストリビューションでは、特定のロケールに対するサポートが不完全な場合があります。たとえば、
/usr/share/locale/ja_JP.EUCディレクトリが存在しても、日本語フォントをインストールせず、かつディレクトリの内容が完全でない限り、日本語テキストを表示することはできません。最適な結果を得るには、システムベンダーが提供する完全なロケールを使用してください。
Linux
- Qt は、入力メソッド、フォント、クリップボード、ドラッグ&ドロップを含め、完全な Unicode サポートを提供しています。
- 最新の Linux ディストリビューションでは、ファイルシステムはすべて UTF-8 でエンコードされています。ファイル I/O のデフォルトは UTF-8 です。
Windows
- Qt は、入力メソッド、フォント、クリップボード、ドラッグ&ドロップ、ファイル名など、Unicode を完全にサポートしています。
- ファイル I/O はデフォルトで Latin1 ですが、QTextStream で Unicode オプションを設定できます。ただし、一部の Windows プログラムは、より高レベルのプロトコルがない場合、Unicode 標準で規定されている順序であるにもかかわらず、ビッグエンディアンの Unicode テキストファイルを理解できません。
関連トピック
Qt およびQt Quick アプリケーションを複数の言語にローカライズする。 | |
Qt の翻訳システムで使用されるメタ文字列のリファレンスガイド | |
Qt Linguist を使用した Qt アプリケーションの国際化 | |
Qt翻訳ツールの使用:lupdate、lrelease、およびQt Linguist | |
テキストIDベースの国際化は、対象ロケールが多く、翻訳すべきテキストも多数ある大規模プロジェクトに対応しています | |
Qtの翻訳ツールによって生成される複数形に関する翻訳ルールの概要。 | |
アプリケーションのローカライズを可能にするソースコードの記述 |
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.