一. 类介绍
FText 类是文本本地化的主要类。如果想提供多语言支持
,面向用户的所有文本都应使用此类。
二. 创建FText
FText 同时具有 AsCultureInvariant 函数(或 INVTEXT 宏),可创建非本地化的(即"语言不变")文本。这在进行如将玩家名从外部API转换为可在用户界面显示的文本等操作时,十分有用。
可使用 FText::GetEmpty() 或仅使用 FText(),创建空白 FText。
和 FString 类似,使用宏 NSLOCTEXT() 可以新建一个,宏建立的FText可提供无损转换,但该方法产生的数据更适合内部整理,而非供用户查看。
//Create a blank string that is converted lossy
FText TempText1=FText();
FText TempText2=FText::GetEmpty();
//Create a string that is converted lossless
//The parameters are the namespace,key,and value
FText TempTextOrigin=NSLOCTEXT("Notification","Welcome","Welcome to my world");
//Another macro approach
//#define LOCTEXT_NAMESPACE "Your Namespace"
//FText TempTextOriginOther = LOCTEXT("Your key","Your Text");
//#undef LOCTEXT_NAMESPACE
三. FText和其他类型转换
FText 包含与本地化数据关联的字符串,而 其他类型 往往只包含一条字符串,转换会丢失本地化信息,而使用宏定义的FText进行无损转换。
这里只说FText和FString,FName的相互转换。
1. FText to Others
//FText to FString
FString TempString=TempTextOrigin.ToString();
//FText to FName
FName TempName=FName(*TempTextOrigin.ToString());
//FText to others can be seen as "FText to FString to int"
2. Others to FTtext
//FString to FText
TempTextOrigin=FText::AsCultureInvariant(TEXT("HelloWolrd"));
TempTextOrigin=FText::FromString(TEXT("HelloWorld"));
//FName to FText
TempTextOrigin=FText::FromName(TEXT("HelloWolrd"));//Can be seen as "FString to FName to FString to FText"
四. FText函数操作
1. 判断
const FText TextJudge=NSLOCTEXT("w","5","1QAQ1");
//Is the FText empty?
PRINT(TextJudge.IsEmpty()?FString(TEXT("true")):FString(TEXT("false")));//false
//Is the FText numeric?
PRINT(TextJudge.IsNumeric()?FString(TEXT("true")):FString(TEXT("false")));//false
//Is the FText transient?
PRINT(TextJudge.IsTransient()?FString(TEXT("true")):FString(TEXT("false")));//false
//Is the FText empty or fulled with whitespace?
PRINT(TextJudge.IsEmptyOrWhitespace()?FString(TEXT("true")):FString(TEXT("false")));//false
2. 拼接
//Sequence parameters
FFormatOrderedArguments OrderedArgs;
OrderedArgs.Add(FFormatArgumentValue(1));
OrderedArgs.Add(FFormatArgumentValue(FText::FromString(TEXT("hhh"))));
const FText TextJoin1=FText::Format(NSLOCTEXT("","","{0}/{1}"),OrderedArgs);
PRINT(TextJoin1.ToString());
//Named parameters
FFormatNamedArguments NamedArgs;
constexpr int32 CurrentHealth=100;
constexpr int32 MaxHealth=100;
NamedArgs.Add(TEXT("CurrentHealth"),CurrentHealth);
NamedArgs.Add(TEXT("MaxHealth"),MaxHealth);
const FText TextJoin2=FText::Format(NSLOCTEXT("","","Health:{CurrentHealth}/{MaxHealth}"),NamedArgs);
PRINT(TextJoin2.ToString());
3. 比较
const FText TextJudge1=NSLOCTEXT("w","1","123");
const FText TextJudge2=NSLOCTEXT("w","2","124");
const FText TextJudge3=NSLOCTEXT("w","3","123");
//Value is equal
PRINT(TextJudge1.EqualTo(TextJudge3)?FString(TEXT("true")):FString(TEXT("false")));//true
//Fully parts are equal
PRINT(TextJudge1.IdenticalTo(TextJudge3)?FString(TEXT("true")):FString(TEXT("false")));//false
//Compare Value (-1,0,1)
PRINT(FString::FromInt(TextJudge1.CompareTo(TextJoin2)));//-1
PRINT(FString::FromInt(TextJudge2.CompareTo(TextJoin2)));//0
PRINT(FString::FromInt(TextJudge2.CompareTo(TextJoin2)));//1
4. 变换
const FText TextChange=NSLOCTEXT("w","","QaQ");
//Convert to Uppercase
PRINT(TextChange.ToUpper().ToString());//QAQ
//Convert to Lowercase
PRINT(TextChange.ToLower().ToString());//qaq
5. 其他自行练习
五. 其他
宏定义真的很好用
#define PRINT(String) {if (GEngine){GEngine->AddOnScreenDebugMessage(-1,10.0f,FColor::Red,*(String));}}