C
Qt Quick Ultraliteによる国際化とローカライゼーション
Qtベース
Qt Quick Ultraliteの機能は、Qtの国際化とローカライゼーションをベースにしています。 Qt Linguist.このドキュメントでは、Qtとの違い、強化点、制限について説明します。
翻訳
QMLファイルのqsTr() またはqsTrId() 関数を使用して、文字列リテラルを翻訳用にマークします。このようなマークされた文字列リテラルはツールによって検出され、その文字列を含む QML ファイルと同じ QmlProject 内の TranslationFiles ノードに登録された翻訳元ファイル(.ts)が更新されます。
重要: アプリケーションでは、これら2つの選択肢のどちらかを使用してください。この2つの選択肢の両方を同じアプリケーションで使用すると、予期しない動作が発生する可能性があります。
翻訳可能な文字列を含むQMLファイルを含むQmlProjectファイルのそれぞれに、各言語の.ts 。アプリケーションの一部で翻訳が欠落しないように、すべてのQmlProjectファイルに、アプリケーションがサポートする各言語の.ts 。
.ts ファイルは翻訳リリースファイル(.qm)にコンパイルされ、 QMLコンパイラに渡されます。コンパイラはqsTr() またはqsTrId() の呼び出しを、Qt.uiLanguage プロパティに基づいた正しい文字列の検索に置き換えます。
Qt.uiLanguage プロパティは、他のバインディングでも使用することができ、アクティブな言語 に基づいた判断を行うことができます。
各.ts ファイルは、Qt.uiLanguage プロパティを設定することで、実行時に切り替えることができる翻訳言語を紹介します。言語の名前は、.ts ファイルの名前から派生します。例えば、"app_nb_NO.ts "ファイルでは、ノルウェー語ブークモール(Norwegian Bokmål)のISO言語コードであるnb_NO の翻訳が定義されています。
Qt.uiLanguage が空の場合、翻訳は適用されず、ソース・コードで使用されている文字列が表示されます。
デフォルトでは、QML のqsTr() またはqsTrId() に指定されたソース文字列(または ID)も表示されます。ソース文字列を省略し、宣言された翻訳のみを含めるには、TranslationFiles.MCU.omitSourceLanguageを false に設定します。
翻訳例では、qsTr() とQt.uiLanguage プロパティを使用する方法を示しています。
注意: 少なくとも1つの宣言された.ts ファイルが存在しない場合、qmlprojectexporter は、アプリケーションのビルドを構成するときに、lupdate を実行してファイルを作成します。
CMakeを使ったビルド
ターゲット言語の翻訳ソースファイルを QmlProject にリストアップし、 その QmlProject ファイルをqul_add_target でQML_PROJECT を指定して使うと、 以下のような効果があります:
- デフォルトのビルドには含まれない
update_translationsCMake ターゲットが作成されます。このターゲットのビルドをトリガーとして、ソースコードから翻訳可能な新しい文字列や変更された文字列を含む.tsファイルを作成または更新します。 .tsファイルからの翻訳をプログラムバイナリに埋め込むようにビルドシステムを設定します。- 宣言された翻訳ソースファイルのうち少なくとも1つが存在しない場合、すべての翻訳ソースファイルが作成され(まだ存在しない場合)、宣言されたQMLソースファイルに現在存在するソース文字列で更新されます。
スタンドアロンqmlprojectexporter
CMake 以外のビルドシステムを使って開発する場合、qmlprojectexporter を実行することで、翻訳を更新することができます。詳細はqmlprojectexporter の update translation 引数を参照してください。
テキスト ID ベースの翻訳
テキストID翻訳メカニズムは国際化とローカライゼーションのための強力なシステムです。アプリケーションの各テキストは一意な識別子(テキスト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つの方法があります。
- ターゲットpostfix
特別なターゲットpostfixでプロジェクトをビルドし、バイナリリソースの生成のみをトリガします。
cmake --build . --target <APPLICATION>_resource_binaries
- スタンドアロンのqmlprojectexporter
qmlprojectexporterを --generate-resource-binariesオプションをつけて実行し、翻訳リソースのバイナリを生成します。
qmlprojectexporter、MCU.Config.fontFilesStorageSection、MCU.Config.translationStorageSection、リンカースクリプトセットアップも参照してください 。
特定の Qt ライセンスの下で利用可能です。
詳細を確認してください。