주요 내용으로 건너뛰기

바이너리 번역

이 섹션에서는 TouchGFX에서 바이너리 번역을 사용하는 방법을 알아보겠습니다. 일반적으로 텍스트 번역은 애플리케이션으로 컴파일됩니다. 이러한 원리는 효율적이고 사용하기 쉽습니다.
바이너리 번역에서는 텍스트 번역이 애플리케이션으로 컴파일되지 않습니다. 바이너리 번역은 별도의 바이너리 파일에서 생성되어 플래싱할 수 있도록 프로그래밍되거나, 예를 들어 SD 카드에 저장됩니다. 이러한 방식은 애플리케이션 개발자가 많은 양의 번역을 처리할 때 더욱 높은 유연성을 발휘합니다.

번역

TouchGFX의 텍스트 클래스에는 애플리케이션에서 사용되는 각 언어의 번역 테이블을 가리키는 포인터가 있는 포인터 어레이가 있습니다. 번역 테이블이란 원칙적으로 해당 언어에서 사용되는 모든 문자열을 모아 놓은 것을 말합니다.

텍스트를 특정 언어로 매핑하기

TouchGFX는 이 테이블을 통해 선택한 언어에서 지정된 텍스트를 찾습니다.

바이너리 번역으로 매핑하기

런타임에서 바이너리 번역을 사용하면 컴파일된 번역에서 바이너리 번역으로 매핑이 바뀝니다. 바이너리 번역은 주소 지정이 가능한 메모리(플래시 또는 RAM)에서 사용할 수 있어야 합니다. 예를 들어 생성 과정에서 디스크에서 읽어오거나, 플래시로 작성할 수 있습니다.

텍스트 변환 도구 구성하기

TouchGFX 텍스트 변환 도구는 바이너리 번역을 생성하도록 구성할 수 있는데, TouchGFX Designer 4.13에서 이를 쉽게 구성할 수 있습니다. 다음과 같이 Config 탭으로 이동하여 "Text Configuration"을 선택한 다음 "Binary translation files"를 클릭하면 됩니다.

바이너리 번역 활성화하기

그러면 다음에 코드를 생성하면 generated/texts/binary 폴더에 바이너리 번역이 생성됩니다.

바이너리 번역이 생성되면 애플리케이션에 컴파일된 번역은 비워집니다. 따라서 바이너리 번역을 로드해야만 텍스트가 표시됩니다.

바이너리 번역 설치

애플리케이션의 메모리에 바이너리 번역이 있으면 TouchGFX에 설치할 수 있습니다. 이후부터는 TouchGFX가 바이너리 번역을 사용합니다. 애플리케이션에 따라 바이너리 번역을 사용하는 위치나 시간이 다를 수 있습니다(예를 들어 gui/src/common/FrontApplication.cppFrontendApplication::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에서 "스크린 변경" 액션을 사용하면 상호작용을 생성하여 스크린을 변경할 수 있습니다. 자세한 내용은 여기를 참조하십시오.