跳转到主要内容

二进制翻译

本节描述如何在TouchGFX中使用二进制翻译。 正常情况下,文本翻译文件会被编译到应用中。 这一原则高效且易于使用。 二进制翻译使应用程序不含文本翻译。 二进制翻译在单独的二进制文件中生成,该文件可编程到闪存中或存储在SD卡等存储设备上。 在处理大量翻译文件时,为应用开发者带来了更大灵活性。

翻译

TouchGFX中的Text类包含指针阵列,指针指向应用中每种语言的翻译表。 翻译表基本上是语言中使用的所有字符串的集合:

将文本映射到特定语言

此表使TouchGFX能够找到以选中语言书写的给定文本。

映射到二进制翻译

在运行时间使用二进制翻译时,可以将映射从内编译翻译更改为二进制翻译。 必须在可寻址存储器(闪存或RAM)中提供二进制翻译。 例如,可以从磁盘加载或在生产过程中写入闪存。

配置文本转换器

可将TouchGFX文本转换器配置为生成二进制翻译。 这在TouchGFX Designer 4.13中很容易做到。 转至“配置”选项卡,选择“文本配置”,然后点击“二进制翻译文件”

启用二进制翻译

在下一次生成代码时,二进制翻译将会出现在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();

这将强制重绘。 在某些情况下,最好更换屏幕,以便从头进行设置(如重新计算TextArea大小)。 通过在TouchGFX Designer中创建具有“更换屏幕”操作的交互,可以更换屏幕。 参见相关文章