주요 내용으로 건너뛰기

바이너리 번역

이 섹션에서는 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에서 "스크린 변경" 액션을 사용하면 상호작용을 생성하여 스크린을 변경할 수 있습니다. 자세한 내용은 여기를 참조하십시오.