メイン・コンテンツまでスキップ

バイナリ翻訳

このセクションでは、TouchGFXでバイナリ翻訳を使用する方法について説明します。 通常、テキスト翻訳はアプリケーションにコンパイルされます。 この方法は効率的で使いやすいものです。 バイナリ翻訳では、テキストの翻訳をアプリケーション外に保持します。 バイナリ翻訳は独立したバイナリ・ファイル内に生成され、Flashにプログラミングするか、SDカードに保存することができます。 これにより、アプリケーション開発者が多数の翻訳を処理するときに大きな柔軟性がもたらされます。

Translations(翻訳)

TouchGFXのTextクラスには、アプリケーション内の各言語の翻訳テーブルへのポインタを備えた、ポインタ配列が含まれます。 原則として、翻訳テーブルとはその言語で使用されるすべての文字列のコレクションです。

テキストから特定言語へのマッピング

このテーブルにより、TouchGFXは選択した言語内で特定のテキストを検索できます。

バイナリ翻訳へのマッピング

実行時にバイナリ翻訳を使用するときには、コンパイルで組み込まれた翻訳からバイナリ翻訳にマッピングを変更します。 バイナリ翻訳をアドレス指定可能なメモリ(FlashまたはRAM)で使用可能にする必要があります。 これは、ディスクから読み込んだり、生成時にFlashに書き込んだりできます。

テキスト・コンバータの設定

TouchGFXのテキスト・コンバータは、バイナリ翻訳を生成するように設定できます。 この設定はTouchGFX Designer 4.13で簡単にできます。 Configタブに移動して、"Text Configuration"を選択し、"Binary translation files"をクリックします。

バイナリ翻訳の有効化

次回コードを生成するときには、バイナリ翻訳がgenerated/texts/binaryフォルダに生成されます。

バイナリ翻訳が生成されると、アプリケーションにコンパイルされた翻訳言語は空になります。 このため、バイナリ翻訳を読み込むまでテキストは表示されません。

バイナリ翻訳のインストール

アプリケーションはバイナリ翻訳をメモリに読み込んだら、TouchGFXにこれをインストールします。 これでTouchGFXがその翻訳を使用するようになります。 アプリケーションによっては、この処理を別の場所やタイミングで実行します(たとえば、gui/src/common/FrontApplication.cppにあるFrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)コンストラクタを使用します)。

次に示す例では、ファイルシステムから英語の翻訳を読み込み、それを"GB"という言語としてインストールしています。

//read the translation into this global array
uint8_t translation[10000];
...

//read the translation from a file, or change array to a pointer that points
//to the translation data in internal or addressable external flash
FILE* file = fopen("generated/texts/binary/LanguageGb.bin", "rb");
if (file)
{
//read data from file
fread(translation, 1, 10000, file);
fclose(file);

//replace empty translation with the binary data
Texts::setTranslation(GB, translation);

//always change language to get TouchGFX changed from the
//empty translation compiled in to the binary translation
Texts::setLanguage(GB);
}

翻訳のインストール後に、言語を変更する必要があることに注意してください。 そうしないと、TouchGFXは以前の翻訳言語を使い続けることになります。 言語の変更については、こちらを参照してください。

新しいテキスト表示するには、現在のスクリーンを強制的に再描画するか、スクリーンを変更する必要もあります(ディスプレイ上で使用する言語の翻訳を読み込んでいる場合)。 TouchGFXが何かを自動的に再描画することはありません。

現在のスクリーンは、ルート・コンテナを無効化することで再描画できます。

invalidate();

これにより強制的に再描画されます。 場合によっては、スクリーンを変更してすべて最初から再設定した方がいいこともあります(テキスト・エリアのサイズを再計算する場合など)。 スクリーンを変更するには、TouchGFX Designerで"Change Screen"アクションを使用してインタラクションを作成します。 こちらの記事を参照してください。