Calmer的文章

  • 首页
  • 文章归档
  • 关于页面

  • 搜索
体验游戏 笔记 推荐 工具链 工具使用 小游戏 插件 UI 软件 教程

UE4学习笔记(一):FString、FText、FName、TEXT、LOCTEXT、NSLOCTEXT

发表于 2021-01-14 | 分类于 随笔 | 0 | 阅读次数 1114

前言

刚接触UE4 C++的时候,面临最多的疑问就是为啥有FString、FText、FName这三种字符串,并且赋值的时候还得用TEXT("")宏。
为啥不直接像C++中std:string的那么使用

std::string s = "hello world!";

原因:首先是性能、然后是多语言的考虑。


FString、FText、FName的区别

FString

FString是可变字符串,其跟std::string基本一样,有很多的操作字符串的方法,可以在运行时修改。

FText

FText是不可变字符串,主要用于多语言和本地化

FName

FName是不可变字符串,主要用于名字等标识,会在声明时计算hash值,在后续进行比较时直接比较hash值,而不是像字符串那样进行比较,提高了性能。


国际化与编码

TEXT宏

未指定 TEXT() 宏,将使用 ANSI 对文字进行编码,会导致支持字符高度受限。 传入 FString 的 ANSI 文字需要完成到 TCHAR 的转换(本地万国码编码),以便更高效地使用 TEXT()。

LOCTEXT宏

通过定义密钥和源字符串创建本地化的文本片段,用"LOCTEXT_NAMESPACE"定义命名空间。

NSLOCTEXT宏

通过定义命名空间、密钥和源字符串创建本地化的文本片段。

// 定义要与LOCTEXT一起使用的命名空间
// 这只在单个文件中有效,并且必须在文件结束前取消定义
#define LOCTEXT_NAMESPACE "MyNamespace"
// 创建文本文字值
constFTextHelloWorld= NSLOCTEXT("MyOtherNamespace","HelloWorld","Hello World!")
constFTextGoodbyeWorld= LOCTEXT("GoodbyeWorld","Goodbye World!")
// 在文件结束前取消定义命名空间
#undef LOCTEXT_NAMESPACE

拓展:UE5如何进行多语言与国际化处理

参考链接

https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/

https://docs.unrealengine.com/4.26/zh-CN/ProductionPipelines/Localization/Formatting/

  • 本文作者: Calmer
  • 本文链接: https://mytechplayer.com/archives/ue4学习笔记一fstringftextfname
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
# 笔记
Unity3D编辑器扩展(自定义窗口)
好用软件收集总结(2024_06_17更新...)
  • 文章目录
  • 站点概览
Calmer

Calmer

88 日志
7 分类
10 标签
RSS
Creative Commons
0%
© 2020 — 2025 Calmer
由 Halo 强力驱动
蜀ICP备20010026号-1川公网安备51019002006543
Copyright © 2020-2025 Calmer的文章