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));}}
UE4中有多种数据类型转换的方法,以下是一些常见的类型转换示例: 1. FString转换为FName: 使用FName构造函数将FString转换为FName对象,例如: ``` FString MyString = TEXT("MyName"); FName MyName = FName(*MyString); ``` 2. FString转换为FText: 使用FText构造函数将FString转换为FText对象,例如: ``` FString MyString = TEXT("Hello World"); FText MyText = FText::FromString(MyString); ``` 3. FString转换为int32: 使用FCString::Atoi或FCString::Strtoi将FString转换为int32,例如: ``` FString MyString = TEXT("123"); int32 MyInt = FCString::Atoi(*MyString); ``` 4. FString转换为float: 使用FCString::Atof将FString转换为float,例如: ``` FString MyString = TEXT("3.14"); float MyFloat = FCString::Atof(*MyString); ``` 5. FString转换为std::string: 使用TCHAR_TO_UTF8宏将FString转换为std::string,例如: ``` FString MyString = TEXT("Hello"); std::string MyStdString(TCHAR_TO_UTF8(*MyString)); ``` 6. FString转换为char*: 使用TCHAR_TO_ANSI宏将FString转换为char*,例如: ``` FString MyString = TEXT("Hello"); char* MyChar = TCHAR_TO_ANSI(*MyString); ``` 7. FString转换为TCHAR*: 使用*运算符将FString转换为TCHAR*,例如: ``` FString MyString = TEXT("Hello"); TCHAR* MyTChar = *MyString; ``` 这些是UE4中常见的类型转换方法,根据具体的需求选择适合的转换方式即可。\[3\] #### 引用[.reference_title] - *1* *2* [UE4 C++:基本数据类型、字符串处理及转换](https://blog.csdn.net/Jason6620/article/details/126503682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [UE 数据类型转换](https://blog.csdn.net/weixin_44070137/article/details/127616570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值