UE-c++ FText

一. 类介绍

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));}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值