언리얼 엔진(UE) 에서 텍스트 현지화를 위한 주요 컴포넌트는 FText 클래스입니다. 이 클래스는 다음 기능을 제공하여 텍스트 현지화를 지원하므로 모든 사용자 대상 텍스트는 이 클래스를 사용해야 합니다.
FText 에는 현지화되지 않거나 '컬처 무관' 텍스트를 생성하는 AsCultureInvariant 함수(또는 INVTEXT 매크로)도 있습니다. 이는 외부 API의 플레이어 이름을 사용자 인터페이스에 표시할 수 있는 이름으로 변환하는 것과 같은 작업에 유용합니다.
FText::GetEmpty() 를 사용하거나 FText() 만 사용하여 빈 FText 를 만들 수 있습니다.
변환
FText 를 FString 으로 변환하거나 그 반대도 가능합니다. 그러나 FText 에는 현지화 데이터에 연결된 문자열이 포함되어 있는 반면, FString 에는 문자열만 포함되어 있기 때문에 이러한 메서드는 본질적으로 손실이 있고 현지화 데이터를 삭제(또는 생성에 실패)합니다. 대안책인 텍스트 값 마샬링은 무손실 변환을 제공하지만 이 방법은 사람이 사용하는 것보다 내부 마샬링에 더 적합한 데이터를 생성합니다.
다음 변환 함수는 FText 문자열을 생성하지만 현지화 데이터는 없습니다.
FText 함수 |
설명 |
|---|---|
AsCultureInvariant |
기존 FString 에서 현지화되지 않은 컬처 무관 FText 인스턴스를 생성합니다. |
FromString |
기존 비에디터 빌드의 |
FromName |
기존 FName 에서 현지화되지 않은 FText 인스턴스를 생성합니다. FName 파라미터의 ToString 함수 출력에서 FromString 을 호출하는 것과 같습니다. |
FText 를 FString 으로 변환하려면 ToString 함수를 사용합니다. 생성되는 FString 은 FText 의 문자열 데이터를 보유하지만 현지화 데이터는 보유하지 않습니다.
비교
FText 데이터는 단순한 문자열보다 더 복잡하기 때문에 오버로드된 연산자 비교를 지원하지 않습니다. 대신, 몇 가지 함수로 비교를 수행하여 미묘한 차이가 있는 포함 데이터를 인식합니다. 다음과 같은 비교 함수를 사용할 수 있습니다.
FText 함수 |
설명 |
|---|---|
EqualTo |
이 함수는 사용할 비교 규칙을 결정하기 위해 ETextComparisonLevel 값을 사용합니다. 호출한 FText 가 해당 비교 규칙에 따라 다른 것과 일치하는지 여부를 나타내는 부울 값을 반환합니다. |
EqualToCaseIgnored |
이 함수는 ETextComparisonLevel 값 Second 를 사용하여 EqualTo 를 호출하기 위한 래퍼입니다. 반환 값은 EqualTo 에서 바로 나옵니다. |
CompareTo |
이 함수는 사용할 비교 규칙을 결정하기 위해 ETextComparisonLevel 값을 사용합니다. 대부분의 문자열 또는 메모리 비교 함수와 마찬가지로 int32 를 반환합니다. 여기서 0은 동일함을 나타내고 음수 또는 양수 값은 각각 호출한 FText 가 FText 파라미터에 비해 더 낮거나 높게 정렬됨을 나타냅니다. |
CompareToCaseIgnored |
이 함수는 ETextComparisonLevel 값 Second 를 사용하여 CompareTo 를 호출하기 위한 래퍼입니다. 반환 값은 CompareTo 에서 바로 나옵니다. |
유저 인터페이스에서 FText 사용하기
슬레이트/UMG
슬레이트와 UMG는 사용자에게 표시되는 텍스트를 표시하거나 관리하는 기본 제공 위젯에 FText 어트리뷰트나 실행인자를 사용합니다. 제작하는 커스텀 위젯에 FText 를 사용하는 것을 권장합니다.
HUD/캔버스
캔버스를 사용하여 HUD 시스템을 통해 FText 를 표시하려면 새 FCanvasTextItem 을 만들고 해당 Text 변수를 표시하려는 텍스트로 설정합니다. 예시 코드는 다음과 같습니다.
// 텍스트를 포함할 새 FCanvasTextItem 인스턴스를 만듭니다.
FCanvasTextItem TextItem(FVector2D::ZeroVector, TestHUDText, BigFont, FLinearColor::Black);
// FCanvasTextItem에 텍스트를 추가합니다.
TextItem.Text = FText::Format(LOCTEXT("ExampleFText", "You currently have {0} health left."), CurrentHealth);
// FCanvas::DrawItem을 사용하여 화면에 텍스트를 그립니다.
Canvas->DrawItem(TextItem, 10.0f, 10.0f);
HUD에서 캔버스를 사용할 때, DrawHUD 함수 내에서 DrawItem 을 호출하거나 DrawHUD 로 시작하는 함수 체인에서 호출해야 합니다.