C
Qt Quick Ultralite による国際化とローカライズ
Qtをベースに
Qt Quick Ultraliteの機能は、Qtの国際化およびローカライズ機能に基づいており Qt Linguist。本ドキュメントでは、Qtとの比較における相違点、機能強化、および制限事項について説明します。
翻訳
QMLファイル内で、翻訳対象の文字列リテラルをマークするには、qsTr() またはqsTrId() 関数のいずれかを使用します。このようにマークされたすべての文字列リテラルはツールによって検出され、それらの文字列を含むQMLファイルと同じQmlProject内のTranslationFilesノードに登録された翻訳ソースファイル(.ts )が更新されます。
重要: アプリケーションでは、これら2つの方法のうちいずれか1つを使用してください 。同じアプリケーションで両方を併用すると、予期しない動作を引き起こす可能性があります。
翻訳可能な文字列を含むQMLファイルがある各QmlProjectファイルに対して、言語ごとに.ts ファイルを追加してください。アプリケーションの一部で翻訳が欠落するのを防ぐため、すべてのQmlProjectファイルに、アプリケーションがサポートする各言語に対応する.ts ファイルが含まれていることを確認してください。
.ts ファイルは翻訳リリースファイル(.qm )にコンパイルされ、QMLコンパイラに渡されます。QMLコンパイラは、qsTr() またはqsTrId() の呼び出しを、Qt.uiLanguage プロパティに基づいて正しい文字列を検索する処理に置き換えます。
Qt.uiLanguage プロパティは、他のバインディングでも、アクティブな言語に基づいて判断を行うために使用できます。
各.ts ファイルは、Qt.uiLanguage プロパティを設定することで実行時に切り替えることができる翻訳済み言語を導入します。言語名は、.ts ファイルの名前に基づいて決定されます。たとえば、「app_nb_NO.ts」ファイルは、nb_NO の翻訳を定義しており、これはノルウェー語(ブークモール)のISO言語コードです。
Qt.uiLanguage が空の場合、翻訳は適用されず、ソースコードで使用されている文字列が表示されます。
デフォルトでは、アプリケーションには、QML内のqsTr() またはqsTrId() に指定されたソース文字列(またはID)も含まれます。ソース文字列を省略し、宣言された翻訳のみを含めるには、TranslationFiles.MCU.omitSourceLanguageを false に設定してください。
翻訳の例では、qsTr() およびQt.uiLanguage プロパティの使用方法を示しています。
注: 宣言された.ts ファイルのうち、少なくとも1つが存在しない場合 、アプリケーションのビルド設定時にqmlprojectexporter はlupdate を実行して、それらのファイルを作成します。
CMake を使用したビルド
QmlProject にターゲット言語の翻訳ソースファイルを一覧表示し、QML_PROJECTを指定してqul_add_target でその QmlProject ファイルを使用すると、次のような効果が得られます:
- デフォルトのビルドには含まれていない「
update_translations」という CMake ターゲットが生成されます。このターゲットのビルドを実行すると、ソースコードから新しい翻訳可能文字列や変更された翻訳可能文字列を取り込み、.tsファイルが作成または更新されます。 - また、
.tsファイルからの翻訳をプログラムのバイナリに埋め込むよう、ビルドシステムを設定します。 - 宣言された翻訳ソースファイルのうち、少なくとも 1 つが存在しない場合、すべての翻訳ソースファイルが(まだ存在しない場合は)作成され、宣言された QML ソースファイルに現在存在するソース文字列で更新されます。
スタンドアロンqmlprojectexporter
CMake 以外のビルドシステムを使用して開発する場合、qmlprojectexporter を翻訳の更新のみを目的として実行することができます。詳細については、qmlprojectexporter の update translation 引数を参照してください。
テキストIDベースの翻訳
テキスト ID による翻訳メカニズムは、国際化およびローカライゼーションのための堅牢なシステムです。アプリケーション内の各テキストには一意の識別子(テキスト ID)が割り当てられており、ソースコード内では「text」の代わりにこのテキスト ID を使用します。これにより、大量の翻訳テキストの管理が格段に容易になります。
.qmlproject ファイルでidBasedTranslationsをtrueに設定すると、プロジェクトでテキストIDベースの翻訳が有効になります。QMLファイルでは、qsTr() の代わりにqsTrId() 関数を使用して、テキストIDベースの翻訳対象となる文字列を指定してください。
注: 1つのアプリケーション内では、プレーンテキストベースの関数のみ、またはテキストIDベースの関数のみを使用する必要があります 。これらを混在させると、翻訳対象のテキストセットが不完全になってしまいます。アプリケーション内のQMLモジュールに翻訳対象のQMLファイルが含まれる場合、そのQMLモジュールはメインプロジェクトと同じ翻訳メカニズムに従う必要があります。
メモリの最適化
IDベースの翻訳を使用する場合、アプリケーションがソース文字列を表示することは想定されていません。idBasedTranslationsが有効になっている場合、ROMの占有容量を削減するために、TranslationFiles.MCU.omitSourceLanguageフラグをtrue に設定することを強く推奨します。
Qt Design Studio 翻訳
Qt Design Studio では、「Translations」ビューを使用して翻訳を作成・管理できます。この機能を使用すると、Qt Design Studio が自動的に.qmlproject ファイルを更新し、翻訳をアプリケーションに組み込みます。
制限事項
現在、以下の機能はサポートされていません:
- C++ファイル内の文字列の翻訳
- QmlProject ベースではない CMake API を使用したテキスト ID に基づく翻訳
qsTr()やqsTrId()以外の翻訳関数(例:qsTranslate()、QT_TR_NOOP()、QT_TRANSLATE_NOOP()、およびQT_TRID_NOOP()qsTr()における複数形の曖昧性解消引数やqsTrId()
翻訳データの保存
MCU.Config.translationStorageSectionプロパティを指定することで、翻訳データをメモリ内のどこに配置するかを制御し、他のアプリケーションリソースとは別に管理することができます。セクションが指定されていない場合、翻訳データは"QulFontResourceData" のデフォルトセクションに格納されます。
デフォルトの保存セクションには他のフォント関連データも含まれているため、セクションを明確に区別するためにカスタム名を割り当ててください。また、そのセクションがメモリ内で適切にマッピングされるよう、リンカースクリプトも更新してください。詳細については、「リンカースクリプトの設定」を参照してください。
警告: 翻訳データ格納セクションは 、画像ファイル(ImageFiles)に使用されるセクションと重複してはなりません。
翻訳データの再生成
バイナリリソースを個別に生成することも可能です。これは、アプリケーションを変更せずにTranslationFilesのみを更新する必要がある場合に便利です。バイナリリソースの生成には2つの方法があります。
- ターゲットの接尾辞
バイナリリソースの生成のみを実行するように、特別なターゲット接尾辞を指定してプロジェクトをビルドします。
cmake --build . --target <APPLICATION>_resource_binaries - スタンドアロンのqmlprojectexporter
--generate-resource-binariesオプションを指定してqmlprojectexporterを実行し、翻訳リソースのバイナリを生成します。
qmlprojectexporter、MCU.Config.fontFilesStorageSection、MCU.Config.translationStorageSection、およびリンカースクリプトの設定も参照してください 。
特定のQtライセンスの下で利用可能です。
詳細はこちらをご覧ください。